
//***************************************
//Devuelve un guid � y aleatorio
//***************************************
function getGUID() {
    var S4 = function (){return (((1+Math.random())*0x10000)|0).toString(16).substring(1);}
   return (S4()+S4()+"-"+S4()+"-"+S4()+"-"+S4()+"-"+S4()+S4()+S4());
}

//***************************************
//Devuelve un ID que no exista en su documento
//***************************************
function getID() {
   if (typeof getID.cont=='undefined')getID.cont=1;
   while (document.getElementById(id='id'+(getID.cont++)));
   return id;
}


/************************************************************************************************/
/*Devuelve un objeto capaz de hacer una petici?ml
/************************************************************************************************/
function getAjax(){
  var xmlhttp=false;
  try {
   // Creaci? objeto ajax para navegadores diferentes a Explorer
    xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
   // o bien
   try {
     // Creaci?el objeto ajax para Explorer
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) {
     xmlhttp = false;
   }
  }
  if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
   xmlhttp = new XMLHttpRequest();
  }
  return xmlhttp;
} 

/************************************************************************************************/
/* Clase que realiza un post ajax
/************************************************************************************************/
function XAjax(url,onInit,onTerminate)
{
	
	this.url = url;
    this.valorpost="";
	this.valorget="";//"time_pet="+new Date().getTime();
    this.onInit = onInit;
	this.onTerminate = onTerminate;
	
	this.post = function()
	{
		ArgumentValues = this.post.arguments;
		ArgumentCount = this.post.arguments.length;
		for (i=0;i<ArgumentCount-1;i+=2)
		{
			if (this.valorget.length > 0) this.valorget += "&";
			this.appendPost(ArgumentValues[i],ArgumentValues[i+1]);
		}	
		this.doSend(this.onInit,this.onTerminate);
	}
	
	this.appendGet = function(name,value)
	{
		if (this.valorget.length > 0) this.valorget += "&";
		this.valorget+=  escape(name) + "=" + escape(value);
	}
	
	this.appendPost = function(name,value)
	{
		if (this.valorpost.length > 0) this.valorpost += "&";
		this.valorpost+=  escape(name) + "=" + escape(value);
	}
	
	this.send = function()
	{
		ArgumentValues = this.send.arguments;
		ArgumentCount = this.send.arguments.length;
		for (i=0;i<ArgumentCount-1;i+=2)
		{
			this.appendGet(ArgumentValues[i],ArgumentValues[i+1]);
		}
		this.doSend(this.onInit,this.onTerminate);
	}

	this.doSend = function(onInit,onTerminate)
	{
		var ajax = getAjax(); 
		if(this.valorpost!="")
			ajax.open("POST",this.url+ ((this.valorget==null||this.valorget=="")?(""):("?"+this.valorget)),true);
		else 
			ajax.open("GET",this.url+ ((this.valorget==null||this.valorget=="")?(""):("?"+this.valorget))  ,true);
		
		ajax.onreadystatechange=function()
		{
		   if (ajax.readyState==4) xeval(onTerminate,ajax.responseText);
		};
		
		xeval(onInit);
		if(this.valorpost!="")
		{
			this.valorpost = this.valorpost.replace(//g,"'");
      		this.valorpost = this.valorpost.replace(//g,"'");    
      		this.valorpost = this.valorpost.replace(//g,"%EURO%");
			ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");			
			ajax.send(this.valorpost);
		}
		else
			ajax.send(null);
	}
}



function JSXAjax(url,onInit,onTerminate)
{
	this.ajax = new XAjax(url,onInit,
							function (resp)
							{
								resp =  json_decode(resp);
								if (!resp || !resp.conf) resp = { conf:1,data:null };	//1: Error de comunicaciones							
								if (resp.eval) eval(resp.eval);
								this.onTerminate(resp.data); 
							});
 	
	this.url = url;
    this.valorpost="";
	this.valorget="";//"time_pet="+new Date().getTime();
    this.onInit = onInit;
	this.onTerminate = onTerminate;
	
	this.onTerminate = onTerminate;
	this.send = this.ajax.send; 
	this.post = this.ajax.post; 
	this.appendPost = this.ajax.appendPost;
	this.appendGet = this.ajax.appendGet;
	this.doSend = this.ajax.doSend;
}

function setAlpha(elem,alpha)
{
	if (!elem) return;
	if (typeof elem == "string") elem = document.getElementById(elem);
	if (!elem) return;
	elem.style.opacity = ""+alpha;
	elem.style.filter = "alpha(opacity=" + (alpha*100)  + ")";
	if (alpha == 1) elem.style.filter = "";
}


//Crea un elemento DOM y lo inserta dentro de un elemento padre
//El elemento padre puede venir como un id o como un objeto directamente
function createDOM(tagname,classname,innerhtml,id,parent)
{
    var elem = document.createElement(tagname);
    if (classname != null) elem.className = classname;
    if (innerhtml != null && innerhtml.length != 0) elem.innerHTML = innerhtml;
    if (id != null && id.lehgth != 0) elem.id = id;
    if (parent != null)
    {
        if (typeof parent == "string") document.getElementById(parent).appendChild(elem);
        else parent.appendChild(elem);
    }
    return elem;
}

function xeval(func,params)
{
	if (!func) return;
	if (typeof func == "string") return eval(func);
	if (params != null) return func(params);
    return func();
}


function addListener(objeto,eventname,func)
{
	if (objeto == null) return;
	if (typeof objeto == "string") objeto = document.getElementById(objeto);
	if (objeto.attachEvent)
		objeto.attachEvent("on" + eventname,func);
	else
	{
	   if (typeof func == "string")
	   {
		   funcx = function(){ eval(func); };
		   objeto.addEventListener(eventname,funcx,false);
	   }
	   else
	   	objeto.addEventListener(eventname,func,false);
	}
}

function removeListener(objeto,eventname,func)
{
	if (objeto == null) return;
	if (typeof objeto == "string") objeto = document.getElementById(objeto);
	if (objeto.detachEvent)
		objeto.detachEvent("on" + eventname,func);
	else
		objeto.removeEventListener(eventname,func,false);
}


var lastfunc_selection;
function disableSelection(target){
	if (typeof target.onselectstart!="undefined") //IE route
	{
		lastfunc_selection = target.onselectstart;
		target.onselectstart=function(){return false}
	}
	else if (typeof target.style.MozUserSelect!="undefined") //Firefox route
	{
		lastfunc_selection = target.style.MozUserSelect;
		target.style.MozUserSelect="none"
	}
	else //All other route (ie: Opera)
	{
		lastfunc_selection = target.onmousedown;
		target.onmousedown=function(){return false}
	}
	//target.style.cursor = "default"
}

function enableSelection(target){
	if (typeof target.onselectstart!="undefined") //IE route
		target.onselectstart=lastfunc_selection;
	else if (typeof target.style.MozUserSelect!="undefined") //Firefox route
		target.style.MozUserSelect=lastfunc_selection;
	else //All other route (ie: Opera)
		target.onmousedown=lastfunc_selection;
//	target.style.cursor = "default"
}

//Devuelve las coordenadas absolutas del ratón asociadas a un evento
//para cualquier navegador
function getMouseXY(e) {
	var posx = 0;
	var posy = 0;
	if (!e) var e = window.event;
	if (e.pageX || e.pageY) 	{
		posx = e.pageX;
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY) 	{
		posx = e.clientX + document.body.scrollLeft
			+ document.documentElement.scrollLeft;
		posy = e.clientY + document.body.scrollTop
			+ document.documentElement.scrollTop;
	}
	return [posx,posy];
}

function getPosition(obj)
{
	var left, top;
    left = top = 0;
    if (obj.offsetParent) {
        do {
            left += obj.offsetLeft;
            top  += obj.offsetTop;
        } while (obj = obj.offsetParent);
    }
    return {
        x : left,
        y : top
    };
}

//Devuelve un array con el ancho y alto de la ventana actual 0,1
//y el scroll relativo en 2,3
function getScreenSize()
{
	if (window.innerWidth)
	{
		var tamx = window.innerWidth;
		var tamy = window.innerHeight;	
		var scrollx = window.scrollX;
		var scrolly = window.scrollY;
	}
	else
	{
		var tamx = document.documentElement.clientWidth;
		var tamy = document.documentElement.clientHeight;
		var scrollx = document.documentElement.scrollLeft;
		var scrolly = document.documentElement.scrollTop;
	}
	return [tamx,tamy,scrollx,scrolly];
}

function json_decode(text)
{
	return eval("(" + text + ")");
}

function divide_palabras(texto,maxlen)
{
	if (texto.length < maxlen) return texto;
	idx = texto.indexOf(" ",maxlen);
	return texto.substring(0,idx);
}


function setCookie(cookieName,cookieValue,nDays) {
 var today = new Date();
 var expire = new Date();
 if (nDays==null || nDays==0) nDays=1;
 expire.setTime(today.getTime() + 3600000*24*nDays);
 document.cookie = cookieName+"="+escape(cookieValue)
                 + ";expires="+expire.toGMTString();
}


function getCookie(cookieName) {
 var theCookie=""+document.cookie;
 var ind=theCookie.indexOf(cookieName);
 if (ind==-1 || cookieName=="") return ""; 
 var ind1=theCookie.indexOf(';',ind);
 if (ind1==-1) ind1=theCookie.length; 
 return unescape(theCookie.substring(ind+cookieName.length+1,ind1));
}


function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if (typeof node == "string") node = document.getElementById(node);
	if ( node == null )	node = document;
	if ( tag == null ) tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

function getStyle(obj, styleProp)
{
  if (obj.currentStyle)
    return obj.currentStyle[styleProp];
  else if (window.getComputedStyle)
    return document.defaultView.getComputedStyle(obj,null).getPropertyValue(styleProp);
}


function getabsXY(obj)
{
  var curleft = 0;
  var curtop = obj.offsetHeight + 5;
  var border;
  if (obj.offsetParent)
  {
    do
    {
      // XXX: If the element is position: relative we have to add borderWidth
      if (getStyle(obj, 'position') == 'relative')
      {
		if (typeof _pub != "undefined")
		{
			if (border = _pub.getStyle(obj, 'border-top-width')) curtop += parseInt(border);
        	if (border = _pub.getStyle(obj, 'border-left-width')) curleft += parseInt(border);
		}
      }
      curleft += obj.offsetLeft;
      curtop += obj.offsetTop;
    }
    while (obj = obj.offsetParent)
  }
  else if (obj.x)
  {
    curleft += obj.x;
    curtop += obj.y;
  }
  return {'x': curleft, 'y': curtop};
}

//Obtiene el valor de una variable pasada por $_GET
function getVar(name) {
	var query = window.location.search.substring(1);
	var parms = query.split('&');
	for (var i=0; i<parms.length; i++) {
	var pos = parms[i].indexOf('=');
	if (pos > 0) {
			var key = parms[i].substring(0,pos);
			var val = parms[i].substring(pos+1);
			if (key == name) return val;
		}
	}
	return null;
} 

function urlencode(str) {
	str = escape(str);
	str = str.replace(/\x2B/g, '%2B');
	str = str.replace(/%20/g, '+');
	str = str.replace(/\x2A/g, '%2A');
	str = str.replace(/\x2F/g, '%2F');
	str = str.replace(/@/g, '%40');
	return str;
}

function urldecode(str) {
	str = str.replace('+', ' ');
	str = unescape(str);
	return str;
}

function destroy(obj)
{
	if (typeof obj == 'string') obj = document.getElementById(obj);
	if (!obj) return;
	var parent = obj.parentNode;
	parent.removeChild(obj);
}


function track_event(cathegory,action,opt_str,opt_int)
{
	 var err = false;
	 if (!cathegory || !action || tracking_array[cathegory]==undefined) err = true;
	 else
	 {
		err = true;
		for (i=0;i< tracking_array[cathegory].length;i++)
	 		if ( tracking_array[cathegory][i] == action) err = false;
	 }
	 if (err)
	 {
		 	//Se ha producido un error de tracking
	 }
	 else if (!opt_str && !opt_int)
	 	_gaq.push(['_trackEvent',cathegory,action]);
	 else if (!opt_int)
	 	_gaq.push(['_trackEvent',cathegory,action,opt_str]);
	 else
		_gaq.push(['_trackEvent',cathegory,action,opt_str,opt_int]);
}





//*****************************************************************************************
// Realiza el degradado y muestra alpha de un container con elementos div en su interior
//*****************************************************************************************
function alphaelement(idpadre,claseelem,index,timeout,incremento,opacidad)
{
	var array_clases = claseelem.split(",");
	var parent = document.getElementById(idpadre);
	var elems = parent.getElementsByTagName("DIV");
	if ((index < elems.length) && (elems[index].parentNode != parent)) index++;
	if (index >= elems.length) return;
	if (opacidad == null)
	{
		opacidad = 0;
		for (i=0;i<elems.length;i++)
		if (elems[i].parentNode == parent)
		for (j=0;j<array_clases.length;j++)
			if (elems[i].className == array_clases[j])
			{
					elems[i].style.opacity = 0.0;
					elems[i].style.filter =  "alpha(opacity = 0)";
					break;
			}
	}
	var element = elems[index];
	if ( opacidad + incremento >= 1.0)
	{
		element.style.opacity = 1;
		element.style.filter = "alpha(opacity = 100)"
		setTimeout("alphaelement('" +  idpadre  + "','"  + claseelem + "'," + (index+1) + "," + timeout + "," + incremento +  ",0)",timeout);
		return;
	}
	else
	{
		element.style.opacity = opacidad;
		element.style.filter = "alpha(opacity ="  +  parseInt(opacidad*100)   + ")"
		setTimeout("alphaelement('" +  idpadre  + "','"  + claseelem + "'," +  index + "," + timeout + "," + incremento + "," + (opacidad+incremento) + ")",timeout);
	}
}


/*******************************************************************/
// Muestra un elemento de manera suave con un degradado alpha
//
/*******************************************************************/
function showAlpha(id,opacidad/*=0*/,paso/*=0.2*/,timeout/*=20*/)
{
	if (!opacidad) opacidad = 0;
	if (!paso) paso = 0.2;
	if (!timeout) timeout = 20;
	var elem = document.getElementById(id);
	if (opacidad >= 1)
	{
		setAlpha(id,1);
		return;
	}
	setAlpha(document.getElementById(id),opacidad);
	if (opacidad == 0)
		elem.style.visibility = "visible";
	opacidad +=paso;
	var func = "showAlpha('" +  id   + "'," +  opacidad + "," + paso + "," + timeout + ")";
	setTimeout(func,timeout);
}


/*******************************************************************/
// Oculta un elemento de manera suave con un degradado alpha
//
/*******************************************************************/
function hideAlpha(id,opacidad/*=1*/,paso/*=0.2*/,timeout/*=20*/)
{
	if (!opacidad) opacidad = 1;
	if (!paso) paso = 0.2;
	if (!timeout) timeout = 20;
	var elem = document.getElementById(id);
	if (opacidad <= 0)
	{
		setAlpha(id,0);
		elem.style.visibility = "hidden";
		return;
	}
	setAlpha(document.getElementById(id),opacidad);
	opacidad -= paso;
	var func = "hideAlpha('" +  id   + "'," +  opacidad + "," + paso + "," + timeout + ")";
	setTimeout(func,timeout);
}



/***************************************************************************/
/* Muestra un cuadro de mensaje con botones
/* ICONO:     0 sin icono
/*            1 warning
/*            2 error
/*            3 informacin
/*
/* BOTONES:   1 OK				1 botn
/*            2 SINO			2 botones	
/*            3 SINOCANCEL		3 botones
/*			  4 PROGRESSBAR
/*
/* blocking: Indica que deshabilitar toda la pgina hasta que se seleccione una opcin
/***************************************************************************/
var zindexMessageBox = 100;
var messagebox_numbers = 0;
function messageBox(titulo,texto,icono,botones,accionSi,accionNo,accionCancel,blocking,closeenabled,data)
{
    var id = getGUID();
    var container = createDOM("DIV","messagebox",null,id,null);
	container.style.visibility = "hidden";
    container.zIndex = zindexMessageBox;
    var titulo = createDOM("DIV","messagebox_title",titulo,null,container); 
    var boton_cerrar = createDOM("SPAN","messagebox_cerrar",null,null,container);
	var content = createDOM("DIV","messagebox_content",texto,null,container);
	var boton_si=null,boton_no=null,boton_ok=null,boton_cancelar=null;    
    var eicono = null;
	
	eicono = createDOM("IMG","messagebox_icon",null,null,content);
	switch(icono)
	{
		case 1: eicono.src = "imagenes/iconos/warning64x64.png"; break;
		case 2: eicono.src = "imagenes/iconos/error64x64.png"; break;
		case 3: eicono.src = "imagenes/iconos/informacion64x64.png"; break;
		case 4: eicono.src = "imagenes/iconos/engranaje64x64.png"; break;
		case 0:
		default: content.removeChild(eicono);
	}
	
			
	var content_botones = createDOM("DIV","messagebox_content",texto,null,container);
	var clase_ok = clase_si = clase_no = clase_cancel = null;
	switch (botones)
	{
		case 1: clase_ok = "medio messagebox_button_center"; break;
		case 2: clase_si = "medio messagebox_button_left"; clase_no = "medio messagebox_button_right"; break; 
		case 3: clase_si = "medio messagebox_button_left"; clase_no = "medio messagebox_button_center"; clase_cancel = "medio messagebox_button_right"; break;  
		case 4: break;
	}
	var textoi = "";
	if (clase_ok) textoi += '<input id="' + "OK_" + id  + '" type="button" class="' +  clase_ok  + '" value="Aceptar" />';
	if (clase_si) textoi += '<input id="' + "SI_" + id  + '" type="button" class="' +  clase_si + '" value="Si" />';
	if (clase_no) textoi += '<input id="' + "NO_" + id  + '" type="button" class="' +  clase_no + '" value="No" />';
	if (clase_cancel) textoi += '<input id="' + "CANCEL_" + id  + '" type="button" class="' +  clase_cancel + '" value="Cancel" />';
	content_botones.innerHTML = textoi;
		
    var closemb = function()
    {
 		endmsgbox();
		xeval(accionNo);
    }
    if (closeenabled)
		addListener(boton_cerrar,"click",closemb);
	else
		boton_cerrar.className = "messagebox_cerrar_bn";
	
	var endmsgbox = function(){
		document.body.removeChild(container);
		messagebox_numbers--;
	}
	
	var function_si = function()
	{
		endmsgbox();
		xeval(accionSi);
	}
	var function_no = function()
	{
		endmsgbox();
		xeval(accionNo);
	}
	var function_cancel = function()
	{
		endmsgbox();
		xeval(accionCancel);
	}
	
	var startx,starty; //Puntos iniciales del arrastre
	//Arrastrando
	var dragging = function(ev){
		var xy = getMouseXY(ev);
		container.style.left = (xy[0]-startx) + "px";
		container.style.top = (xy[1]-starty) + "px";
	}
	
	//Comienzo del arrastre
	var start_drag = function(ev) {
		zindexMessageBox++;
		container.style.zIndex = zindexMessageBox;
		var container_x = parseInt(container.style.left==""?0:container.style.left.substring(0,container.style.left.length-2));
		var container_y = parseInt(container.style.top==""?0:container.style.top.substring(0,container.style.top.length-2));
		var xy = getMouseXY(ev);
		startx = xy[0] - container_x;
		starty = xy[1] - container_y;
		disableSelection(document.body);
		addListener(document,"mousemove",dragging);	
		addListener(document,"click",end_drag);	
		container.style.opacity = 0.7;
		container .style.filter = "alpha(opacity = 70)";
	}
	//Fin del arrastre
	var end_drag = function(ev) {
		enableSelection(document.body);
		removeListener(document,"mousemove",dragging);	
		removeListener(document,"click",end_drag);	
		removeListener(titulo,"click",end_drag);	
		container.style.opacity = 1;
		container .style.filter = "alpha(opacity = 100)";
	}
	//Con click en el ttulo se comenzar a arrastrar
	addListener(container,"mousedown",function(){container.style.zIndex = zindexMessageBox++;});
	addListener(titulo,"mousedown",start_drag);
	addListener(titulo,"mouseup",end_drag);
    zindexMessageBox++;	
	messagebox_numbers++;
	
	//Se centra y se aade al documento
	document.body.appendChild(container);
	var ssize = getScreenSize();
	var posx = (ssize[0] + ssize[2] - container.clientWidth)/2;
	var posy = (ssize[1] + ssize[3] - container.clientHeight)/2;
	//Se pone desplazado segn el nmero de mensajes que haya
	posx += (messagebox_numbers%10) * 10;
	posy += (messagebox_numbers%10) * 10;
	container.style.left = posx + "px";
	container.style.top = posy + "px";
	container.style.visibility = "visible";
		
	//Se le aplican a los botones los eventos necesarios
	var boton_si = document.getElementById("SI_" + id);
	var boton_no = document.getElementById("NO_" + id);
	var boton_ok = document.getElementById("OK_" + id);
	var boton_cancel = document.getElementById("CANCEL_" + id);
	addListener(boton_si,"click",function_si);
	addListener(boton_no,"click",function_no);
	addListener(boton_ok,"click",function_cancel);
	addListener(boton_cancelar,"click",accionCancel);
	
	//Por si se hubiera definido una clase se le aaden mtodos
	if (typeof this == "object")
	{
		this.data = data;
		this.id = id;
		this.Close = function() {
			end_drag();
			closemb();
		}
	}
	else
		return id;
}

/************************************************ TOGGLE MENU   ****************************************/

var tmenuabierto = null;
function closeToggleMenu(guid){
	var header = document.getElementById("HEADER_" + guid);
	var content = document.getElementById("CONTENT_" + guid);
	var imagent = document.getElementById("IMAGENT_" + guid);
	if (!imagent || !header || !content) return;
	imagent.className = "togglebtn_down";
	content.style.visibility = "hidden";
	content.style.left = "0px";
	content.style.top = "0px";
	header.className = "toggle_header";
}


function ToggleMenu(element,_openaction,_closeaction)
{
	var guid = getGUID();
	var container = (typeof element == "string")?document.getElementById(element):element;
	if (!container) return null;
	container.id = guid;
	var elems = container.getElementsByTagName("DIV");
	var header = elems[0];
	var content = elems[1];
	var imagent = header.getElementsByTagName("SPAN")[0];
	var timeout = null;
	var openaction = _openaction;
	var closeaction = _closeaction;
	
	container.removeChild(content);
	document.body.appendChild(content);
	disableSelection(header);
	content.id = "CONTENT_" + guid;
	header.id = "HEADER_" + guid;
	imagent.id = "IMAGENT_" + guid;
	
	var oncerrar = function(){
		tmenuabierto = null;
		xeval(closeaction);
	}
	
	var onabrir  = function(){
		//Si hay alguno abierto lo cierro
		xeval(openaction);
		tmenuabierto = guid;
	}
	
	var mouseout = function(){
		if (timeout) clearTimeout(timeout);
		timeout = setTimeout("closeToggleMenu('" + guid + "')",60000);
	}
	
	var mouseover = function(){
		if (timeout) clearTimeout(timeout);
		timeout = null;
	}
	
	addListener(content,"mouseout",mouseout);
	addListener(content,"mouseover",mouseover);
	addListener(header,"mouseout",mouseout);
	addListener(header,"mouseover",mouseover);
	
	var show = function()
	{
		content.style.visibility = "hidden";
		clickheader();
		mouseover();
	}
	
	var clickheader  = function(){
		if (content.style.visibility == "hidden" || content.style.visibility == "")
		{
			if (timeout) clearTimeout(timeout);
			var pos = getabsXY(header);
			
			content.style.visibility = "visible";
			content.style.zIndex = zindexMessageBox;
			zindexMessageBox++;
			imagent.className = "togglebtn_up";
			content.style.left = (pos.x /*-(content.clientWidth - header.clientWidth)*/ )+ "px";
			content.style.top = (pos.y - 8) + "px";
			header.className = "toggle_headerns";
			onabrir();
			timeout = setTimeout("closeToggleMenu('" + guid + "')",60000);
		}
		else
		{
			content.style.visibility = "hidden";
			imagent.className = "togglebtn_down";
			header.className = "toggle_header";
			oncerrar();
		}
	}
	addListener(header,"click",clickheader);
	
	
	if (typeof this == "object")
	{
		this.close = clickheader;
		this.idHEADER = "HEADER_" + guid;
		return this;
	}
	return true;
}

/************************************************ TOGGLE MENU   FIN ****************************************/


/*********************************************  MENSAJE ADJUNTO ********************************************/

/************** ADJUNTA AL DOCUMENTO UN MENSAJE DE ERROR */
function show_msg_error(text_msg)
{
	show_msg(text_msg,"mensaje_incrustado_red");
}

function show_msg_warning(text_msg)
{
	show_msg(text_msg,"mensaje_incrustado_yellow");
}

function show_msg_ok(text_msg)
{
	show_msg(text_msg,"mensaje_incrustado_green");
}

function show_msg(text_msg,clase)
{
	if (!clase) clase = "mensaje_incrustado_yellow";
	var wm = document.getElementById("WRAPPER_MAIN");
	if (!wm) return; 
	var id = getGUID();
	var msg = createDOM("DIV",clase,"",id,null);
	msg.innerHTML = '<span class="messagebox_cerrar" style="float:right; visibility:visible; position:relative; right:2px; top:5px; margin:3px;" onclick="cerrar_message(this);"></span>'	+
    '<p class="mensaje_incrustado_parrafo">'  + text_msg +  '</p>';
	wm.insertBefore(msg,wm.childNodes[0]);
}

function msg_remove_all()
{
	var elems = getElementsByClass("divError",document.getElementById("WRAPPER_MAIN"),"DIV");
	for (i=0;i<elems.length;i++)
		elems[i].parentNode.removeChild(elems[i]);
	elems = getElementsByClass("divOK",document.getElementById("WRAPPER_MAIN"),"DIV");
	for (i=0;i<elems.length;i++)
		elems[i].parentNode.removeChild(elems[i]);		
}

function cerrar_message(sender,alto)
{
	if (typeof sender != "string")
	{
		var guid = getGUID();
		var elem = sender.parentNode;
		elem.style.overflow = "hidden";
		elem.id = guid;
		setTimeout("cerrar_message('" + guid + "',64)",20);
	}
	else
	{
		var elem = document.getElementById(sender);
		alto -= 50
		if (alto <= 0)
			elem.parentNode.removeChild(elem);
		else
		{
			elem.style.height = alto + "px";
			setTimeout("cerrar_message('" + elem.id + "'," + alto + ")",20);
		}
	}
}








/******************************************************************************************************************
SLIDER 
*******************************************************************************************************************/

// carpeGetElementByID: Cross-browser version of "document.getElementById()"
function carpeGetElementById(element)
{
	if (document.getElementById) element = document.getElementById(element);
	else if (document.all) element = document.all[element];
	else element = null;
	return element;
}
// carpeLeft: Cross-browser version of "element.style.left"
function carpeLeft(elmnt, pos)
{
	if (!(elmnt = carpeGetElementById(elmnt))) return 0;
	if (elmnt.style && (typeof(elmnt.style.left) == 'string')) {
		if (typeof(pos) == 'number') elmnt.style.left = pos + 'px';
		else {
			pos = parseInt(elmnt.style.left);
			if (isNaN(pos)) pos = 0;
		}
	}
	else if (elmnt.style && elmnt.style.pixelLeft) {
		if (typeof(pos) == 'number') elmnt.style.pixelLeft = pos;
		else pos = elmnt.style.pixelLeft;
	}
	return pos;
}
// carpeTop: Cross-browser version of "element.style.top"
function carpeTop(elmnt, pos)
{
	if (!(elmnt = carpeGetElementById(elmnt))) return 0;
	if (elmnt.style && (typeof(elmnt.style.top) == 'string')) {
		if (typeof(pos) == 'number') elmnt.style.top = pos + 'px';
		else {
			pos = parseInt(elmnt.style.top);
			if (isNaN(pos)) pos = 0;
		}
	}
	else if (elmnt.style && elmnt.style.pixelTop) {
		if (typeof(pos) == 'number') elmnt.style.pixelTop = pos;
		else pos = elmnt.style.pixelTop;
	}
	return pos;
}
// moveSlider: Handles slider and display while dragging
function moveSlider(evnt)
{
	var evnt = (!evnt) ? window.event : evnt; // The mousemove event
	if (mouseover) { // Only if slider is dragged
		x = pxLeft + evnt.screenX - xCoord // Horizontal mouse position relative to allowed slider positions
		y = pxTop + evnt.screenY - yCoord // Horizontal mouse position relative to allowed slider positions
		if (x > xMax) x = xMax // Limit horizontal movement
		if (x < 0) x = 0 // Limit horizontal movement
		if (y > yMax) y = yMax // Limit vertical movement
		if (y < 0) y = 0 // Limit vertical movement
		carpeLeft(sliderObj.id, x)  // move slider to new horizontal position
		carpeTop(sliderObj.id, y) // move slider to new vertical position
		sliderVal = x + y // pixel value of slider regardless of orientation
		sliderPos = (sliderObj.pxLen / sliderObj.valCount) * Math.round(sliderObj.valCount * sliderVal / sliderObj.pxLen)
		v = Math.round((sliderPos * sliderObj.scale + sliderObj.fromVal) * // calculate display value
			Math.pow(10, displayObj.dec)) / Math.pow(10, displayObj.dec)
		displayObj.value = v // put the new value in the slider display element
		return false
	}
	return
}
// moveSlider: Handles the start of a slider move.
function slide(evnt, orientation, length, from, to, count, decimals, display)
{
	if (!evnt) evnt = window.event;
	sliderObj = (evnt.target) ? evnt.target : evnt.srcElement; // Get the activated slider element.
	sliderObj.pxLen = length // The allowed slider movement in pixels.
	sliderObj.valCount = count ? count - 1 : length // Allowed number of values in the interval.
	displayObj = carpeGetElementById(display) // Get the associated display element.
	displayObj.dec = decimals // Number of decimals to be displayed.
	sliderObj.scale = (to - from) / length // Slider-display scale [value-change per pixel of movement].
	if (orientation == 'horizontal') { // Set limits for horizontal sliders.
		sliderObj.fromVal = from
		xMax = length
		yMax = 0
	}
	if (orientation == 'vertical') { // Set limits and scale for vertical sliders.
		sliderObj.fromVal = to
		xMax = 0
		yMax = length
		sliderObj.scale = -sliderObj.scale // Invert scale for vertical sliders. "Higher is more."
	}
	pxLeft = carpeLeft(sliderObj.id) // Sliders horizontal position at start of slide.
	pxTop  = carpeTop(sliderObj.id) // Sliders vertical position at start of slide.
	xCoord = evnt.screenX // Horizontal mouse position at start of slide.
	yCoord = evnt.screenY // Vertical mouse position at start of slide.
	mouseover = true
	document.onmousemove = moveSlider // Start the action if the mouse is dragged.
	document.onmouseup = sliderMouseUp // Stop sliding.
}
// sliderMouseup: Handles the mouseup event after moving a slider.
// Snaps the slider position to allowed/displayed value. 
function sliderMouseUp()
{
	mouseover = false // Stop the sliding.
	v = (displayObj.value) ? displayObj.value : 0 // Find last display value.
	pos = (v - sliderObj.fromVal)/(sliderObj.scale) // Calculate slider position (regardless of orientation).
	if (yMax == 0) carpeLeft(sliderObj.id, pos) // Snap horizontal slider to corresponding display position.
	if (xMax == 0) carpeTop(sliderObj.id, pos) // Snap vertical slider to corresponding display position.
	if (document.removeEventListener) { // Remove event listeners from 'document' (Moz&co).
		document.removeEventListener('mousemove', moveSlider)
		document.removeEventListener('mouseup', sliderMouseUp)
	}
	else if (document.detachEvent) { // Remove event listeners from 'document' (IE&co).
		document.detachEvent('onmousemove', moveSlider)
		document.detachEvent('onmouseup', sliderMouseUp)
	}
}



function disable_all_inputs()
{
	var arr = ["input","select","textarea"]
	for (j=0;j<arr.length;j++)
	{
		var vec = document.getElementsByTagName(arr[j]);
		for (i=0;i<vec.length;i++)
			vec[i].disabled = "disabled";
	}
}

function enable_all_inputs()
{
	var arr = ["input","select","textarea"]
	for (j=0;j<arr.length;j++)
	{
		var vec = document.getElementsByTagName(arr[j]);
		for (i=0;i<vec.length;i++)
			vec[i].disabled = null;
	}
}



var usuario = "";
var pass = "";
var sha1 = "";
var marca_tiempo = "";
var html_frame_reg = "";

$(document).ready(function(){   
    //Esto hace parpadear el muñeco del logo
    $(".logo_wrapper").bind('mouseenter',function(){
    	parpadeo();
    });
	if (MAINTENANCE_MODE) setTimeout('mantenimiento();',1000);
});


function onkey_login(e)
{
	if (e == null || e.keyCode == 13)
	{
		login_user();
	}
}



function logout_user()
{
	xajax.config.requestURI = "funciones_login.server.php";
	document.getElementById("LOGINKEY").src = "imagenes/web/ajax_loader_peque.gif";
	xajax_logout(SELF);
	FB.logout(function(response) {});
}


function login_user()
{
	xajax.config.requestURI = "funciones_login.server.php";
	var email = document.getElementById("LOGIN_EMAIL");
	var pass = document.getElementById("LOGIN_PASS");
	if (email.value.length == 0) { email.focus(); return; }
	else if (pass.value.length == 0) {pass.focus(); return;}

	var button = document.getElementById("LOGIN_BUTTON");
	var loader = document.getElementById("LOGIN_LOADER");
	
	button.disabled = "disabled";
	email.disabled = "disabled";
	pass.disabled = "disabled";
	email.blur();
	pass.blur();
	
	loader.style.visibility = "visible";
	loader.style.position = "fixed";
	var ts =  document.getElementById("TIMESTAMP").innerHTML;																  
	xajax_login(email.value,SHA1(pass.value+ts),SELF, document.getElementById("TIMESTAMP").parentNode.id);
}

//Si ha ocurrido un error al logarse mostramos el mensaje de error
function login_error(respuesta)
{
	
}

//Función a llamar para el olvido de la contraseña
function onclick_olvido_pass()
{
	xajax.config.requestURI = "funciones_login.server.php";
	var email = document.getElementById("LOGIN_EMAIL").value;
	xajax_olvido_pass(email);	
}

function on_muestra_loginbox()
{
	var email = document.getElementById("LOGIN_EMAIL");
	var pass = document.getElementById("LOGIN_PASS");
	if (email.value.length == 0) email.focus();
	else 
	{
     pass.focus();
	 pass.select();
	}
}

function on_oculta_loginbox()
{
	var elem = document.getElementById("LOGIN_ERROR");
	elem.style.visibility = "hidden";
	elem.style.position = "absolute";
}

function termina_logout()
{
	
	var termina_post = function(response)
	{
		var elem = document.getElementById("toggle_user");
		var parent = elem.parentNode;
		parent.removeChild(elem);
		parent.innerHTML += response;
		login_menu = new ToggleMenu('toggle_login','on_muestra_loginbox();','on_oculta_loginbox();')	
		//login_menu.clickheader();
		//login_menu.mouseover();
	}
	
	var ajax = new XAjax("sub_login.php",null,termina_post);
	ajax.send();	
}

/*********************************************************************************************************/
/*********************************************************************************************************/
/************************************* BÚSQUEDA POR PALABRAS *********************************************/
/*********************************************************************************************************/
/*********************************************************************************************************/
function onkey_search_word(e)
{
	if (e == null || e.keyCode == 13)
	{
		window.location =  "resultados_busqueda.php?function=busqueda_palabras&palabras=" + urlencode(document.getElementById("BUSQUEDA_PALABRAS").value);
	}	
}


/*********************************************************************************************************/
/*********************************************************************************************************/
/************************************* CÁLCULO DE HASH SHA1 **********************************************/
/*********************************************************************************************************/
/*********************************************************************************************************/
function SHA1 (msg) {

    function rotate_left(n,s) {
        var t4 = ( n<<s ) | (n>>>(32-s));
        return t4;
    };

    function lsb_hex(val) {
        var str="";
        var i;
        var vh;
        var vl;

        for( i=0; i<=6; i+=2 ) {
            vh = (val>>>(i*4+4))&0x0f;
            vl = (val>>>(i*4))&0x0f;
            str += vh.toString(16) + vl.toString(16);
        }
        return str;
    };

    function cvt_hex(val) {
        var str="";
        var i;
        var v;

        for( i=7; i>=0; i-- ) {
            v = (val>>>(i*4))&0x0f;
            str += v.toString(16);
        }
        return str;
    };


    function Utf8Encode(string) {
        string = string.replace(/\r\n/g,"\n");
        var utftext = "";

        for (var n = 0; n < string.length; n++) {

            var c = string.charCodeAt(n);

            if (c < 128) {
                utftext += String.fromCharCode(c);
            }
            else if((c > 127) && (c < 2048)) {
                utftext += String.fromCharCode((c >> 6) | 192);
                utftext += String.fromCharCode((c & 63) | 128);
            }
            else {
                utftext += String.fromCharCode((c >> 12) | 224);
                utftext += String.fromCharCode(((c >> 6) & 63) | 128);
                utftext += String.fromCharCode((c & 63) | 128);
            }

        }

        return utftext;
    };

    var blockstart;
    var i, j;
    var W = new Array(80);
    var H0 = 0x67452301;
    var H1 = 0xEFCDAB89;
    var H2 = 0x98BADCFE;
    var H3 = 0x10325476;
    var H4 = 0xC3D2E1F0;
    var A, B, C, D, E;
    var temp;

    msg = Utf8Encode(msg);

    var msg_len = msg.length;

    var word_array = new Array();
    for( i=0; i<msg_len-3; i+=4 ) {
        j = msg.charCodeAt(i)<<24 | msg.charCodeAt(i+1)<<16 |
        msg.charCodeAt(i+2)<<8 | msg.charCodeAt(i+3);
        word_array.push( j );
    }

    switch( msg_len % 4 ) {
        case 0:
            i = 0x080000000;
        break;
        case 1:
            i = msg.charCodeAt(msg_len-1)<<24 | 0x0800000;
        break;

        case 2:
            i = msg.charCodeAt(msg_len-2)<<24 | msg.charCodeAt(msg_len-1)<<16 | 0x08000;
        break;

        case 3:
            i = msg.charCodeAt(msg_len-3)<<24 | msg.charCodeAt(msg_len-2)<<16 | msg.charCodeAt(msg_len-1)<<8    | 0x80;
        break;
    }

    word_array.push( i );

    while( (word_array.length % 16) != 14 ) word_array.push( 0 );

    word_array.push( msg_len>>>29 );
    word_array.push( (msg_len<<3)&0x0ffffffff );


    for ( blockstart=0; blockstart<word_array.length; blockstart+=16 ) {

        for( i=0; i<16; i++ ) W[i] = word_array[blockstart+i];
        for( i=16; i<=79; i++ ) W[i] = rotate_left(W[i-3] ^ W[i-8] ^ W[i-14] ^ W[i-16], 1);

        A = H0;
        B = H1;
        C = H2;
        D = H3;
        E = H4;

        for( i= 0; i<=19; i++ ) {
            temp = (rotate_left(A,5) + ((B&C) | (~B&D)) + E + W[i] + 0x5A827999) & 0x0ffffffff;
            E = D;
            D = C;
            C = rotate_left(B,30);
            B = A;
            A = temp;
        }

        for( i=20; i<=39; i++ ) {
            temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0x6ED9EBA1) & 0x0ffffffff;
            E = D;
            D = C;
            C = rotate_left(B,30);
            B = A;
            A = temp;
        }

        for( i=40; i<=59; i++ ) {
            temp = (rotate_left(A,5) + ((B&C) | (B&D) | (C&D)) + E + W[i] + 0x8F1BBCDC) & 0x0ffffffff;
            E = D;
            D = C;
            C = rotate_left(B,30);
            B = A;
            A = temp;
        }

        for( i=60; i<=79; i++ ) {
            temp = (rotate_left(A,5) + (B ^ C ^ D) + E + W[i] + 0xCA62C1D6) & 0x0ffffffff;
            E = D;
            D = C;
            C = rotate_left(B,30);
            B = A;
            A = temp;
        }

        H0 = (H0 + A) & 0x0ffffffff;
        H1 = (H1 + B) & 0x0ffffffff;
        H2 = (H2 + C) & 0x0ffffffff;
        H3 = (H3 + D) & 0x0ffffffff;
        H4 = (H4 + E) & 0x0ffffffff;

    }

    var temp = cvt_hex(H0) + cvt_hex(H1) + cvt_hex(H2) + cvt_hex(H3) + cvt_hex(H4);

    return temp.toLowerCase();

}


/**
Hace parpadear el muñeco del logo
**/
function parpadeo()
{
	$(".logo_wrapper").css('position','relative');
	$(".logo_wrapper > img").remove();
	$(".logo_wrapper").append("<img src='imagenes/web/parpado.gif' width='12' height='9' border='0' style='position:absolute; left:178px; top:50px; display:none;' ></img>");
	$(".logo_wrapper > img").slideDown(200,function(){
		$(this).slideUp(200,function(){ $(this).remove(); });
	});
}


//Muestra el mensaje de mantenimiento
function mantenimiento()
{
	var txt = "";
	var txten = "For maintenance on AudioViator, our servers may not work fine throughout today. "+
				"Remember you can also find us on Itunes if you want to download and listen to our audio tours worldwide. Sorry.";
	
	$(".logo_wrapper").css('position','relative');
	$(".logo_wrapper").css('overflow','visible');
	$(".logo_wrapper").append("<div id='mante' class='mensaje_incrustado_yellow' style='width:890px; padding:5px; position:absolute; display:none;'  >"
	+txt+""+txten+
	"</div>");
	$("#mante").css("padding-right","40px");
	$("#mante").css('bottom',"-"+($("#mante").height()+30)+"px");
	$("#mante").css('left',"20px");
	$("#mante").fadeIn();
	
	//Botón de cerrado
	$("#mante").append("<span style='position:absolute; top:35px; right:5px;' class='messagebox_cerrar' />");
	$("#mante > .messagebox_cerrar").unbind();
	$("#mante > .messagebox_cerrar").bind('mousedown', function(){
		$(this).parent().remove();	
	});
	$("#mante b").css('color',"red");
}







