/********************************************************************
* 												funEditorTexto.js	*
* Autor: Grupo Multicanal											*
* Fecha de creacion: 27/06/2008										*
* Funciones:	Selection() --> Constructor del objeto Selection	*
*				fncCrearSeleccion() --> Crea el objeto con las 		*
*						posiciones inicial y final de la seleccion	*
*				*************										*
*				fncPintarEditorTexto()								*
* Comentarios: 														*
*********************************************************************/

function Selection(objCaja) {
    this.objElementoTexto = objCaja;
}

Selection.prototype.fncCrearSeleccion = function() {
    if (document.selection != null && this.objElementoTexto.selectionStart == null) {
        return this._fncObtenerSeleccionIE();
    } else {
        return this._fncObtenerSeleccionMozilla();
    }
}

Selection.prototype._fncObtenerSeleccionMozilla = function() {
    return { 
        intInicio: this.objElementoTexto.selectionStart, 
        intFin: this.objElementoTexto.selectionEnd 
    };
}

Selection.prototype._fncObtenerSeleccionIE = function() {
    this.objElementoTexto.focus();

    var range = document.selection.createRange();
    var bookmark = range.getBookmark();

    var contents = this.objElementoTexto.value;
    var originalContents = contents;
    var marker = this._createSelectionMarker();
    while(contents.indexOf(marker) != -1) {
        marker = this._createSelectionMarker();
    }

    var parent = range.parentElement();
    if (parent == null || parent.type != "textarea") {
        return { intInicio: 0, intFin: 0 };
    }
    range.text = marker + range.text + marker;
    contents = this.objElementoTexto.value;

    var objResultado = {};
    objResultado.intInicio = contents.indexOf(marker);
    contents = contents.replace(marker, "");
    objResultado.intFin = contents.indexOf(marker);

    this.objElementoTexto.value = originalContents;
    range.moveToBookmark(bookmark);
    range.select();

    return objResultado;
}

Selection.prototype._createSelectionMarker = function() {
    return "##SELECTION_MARKER_" + Math.random() + "##";
}

//*********************************************************************************
//*********************************************************************************

/********************************************************************
* Nombre: fncPintarEditorTexto()									*
* Autor: Grupo Multicanal											*
* Parametros: strNombre (Cadena) --> Nombre del textArea			*
* 			  intColumnas (Entero) --> Nº de columnas del textArea	*
* 			  intFilas (Entero) --> Nº de filas del textArea		*
*			  strEstilo (Cadena) --> Estilos a aplicar al textArea	*
*			  strOtrosParametros (Cadena) --> 						*
* Descripción: Pinta un textArea en la pantalla con los botones de	*
*				edicion necesarios									*
* Comentarios: 														*
*********************************************************************/
function fncPintarEditorTexto(strNombre, intColumnas, intFilas, strEstilo, strOtrosParametros) {
	strContenido = "";
	strContenido += "<table border='0' cellspacing='0' cellpadding='0'>";
	
	strContenido += "	<tr><td><img src='imagenes/espacio.gif' alt='' width='1' height='5' border='0'></td></tr>";
	strContenido += "	<tr><td><textarea name='" + strNombre + "' id='" + strNombre + "' cols='" + intColumnas + "' rows='" + intFilas + "' class='" + strEstilo + "' " + strOtrosParametros + " READONLY></textarea></td></tr>";
	strContenido += "</table>";
	document.write(strContenido);
}


/*************************************/
function _fncNegrita(strNombreCaja) {
var strCadenaHTML_1 = "<b>";
var strCadenaHTML_2 = "</b>";

    try {
		objCaja = document.getElementById(strNombreCaja);
        var objSelection = new Selection(objCaja);
        var objSeleccion = objSelection.fncCrearSeleccion();
        
		strAux1 = objCaja.value.substring(0,objSeleccion.intInicio);
		strCadenaSeleccion = objCaja.value.substring(objSeleccion.intInicio,objSeleccion.intFin);
		strAux2 = objCaja.value.substring(objSeleccion.intFin,objCaja.value.length);
		
		objCaja.value = strAux1 + strCadenaHTML_1 + strCadenaSeleccion + strCadenaHTML_2 + strAux2;
		
		if (navigator.appName != "Microsoft Internet Explorer") {
			_fncSeleccionarRango (strNombreCaja, objSeleccion.intInicio+strCadenaHTML_1.length, objSeleccion.intFin+strCadenaHTML_1.length);
		}
    }
	catch (ex) {
		alert("Se ha producido un error al intentar formatear el texto");
    }
}


/*************************************/
function _fncCursiva(strNombreCaja) {
var strCadenaHTML_1 = "<i>";
var strCadenaHTML_2 = "</i>";

    try {
		objCaja = document.getElementById(strNombreCaja);
        var objSelection = new Selection(objCaja);
        var objSeleccion = objSelection.fncCrearSeleccion();
        
		strAux1 = objCaja.value.substring(0,objSeleccion.intInicio);
		strCadenaSeleccion = objCaja.value.substring(objSeleccion.intInicio,objSeleccion.intFin);
		strAux2 = objCaja.value.substring(objSeleccion.intFin,objCaja.value.length);
		
		objCaja.value = strAux1 + strCadenaHTML_1 + strCadenaSeleccion + strCadenaHTML_2 + strAux2;
		
		if (navigator.appName != "Microsoft Internet Explorer") {
			_fncSeleccionarRango (strNombreCaja, objSeleccion.intInicio+strCadenaHTML_1.length, objSeleccion.intFin+strCadenaHTML_1.length);
		}
    }
	catch (ex) {
		alert("Se ha producido un error al intentar formatear el texto");
    }
}

/*************************************/
function _fncSubrayado(strNombreCaja) {
var strCadenaHTML_1 = "<u>";
var strCadenaHTML_2 = "</u>";

    try {
		objCaja = document.getElementById(strNombreCaja);
        var objSelection = new Selection(objCaja);
        var objSeleccion = objSelection.fncCrearSeleccion();
        
		strAux1 = objCaja.value.substring(0,objSeleccion.intInicio);
		strCadenaSeleccion = objCaja.value.substring(objSeleccion.intInicio,objSeleccion.intFin);
		strAux2 = objCaja.value.substring(objSeleccion.intFin,objCaja.value.length);
		
		objCaja.value = strAux1 + strCadenaHTML_1 + strCadenaSeleccion + strCadenaHTML_2 + strAux2;
		
		if (navigator.appName != "Microsoft Internet Explorer") {
			_fncSeleccionarRango (strNombreCaja, objSeleccion.intInicio+strCadenaHTML_1.length, objSeleccion.intFin+strCadenaHTML_1.length);
		}
    }
	catch (ex) {
		alert("Se ha producido un error al intentar formatear el texto");
    }
}

/*************************************/
function _fncEnlace(strNombreCaja) {
var strCadenaHTML_1a = "<a href=\"";
var strCadenaHTML_1b = "\" target=\"_blank\">";
var strCadenaHTML_2 = "</a>";

    try {
		strURLEnlace = window.prompt("Introduce la dirección de enlace externa","");
		if (strURLEnlace != null) {
			strURLEnlace = _fncTrim(strURLEnlace);
			if (strURLEnlace != "") {
				if (strURLEnlace.substring(0,7) != "http://") {
					strURLEnlace = "http://" + strURLEnlace;
				}
				objCaja = document.getElementById(strNombreCaja);
		        var objSelection = new Selection(objCaja);
		        var objSeleccion = objSelection.fncCrearSeleccion();
		        
				strAux1 = objCaja.value.substring(0,objSeleccion.intInicio);
				strCadenaSeleccion = objCaja.value.substring(objSeleccion.intInicio,objSeleccion.intFin);
				strAux2 = objCaja.value.substring(objSeleccion.intFin,objCaja.value.length);
				
				objCaja.value = strAux1 + strCadenaHTML_1a + strURLEnlace + strCadenaHTML_1b + strCadenaSeleccion + strCadenaHTML_2 + strAux2;
				
				if (navigator.appName != "Microsoft Internet Explorer") {
					_fncSeleccionarRango (strNombreCaja, objSeleccion.intInicio+strCadenaHTML_1a.length+strURLEnlace.length+strCadenaHTML_1b.length, objSeleccion.intFin+strCadenaHTML_1a.length+strURLEnlace.length+strCadenaHTML_1b.length);
				}
			}
		}
    }
	catch (ex) {
		alert("Se ha producido un error al intentar formatear el texto");
    }
}

/*************************************/
function _fncSeleccionarRango (strNombreCaja, intInicio, intFin) {
	objCaja = document.getElementById(strNombreCaja);
	if (typeof document.selection != 'undefined' && document.selection) {
		strContenido = objCaja.value;
		objCaja.value = "";
		objCaja.focus();
		var strRango = document.selection.createRange();
		objCaja.value = strContenido;
		strRango.move("character", intInicio);
		strRango.moveEnd("character", intFin-intInicio);
		strRango.select();
	}
	else if (typeof objCaja.selectionStart != 'undefined') {
		objCaja.setSelectionRange(intInicio,intFin);
		objCaja.focus();
	}
} 

/*************************************/
function _fncGoToPosicion(strNombreCaja, intPosicion) {
	objCaja = document.getElementById(strNombreCaja);
	if(objCaja != null) {
		if(objCaja.createTextRange) {
			var objRango = objCaja.createTextRange();
			objRango.move('character', intPosicion);
			objRango.select();
		}
		else {
			if(objCaja.selectionStart) {
				objCaja.focus();
				objCaja.setSelectionRange(intPosicion, intPosicion);
			}
			else
				objCaja.focus();
		}
	}
}

/*************************************/
function _fncTrim(strCadena) {
	//Elimina espacios al principio
	while (strCadena.toString().indexOf(" ")==0)
		strCadena = strCadena.toString().substring (1, strCadena.length)
		
	//Elimina espacios al final
	while (strCadena.toString().charAt (strCadena.toString().length-1) == " ")
		strCadena = strCadena.toString().substring (0, strCadena.toString().length-1);
		
	return strCadena;
}
