// Execute JavaScript code
var bSaf = (navigator.userAgent.indexOf('Safari') != -1);
var bOpera = (navigator.userAgent.indexOf('Opera') != -1);
var bKonq = (navigator.userAgent.indexOf('Konqueror') != -1);
var bMoz = (navigator.appName == 'Netscape');
var bIE = (navigator.userAgent.indexOf('MSIE') != -1);
var me;
function execJS(node, whatURL) {
	var st = node.getElementsByTagName('SCRIPT');
	var strExec;
	for(var i=0;i<st.length; i++) {
		if (bSaf) {
			strExec = st[i].innerHTML;
		}
		else if (bOpera) {
			strExec = st[i].text;
		}
		else if (bMoz) {
			strExec = st[i].textContent;
		}
		else {
			strExec = st[i].text;
		}
		try {
			me=node;
			eval(strExec);
		} catch(e) {
			//alert(whatURL+":\n"+e.message);
		}
	}
}

// Process queryString
var getParms=new Array()
var query=window.location.search.substring(1);
if (query.length > 0){
	var params=query.split("&");
	for (var i=0 ; i<params.length ; i++){
		var pos = params[i].indexOf("=");
		getParms[params[i].substring(0, pos)] = unescape(params[i].substring(pos + 1));
	}
}

// Historia
var historyEnabled=false;
var historyIFrame

var traceHash=false

function enableHistory() {
	if (historyEnabled) return
	historyIFrame=document.createElement("iframe");
	historyIFrame.style.display="none";
	historyIFrame.name="historyIFrameName"
	historyIFrame.src="about:blank"
	document.body.appendChild(historyIFrame)
	hashListener.init();
	historyEnabled=true;
}

function addToHistory(whatURL) {
	traceHash&&alert("addToHistory")
	if (!historyEnabled) return
	var newURL="historyTracer.html?URL="+escape(whatURL)+"#"+escape(whatURL);
	if ( (hashListener.ie) && (!hashListener.opera) )
		historyIFrame.src=newURL;
	window.location.hash=escape(whatURL)
}

function hashes() {
	//alert(document.location.hash)
	if (!historyEnabled) return;
	var loHash=window.location.hash.substring(1)
	if (laURL!=loHash) {
		traceHash&&alert("loadPage from hashes")
		func=eval(linkParser)
		func(loHash)
	}
}

hashListener.onHashChanged = hashes

// Parselinks
function getElementsByClassName(oElm, strTagName, strClassName){
    var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];
        if(oRegExp.test(oElement.className)){
            arrReturnElements.push(oElement);
        }
    }
    return (arrReturnElements)
}

var functionHandlers=[];
var functionOffset=0;
var linkParser;
function parseLinks(where) {
	var losLinks=getElementsByClassName(where,"a","link")
	for (var i in losLinks) {
		var currLink=losLinks[i]
		var tmpHref=currLink.href
		tmpHref=tmpHref.substr(baseURL.length,999)

		currLink.linkParser=linkParser;
		currLink.tmpHref=tmpHref;
		currLink.onclick=function() {
			this.linkParser(this.tmpHref);
			return false;
		}
	}
}

// En esta variable nos guardamos referencias a elementos, para ahorrar recursos
var elms=new Array()

// Función llamada en el body onload
/*
function inicio(){
	enableHistory()

	elms["loading"]=document.getElementById("loading")

	if (historyEnabled) {
		var loPage=window.location.hash.substring(1)?window.location.hash.substring(1):mainPage
		traceHash&&alert("loadPage from inicio")
		loadPage({url:loPage})
	}
}
*/

// Aquí nos guardamos el HTML de las páginas que ya hemos cargado
var loadedPages=new Array();

// En esta variable nos guardamos la páginas que hemos empezado a cargar
var loadingPages=new Array();

// Carga de imagenes
var imgsToLoad=[];

function imgLoadComplete(e) {
	var elm,url;
	elm=e?e.currentTarget:event.srcElement;
	url=elm.callerURL;
	document.body.removeChild(elm)
	imgsToLoad[url]--;
	finalize(url)
}

// En esta variable guardamos las imagenes que cargamos
var bufferImg=new Array();

var laURL;

var objs=[]

forceJS=[]
function finalize(whatURL) {
	if (!imgsToLoad[whatURL]) {
		targets[whatURL].innerHTML=loadedPages[whatURL];
		var elms2=targets[whatURL].getElementsByTagName("*");
		var elms2Length=elms2.length;
		for (var i=0;i<elms2Length;i++) {
			elms2[i].me=targets[whatURL];
		}
		targets[whatURL].scrollTop=0;
		if (targets[whatURL].onLoadComplete!=undefined) targets[whatURL].onLoadComplete(objs[whatURL])
		elms.loading.style.display="none";
		imgs=targets[whatURL].getElementsByTagName("img")
		imgsLength=imgs.length;
		for (var i=0; i<imgsLength; i++) {
			if (bufferImg[imgs[i].src]!=undefined) {
				imgs[i].src=bufferImg[imgs[i].src].src
			}
		}
		loadingPages[whatURL]=false;
		if (bIE || forceJS[whatURL]) execJS(targets[whatURL], whatURL);
	}
}

var mainPage="default.asp"

function getCleanURL(url) {
	var pos=url.indexOf("?_uniqid=")
	if (pos==-1) pos=url.indexOf("&_uniqid=")
	if (pos!=-1) url=url.substr(0,pos)
	return url
}

function errorPage(obj) {
	elms["loading"].style.display="none"
	var tmpURL=getCleanURL(obj.url)
	var tmpdiv=document.createElement("div");
	tmpdiv.innerHTML=obj.responseText;
	parseLinks(tmpdiv);
	// cleanUp IIS extra stuff
	var pos=tmpdiv.innerHTML.indexOf("//-->")
	targets[tmpURL].innerHTML=tmpdiv.innerHTML.substr((pos!=-1?pos+5:0),tmpdiv.innerHTML.length)
	if (targets[tmpURL].onLoadComplete!=undefined) targets[tmpURL].onLoadComplete(obj)
}

// Esta es la función que recibe la repuesta de las peticiones ajax
function collectPage (obj) {
	if (obj.responseText==undefined) {
		// Se trata de una imagenes, simplemente hacemos return
		return;
	}

	var tmpURL=getCleanURL(obj.url);

	objs[tmpURL]=obj;

	var tmpdiv=document.createElement("div");
	tmpdiv.innerHTML=obj.responseText;
	parseLinks(tmpdiv);
	loadedPages[tmpURL]=tmpdiv.innerHTML;

	imgsToLoad[tmpURL]=0;
	if (!bSaf) {
		imgs=tmpdiv.getElementsByTagName("img")
		imgsLength=imgs.length;
		for (var i=0; i<imgsLength; i++) {
			if (!bufferImg[imgs[i].src]) {
				var newImg=new Image();

				newImg.onload=imgLoadComplete;
				newImg.onerror=imgLoadComplete;
				newImg.callerURL=tmpURL

				document.body.appendChild(newImg);
				newImg.style.display="none"

				newImg.src=imgs[i].src;
				bufferImg[imgs[i].src]=newImg;

				imgsToLoad[tmpURL]++
			}
		}
	}
	delete tmpdiv;
	finalize(tmpURL)
}

var targets=[]

/****************************
loadPage
Esta función es la que llamamos para cargar una página
parms= {
	whatURL:[página a cargar]
	disableHistory:[si ciero, no de modifica el historial del navegador]
	target:[capa destino en la que colocar el contenido. Si la capa tiene onLoadComplete!=undefined onLoadComplete serà ejecutado recibiendo el obj del advajax]
	submit:[form to submit]
	noCache:[if true the page is not cached]
}
***************************************/
function loadPage (parms) {
	if (parms.target==undefined) {
		var msg="loadPage error: No target specified\n";
		for (var i in parms) {
			msg+=i+" = "+parms[i]+"\n";
		}
		alert(msg);
		return;
	}
	if (parms.submit!=undefined) {
		// We have to submit a form
		laURL=parms.submit.action.substr(baseURL.length,parms.submit.action.length)
		forceJS[laURL]=false;
		if (parms.forceJS) forceJS[laURL]=true;
		targets[laURL]=parms.target
		if (historyEnabled){
			window.location.hash=laURL
			if (!parms.disableHistory) addToHistory(laURL);
		}
		elms["loading"].style.display="block";
		loadingPages[laURL]=true
		var queryObject={
			onSuccess:collectPage,
			onError:errorPage,
			unique:true // Forms are always unique
			}
		advAJAX.submit(parms.submit,queryObject)
	} else {
		// Normal petition (no form to submit
		laURL=parms.url
		forceJS[laURL]=false;
		if (parms.forceJS) forceJS[laURL]=true;
		var unique=!cacheable(parms.url)||parms.noCache;
		traceHash&&alert("loadPage: "+parms.url)
		targets[parms.url]=parms.target
		if (historyEnabled){
			window.location.hash=parms.url
			if (!parms.disableHistory) addToHistory(parms.url);
		}
		if ( (!parms.noCache) && (!bSaf) && (!unique) && (loadedPages[parms.url]!=undefined) ) {
			finalize(parms.url);
			return
		}
		elms["loading"].style.display="block";
		loadingPages[parms.url]=true
		var queryObject={
			url:parms.url,
			onSuccess:collectPage,
			onError:errorPage,
			unique:unique
			}
		if (parms.vars!=undefined) {
			for (var i in parms.vars) {
				queryObject[i]=parms.vars[i]
			}
		}
		if (parms.method!=undefined && parms.method.toUpperCase()=="POST") {
			advAJAX.post(queryObject)
		} else {
			advAJAX.get(queryObject)
		}
	}
}

var preloadURLs=[
]

function getExtension(url) {
	while (url.indexOf(".")!=-1) {
		url=url.substr(url.indexOf(".")+1,url.length)
	}
	return url.toLowerCase()
}

has=function (what,where) {
	for (var i=0;i<where.length;i++) {
		if (where[i]==what) return true
	}
	return false
}

var urlsWithoutCache=[
"portada.php",
"serverFuncs/calendario.php"
]

function cacheable(what) {
	//if (bIE) return false;
	return false;
	return (!has(what,urlsWithoutCache))
}

var imgExtesnions=["jpg","jpeg","gif","png","bmp"]

function preload() {
	//alert(window.advajax_obj+" "+window.advajax_obj._onCompleteHandled+" "+preloadURLs.length)
	if (
		(window.advajax_obj==undefined)
		||
		( (window.advajax_obj!=undefined) && (window.advajax_obj._onCompleteHandled) )
		)
		{

		if (!preloadURLs.length) {
			return
		}

		var url=preloadURLs.shift()
		while ( (loadedPages[url]!=undefined) || (bufferImg[baseURL+url]!=undefined) ){
			url=preloadURLs.shift()
		}

		// Como no quedan cosas por precargar, se terminó

		var extension=getExtension(url)
		if (has(extension,imgExtesnions)) {
			// Vamos a precargar una imagen
			var newImg=new Image();

			//newImg.onload=collectPage;
			//newImg.onerror=imgLoadComplete;

			newImg.src=url;
			bufferImg[baseURL+url]=newImg;

		} else {
			// Vamos a precargar otra cosa
			 advAJAX.get({
				url:url,
				onSuccess:collectPage,
				onError:null
				})
		}
	}
	setTimeout("preload()",100)
}
if (!bSaf) preload()

var baseURL=window.location.href;

while (baseURL.substr(baseURL.length-1,1)!="/")
{
	baseURL=baseURL.substr(0,baseURL.length-1)
}

function setCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function getCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}
