/*
·VERSION:1.2 (hay una versión mas nueva)
*/
// 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, 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) {
			alerta(whatURL+":\n"+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 (laURL!=loHash) {
		traceHash&&alert("loadPage from hashes")
		func=eval(linkParser)
		func(loHash)
	}
}

hashListener.onHashChanged = hashes

/*
·getElementsByClassName ( [elemento], [tagName], [className] ) : array
	devuelve un array con todos los subelementos de [elemento] cuya tag y class coinciden con los especificados.
*/
function getElementsByClassName(oElm, strTagName, strClassName){
    var arrElements = 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)
}

// Parselinks
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
		if (tmpHref) {
			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()

// 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 loadinga(){}

function finalize(whatURL) {
	if (!imgsToLoad[whatURL]) {
		targets[whatURL].innerHTML=loadedPages[whatURL];
		targets[whatURL].updateMeReferences();
		targets[whatURL].scrollTop=0;
		if (targets[whatURL].onLoadComplete!=undefined) targets[whatURL].onLoadComplete(objs[whatURL])
		loadinga(0);
		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) {
	loadinga(0);
	//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).split('?')[0]
	
	if (obj.setTimeStampOfPetitionOfLoadPage!=targets[tmpURL].setTimeStampOfPetitionOfLoadPage) return;
	
	targets[tmpURL].updateMeReferences=function(){
		var elms=this.getElementsByTagName("*");
		var elmsLength=elms.length;
		for (var i=0;i<elmsLength;i++)
			if (!elms[i].me)
				elms[i].me=this;
	}

	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 funcion es la que llamamos para cargar una pagina
	parms= {
		whatURL:[pagina 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 sera
			ejecutado recibiendo el obj del advajax]
		submit:[form to submit],
		method:[GET/POST:default]
		noCache:[if true the page is not cached]
		forceJS:[en firefox el javascript se ejecuta automaticamente cuando
			hacemos un appendChild, por lo que por defecto no sera ejecutado por la libreria.
			Si, por el contrario, usamos innerHTML para incluir el codigo, debemos
			poner este partametro como true]
	}

	- Cuando una página es llamada con loadPage el html es asignado via <b>innerHTML</b> and <b>[target]</b>
	- A continuación el javascript es ejecutado. Consideraciones de Javascript:
		- Cuando el javascript es ejecutado tenemos ·me = [target]
		- Definir todas las funciones y variables dentro de <b>me</b>
		- El script siempre es ejecutado al final.
		- Para todos los elementos tenemos ·this.me = [target]
*/
var loUnicoThisTime=Math.random();
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;
	}
	//parms.target.innerHTML='<table width="100%" height="100%"><tr><td align="center" valign="middle"><img src="img/loading.gif"/></td></tr></table>';
	parms.target.reload=function(){
		var losPa=parms;
		//while (losPa.url.indexOf("/")!=-1) {
		//	losPa.url=losPa.url.substr(losPa.url.indexOf("/")+1,999)
		//}
		loadPage(losPa);
	}
	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);
		}
		loadinga(1);
		loadingPages[laURL]=true;
		var timeStamp=new Date().getTime();
		parms.target.setTimeStampOfPetitionOfLoadPage=timeStamp;
		var queryObject={
			onSuccess:function(obj) {
				obj.setTimeStampOfPetitionOfLoadPage=timeStamp;
				collectPage(obj)
			},
			onError:errorPage,
			unique:true, // Forms are always unique
			setTimeStampOfPetitionOfLoadPage:loadingPages[laURL]
			}
		advAJAX.submit(parms.submit,queryObject)
	} else {
		// Normal petition (no form to submit
		laURL=parms.url

		forceJS[laURL]=false;
		if (parms.forceJS==undefined) {
			forceJS[laURL]=true;
		} else if (parms.forceJS) {
			forceJS[laURL]=true;
		}

		if (parms.noCache==undefined) {
			var unique=true;
		} else {
			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
		}
		loadinga(1);
		loadingPages[parms.url]=true;
		var timeStamp=new Date().getTime();
		parms.target.setTimeStampOfPetitionOfLoadPage=timeStamp;
		var queryObject={
			url:parms.url,
			onSuccess:function(obj) {
				obj.setTimeStampOfPetitionOfLoadPage=timeStamp;
				collectPage(obj)
			},
			onError:errorPage,
			unique:unique,
			setTimeStampOfPetitionOfLoadPage:loadingPages[parms.url]
			}
		if (parms.vars!=undefined) {
			for (var i in parms.vars) {
				queryObject[i]=parms.vars[i]
			}
		}
		// Esto hace que entre visita y visita las paginas se actualizen en internet explorer
		queryObject["loUnicoThisTime"]=loUnicoThisTime;
		if (parms.method!=undefined && parms.method.toUpperCase()=="GET") {
			advAJAX.get(queryObject)
		} else {
			advAJAX.post(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=[
"secciones/noticias/",
"secciones/tertulias/",
"secciones/agenda/",
"secciones/home/"
]

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)
}

/*
·setCookie ( [name], [value], [expirity days] )
*/
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=/";
}

/*
·getCookie ( [name] )
*/
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;
}