// 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);
function execJS(node) {
	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 {
			eval(strExec);
		} catch(e) {
			alert(e);
		}
	}
}

// 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 (loHash=="home") {
		vuelveAHome();
		return;
	}
	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
		//while (tmpHref.indexOf("/")>-1) {
		//	tmpHref=tmpHref.substr(tmpHref.indexOf("/")+1,tmpHref.length)
		//}
		tmpHref=tmpHref.substr(baseURL.length,999)

		if (bIE) {
			currLink.linkFix={}
			//currLink.linkFix.linkeador=linkParser+"({url:'"+tmpHref+"',target:this});";
			currLink.linkFix.func=eval(linkParser);
			currLink.linkFix.tmpHref=tmpHref;
			currLink.onclick=function() {
				this.linkFix.func(this.linkFix.tmpHref)
				return false;
			}
		} else {
			currLink.setAttribute("onclick",linkParser+"('"+tmpHref+"');return false;")
		}
		if (historyEnabled) currLink.href="#"+escape(tmpHref)
		//else  currLink.href="#"
	}
	//if (bIE) where.innerHTML=where.innerHTML
}

// 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=[]

function finalize(whatURL) {
	if (!imgsToLoad[whatURL]) {
		targets[whatURL].innerHTML=loadedPages[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;
		execJS(targets[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"
	//alert("error loading:\n"+obj.status)
	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]
}
***************************************/
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)
		targets[laURL]=parms.target
		if (historyEnabled && !parms.disableHistory){
			window.location.hash=parms.url
			addToHistory(parms.url);
		}
		elms["loading"].style.display="block";
		loadingPages[laURL]=true
		var queryObject={
			onSuccess:collectPage,
			onError:errorPage
			}
		advAJAX.submit(parms.submit,queryObject)
	} else {
		// Normal petition (no form to submit
		laURL=parms.url
		var unique=true;
		traceHash&&alert("loadPage: "+parms.url)
		targets[parms.url]=parms.target
		if (historyEnabled && !parms.disableHistory){
			window.location.hash=parms.url
			addToHistory(parms.url);
		}
		elms["loading"].style.display="block";
		parms.target.innerHTML=elms.loading.innerHTML;
		loadingPages[parms.url]=true
		var queryObject={
			url:parms.url,
			onSuccess:collectPage,
			onError:errorPage
			}
		if (parms.vars!=undefined) {
			for (var i in parms.vars) {
				queryObject[i]=parms.vars[i]
			}
		}
		if (parms.method!=undefined && parms.method.toUpperCase()=="GET") {
			advAJAX.get(queryObject)
		} else {
			advAJAX.post(queryObject)
		}
	}
}

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

var baseURL=window.location.href;
while (baseURL.substr(baseURL.length-1,1)!="/")
{
	baseURL=baseURL.substr(0,baseURL.length-1)
}
