<!--

// ********************************************************************************
//	Archivo:      gui_interface.js
//	Iniciado:     03-Ago-2007  08:12
//	Modificado:   07-Sep-2007  11:44
//	Descripción:  Funciones generales de interface
//	Estado:       Finalizado
//  Más info:     http://www.mozilla.org/editor/midas-spec.html
// ********************************************************************************

var rngRango;
var strRTFActual;
var arrTodosRTFs = "";

// ********************************************************************************
// void rtfCreateArea (str strRTFId, str strTexto)
// ********************************************************************************
//   * Crea una área de edición rich text.
function rtfCreateArea (strRTFId, strTexto) {
	
	if (arrTodosRTFs.length > 0) { arrTodosRTFs += ";"; }
	arrTodosRTFs += strRTFId;
	
	document.write('<div align="center">');
	document.write('<iframe id="rtf_'+strRTFId+'" name="rtf_'+strRTFId+'" width="370px" height="200px" src="about:blank" onchange="rtfUpdateHidden(\''+strRTFId+'\');"></iframe><br />');
		document.write('<table class="rteBack" cellpadding="0" cellspacing="0" width="325">');
			document.write('<tr>');
				document.write('<td><img class="ImageIsLink" src="images/rtf-bold.jpg" width="25" height="25" alt="Negrita" title="Negrita" onClick="rtfComando(\''+strRTFId+'\', \'bold\', \'\')" onMouseOver="this.src=\'images/rtf-bold-o.jpg\';" onMouseOut="this.src=\'images/rtf-bold.jpg\';"></td>');
				document.write('<td><img class="ImageIsLink" src="images/rtf-italic.jpg" width="25" height="25" alt="Itálica" title="Itálica" onClick="rtfComando(\''+strRTFId+'\', \'italic\', \'\')" onMouseOver="this.src=\'images/rtf-italic-o.jpg\';" onMouseOut="this.src=\'images/rtf-italic.jpg\';"></td>');
				document.write('<td><img class="ImageIsLink" src="images/rtf-underline.jpg" width="25" height="25" alt="Subrrayado" title="Subrrayado" onClick="rtfComando(\''+strRTFId+'\', \'underline\', \'\')" onMouseOver="this.src=\'images/rtf-underline-o.jpg\';" onMouseOut="this.src=\'images/rtf-underline.jpg\';"></td>');
				document.write('<td><img class="ImageIsLink" src="images/rtf-aleft.jpg" width="25" height="25" alt="Alinear izquierda" title="Alinear izquierda" onClick="rtfComando(\''+strRTFId+'\', \'justifyleft\', \'\')" onMouseOver="this.src=\'images/rtf-aleft-o.jpg\';" onMouseOut="this.src=\'images/rtf-aleft.jpg\';"></td>');
				document.write('<td><img class="ImageIsLink" src="images/rtf-acenter.jpg" width="25" height="25" alt="Alinear centrado" title="Alinear centrado" onClick="rtfComando(\''+strRTFId+'\', \'justifycenter\', \'\')" onMouseOver="this.src=\'images/rtf-acenter-o.jpg\';" onMouseOut="this.src=\'images/rtf-acenter.jpg\';"></td>');
				document.write('<td><img class="ImageIsLink" src="images/rtf-aright.jpg" width="25" height="25" alt="Alinear derecha" title="Alinear derecha" onClick="rtfComando(\''+strRTFId+'\', \'justifyright\', \'\')" onMouseOver="this.src=\'images/rtf-aright-o.jpg\';" onMouseOut="this.src=\'images/rtf-aright.jpg\';"></td>');
				document.write('<td><img class="ImageIsLink" src="images/rtf-ordered.jpg" width="25" height="25" alt="Lista ordenada" title="Lista ordenada" onClick="rtfComando(\''+strRTFId+'\', \'insertorderedlist\', \'\')" onMouseOver="this.src=\'images/rtf-ordered-o.jpg\';" onMouseOut="this.src=\'images/rtf-ordered.jpg\';"></td>');
				document.write('<td><img class="ImageIsLink" src="images/rtf-unordered.jpg" width="25" height="25" alt="Lista sin ordenar" title="Lista sin ordenar" onClick="rtfComando(\''+strRTFId+'\', \'insertunorderedlist\', \'\')" onMouseOver="this.src=\'images/rtf-unordered-o.jpg\';" onMouseOut="this.src=\'images/rtf-unordered.jpg\';"></td>');
				document.write('<td><img class="ImageIsLink" src="images/rtf-sangrar.jpg" width="25" height="25" alt="Aumentar sangría" title="Aumentar sangría" onClick="rtfComando(\''+strRTFId+'\', \'indent\', \'\')" onMouseOver="this.src=\'images/rtf-sangrar-o.jpg\';" onMouseOut="this.src=\'images/rtf-sangrar.jpg\';"></td>');
				document.write('<td><img class="ImageIsLink" src="images/rtf-desangrar.jpg" width="25" height="25" alt="Reducir sangría" title="Reducir sangría" onClick="rtfComando(\''+strRTFId+'\', \'outdent\', \'\')" onMouseOver="this.src=\'images/rtf-desangrar-o.jpg\';" onMouseOut="this.src=\'images/rtf-desangrar.jpg\';"></td>');
				document.write('<td><img class="ImageIsLink" src="images/rtf-link.jpg" width="25" height="25" alt="Insertar enlace" title="Insertar enlace" onClick="rtfInsertarLnk(\''+strRTFId+'\')" onMouseOver="this.src=\'images/rtf-link-o.jpg\';" onMouseOut="this.src=\'images/rtf-link.jpg\';"></td>');
				document.write('<td><img class="ImageIsLink" src="images/rtf-image.jpg" width="25" height="25" alt="Insertar imágen" title="Insertar imágen" onClick="rtfInsertarImg(\''+strRTFId+'\')" onMouseOver="this.src=\'images/rtf-image-o.jpg\';" onMouseOut="this.src=\'images/rtf-image.jpg\';"></td>');
				document.write('<td><img class="ImageIsLink" src="images/rtf-viewhtml.jpg" width="25" height="25" alt="Ver HTML" title="Ver HTML" onClick="alert(rtfGetHTMLSRC(\''+strRTFId+'\'))" onMouseOver="this.src=\'images/rtf-viewhtml-o.jpg\';" onMouseOut="this.src=\'images/rtf-viewhtml.jpg\';"></td>');
			document.write('</tr>');
			document.write('<tr>');
				document.write('<td colspan="10" background="images/rtf-font.jpg">');
					document.write('<select id="fontname_'+strRTFId+'" onchange="rtfSeleccionarFuente(\''+strRTFId+'\', this.id)">');
						document.write('<option value="Font" selected>[Fuente]</option>');
						document.write('<option value="Arial, Helvetica, sans-serif">Arial</option>');
						document.write('<option value="Courier New, Courier, mono">Courier New</option>');
						document.write('<option value="Times New Roman, Times, serif">Times New Roman</option>');
						document.write('<option value="Verdana, Arial, Helvetica, sans-serif">Verdana</option>');
					document.write('</select>');
					document.write('<select unselectable="on" id="fontsize_'+strRTFId+'" onchange="rtfSeleccionarFuente(\''+strRTFId+'\', this.id);">');
						document.write('<option value="Size">[Tamaño]</option>');
						document.write('<option value="1">1</option>');
						document.write('<option value="2">2</option>');
						document.write('<option value="3">3</option>');
						document.write('<option value="4">4</option>');
						document.write('<option value="5">5</option>');
						document.write('<option value="6">6</option>');
						document.write('<option value="7">7</option>');
					document.write('</select>');
				document.write('</td>');
				document.write('<td><div id="forecolor_'+strRTFId+'"><img class="ImageIsLink" src="images/rtf-font-color.jpg" width="25" height="24" alt="Color de texto" title="Color de texto" onClick="rtfPaletaColor(\''+strRTFId+'\', \'forecolor\', \'\')" onMouseOver="this.src=\'images/rtf-font-color-o.jpg\';" onMouseOut="this.src=\'images/rtf-font-color.jpg\';"></div></td>');
				document.write('<td><div id="hilitecolor_'+strRTFId+'"><img class="ImageIsLink" src="images/rtf-font-back.jpg" width="25" height="24" alt="Color de fondo" title="Color de fondo" onClick="rtfPaletaColor(\''+strRTFId+'\', \'hilitecolor\', \'\')" onMouseOver="this.src=\'images/rtf-font-back-o.jpg\';" onMouseOut="this.src=\'images/rtf-font-back.jpg\';"></div></td>');
				document.write('<td><div id="table_'+strRTFId+'"><img class="ImageIsLink" src="images/rtf-table.jpg" width="25" height="24" alt="Insertar tabla" title="Insertar tabla" onClick="rtfInsertarTabla(\''+strRTFId+'\', \'table\', \'\')" onMouseOver="this.src=\'images/rtf-table-o.jpg\';" onMouseOut="this.src=\'images/rtf-table.jpg\';"></div></td>');
			document.write('</tr>');
		document.write('</table>');
		document.write('<iframe width="154" height="104" id="cp'+strRTFId+'" src="include/rtf-paleta.html" marginwidth="0" marginheight="0" scrolling="no" style="visibility:hidden; position: absolute;"></iframe>');
		document.write('<iframe width="360" height="200" id="it'+strRTFId+'" src="include/rtf-tabla.html" marginwidth="0" marginheight="0" scrolling="no" style="visibility:hidden; position: absolute;"></iframe>');
	document.write('</div>');
	
	var strFrameHtml = "<html id=\"rtf_"+strRTFId+"\">\n";
	strFrameHtml += "<head>\n";
		strFrameHtml += "<link rel=\"stylesheet\" href=\"include/rtf_interface.css\" type=\"text/css\" />\n";
	strFrameHtml += "</head>\n";
	strFrameHtml += "<body>\n";
		strFrameHtml += strTexto + "\n";
	strFrameHtml += "</body>\n";
	strFrameHtml += "</html>";
	
	if (document.all) {
		var oRTF = frames['rtf_'+strRTFId].document;
		oRTF.open();
		oRTF.write(strFrameHtml);
		oRTF.close();
		oRTF.designMode = "On";
	} else {
		document.getElementById('rtf_'+strRTFId).contentDocument.designMode = "on";
		var oRTF = document.getElementById('rtf_'+strRTFId).contentWindow.document;
		oRTF.open();
		oRTF.write(strFrameHtml);
		oRTF.close();
		oRTF.onBlur = rtfUpdateHidden(strRTFId);
	}
	
}

// ********************************************************************************
// void rtfComando (str strRTFId, str strComando, str strOpcion)
// ********************************************************************************
//   * Ejecuta el comando que se le indica sobre el contenido del área rich text.
function rtfComando(strRTFId, strComando, strOpcion) {
	var oRTF = (document.all) ? frames['rtf_'+strRTFId] : document.getElementById('rtf_'+strRTFId).contentWindow;
	
	try {
		oRTF.focus();
		oRTF.document.execCommand(strComando,false,strOpcion);
		oRTF.focus();
	} catch (e) {
		alert('Error ejecutando comando "'+strComando+'" con la opción "'+strOpcion+'" - '+e.description);
		setTimeout("rteCommand('"+strRTFId+"','"+strComando+"','"+strOpcion+"');",10);
	}
}

// ********************************************************************************
// str rtfUpdateHidden (str strRTFId)
// ********************************************************************************
//   * Recupera el código HTML del área RTF y lo devuelve.
function rtfUpdateHidden(strRTFId) {
	var oRTF = (document.all) ? frames['rtf_'+strRTFId].document : document.getElementById('rtf_'+strRTFId).contentWindow.document;
	var oHidden = (document.all) ? document.all[strRTFId]:document.getElementById(strRTFId);
	
	var htmlSrc = oRTF.body.innerHTML;
	oHidden.value = htmlSrc;
	
}

// ********************************************************************************
// str rtfGetHTMLSRC (str strRTFId)
// ********************************************************************************
//   * Recupera el código HTML del área RTF y lo devuelve.
function rtfGetHTMLSRC(strRTFId) {
	var oRTF = (document.all) ? frames['rtf_'+strRTFId].document : document.getElementById('rtf_'+strRTFId).contentWindow.document;
	var htmlSrc = oRTF.body.innerHTML;
	return htmlSrc;
}

// ********************************************************************************
// void rtfInsertarLnk (str strRTFId)
// ********************************************************************************
//   * Inserta un enlace en el texto.
function rtfInsertarLnk(strRTFId) {
	//function to insert link
	var strURL = prompt("Introduce la URL del enlace:", "");
	try {
		// ignorar errores en caso de enlace en blanco
		rtfComando(strRTFId, "Unlink", null);
		rtfComando(strRTFId, "CreateLink", strURL);
	} catch (e) {
		// fallo al insertar
	}
}

// ********************************************************************************
// void rtfInsertarImg (str strRTFId)
// ********************************************************************************
//   * Añade una imágen al texto.
function rtfInsertarImg (strRTFId) {
	strImageURL = prompt('Dirección de la imágen:', 'images/');				
	if ((strImageURL != null) && (strImageURL != "")) {
		strRTFActual = strRTFId;
		rtfInsertarHTML('<img src="'+strImageURL+'" border="0" />');
		//rtfComando(strRTFId, 'InsertImage', strImageURL);
	}
}

// ********************************************************************************
// void rtfSeleccionarFuente (str strRTFId, str strSelect)
// ********************************************************************************
//   * Cambia la fuente del texto y su tamaño.
function rtfSeleccionarFuente (strRTFId, strSelect) {
	var idx = document.getElementById(strSelect).selectedIndex;
	
	if (idx != 0) {
		var objSeleccionado = document.getElementById(strSelect).options[idx].value;
		var strCMD = strSelect.replace('_'+strRTFId, '');
		rtfComando(strRTFId, strCMD, objSeleccionado);
		document.getElementById(strSelect).selectedIndex = 0;
	}
}

// ********************************************************************************
// void rtfInsertarTabla (str strRTFId, str strComando)
// ********************************************************************************
//   * Inserta una tabla en la página.
function rtfInsertarTabla (strRTFId, strComando) {
	rtfAsignaRango(strRTFId);
	
	var objTabla = document.getElementById('it'+strRTFId);
	var buttonElement = document.getElementById(strComando+'_'+strRTFId);
	var iLeftPos = rtfGetOffsetLeft(buttonElement);
	var iTopPos = rtfGetOffsetTop(buttonElement) + (buttonElement.offsetHeight -60);
	objTabla.style.left = (iLeftPos) + 'px';
	objTabla.style.top = (iTopPos) + 'px';
	
	if ((strComando == parent.strComando) && (strRTFId == strRTFActual)) {
		if (objTabla.style.visibility == 'hidden') {
			rtfMostrarOcultar(objTabla, 'show');
		} else {
			rtfMostrarOcultar(objTabla, 'hide');
		}
	} else {
		var vRTEs = arrTodosRTFs.split(";");
		for (var i = 0; i < vRTEs.length; i++) {
			rtfMostrarOcultar('it'+vRTEs[i], 'hide');
			rtfMostrarOcultar('cp'+vRTEs[i], 'hide');
		}
		rtfMostrarOcultar(objTabla, 'show');
	}
	
	parent.strComando = strComando;
	strRTFActual = strRTFId;
}

// ********************************************************************************
// void rtfAsignaTabla (str strHTML)
// ********************************************************************************
//   * Asigna el color que se le pasa a la selección.
function rtfAsignaTabla (strHTML) {
	var strRTFId = strRTFActual;
	var strParentCommand = parent.strComando;
	
	if (document.all) {
		var selSeleccion = frames['rtf_'+strRTFId].document.selection;
		if (selSeleccion != null) {
			var newRng = selSeleccion.createRange();
			newRng = rngRango;
			newRng.select();
		}
	}
	
	if (strHTML != 'close') { rtfInsertarHTML(strHTML); }
	rtfMostrarOcultar('it'+strRTFId, 'hide');
}

// ********************************************************************************
// void rtfPaletaColor (str strRTFId, str strComando)
// ********************************************************************************
//   * Muestra la paleta de colores para adjudicar un color al texto.
function rtfPaletaColor (strRTFId, strComando) {
	rtfAsignaRango(strRTFId);
	
	var objPaleta = document.getElementById('cp'+strRTFId);
	var buttonElement = document.getElementById(strComando+'_'+strRTFId);
	var iLeftPos = rtfGetOffsetLeft(buttonElement);
	var iTopPos = rtfGetOffsetTop(buttonElement) + (buttonElement.offsetHeight + 4);
	objPaleta.style.left = (iLeftPos) + 'px';
	objPaleta.style.top = (iTopPos) + 'px';
	
	if ((strComando == parent.strComando) && (strRTFId == strRTFActual)) {
		if (objPaleta.style.visibility == 'hidden') {
			rtfMostrarOcultar(objPaleta, 'show');
		} else {
			rtfMostrarOcultar(objPaleta, 'hide');
		}
	} else {
		var vRTEs = arrTodosRTFs.split(";");
		for (var i = 0; i < vRTEs.length; i++) {
			rtfMostrarOcultar('it'+vRTEs[i], 'hide');
			rtfMostrarOcultar('cp'+vRTEs[i], 'hide');
		}
		rtfMostrarOcultar(objPaleta, 'show');
	}
	
	parent.strComando = strComando;
	strRTFActual = strRTFId;
}

// ********************************************************************************
// void rtfAsignaColor (str strColor)
// ********************************************************************************
//   * Asigna el color que se le pasa a la selección.
function rtfAsignaColor (strColor) {
	var strRTFId = strRTFActual;
	var strParentCommand = parent.strComando;
	
	if (document.all) {
		var selSeleccion = frames['rtf_'+strRTFId].document.selection;
		if (strParentCommand == 'hilitecolor') { strParentCommand = 'backcolor'; }
		if (selSeleccion != null) {
			var newRng = selSeleccion.createRange();
			newRng = rngRango;
			newRng.select();
		}
	}
	
	rtfComando(strRTFId, strParentCommand, strColor);
	rtfMostrarOcultar('cp'+strRTFId, 'hide');
}

// ********************************************************************************
// void rtfGetOffsetLeft (obj objElemento)
// ********************************************************************************
//   * Recupera la posición del elemento respecto a la izquierda del documento.
function rtfGetOffsetLeft (objElemento) {
	var mOffsetLeft = objElemento.offsetLeft;
	var mOffsetParent = objElemento.offsetParent;
	var parents_up = 2;
	while(parents_up > 0) {
		mOffsetLeft += mOffsetParent.offsetLeft;
		mOffsetParent = mOffsetParent.offsetParent;
		parents_up--;
	}
	return mOffsetLeft;
}

// ********************************************************************************
// void rtfGetOffsetTop (obj objElemento)
// ********************************************************************************
//   * Recupera la posición del elemento respecto a la parte superior del documento.
function rtfGetOffsetTop (objElemento) {
	var mOffsetTop = objElemento.offsetTop;
	var mOffsetParent = objElemento.offsetParent;
	var parents_up = 2;
	while(parents_up > 0) {
		mOffsetTop += mOffsetParent.offsetTop;
		mOffsetParent = mOffsetParent.offsetParent;
		parents_up--;
	}
	return mOffsetTop;
}

// ********************************************************************************
// void rtfMostrarOcultar (obj objElemento, str strShowHide)
// ********************************************************************************
//   * Muestra u oculta el elemento que se le indica.
function rtfMostrarOcultar (objElemento, strShowHide) {
	if (document.getElementById(objElemento)) { objElemento = document.getElementById(objElemento); }
	if (strShowHide == 'show') {
		objElemento.style.visibility = 'visible';
	} else if (strShowHide == 'hide') {
		objElemento.style.visibility = 'hidden';
	}
}

// ********************************************************************************
// void rtfAsignaRango (str strRTFId)
// ********************************************************************************
//   * Salva el rango de selección para recuperarlo más tarde.
function rtfAsignaRango (strRTFId) {
	var objRTF;
	if (document.all) {
		objRTF = frames['rtf_'+strRTFId];
		var selSeleccion = objRTF.document.selection; 
		if (selSeleccion != null) { rngRango = selSeleccion.createRange(); }
	} else {
		objRTF = document.getElementById(strRTFId).contentWindow;
		var selSeleccion = objRTF.getSelection();
		rngRango = selSeleccion.getRangeAt(selSeleccion.rangeCount - 1).cloneRange();
	}
}

// ********************************************************************************
// void rtfInsertarHTML (str strHTML)
// ********************************************************************************
//   * Salva el rango de selección para recuperarlo más tarde.
function rtfInsertarHTML(strHTML) {
	//function to add HTML -- thanks dannyuk1982
	var strRTFId = strRTFActual;
	
	var objRTF;
	if (document.all) {
		objRTF = frames['rtf_'+strRTFId];
	} else {
		objRTF = document.getElementById('rtf_'+strRTFId).contentWindow;
	}
	
	objRTF.focus();
	if (document.all) {
		objRTF.document.selection.createRange().pasteHTML(strHTML);
	} else {
		objRTF.document.execCommand('insertHTML', false, strHTML);
	}
}

//-->