// Copyright 2006 STRATO Rechenzentrum AG, All rights reserved.
/**
 * @version $id$
 * @author Georg Friedrich
 */

EventHandler = new Object();

EventHandler.Event = function(domElement, event, func) {
	this.domElement = domElement;
	this.event = event;
	this.func = func;
};

/**
 * Array that holds EventHandler.Event objects.
 */
EventHandler.events = new Array(); 

/**
 * Adds the given function as an event handler.<br/>
 * The following example adds an onload handler to the DOM element <i>document</i>:<br/>
 * <code>EventHandler.add('document', 'load', function() { alert('loaded'); });</code>
 * @param domElement An ID or element to which the event handler should be added
 * @param event the event
 * @param func the function that should be added
 */
EventHandler.add = function(el, event, func) {
	//domElement = $(domElement);
	var domElement = null;
	if (typeof el === "string"){
		domElement = document.getElementById(el);
	} else if (typeof el === "object" && el !== null) {
		domElement = el;
	} else {
		throw new Error("Element '"+el+"' is not ");
	}
	
	if (typeof domElement !== "object" || domElement === null) {
		throw new Error("Given DOM Element '"+el+"' is invalid.");
	}
	
	if (domElement.attachEvent) {
		// Internet Explorer, Opera
		domElement.attachEvent('on' + event, func);
	} else if (domElement.addEventListener) {
		// DOM 2 Events
		domElement.addEventListener(event, func, false);
	} else {
		var oldEvent = domElement['on' + event];
		var onEvent = !oldEvent ? func : function() {
			oldEvent();
			func();
		};
		domElement['on' + event] = onEvent;
	}

	var e = new EventHandler.Event(domElement, event, func);
	EventHandler.events.push(e);
};

EventHandler.remove = function(domElement, event, func) {
	if (domElement.detachEvent) {
		domElement.detachEvent('on' + event, func);
	} else if (domElement.removeEventListener) {
		domElement.removeEventListener(event, func, false);
	} else {
		domElement['on' + event] = null;
	}
};

/**
 * Removes all event handlers.
 * This method should be called in an onunload event to prevent memory leaks.
 */
EventHandler.unload = function() {
	for (var i=0; i<EventHandler.events.length; ++i) {
		var e = EventHandler.events[i];
		try {
			EventHandler.remove(e.domElement, e.event, e.func);
		} catch (e) {}
		EventHandler.events[i] = null;
	}
};

EventHandler.add(window, 'unload', EventHandler.unload);

/*
 * This file gets obsolte when stopping support for IE 6
 *
 *
 */


/**
 * @version $id$
 * @author Georg Friedrich
 */

FormHelper = new Object();

/**
 * Adds an onclick event handler to image labels, because IE 5.x, 6.x doesn't make them clickable.
 * 
 * Examples:
 * <input type="checkbox" name="option1" id="option1"/><label for="id1"><img src="option1.gif" width="100" height="20" alt=""/></label>
 */
FormHelper.init = function() {
    var labels = document.getElementsByTagName('label');
    if (typeof labels !== "object" || labels === null || typeof labels.length !== "number") {
            return;
    }
    
	for (var i=0; i<labels.length; ++i) {
		var lbl = labels[i];
		var node = lbl.firstChild;
		if (node && node.nodeName && node.nodeName.toLowerCase() == 'img') {
			var elementId = lbl.attributes['for'].nodeValue; // label.getAttribute('for') returns null in IE 6.0
			var element = document.getElementById(elementId);
			FormHelper.addClickHandler(element, node);
		}
	}
};

FormHelper.addClickHandler = function(el, lbl) {
	if (el && el.click) {
		EventHandler.add(lbl, 'click', function() {
			el.click();
		});
	}
};

/**
 * @version $id$
 * @author $id$
 *
 *
 *
 */


// workaround as long as help is used within iframes
if (typeof Cookies === "undefined" && typeof window.top.Cookies !== "undefined") {
	window.Cookies = window.top.Cookies;
}

var Help = {};
var helpBox = null;
var helpBoxHeader = null;
var helpBoxBody = null;
var helpBoxText = null;
var helpBoxContent = null;
var helpBoxPosX = 0;
var helpBoxPosY = 0;
var offsetX = 15;
var offsetY = 5;
var helpBoxWidth = 270;
var helpBoxHeight =140;

Help.enabled = false;
Help.initialized = false;


/**
 * Attaches mouse events to any elements whose ID corresponds to a key in Help.texts
 * Automatically attached to window.onload
 * 
 */
Help.init = function() {
	var enabledByCookie = Cookies.get('LP.help') === "on";
	
	if (enabledByCookie) {
		Help.enabled = true;
		Help.initialize();
		Help.updateGui();
	}
};

Help.initialize = function(){
	if (Help.initialized) {
		return;
	}
	
	EventHandler.add(window, 'unload', Help.hide);
	
	Help.registerElements();
	
	Help.initialized = true;
};

Help.registerElements = function(){
	var allItems = document.getElementsByTagName("*");
	
	if (typeof allItems !== "object" || allItems === null) {
		throw new Error("allItems array null or not an object when initalizing Helper");
	}
	
	for (var i=0;i < allItems.length;i++) {
		var item = allItems.item(i);
		if (item.id && Help.texts[item.id]) {
			Help.attachEvents(item, item.id);
		}
	}
};

/** Update Menu-Item label
  */
Help.updateGui = function(){
	var menuItem = document.getElementById('helpBoxSwitch');
	if (menuItem) {
		if (Help.enabled === true) {
			menuItem.innerHTML = "Ayuda online desactivada";
		} else {
			menuItem.innerHTML = "Ayuda online activada";
		}
	}
};

/**
 * Turns on/off the help balloons (on by default).
 * Initializes and attaches to helpable elements (once) on toggle
 * 
 * We use 'visibility' for this, because show()/hide() uses 'display'.
 * This way they don't interfere with each other.
 */
Help.toggle = function () {
	Help.enabled = !Help.enabled;
	
	if (Help.enabled){
		Help.initialize();
	}
	
	// update cookie
	Cookies.set("LP.help", Help.enabled ? 'on' : 'off', null, "/");
	
	Help.updateGui();
	
	if (Help.enabled) {
		Ext.Msg.show({
			buttons: Ext.Msg.OK, title: js18.common.attention, msg: "Pase el rat&#243;n sobre los elementos de la pantalla para visualizar los avisos de ayuda."
		});
	}	
};

/**
 * Attaches mouse events to a dom element
 */
Help.attachEvents = function (item, id) {
	EventHandler.add(item, 'mouseover', function(e) {
		Help.getPosition(e);
		Help.show(id);
	});
	EventHandler.add(item, 'mouseout', function(e) {
		Help.hide();
	});
};

/**
 * Called to display help text
 *
 * @param id The key corresponding to the text to display in the help balloon
 */
Help.show = function (id) {
	// Surround with try/catch to prevent error in case the main window was closed and the balloon cannot be referenced anymore
	if(Help.enabled){
		try {
			var text = Help.texts[id];
			var balloon = Help.getBalloon();
			
			if (text && balloon) {
				balloon.firstChild.nextSibling.firstChild.firstChild.innerHTML = text;
				document.getElementById(id).focus();
				balloon.style.display = 'block';
			}
		} catch (ignore) {}	
	}
};

/**
 * Called to hide help text, usually from Help.show()
 */
Help.hide = function () {
	// Surround with try/catch to prevent error in case the main window was closed and the balloon cannot be referenced anymore
	if(Help.enabled){
		try {
		   window.top.document.getElementById('helpBox').style.left="-1500px";
		   //window.top.document.body.removeChild(window.top.document.getElementById('helpBox'));
	       //window.top.document.getElementById('helpBox').removeNode(true);
	    } catch (ignore) {}
    }
};

/**
 * Constructs and returns the help balloon.
 *
 * @return The dom element used as the help balloon, the element's position depends on the position of cursor.
 */
 Help.getBalloon = function() {
	helpBox = window.top.document.getElementById('helpBox');
 	if (helpBox) {
 		helpBox.style.left = helpBoxPosX + 'px';
	    helpBox.style.top = helpBoxPosY + 'px';
	} else {
	 	helpBox = window.top.document.createElement("DIV");
	    helpBox.id = "helpBox";
	    helpBox.className = 'helpBox';
	    
	    helpBox.style.left = helpBoxPosX + 'px';
	    helpBox.style.top = helpBoxPosY + 'px';
	
	    helpBoxHeader = window.top.document.createElement("DIV");
	    helpBoxHeader.className = "helpBoxHeader";
	    helpBoxBody = window.top.document.createElement("DIV");
	    helpBoxBody.className = "helpBoxBody";
	    helpBoxText = window.top.document.createElement("DIV");
	    helpBoxText.className = "helpBoxText";
	    helpBoxTextContent = window.top.document.createElement("DIV");
	    helpBoxTextContent.className = "helpBoxTextContent";
	    
	    helpBox.appendChild(helpBoxHeader);
	    helpBox.appendChild(helpBoxBody);
	    helpBoxBody.appendChild(helpBoxText);
	    helpBoxText.appendChild(helpBoxTextContent);
	   
	    window.top.document.body.appendChild(helpBox);
 	}
    return helpBox;
 };
 
 
/**
 * returns the position for help box.
 *
 * @return the position of the help box, which depends on the position of cursor.
 */
Help.getPosition = function(e) {
	var IE = document.all?true:false;
	
	if(IE) { 
		helpBoxPosX = event.clientX;
		helpBoxPosY = event.clientY + offsetY;
	} else {  
		helpBoxPosX = e.clientX;
		helpBoxPosY = e.clientY + offsetY;
	}
	
	var winWidth = window.top.innerWidth || window.top.document.documentElement.clientWidth;
	var winHeight = window.top.innerHeight || window.top.document.documentElement.clientHeight;   
    
    try {
	
    	if(window.top.IframeDialogWrappers.isIframeDlgVisible()){
    		var iframeLeft = window.top.IframeDialogWrappers.getIframeDlgPosition()[0];
    		var iframeTop = window.top.IframeDialogWrappers.getIframeDlgPosition()[1];
	
    		helpBoxPosX = helpBoxPosX + iframeLeft + 30;
    		helpBoxPosY = helpBoxPosY + iframeTop + 60;
	    }
    } catch(ex) { }
    
    helpBoxPosX = helpBoxWidth+helpBoxPosX > winWidth-offsetX ? helpBoxPosX-offsetX-helpBoxWidth : helpBoxPosX+offsetX;
	helpBoxPosY = helpBoxHeight+helpBoxPosY > winHeight-offsetY ? helpBoxPosY-helpBoxHeight : helpBoxPosY+offsetY;
    
    helpBoxPosX = helpBoxPosX<=0 ? offsetX : helpBoxPosX;
    helpBoxPosY = helpBoxPosY<=0 ? offsetY : helpBoxPosY;
}; 



/* At some places the help needs to initialize later (after building the menu)
 */

if (typeof Config !== "undefined" && (Config.isW1 || Config.isW2 || Config.isW6 || (Config.isW4 && !Config.hasOldEditor && !Config.isPhotoalbum))) {
	EventHandler.add(window, 'load', Help.init);
}

/**
 * Array of areas to monitor
 */
Help.areas = [];

/**
 * Texts to monitor. The key corresponds to the ID of the element or area.
 * Keys need to be unique across all of LivePages, and are named accordingly.
 */
Help.texts = {
	// login page
	w0_login_submit: "Por favor introduzca aqu&#237; el nombre de su dominio y la contrase&#241;a de su Acceso Clientes.",
	w0_login_sendpassword: "Si ha olvidado la contrase&#241;a puede solicitar a trav&#233;s del Acceso Clientes que se la volvamos a enviar.",

	// used on both register page and requesting password page
	w0_requestdata: "!!!MISSING_KEY:js.balloon.r2.1!!!",

	// w1 trees
	branch: "Seleccione primero un sector profesional principal. Obtendr&#225; entonces una lista de los subsectores. En base al sector profesional que haya elegido le propondremos una serie de dise&#241;os para su p&#225;gina web. La selecci&#243;n de sectores se aplica tambi&#233;n a las p&#225;ginas web particulares, no solo a las comerciales.",
	subbranch: "En cuanto haya elegido un subsector, el programa le conducir&#225; autom&#225;ticamente a la selecci&#243;n de dise&#241;os.",

	// w2 floater navigation
	tab_designs: "Hemos seleccionado un dise&#241;o adecuado para el sector profesional que ha elegido. Puede adoptar este dise&#241;o o seleccionar otro para este sector profesional. Haciendo clic en &#34;todos los dise&#241;os&#34;, podr&#225; elegir cualquier dise&#241;o de todos los disponibles en LivePages.",
	tab_keyv: "Aqu&#237; puede elegir una imagen para su gr&#225;fico principal, ya sea entre nuestras sugerencias o entre sus propias im&#225;genes. Si lo desea, tambi&#233;n puede elegir &#34;Ninguna imagen principal&#34;.",
	colorschemes: "Aqu&#237; puede seleccionar otra variante de colores para el dise&#241;o de base que ha elegido.",
	naviFontSelector: "Seleccione aqu&#237; el tipo de letra que se utilizar&#225; en todo su sitio web. En el paso &#34;4. Contenido&#34;, en el punto del men&#250; &#34;Texto&#34; encontrar&#225; otras posibilidades para formatear el texto .",
	tab_menu: "Seleccione aqu&#237; el dise&#241;o del men&#250; de su sitio web.",
	tab_logo: "Aqu&#237; puede incluir los datos y el logo de su empresa. Estos datos se mostrar&#225;n en todas las p&#225;ginas de su sitio web.",
	//w2_nav_uebernehmen: "Si hace clic en el bot&#243;n &#34;aceptar&#34; el sistema guardar&#225; todas las configuraciones y le conducir&#225; autom&#225;ticamente al paso &#34;3. Estructura&#34;.",

	// w2 company data
	//w2_companydata: "Aqu&#237; puede incluir los datos y el logo de su empresa. Estos datos se mostrar&#225;n en todas las p&#225;ginas de su sitio web.",

	// w3
	w3_proposal_form_head: "Seleccione aqu&#237; las p&#225;ginas m&#225;s utilizadas. Nuestras propuestas ya est&#225;n seleccionadas.",
	w3_pagetree_head: "<p>Administre aqu&#237; los puntos del men&#250; de su p&#225;gina web. Cada punto de la estructura corresponde a una p&#225;gina de su proyecto de LivePages.</p><p>Con la funci&#243;n de arrastrar y soltar, puede colocar los puntos del men&#250; de su p&#225;gina como desee. Haga clic en un punto del men&#250; y sit&#250;elo donde desee. Suelte el bot&#243;n izquierdo del rat&#243;n para colocar el punto del men&#250; en esa posici&#243;n.</p><p>Cuando coloque un punto del men&#250; bajo otro punto del men&#250;, este ser&#225; clasificado como subp&#225;gina de ese punto del men&#250;. </p><p>Encontrar&#225; las funciones m&#225;s utilizadas en un men&#250; que puede abrir haciendo clic con el bot&#243;n derecho del rat&#243;n. </p>",
	w3_toolbar_head: "Seleccione aqu&#237; otras posibilidades para administrar los elementos del men&#250; de su p&#225;gina web.",
	w3_selectall: "Seleccione todas las p&#225;ginas disponibles de una vez.",
	w3_apply: "Guardar las p&#225;ginas marcadas de la estructura.",
	w3_continue: "Dir&#237;jase al paso 4 para editar el contenido de sus p&#225;ginas.",
	w3_undo: "Anule las &#250;ltimas modificaciones haciendo clic en este bot&#243;n.",
	w3_redo: "Restablezca las modificaciones que acaba de deshacer haciendo clic en este bot&#243;n.",
	w3_exp: "Cierre todos los elementos del men&#250; incluidas las subp&#225;ginas y la p&#225;ginas ocultas.",
	w3_col: "Cierre todos los puntos del men&#250;. Aparecer&#225;n solo los elementos del nivel superior del men&#250;.",
	w3_add: "<p>A&#241;ada a su p&#225;gina web una nueva p&#225;gina (&#34;p&#225;gina siguiente&#34;). Seleccione para ello entre  los diferentes tipos de p&#225;ginas que se le ofrecen haciendo clic.</p><p>Seleccione la posici&#243;n en la que quiere introducir la nueva p&#225;gina. Puede modificar la posici&#243;n en cualquier momento arrastrando y soltando.</p>",
	w3_addsubpage: "<p>Una subp&#225;gina aparece en un nivel inferior a la p&#225;gina seleccionada.</p><p>Puede crear un m&#225;ximo de 3 subp&#225;ginas.</p>",
	w3_addlinkedpage: "<p>Una &#34;p&#225;gina siguiente&#34; no aparece en el men&#250; de su p&#225;gina web, pero es posible realizar enlaces a esa p&#225;gina. </p><p>Si desea crear en un punto del men&#250; una p&#225;gina con una gran cantidad de contenidos, le recomendamos que los divida en &#34;p&#225;ginas siguientes&#34;.</p>",
	w3_addsubpage_cp: "<p>Una subp&#225;gina aparece en un nivel inferior a la p&#225;gina seleccionada.</p><p>Puede crear un m&#225;ximo de 3 subp&#225;ginas.</p>",
	w3_addlinkedpage_cp: "<p>Una &#34;p&#225;gina siguiente&#34; no aparece en el men&#250; de su p&#225;gina web, pero es posible realizar enlaces a esa p&#225;gina. </p><p>Si desea crear en un punto del men&#250; una p&#225;gina con una gran cantidad de contenidos, le recomendamos que los divida en &#34;p&#225;ginas siguientes&#34;.</p>",
	w3_edit: "Seleccione una p&#225;gina y modifique el nombre.",
	w3_up: "Mueva la p&#225;gina marcada a un nivel superior. Es posible crear hasta 3 niveles.",
	w3_down: "Desplace la p&#225;gina marcada a un nivel inferior. Puede crear una m&#225;ximo de 3 niveles.",
	w3_append: "<p>Seleccione una p&#225;gina y col&#243;quela como siguiente p&#225;gina a la p&#225;gina anterior.</p><p>En el men&#250; de su p&#225;gina web no se muestra una &#34;p&#225;gina siguiente&#34;, pero es posible crear enlaces a esta p&#225;gina.</p>",
	w3_split: "Separe una &#34;p&#225;gina siguiente&#34; ya existente. La &#34;p&#225;gina siguiente&#34; seleccionada pasar&#225; a ser un punto m&#225;s del men&#250;.",
	w3_link: "Modifique la direcci&#243;n de Internet a la que remite el enlace seleccionado.",
	w3_hide: "<p>Elimine (temporalmente) un elemento del men&#250; de navegaci&#243;n de su p&#225;gina web.</p><p>La p&#225;gina se mantendr&#225; y usted podr&#225; editarla y crear una acceso a ella a trav&#233;s de un enlace en el contenido de sus p&#225;ginas.</p>",
	w3_show: "Visualice de nuevo la p&#225;gina marcada en el men&#250; de navegaci&#243;n de su p&#225;gina web.",
	w3_del: "Elimine una p&#225;gina completa. Se perder&#225; todo el contenido.",
	w3_save: "Guarde los cambios.",
	w3_textImg: "Dise&#241;e sus p&#225;ginas con ayuda de texto, fotos, v&#237;deos, tablas y muchos m&#225;s elementos de p&#225;ginas.",
	w3_photoalbum: "Cree un &#225;lbum de fotos con marco, cabecera, etc. Tendr&#225; la posibilidad de editar la imagen.",
	w3_diashow: "Configure una proyecci&#243;n de im&#225;genes con diferentes fotos con comentarios encima y debajo de las fotos, con la posibilidad de editar las im&#225;genes y mucho m&#225;s.",
	w3_guestbook: "A&#241;ada en su p&#225;gina web un libro de visitas en el que sus visitantes puedan dejar comentarios p&#250;blicos.",
	w3_forum: "A&#241;ada en su p&#225;gina web un foro en el que sus visitantes puedan debatir con usted y otros usuarios.",
	w3_survey: "A&#241;ada a su p&#225;gina web una encuesta y administre diferentes encuestas directamente en LivePages.",
	w3_contact: "A&#241;ada un formulario de contacto y admin&#237;strelo directamente en LivePages.",
	w3_linkpage: "A&#241;ada al men&#250; de navegaci&#243;n de su p&#225;gina web enlaces a direcciones de Internet externas.",
	w3_intro: "<p>Coloque una introducci&#243;n en flash en su p&#225;gina principal.</p><p>Podr&#225; configurarla introducci&#243;n en el paso &#34;4. Contenidos&#34;. Seleccione la opci&#243;n del men&#250;  &#34;Configuraci&#243;n&#34;-> &#34;Intro&#34;.<p>",
	
	// w4 body and navigation
	w4_edit_area: "Todos los contenidos quedan guardados autom&#225;ticamente cuando seleccione otro punto del men&#250; en el editor, cuando pase a otro texto o bloque gr&#225;fico, cuando acceda a un nuevo punto del men&#250; para editar o cuando cambie a otro paso.",
	w4_navigation: "Para modificar el men&#250; de su sitio web vaya al paso anterior &#34;3. Estructura&#34;.",

	menu_uploadFiles: "Con esta opci&#243;n puede cargar archivos como formularios .pdf, documentos de Word, hojas de Excel, etc., para enlazarlos con textos o con im&#225;genes. El visitante de su p&#225;gina web puede descargar estos archivos haciendo clic en el enlace.",
	menu_selectBackgroundSound: "Con esta opci&#243;n puede poner un sonido de fondo en su p&#225;gina web y establecer que se reproduzca una sola vez o cada vez o continuamente mientras se est&#233; mostrando la p&#225;gina en el navegador del visitante.",
	menu_intro: "Con esta opci&#243;n puede crear una introducci&#243;n para su p&#225;gina web. &#201;sta se reproducir&#225; una vez, antes de que el usuario llegue a su p&#225;gina principal. Si lo desea, puede incluir el logo y el t&#237;tulo de su p&#225;gina web en la introducci&#243;n.",
	menu_counter: "Con esta opci&#243;n puede integrar un contador de visitas en una o en todas sus p&#225;ginas. Independientemente de d&#243;nde lo coloque, el contador de visitas cuenta &#250;nicamente el acceso a la p&#225;gina de inicio (la p&#225;gina superior en la estructura).",
	menu_password: "Con esta opci&#243;n puede indicar contrase&#241;as para p&#225;ginas sueltas o para toda su p&#225;gina web de manera que solo puedan acceder determinadas personas",
	menu_insertImage: "Con esta opci&#243;n puede integrar una imagen en su p&#225;gina web. La imagen se colocar&#225; en el lugar que usted haya marcado.",
	menu_insertVideo: "Con esta opci&#243;n puede integrar un v&#237;deo en su p&#225;gina web. El v&#237;deo se colocar&#225; en el lugar que usted haya seleccionado.",
	menu_editProperties: "Con esta opci&#243;n puede modificar el tama&#241;o y otras propiedades de su imagen o de su v&#237;deo, as&#237; como a&#241;adir una descripci&#243;n.",
	menu_imageHAlign: "Seleccione una alineaci&#243;n horizontal para su imagen o v&#237;deo.", // more HAligns defined below
	menu_imageVAlign: "Seleccione una alineaci&#243;n vertical para su imagen o v&#237;deo.",   // more VAligns defined below
	menu_removeImage: "Con esta opci&#243;n puede eliminar una imagen o un v&#237;deo de su p&#225;gina. La imagen permanecer&#225; en su MediaPool y podr&#225; volver a incorporarla en otro momento.",
	menu_newPage: "La opci&#243;n &#34;Introducir nueva p&#225;gina&#34; le devuelve al paso &#34;3. Estructura&#34;, donde puede introducir una nueva p&#225;gina en su proyecto. Para ello, seleccione la posici&#243;n en la estructura y seleccione &#34;Nueva p&#225;gina&#34; o bien &#34;P&#225;gina interactiva&#34;.",
	menu_preview: "La opci&#243;n &#34;Vista previa&#34; le muestra el aspecto que tendr&#225; la p&#225;gina cuando publique su proyecto.",
	menu_quit: "El bot&#243;n &#34;Finalizar&#34; cierra su proyecto y le desconecta del programa. Si desea trabajar de nuevo en su proyecto, deber&#225; volver a registrarse con su nombre de usuario y su contrase&#241;a.",
	menu_edit: "Aqu&#237; encontrar&#225; las opciones para editar los textos. Haga clic con el rat&#243;n en un bloque de texto en su p&#225;gina para activar el men&#250;.",
	menu_pageLayout: "Elija c&#243;mo distribuir los contenidos de su p&#225;gina. Decida cu&#225;ntos bloques de texto o de imagen desea integrar en su p&#225;gina.",
	menu_text: "Edite su texto. Haga clic con el rat&#243;n en un bloque de texto de su p&#225;gina para activar el men&#250;.",
	menu_table: "Introduzca una nueva tabla o modifique su tabla. Haga clic con el rat&#243;n en un bloque de texto de su p&#225;gina para activar el men&#250;.",
	menu_list: "Cree una nueva lista o modifique su lista. Haga clic con el rat&#243;n en un bloque de texto en su p&#225;gina para activar el men&#250;",

	w4_intro: "Seleccione la intro con flash que desee haciendo clic con el rat&#243;n. Introduzca informaci&#243;n en su introducci&#243;n y elija un color. Defina a qu&#233; velocidad debe ser reproducida la introducci&#243;n. &#34;1&#34; es muy lento, &#34;120&#34; es muy r&#225;pido. A continuaci&#243;n haga clic en &#34;OK&#34;.",
	w4_counter: "Si pone el contador a cero, esto afectar&#225; a su p&#225;gina web. Todos los dem&#225;s ajustes se guardar&#225;n en su proyecto haciendo clic en &#34;OK&#34; o en &#34;Guardar&#34; y se activar&#225;n cuando publique su proyecto en Internet.",
	w4_password: "Aqu&#237; podr&#225; definir los derechos de acceso a una p&#225;gina o a todas las p&#225;ginas a la vez. Cuando se visita una p&#225;gina web protegida, el visitante tiene que introducir un nombre de usuario (y su contrase&#241;a) en la lista derecha &#34;Usuario con derechos de acceso&#34;.",
	w4_background_sound: "Haga clic en &#34;Seleccionar&#34; para cargar a trav&#233;s de MediaPool un archivo de sonido de su disco duro o para seleccionar un sonido del archivo de sonidos. Puede elegir que se reproduzca una sola vez cuando se abra la p&#225;gina o repetirse continuamente mientras se est&#233; mostrando la p&#225;gina.",
	w4_image_properties: "Aqu&#237; puede escribir el texto que se mostrar&#225; encima y debajo de la imagen. Internet Explorer muestra el &#34;texto de sustituci&#243;n de la imagen&#34; pasando el rat&#243;n por encima. El formato de los textos se ha establecido en la configuraci&#243;n del paso 2 y aqu&#237; no se puede modificar.",
	w4_guestbook: "Configure el libro de visitas y haga clic a continuaci&#243;n en &#34;Guardar&#34; para guardar la configuraci&#243;n en su proyecto. Si su libro de visitas ya ha sido publicado al guardar estos ajustes sobreescribir&#225; los anteriores.",
	w4_forum: "Configure el foro y haga clic a continuaci&#243;n en &#34;Guardar&#34;, para guardar la configuraci&#243;n en su proyecto. Si su foro ya ha sido publicado al guardar estos ajustes sobreescribir&#225; los anteriores.",
	w4_poll: "Configure la encuesta y haga clic a continuaci&#243;n en &#34;Guardar&#34; para guardar la configuraci&#243;n en su proyecto. Si su encuesta ya ha sido publicada, estos ajustes sobreescribir&#225;n los anteriores.",
	w4_contact: "Configure el formulario de contacto y haga clic a continuaci&#243;n en &#34;Enviar&#34; para guardar la configuraci&#243;n en su proyecto. Si ya ha publicado un formulario de contacto, estas configuraciones afectar&#225;n al formulario ya publicado.",
	
	// w6 site publish properties
	w6_settings: "Elija entre sus direcciones de Internet aquella con la que quiere publicar su proyecto.",
	seoForm: "Aqu&#237; puede modificar las palabras clave para la indexaci&#243;n en los buscadores y la descripci&#243;n del proyecto.",
	w6_ftppath: "Cuando publique su proyecto, el contenido estar&#225; disponible en Internet a trav&#233;s de esta direcci&#243;n.",
	publish_now: "Si quiere publicar su proyecto en el acto, aseg&#250;rese de que est&#225; activado el ajuste &#34;publicar inmediatamente&#34;.",
	publish_later: "Si no quiere publicar su proyecto ahora, indique aqu&#237; la fecha y la hora en que quiera hacerlo.",
	
	// w6 settings
	w6_p3_domain: "!!!MISSING_KEY:js.balloon.p3.1!!!",
	w6_p3_stlp: "!!!MISSING_KEY:js.balloon.p3.2!!!",
	w6_p3_stwh: "!!!MISSING_KEY:js.balloon.p3.3!!!",
	w6_p3_oth: "!!!MISSING_KEY:js.balloon.p3.4!!!",

	// ftp settings, used on p31, p32, and p33
	w6_ftp_username: "Indique aqu&#237; su nombre de usuario para acceder por FTP a su p&#225;gina web.",
	w6_ftp_password: "Indique aqu&#237; su contrase&#241;a para acceder por FTP a su p&#225;gina web.",
	
	// ftp settings used on p33
	w6_ftp_domain: "Indique aqu&#237; el dominio bajo el que desea publicar su proyecto.",
	w6_ftp_passive: "Esta es una opci&#243;n del protocolo FTP. Cambie los valores preconfigurados solo si est&#225; absolutamente seguro.",
	w6_ftp_port: "Introduzca aqu&#237; el puerto en el que el servidor FTP establece la conexi&#243;n de datos. Normalmente se emplea el puerto 21. Cambie este valor solo si est&#225; absolutamente seguro.",
	
	top_back: "Para volver al paso anterior.",
	top_forward: "Acceder al paso siguiente.",
	top_preview: "le muestra el aspecto que tendr&#225; su p&#225;gina despu&#233;s de publicar el proyecto.",
	top_help: "Active o desactive la ayuda online.",
	top_faq: "Ir a las FAQs de STRATO.",
	top_service: "Aqu&#237; podr&#225; acceder a nuestro centro de atenci&#243;n al cliente, que le ayudar&#225; en todo momento con sus dudas o problemas por e-mail o por tel&#233;fono.",
	top_backup: "Aqu&#237; puede guardar el estado actual de su proyecto y restablecerlo despu&#233;s. LivePages administra un solo &#34;Punto de restablecimiento&#34; por proyecto. Podr&#225; volver a ese punto y restablecer as&#237; su proyecto al estado anterior.",
	top_delete: "Con esta opci&#243;n eliminar&#225; su proyecto de LivePages de manera definitiva. Deber&#225; volver a empezar en el paso &#34;1. Sector&#34;",
	top_project_password: "Esta opci&#243;n le permite cambiar la contrase&#241;a para acceder a su proyecto de LivePages. Por razones de seguridad, su contrase&#241;a no deber&#237;a tener menos de 5 caracteres. Puede tener hasta 32 caracteres.",
	top_survey: "!!!MISSING_KEY:js.help.top.survey!!!",
	
	cp_survey: "!!!MISSING_KEY:js.help.cp.survey!!!",
	cp_backup_backup: "Crea una copia de seguridad. LivePages guarda una &#250;nica copia de seguridad. Cuando se hace una nueva copia de seguridad, se borra la anterior de forma irrecuperable.",
	cp_backup_restore: "Restablecer el proyecto. El contenido actual se perder&#225; definitivamente.",
	cp_backup_general: "LivePages le muestra si existe una copia de seguridad y cu&#225;ndo fue creada. Usted puede restablecerla, pero se perder&#225; definitivamente el contenido actual del proyecto, o borrarla y realizar una nueva.",
	
	photoalbum_edit: "Haga clic aqu&#237; para modificar el t&#237;tulo de su &#225;lbum de fotos. Si la opci&#243;n &#34;T&#237;tulo del &#225;lbum de fotos&#34; est&#225; activada, el texto del t&#237;tulo se muestra en cada p&#225;gina del &#225;lbum de fotos. Al editar el texto se activa esta opci&#243;n autom&#225;ticamente.",
	photoalbum_select: "Esta opci&#243;n abre MediaPool para seleccionar un sonido de fondo para el &#225;lbum de fotos. Primero cargue por favor aqu&#237; un nuevo archivo de audio. La opci&#243;n &#34;Sonido de fondo&#34; conecta o desconecta el sonido. Si su &#225;lbum de fotos tiene varias p&#225;ginas, la configuraci&#243;n &#34;una vez&#34; es v&#225;lida para cada p&#225;gina.",
	photoalbum_apply: "Esta opci&#243;n guarda los ajustes de la numeraci&#243;n de las p&#225;ginas, de la cantidad de im&#225;genes por p&#225;gina, de la posici&#243;n de las descripciones de las p&#225;ginas y de la disponibilidad de la vista de cada una de las im&#225;genes. La desactivaci&#243;n de la vista de cada una de las im&#225;genes sirve para ahorrar espacio web.",
	photoalbum_frame: "Esta opci&#243;n muestra los dise&#241;os disponibles para el marco de las im&#225;genes. Seleccione uno de los nueve dise&#241;os disponibles o desactive completamente la visualizaci&#243;n de los marcos de im&#225;genes.",
	photoalbum_upload: "Esta opci&#243;n abre MediaPool para seleccionar im&#225;genes para su &#225;lbum de fotos o para cargar nuevas fotos. Puede incluir hasta 48 im&#225;genes en su &#225;lbum de fotos. Puede volver a eliminar una imagen haciendo primero clic en la imagen y despu&#233;s en &#34;Eliminar imagen&#34; en el men&#250;",
	
	diashow_color: "Establezca el color de fondo de la ventana popup que desee. El color azul oscuro del bot&#243;n no se puede modificar. Si no se realiza ning&#250;n cambio, el fondo permanecer&#225; blanco.",
	diashow_sound: "Abra MediaPool para elegir un sonido de fondo para la proyecci&#243;n de im&#225;genes. Antes deber&#225; cargar un archivo de sonido.",
	diashow_preview: "Abra la ventana popup con la proyecci&#243;n de im&#225;genes tal y como lo visualizar&#225;n posteriormente los usuarios.",
	diashow_add: "Abrir la biblioteca de medios para elegir im&#225;genes para la proyecci&#243;n. Puede incluir hasta 48 im&#225;genes. Si desea eliminar una imagen, haga clic sobre ella y, en la parte inferior del di&#225;logo, en &#34;Eliminar imagen&#34;."
	
	//mediapool_document: "Cargue aqu&#237; sus propios archivos. Haga clic en &#34;A&#241;adir nuevo archivo&#34; para seleccionar archivos de su disco duro. Seleccione el archivo en MediaPool y haga clic en &#34;OK&#34; para utilizar el archivo en su proyecto de LivePages como destino de un enlace",
	//mediapool_picture: "Haga clic en &#34;A&#241;adir nuevas im&#225;genes&#34; para seleccionar archivos de imagen de su disco duro. Seleccione las im&#225;genes en MediaPool y haga clic en &#34;OK&#34; para cargar la imagen en su proyecto de LivePages.",
	//mediapool_video: "Haga clic en &#34;A&#241;adir nuevos v&#237;deos&#34; para seleccionar archivos de v&#237;deo de su disco duro. Seleccione los v&#237;deos en MediaPool y haga clic &#34;OK&#34;, para cargar el v&#237;deo en su proyecto de LivePages.",
	//mediapool_sound: "Haga clic en &#34;A&#241;adir nuevos sonidos&#34; para seleccionar un archivo de audio de su disco duro. Seleccione el archivo en MediaPool y haga clic &#34;OK&#34; para a&#241;adir el sonido en su proyecto de LivePages. Tambi&#233;n puede seleccionar un sonido del archivo de sonidos."
};

// assign duplicate pointers (if two items ever share the same text but need different IDs)
Help.texts.menu_imageHAlign_left = Help.texts.menu_imageHAlign;
Help.texts.menu_imageHAlign_center = Help.texts.menu_imageHAlign;
Help.texts.menu_imageHAlign_right = Help.texts.menu_imageHAlign;
Help.texts.menu_imageVAlign_top = Help.texts.menu_imageVAlign;
Help.texts.menu_imageVAlign_middle = Help.texts.menu_imageVAlign;
Help.texts.menu_imageVAlign_bottom = Help.texts.menu_imageVAlign;

/** Define prototype's famous $()
  * @param el Element Name as String, Number (pos. Integer) or DOM Element
  * @returns DOM Element or null if not found
  */
if (typeof $ !== "function") {
	window.$ = function(el){
		if (typeof el === "number") {
			el = parseInt(el, 10);
			if (!isNaN(el) && el >= 0) {
				el = String(el);
			} else {
				el = null;
			}
		}
		
		if (typeof el === "string" && el.length > 0) {
			el = document.getElementById(el);
		}
		
		if (typeof el !== "object" || el === null) {
			return null;
		}
		
		return el;
	};
}


/* common.js is included almost everywhere,
 * 
 * I'll move some functions that are put into single files into this file to spare 
 * one small request.
 * 
 * Write a comment where a function comes from and with what it might be substituted.
 */

/* Comes from sidebar.js
 * - no special substitution yet -
 */
function setInnerHTML(id, str, default4EmptyStr) {
	document.getElementById(id).innerHTML = ((!str || str == '') && default4EmptyStr) ? default4EmptyStr : str;
}

/* Comes from input_tag.js, is re-defined in TextEditTag
 * Is used in guestbook, forum, feedback
 * Perhaps write ad inplace-editing tool that takes all work to make a field editable and saveable
 */
function toggleTitleBorder (obj, black){         
	 document.getElementById(obj+'_non_edit').style.border = (black ? '1px solid #000000' : '1px solid #DDDDDD');
}

/* Comes from input_tag.js
 * Is used in guestbook, forum, feedback (TextEditTag)
 * Perhaps write ad inplace-editing tool that takes all work to make a field editable and saveable
 */
function toggleEdit(obj,show) {
  
  elem=document.getElementById(obj+'_non_edit');
  if(elem){
  	elem.style.display=(show ? 'none' : 'block');
  }	
  elem=document.getElementById(obj+'_edit');
  if(elem){	
  	textArea = document.getElementById(obj);
  	textArea.value=trimString(textArea.value); 
  	if(show){
  		elem.style.display='block';                     
  		textArea.focus();  	
  	}else{
  		elem.style.display='none';                     
  	} 	
	}
}

/* Comes from input_tag.js
 * Is used in guestbook, forum, feedback (TextEditTag, SettingsInputTag)
 * Perhaps write ad inplace-editing tool that takes all work to make a field editable and saveable
 */
var toggleAltTextOkCancel = function(id,show) {
    if (show) {        
	    showDiv(id+"_ok_button");
        showDiv(id+"_cancel_button");        
    } else {
        hideDiv(id+"_ok_button");
        hideDiv(id+"_cancel_button");
    }
};


/* common.js is included almost everywhere,
 * 
 * I'll move some functions that are put into single files into this file to spare 
 * one small request.
 * 
 * Write a comment where a function comes from and with what it might be substituted.
 */

/* Comes from input_tag.js
 * Might be substituted with String::trim() (by ExtJs)
 */
function trimString(sInString) {
  sInString = sInString.replace( /^\s+/g, "" );// strip leading
  return sInString.replace( /\s+$/g, "" );// strip trailing
}


/* ignore in iframes
 */
if (window === window.top && typeof Ext === "object") { 
	Ext.onReady(function (){
		var hrefs = document.getElementsByTagName("a");
		if (!hrefs){
			return;
		}
		
		for(var i = 0; i < hrefs.length; i++){
			hrefs[i].onfocus = function(){
				this.hideFocus = true;
			};
		}
	});
}


