/******************************************/
function $(i){
	return document.getElementById(i);
}

/******************************************/
var Navegador = function(){
	this.esIE = false;// Internet Explorer
	this.esIE6 = false;
	this.esIE7 = false;
	this.esIE8 = false;
	this.esIE9 = false;	
	this.esFf = false;// Mozilla
	this.esOp = false;// Opera
	this.esNs = false;// Netscape
	
	

	if(window.navigator.userAgent.search(RegExp("MSIE","im"))!=-1){
		this.esIE = true;
		if(window.navigator.userAgent.search(RegExp("MSIE 8","im"))!=-1) this.esIE8 = true;
		else if(window.navigator.userAgent.search(RegExp("MSIE 7","im"))!=-1) this.esIE7 = true;
		else if(window.navigator.userAgent.search(RegExp("MSIE 6","im"))!=-1) this.esIE6 = true;
		else if(window.navigator.userAgent.search(RegExp("MSIE 9","im"))!=-1) this.esIE9 = true;		
	}
	else if(window.navigator.userAgent.search(RegExp("Firefox","im"))!=-1) this.esFf = true;
	else if(window.navigator.userAgent.search(RegExp("Opera","im"))!=-1) this.esOp = true;
	else if(window.navigator.userAgent.search(RegExp("Safari","im"))!=-1) this.esSa = true;
	else if(window.navigator.userAgent.search(RegExp("Netscape","im"))!=-1) this.esNs = true;

};
var Nav = new Navegador();

/******************************************/
Function.prototype.closure = function(obj){
	// Init object storage.
	if (!window.__objs){
		window.__objs = [];
		window.__funs = [];
	}
	
	// For symmetry and clarity.
	var fun = this;
	
	// Make sure the object has an id and is stored in the object store.
	var objId = obj.__objId;
	if (!objId) __objs[objId = obj.__objId = __objs.length] = obj;
	
	// Make sure the function has an id and is stored in the function store.
	var funId = fun.__funId;
	if (!funId) __funs[funId = fun.__funId = __funs.length] = fun;
	
	// Init closure storage.
	if (!obj.__closures) obj.__closures = [];
	
	// See if we previously created a closure for this object/function pair.
	var closure = obj.__closures[funId];
	if (closure) return closure;
	
	// Clear references to keep them out of the closure scope.
	obj = null;
	fun = null;
	
	// Create the closure, store in cache and return result.
	var o = __objs[objId].__closures[funId] = function (){
		if(!!__funs[funId] && !!__objs[objId]) return __funs[funId].apply(__objs[objId], arguments);
		else return false;
	};
	o.__funId = funId;
	return o;
	
};
var EliminarClosures = function(o){
	var i = 0;
	if(o){
		if(o.__objId){
			for(i in o.__closures){
				delete(window.__funs[i]);
				delete(o.__closures[i]);
			}
			delete(window.__objs[o.__objId]);
			o.__closures = null;
			o.__objId = null;
		}
	}
	i = null;
}
var LimpiarClosures = function(){
	if(!!Nav && !Nav.esIE) window.addEventListener('unload', LimpiarClosures, false);
	else window.detachEvent("onunload",LimpiarClosures);
	
	if(window.__objs){
		for(i in window.__objs) EliminarClosures(window.__objs[i]);
	}
	window.__objs = [];
	window.__funs = [];
};
var Limpiar = function(){
	if(!!Nav && !Nav.esIE) window.addEventListener('unload', LimpiarClosures, false);
	else window.attachEvent("onunload", LimpiarClosures);
}();
document.LimpiarClosures  = LimpiarClosures;

/******************************************/
function AddEvent(o, e, f){
	if(Nav.esIE) o.attachEvent('on'+e, f);
	else o.addEventListener(e, f, ((Nav.esOp)? false : true));
};
function RemEvent(o, e, f){
	if(Nav.esIE) o.detachEvent('on'+e, f);
	else o.removeEventListener(e, f, ((Nav.esOp)? false : true));
};
function FireEvent(o, e){
	var evt = null;
	if(Nav.esIE) o.fireEvent('on'+e);
	else{
		if(e=='click' || e=='dblclick' || e=='mousedown' || e=='mousemove' || e=='mouseout' || e=='mouseover' || e=='mouseup'){
			evt = document.createEvent("MouseEvents");
			evt.initMouseEvent(e, true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
		}
		else if(e=='keydown' || e == 'keypress' || e == 'keyup'){
			evt = document.createEvent("KeyboardEvent");
			evt.initKeyEvent(e, true, true, null, false, false, false, false, 9, 0);
		}
		else{
			evt = document.createEvent("Event");
			evt.initEvent(e, true, false);
		}
		o.dispatchEvent(evt);
	}
}
function StopEvent(e){
	if(Nav.esIE && !e.preventDefault){
		e.returnValue = false;
		e.cancelBubble = true;
	}
	else{
		e.preventDefault();
		e.stopPropagation();
	}
}

/******************************************/
function ltrim(str){
	return str.replace(/^(\s+)/g, '');
}
function rtrim(str){
	return str.replace(/(\s+)$/g, '');
}
function trim(str){
	return ltrim(rtrim(str));
}

/******************************************/
	Request = function(oListener, metodo) {
		this.pedido = new crearXHR();
		this.reportar = true;
		this.respuestaXML = null;
		this.respuestaHTML = null;
		this.archivo = null;
		this.valores = null;
		this.listener = oListener;
		//
		this.onError = null;
		this.onRetry = null;
		this.retrys = 0;
		this.curRetry = 0;
		this.timeout = 120000;
		this.timeoutInterval = false;
		
		if(!metodo) this.metodo = 'POST';
		else this.metodo = metodo;
	}
	
	Request.prototype.pedir = function(a, v, m, r) {
		//inicializamos
		if(!!a) this.archivo = a;
		if(!!v) this.valores = v;
		if(!!m) this.metodo = m;
		if(!r) this.curRetry = 0;
		//
		this.respuestaXML = null;
		this.respuestaHTML = null;
		//
		this.cancelar(this.pedido);
		//
		this.pedido.onreadystatechange = this.procesar.closure(this);
		//
		this.pedido.open(this.metodo, this.archivo, true);
		//
		if (this.valores) {
			this.valores = this.valores.puntualChars();
			this.pedido.send(this.valores);
		}
		else {
			this.pedido.send();
		}
		this.setTimeOut();
	};
	
	Request.prototype.procesar = function(){
		var termino = false;
		if(this.pedido && this.pedido.readyState == 4){
			
			this.clearTimeOut();
			
			var stat = this.pedido.status;
			if ((stat >= 200 && stat < 300) || stat == 304 || stat == 1223) {
				if(this.pedido.responseXML) this.respuestaXML = this.pedido.responseXML.documentElement;
				this.respuestaHTML = this.pedido.responseText;
				
				this.cancelar();
				if (this.listener && this.listener.onRequestLoad) { this.listener.onRequestLoad(); }
				else if (typeof(this.listener)=='function'){ this.listener(); }
			}
			else if (stat == 401) {
				window.top.oLogin.requestInfo = {request: this};
				window.top.oLogin.open();
			}
			else {
				if (typeof(this.onRetry) == 'function') { this.onRetry(); }
				else if (typeof(this.onError) == 'function') { this.onError(); }
				else {
					if (this.reportar) {
						ERROR.reportar("Error en clase Request." +
						   "\nESTADO: " + stat + " " + this.pedido.statusText +
						   "\nARCHIVO: " + this.archivo +
						   "\nMETODO: " + this.metodo);
					}
				}
			}
		}
	};
	
	Request.prototype.cancelar = function () {
		cancelarPedido(this.pedido);
	};
	
	Request.prototype.setTimeOut = function () {
		this.clearTimeOut();
		this.timeoutInterval = window.setTimeout(this.timeOut.closure(this), this.timeout);
	};
	
	Request.prototype.clearTimeOut = function () {
		if (this.timeoutInterval) {
			window.clearTimeout(this.timeoutInterval);
		}
	};
	
	Request.prototype.timeOut = function () {
		this.cancelar();
		if (typeof(this.onRetry) == 'function') { this.onRetry(); }
		else if (typeof(this.onError) == 'function') { this.onError(); }
	};

/******************************************/
String.prototype.puntualChars = function(){
	var chrs = new Array({'chr':'€', 'ent':'&euro;'}), i, str = this.toString();
	for(i = 0; i < chrs.length; i++){
		str = str.replace(RegExp(chrs[i]['chr'], 'g'), chrs[i]['ent']);
	}
	return str;
}
String.prototype.unPuntualChars = function(){
	var chrs = new Array({'chr':'€', 'ent':'&euro;'}), i, str = this.toString();
	for(i = 0; i < chrs.length; i++){
		str = str.replace(RegExp(chrs[i]['ent'], 'g'), chrs[i]['chr']);
	}
	return str;
}

/******************************************/
crearXHR = function(){
	var r = null
	if (window.XMLHttpRequest) r = new XMLHttpRequest()
	else if(window.ActiveXObject) {
		var msp = new Array('Msxml2.XMLHTTP.5.0', 'Msxml2.XMLHTTP.4.0', 'Msxml2.XMLHTTP.3.0', 'Msxml2.XMLHTTP', 'Microsoft.XMLHTTP')
		for(var i = 0; i < msp.length; i++){
			try { r = new ActiveXObject(msp[i]) } catch (e){}
		}
	}
	return r
}
cancelarPedido = function(reqXHR){
	if(reqXHR!=null){
		reqXHR.onreadystatechange=new Function()//una funcion vacia...
		reqXHR.abort()
	}
}

/******************************************/
ToolTip = function(oConfig){
	//
	var z 	= 1;
	var css = '';
	var msg = '';
	var contenedor = null;
	//
	if(oConfig && oConfig.zIndex) z = oConfig.zIndex-1;
	if(oConfig && oConfig.css) css = oConfig.css;
	if(oConfig && oConfig.mensaje) msg = oConfig.mensaje;
	if(oConfig && oConfig.contenedor)contenedor = $(oConfig.contenedor);
	
	var oT = this;
	//
	this.cont = document.createElement('div');
	this.cont.style.position = 'absolute';
	this.cont.style.display = 'none';
	this.cont.style.zIndex = z;
	this.cont.unselectable = true;
	if(!contenedor)document.body.insertBefore(this.cont, document.body.firstChild);
	else contenedor.appendChild(this.cont);
	//
	this.iframe = document.createElement('iframe');
	this.iframe.style.position = 'absolute';
	this.iframe.style.zIndex = z;
	this.iframe.style.width = 0;
	this.iframe.border = 0;
	this.iframe.scrolling = 'no';
	this.iframe.frameBorder = 0;
	this.iframe.disabled = true;
	this.cont.appendChild(this.iframe);
	//
	this.tip = document.createElement('div');
	this.tip.style.position = 'relative';
	this.tip.style.zIndex = z + 1;
	this.tip.style.width = 0;
	if(css) this.tip.className = css;
	if(msg) this.tip.innerHTML = msg;
	this.tip.unselectable = true;
	this.cont.appendChild(this.tip);
	this.iframe.style.left = 0+"px";
	this.tip.style.left = 0+"px";
	
	//
	this.ocultar = function(){
		this.cont.style.display = 'none';
		if(this.ele)RemEvent(this.ele,"mousemove",this.controlarUbicacion.closure(this));
	}
	this.mostrar = function(event,msg, css){
		//
		this.mensaje(msg);
		if(css) this.tip.className = css;
		//
		this.cont.style.visibility = "hidden";
		this.cont.style.display = 'block';
		this.iframe.style.width = 0;
		this.iframe.style.height = 0;
		
		this.tip.style.width = 'auto';
		this.tip.style.height = 'auto';
		//
		//this.controlarTamanios();
		//this.controlarUbicacion();
		if(Nav.esIE){
			this.ele = window.event.srcElement;
		}
		else{
			this.ele = event.target;		
		}
		RemEvent(this.ele,"mousemove",this.controlarUbicacion.closure(this));
		AddEvent(this.ele,"mousemove",this.controlarUbicacion.closure(this));
		if(Nav.esIE){
			window.event.cancelBubble = true;
			window.event.returnValue = false;			
		}
		else event.preventDefault();
		this.cont.style.visibility = "visible";	
	}
	this.mensaje = function(msg){
		if(msg) this.tip.innerHTML = msg;
	}
	this.controlarUbicacion = function(event){
		
		if(Nav.esIE){
			if(event){
				this.cont.style.top  = (event.clientY + document.documentElement.scrollTop+ 19) + 'px';
				if(event.clientX + this.cont.offsetWidth - 2 + document.documentElement.scrollLeft  < document.body.offsetWidth){
					this.cont.style.left = (event.clientX - 2 + document.documentElement.scrollLeft) + 'px';
				}
				else{
					this.cont.style.left = (event.clientX + document.documentElement.scrollLeft + 10 - this.cont.offsetWidth) + 'px';
 
				}
				window.event.cancelBubble = true;
				window.event.returnValue = false;		
			}
		}
		else{
			if(event){
				this.cont.style.top  = (event.clientY + window.scrollY+ 19) + 'px';
				if(event.clientX + this.cont.offsetWidth - 2 + window.scrollX  < document.body.offsetWidth){
					this.cont.style.left = (event.clientX - 2 + window.scrollX) + 'px';
				}
				else{
					this.cont.style.left = (event.clientX + window.scrollX + 10 - this.cont.offsetWidth) + 'px';
				}
			
				event.preventDefault();
			}
		}
	}
	this.controlarTamanios = function(){
		//
		this.iframe.style.width = (this.tip.offsetWidth + 2) + 'px';
		this.iframe.style.height = (this.tip.offsetHeight + 2) + 'px';
		
		this.tip.style.width = (this.tip.offsetWidth - 4) + 'px';
		this.tip.style.height = (this.tip.offsetHeight - 4) + 'px';
 
	}
}

/******************************************/
function layer(nombre, archivo){
	
	var capa = $('lay' + nombre);
	var fondo = $('bg' + nombre);
	var error = $('error' + nombre);
	
	var seccion = 0;
	var enviando = false;
	var errores = 0;
	var aCampos = new Array();
	var aValidar = new Array();
	var aLimpiar = new Array();
	var req = new Request();
	var animando = false;
	var elemento = false;
	var zoomEle = null;
	
	this.onSuccess = null;
	this.onError = null;
	this.onClose = null;
	this.sinScroll = false;
	var id = null;
	
	//
	req.listener = function(){
		var d = req.respuestaXML;
		block(false);
		if(!d){ alert(req.respuestaHTML); }
		else if(d.getAttribute('exito') == 'si'){
			RemEvent(document, 'keypress', this.escape);
			block(true);
			if(!this.onSuccess){
				capa.style.zIndex = 9;
				Exito.onAccept = onAcceptSuccess;
				Exito.show(d.firstChild.data);
			}
			else{ this.onSuccess(); }
		}
		else{
			RemEvent(document, 'keypress', this.escape);
			block(true);
			if(!this.onError){
				capa.style.zIndex = 9;
				LayError.onAccept = onAcceptError;
				LayError.show(d.firstChild.data);
			}
			else{ this.onError(); }
		}
	}.closure(this);
	
	var onAcceptSuccess = function(){
		capa.style.zIndex = 10;
		clean();
		block(false);
		this.close();
	}.closure(this);
	var onAcceptError = function(){
		AddEvent(document, 'keypress', this.escape);
		block(false);
		capa.style.zIndex = 10;
	}.closure(this);
	
	this.center = function(){
		center();	
	}
	var center = function(){
		//
		if(!!fondo){
			fondo.style.height = ((HBody() > HScreen())? HBody():HScreen()) + 'px';
			fondo.style.width = ((WBody() > WScreen())? WScreen():WBody()) + 'px';
		}
		//
		var topTemp = (((HScreen() - capa.offsetHeight) / 2) + YPos());
		if(topTemp < 10)topTemp = 10;
		capa.style.top = topTemp + 'px';
		capa.style.left = (((WScreen() - capa.offsetWidth) / 2) + XPos()) + 'px';
	}.closure(this);
	this.escape = function(event){ if(event.keyCode == 27){ this.close(); } }.closure(this);
	this.enter = function(event){ if(event.keyCode == 13){ this.send(); } }.closure(this);
	
	this.open = function(ele, sec, event,idEle){

		if(!!event){ StopEvent(event); }
		if(!!animando){ return false; }
		animando = true;
		//
		elemento = ele;
		seccion = sec;
		id = idEle;
		
		hideFlashes(true);
		animIn();
	
	}
	this.close = function(event){
		if(!!event){ StopEvent(event); }
		if(!!animando){ return false; }
		animando = true;
		
		if(!this.sinScroll)RemEvent(window, 'scroll', center);
		RemEvent(window, 'resize', center);
		RemEvent(document, 'keypress', this.escape);
		
		clearTimeout(animBgInt);
		animBgFrame = 0;
		animBgMode = 'out';
		animBgInt = setTimeout(animBg, animBgRetardo);
	}.closure(this);
	
	this.addField = function(campo, nombre, expresion, clear,opcional){
		var o = {'c':campo, 'n':nombre};
		//
		aCampos.push(o);
		if(expresion){
			campo.expresion = expresion;
			campo.inputError = inputError;
			campo.opcional = opcional;
			campo.onblur = funcVal.closure(campo);
			//
			aValidar.push(aCampos.length - 1);
		}
		if(clear){ aLimpiar.push(aCampos.length - 1); }
	}
	this.setBackground = function(oEle){ fondo = oEle; }
	
	var clean = function(){
		var i = null;
		//
		for(i=0;i<aLimpiar.length;i++){ aCampos[aLimpiar[i]]['c'].value = ''; }
		for(i=0;i<aCampos.length;i++){ inputError(aCampos[i]['c'], false); }
		errores = 0;
		showError();
	}
	
	this.send = function(event){
		var v = '', i = null;
		if(!!event){ StopEvent(event); }
		//
		if(enviando){ return false; }
		else if(validate()){ return false; }
		//
		block(true);
		//
		v += 'seccion' + SEP_IGUAL + seccion + SEP_AND;
		if(id)v += 'id' + SEP_IGUAL + id + SEP_AND;		
		for(i=0;i<aCampos.length;i++){ v += aCampos[i]['n'] + SEP_IGUAL + trim(aCampos[i]['c'].value) + SEP_AND; }
		if(this.moreInfo != '' && this.moreInfo){ v += this.moreInfo; }		
		//
		req.pedir(DIR_SERVER_ROOT + 'requests/' + archivo + '.php', v);
	}.closure(this);
	
	var inputError = function(c, b){
		errores += (b)? 1:0;
		c.parentNode.className = (b)? 'fieldsetError':'';
	}.closure(this);
	var showError = function(){
		error.style.display = (errores > 0)? 'block':'none';
	}
	
	var funcVal = function(){
		this.value = trim(this.value);
		if(this.value.search(this.expresion) == 0 || this.errorDesactivado || (this.value == '' && this.opcional)){ this.inputError(this, false); }
		else{ this.inputError(this, true); }
	}
	var validate = function(){
		var i = null;
		//
		errores = 0;
		for(i=0;i<aValidar.length;i++){ aCampos[aValidar[i]]['c'].onblur(); }
		showError();
		return (errores > 0);
	}
	
	var block = function(b){
		var i = null;
		//
		enviando = b;
		for(i=0;i<aCampos.length;i++){ aCampos[i]['c'].disabled = b; }
	}
	
	//Aminacion
	var animBgInt = 0;
	var animBgRetardo = 1;
	var animBgFrames = 5;
	var animBgFrame = 0;
	var animBgMode = '';
	
	var animIn = function(){
		center();
		if(!!fondo){
			setOpacity(0, fondo);
			fondo.style.display = 'block';
		}

		iZoomEleDelay = 1;
		if(!zoomEle){ zoomEle = new ZoomElement(); }

		zoomEle.zoomElement(elemento, capa, animInEnd, animOutEnd, false);
	}
	var animOut = function(){
		zoomEle.zoomElement(elemento, capa, animInEnd, animOutEnd, false, true);
		zoomEle.zoomElementOut();
	}
	var animInEnd = function(){
		center();
		//
		try{ aCampos[0]['c'].focus(); }catch(e){}
		if(!this.sinScroll)AddEvent(window, 'scroll', center);
		AddEvent(window, 'resize', center);
		AddEvent(document, 'keypress', this.escape);
		
		clearTimeout(animBgInt);
		animBgFrame = (!!fondo)? 0 : animBgFrames + 1;
		animBgMode = 'in';
		animBgInt = setTimeout(animBg, animBgRetardo);
		animBgInt = setTimeout(animBg, animBgRetardo);		
		if(this.funcionFinalExpand)this.funcionFinalExpand();
	}.closure(this);
	
	var animOutEnd = function(){
		hideFlashes(false);
		if(!!fondo){ fondo.style.display = 'none'; }
		if(!!this.onClose){ this.onClose(); }
	}.closure(this);
	var animBg = function(){
		if(animBgFrame == animBgFrames + 1){
			animando = false;
			if(animBgMode == 'in'){ ; }
			else{ animOut(); }
		}
		else{
			var i = (animBgMode == 'in')? (60 / animBgFrames) * animBgFrame : (60 / animBgFrames) * (animBgFrames - animBgFrame);
			if(!!fondo){ setOpacity(i, fondo); }
			animBgFrame++;
			animBgInt = setTimeout(animBg, animBgRetardo);
		}
	}.closure(this);
}

/******************************************/
var Exito = new function(){
	//
	this.show = function(msj){
		$('msjExito').innerHTML = msj;
		
		var l = $('capaExito');
		l.style.top = (((HScreen() - l.offsetHeight) / 2) + YPos()) + 'px';
		l.style.left = (((WScreen() - l.offsetWidth) / 2) + XPos()) + 'px';
		l.style.visibility = 'visible';
		
		try{ $('aceptarExito').focus(); }catch(e){ ; }
		AddEvent(document, 'keypress', escape);

		AddEvent($('aceptarExito'), 'click', accept);
		AddEvent($('cerrarExito'), 'click', accept);
	}
	
	this.hide = function(){
		RemEvent(document, 'keypress', escape);
		RemEvent($('aceptarExito'), 'click', accept);
		RemEvent($('cerrarExito'), 'click', accept);
		var l = $('capaExito');
		l.style.visibility = 'hidden';
		l.style.top = '-1000px';
	}
	
	this.onAccept = null;
	
	var accept = function(e){
		if(!!e){ StopEvent(e); }
		this.hide();
		if(!!this.onAccept){ this.onAccept(); }
	}.closure(this);
	
	var escape = function(event){
		if(event.keyCode == 27){ accept(); }
	}.closure(this);
	
	//
}

/******************************************/
var LayError = new function(){
	//
	this.show = function(msj){
		$('msjError').innerHTML = msj;
		
		var l = $('capaError');
		l.style.top = (((HScreen() - l.offsetHeight) / 2) + YPos()) + 'px';
		l.style.left = (((WScreen() - l.offsetWidth) / 2) + XPos()) + 'px';
		l.style.visibility = 'visible';
		
		try{ $('aceptarError').focus(); }catch(e){ ; }
		AddEvent(document, 'keypress', escape);
		AddEvent($('aceptarError'), 'click', accept);
		AddEvent($('cerrarError'), 'click', accept);
	}
	
	this.hide = function(){
		RemEvent(document, 'keypress', escape);
		RemEvent($('aceptarError'), 'click', accept);
		RemEvent($('cerrarError'), 'click', accept);
		var l = $('capaError');
		l.style.visibility = 'hidden';
		l.style.top = '-1000px';
	}
	
	this.onAccept = null;
	
	var accept = function(e){
		if(!!e){ StopEvent(e); }
		this.hide();
		if(!!this.onAccept){ this.onAccept(); }
	}.closure(this);
	var escape = function(event){
		if(event.keyCode == 27){ accept(); }
	}.closure(this);
	
	//
}

/******************************************/
var Blocker = new function(){
	//H
	this.hide = function(){
		if(blocker)blocker.style.display = 'none';
	}
	
	//I
	this.init = function(){
		blocker = $('blockeadorGeneral');
		setOpacity(70,blocker);
	}
	
	//S
	this.show = function(){
		if(!iniciado)this.init();
		blocker.style.height = HBody()+'px';		
		blocker.style.width = WScreen()+'px';
		blocker.style.display = 'block';
	}
	
	var blocker = null;
	var iniciado = false;
}

/******************************************/
function ZoomElement(){
	//Config
	var iZoomEleDelay = 4;//mlsgs
	var iZoomEleFrames = 10;//px
	var fZoomEleMove = strongEaseInOut;//function
	
	//
	var iZoomEleW = 0;
	var iZoomEleH = 0;
	var iZoomEleY = 0;
	var iZoomEleX = 0;
	var bZoomEleOn = false;
	var bZoomEleAnim = false;
	var eZoomEleFrom = null;
	var eZoomEleTo = null;
	var fZoomEleInEnd = null;
	var fZoomEleOutEnd = null;
	var fZoomEleAnim = null;
	
	var iIniW, iChangeW, iIniH, iChangeH, iIniX, iChangeX, iIniY, iChangeY, iCurFrame, sMode;

	var zoomElementInit = function(){
		if(!window.innerWidth){//IE
			iZoomEleW = document.documentElement.clientWidth;
			iZoomEleH = document.documentElement.clientHeight;
			iZoomEleY = document.documentElement.scrollTop;
			iZoomEleX = document.documentElement.scrollLeft;
		}
		else{
			iZoomEleW = window.innerWidth;
			iZoomEleH = window.innerHeight;
			iZoomEleY = window.pageYOffset;
			iZoomEleX = window.pageXOffset;
		}
	}
	
	this.zoomElement = function(eFrom, eTo, fOnInEnd, fOnOutEnd, fOnAmin, bNoStart){
		eZoomEleFrom = eFrom;
		eZoomEleTo = eTo;
		fZoomEleInEnd = fOnInEnd;
		fZoomEleOutEnd = fOnOutEnd;
		fZoomEleAnim = fOnAmin;
		zoomElementInit();
		if(!bNoStart){ zoomElementIn(); }
	}
	
	var zoomElementIn = function(){
		iIniW = eZoomEleFrom.offsetWidth;
		iIniH = eZoomEleFrom.offsetHeight;
		
		var iEndW = eZoomEleTo.offsetWidth;
		var iEndH = eZoomEleTo.offsetHeight;
		
		var oPos = getElementPos(eZoomEleFrom);
		iIniX = oPos.x;
		iIniY = oPos.y;
		
		if(bZoomEleAnim != true){
			eZoomEleTo.style.overflow = 'hidden';
			eZoomEleTo.style.height = iIniH + 'px';
			eZoomEleTo.style.width = iIniW + 'px';
			eZoomEleTo.style.top = iIniY + 'px';
			eZoomEleTo.style.left = iIniX + 'px';
			
			setOpacity(0, eZoomEleTo);
			eZoomEleTo.style.visibility = 'visible';
			
			iChangeX = (((iZoomEleW / 2) - (iEndW / 2) - iIniX) + iZoomEleX);
			iChangeY = (((iZoomEleH / 2) - (iEndH / 2) - iIniY) + iZoomEleY);
			iChangeW = (iEndW - iIniW);
			iChangeH = (iEndH - iIniH);
			iCurFrame = 0;
			sMode = 'in';
			
			setTimeout(zoomElementAnim, iZoomEleDelay);
			bZoomEleAnim = true;
			oPos = null;
		}
	}
	
	this.zoomElementOut = function(){
		if(bZoomEleAnim != true){
			eZoomEleTo.style.overflow = 'hidden';
			
			iIniW = eZoomEleTo.offsetWidth;
			eZoomEleTo.__width = iIniW;
			iIniH = eZoomEleTo.offsetHeight;
			var iEndW = eZoomEleFrom.offsetWidth;
			var iEndH = eZoomEleFrom.offsetHeight;
			
			iIniX = parseInt(eZoomEleTo.style.left);
			iIniY = parseInt(eZoomEleTo.style.top);
			
			var oPos = getElementPos(eZoomEleFrom);
			iChangeX = oPos.x - iIniX;
			iChangeY = oPos.y - iIniY;
			iChangeW = eZoomEleFrom.offsetWidth - iIniW;
			iChangeH = eZoomEleFrom.offsetHeight - iIniH;
			iCurFrame = 0;
			sMode = 'out';
			

			setTimeout(zoomElementAnim, iZoomEleDelay);
			bZoomEleAnim = true;
		}
	}
	
	var zoomElementAnim = function(){
		if(iCurFrame == (iZoomEleFrames + 1)){
			bZoomEleAnim = false;
			if(sMode == 'in'){ zoomElementInEnd(); }
			else{ zoomElementOutEnd(); }
		}
		else{
			var w = fZoomEleMove(iCurFrame, iIniW, iChangeW, iZoomEleFrames);
			var h = fZoomEleMove(iCurFrame, iIniH, iChangeH, iZoomEleFrames);
			var x = fZoomEleMove(iCurFrame, iIniX, iChangeX, iZoomEleFrames);
			var y = fZoomEleMove(iCurFrame, iIniY, iChangeY, iZoomEleFrames);
			var i = (sMode == 'in')? (100 / iZoomEleFrames) * iCurFrame : (100 / iZoomEleFrames) * (iZoomEleFrames - iCurFrame);
			
			eZoomEleTo.style.left = x + 'px';
			eZoomEleTo.style.top = y + 'px';
			eZoomEleTo.style.width = w + 'px';
			eZoomEleTo.style.height = h + 'px';
			
			setOpacity(i, eZoomEleTo);
			
			iCurFrame++;
			
			setTimeout(zoomElementAnim, iZoomEleDelay);
		}
		
		if(fZoomEleAnim){ fZoomEleAnim(iCurFrame, sMode); }
	}.closure(this);
	
	var zoomElementInEnd = function(){
		bZoomEleOn = true;
		eZoomEleTo.style.height = 'auto';

		if(fZoomEleInEnd){ 
			fZoomEleInEnd(); 
		}
	}
	
	var zoomElementOutEnd = function(){
		bZoomEleOn = false;
		eZoomEleTo.style.visibility = 'hidden';
		eZoomEleTo.style.top = '-1000px';
		eZoomEleTo.style.left = '0';
		eZoomEleTo.style.overflow = 'auto';
		eZoomEleTo.style.height = 'auto';
		eZoomEleTo.style.width = eZoomEleTo.__width + 'px';
		if(fZoomEleOutEnd){ fZoomEleOutEnd(); }
	}
	
}

/******************************************/
	var iZoomMinMarging = 30;//px
	var iZoomDelay = 4;//mlsgs


	/*if(Nav.esIE){
		var iZoomFrames = 1;//px
	}
	else{

	}*/
	var iZoomFrames = 1;//px	
	
	
	//
	var iZoomImgW = 0;
	var iZoomImgH = 0;
	var iZoomImgY = 0;
	var iZoomImgX = 0;
	var bZoomImgOn = false;
	var bZoomImgAnim = false;
	var aZoomImgInfo = new Object();
	var eZoomImage = null;
	var oZoomImgLoad = null;
	var eZoomImgLoader = null;
	var eZoomImgLayer = null;
	var eZoomImgImage = null;
	var eZoomImgClose = null;
	var eZoomImgBack = null;
	var eZoomImgFord = null;
	var eZoomFromGalery = false;
	var eZoomFromIdGalery = false;	
	var eZoomFromBtnGalery = false;
	var eZoomHasFord = false;
	var eZoomHasBack = false;
	var eZoomHasDown = false;	
	var eZoomImgBlock = null;
	var eZoomImgClosePos = 'right';
	var eZoomImgGalerys = new Array();//SE UTILIZA PARA GUARDAR LAS GALERIAS YA CARGADAS ASI NO SE VUELVEN A CARGAR.
	var eZoomImgFileGalery = DIR_SERVER_ROOT + 'requests/loadGalery.php';
	var eZoomImgReq = null;
	var eZoomImgPrincipal = false;
	var eZoomImgDesdePartir = false;
	var eZoomImgAnt = null;
	var eZoomShowDown = false;
	var eZoomCargando = false;
	var eZoomTemp = null;
	var eZoomImgDown = null;
	var eZoomReqTemp = null;
	var eZoomSeccionTemp = null;
	var eZoomIdSeccion = null;
	function zoomInit(){
		iZoomImgW = WBody();
		iZoomImgH = HScreen();
		iZoomImgY = YPos();
		iZoomImgX = XPos();
		
		eZoomImgLoader = document.getElementById('zoomLayLoader');
		eZoomImgLayer = document.getElementById('zoomLayPrev');
		eZoomImgImage = document.getElementById('zoomImagePrev');
		eZoomImgImage.onclick = zoomImageOut;
		eZoomImgEpi = document.getElementById('zoomImageEpi');
		eZoomImgEpi.firstChild.innerHTML = '';
		eZoomImgEpi.style.display = 'none';
		eZoomImgClose = document.getElementById('zoomImageClose');
		eZoomImgClose.onclick = zoomImageOut;
		eZoomImgClose.style.visibility = 'hidden';
		eZoomImgBack = document.getElementById('zoomImageBack');
		eZoomImgBack.onclick = zoomImagePrev;
		eZoomImgBack.style.visibility = 'hidden';
		eZoomImgDown = document.getElementById('zoomImageDown');
		eZoomImgDown.onclick = zoomImageDown;
		eZoomImgDown.style.visibility = 'hidden';
		
		
		eZoomImgFord = document.getElementById('zoomImageFord');
		eZoomImgFord.onclick = zoomImageNext;
		eZoomImgFord.style.visibility = 'hidden';
		eZoomImgBlock = document.getElementById('zoomLayBlock');
		eZoomImgBlock = document.getElementById('zoomLayBlock');		
		eZoomImgMinis = document.getElementById('zoomImageMinis');

		if(!eZoomImgReq && eZoomFromIdGalery > 0){
			eZoomImgReq = new Request(zoomImageListener);
		}
		
		if(!eZoomFromBtnGalery){
			eZoomImgBlock.style.display = 'none';
			eZoomFromBtnGalery = false;
		}
		setOpacity(70, eZoomImgBlock);
		
	}
	
	function zoomImage(event, image, galery,idGalery,principal,mostrarDown,idSeccion){
		eZoomIdSeccion = idSeccion;
		
		if(document.getElementById('zoomLayLoader')){
		
			eZoomShowDown = mostrarDown;
			var IdGaleryAnt = eZoomFromIdGalery;
			eZoomFromIdGalery = (!idGalery)? 0:idGalery;				
			zoomInit();
			if(eZoomFromIdGalery > 0){
				if(eZoomImgGalerys[eZoomFromIdGalery]){
					if(IdGaleryAnt != eZoomFromIdGalery){
						$('miniZoomImage').innerHTML = eZoomImgGalerys[eZoomFromIdGalery]['html'];
						zoomRedimContMini();
					}
				}
				else{

					var anexReq = '';	

					if(eZoomIdSeccion){
						anexReq = 'idSeccion' + SEP_IGUAL + eZoomIdSeccion + SEP_AND;
						eZoomIdSeccion = null;

					}

					eZoomImgReq.pedir(eZoomImgFileGalery,'idGalery' + SEP_IGUAL + eZoomFromIdGalery + SEP_AND + anexReq);
				}
			}
			eZoomImgPrincipal = principal;
			if(principal){
				eZoomImgDesdePartir = image;
			}
			eZoomImage = image;
			eZoomFromGalery = (!galery)? false:true;
			zoomShowLoader(true);
			zoomImageLoad();
		}
		else{
			if(!eZoomCargando){
				eZoomCargando = true;
				eZoomTemp = {'image' : image,'galery' : galery,'idGalery' : idGalery,'principal' : principal,'mostrarDown' : mostrarDown};
				eZoomReqTemp = new Request(zoomReqLoad);
				eZoomReqTemp.pedir(DIR_SERVER_ROOT + 'requests/cargar.php','file' + SEP_IGUAL +'includes/zoomImage.php' + SEP_AND);

			}
		}
		if(event)StopEvent(event);		
	}
	
	function zoomReqLoad(){
		var d = eZoomReqTemp.respuestaXML;
		if(d){
			cargarHTMLRequest(d.firstChild.data);					
			zoomImage(null,eZoomTemp['image'],eZoomTemp['galery'],eZoomTemp['idGalery'],eZoomTemp['principal'],eZoomTemp['mostrarDown'],eZoomIdSeccion);
		}
		
	}
	
	function zoomImageLoad(){
		oZoomImgLoad = new Image();
		oZoomImgLoad.loaded = false;
		oZoomImgLoad.onload = function(){ zoomImageLoaded(); }
		oZoomImgLoad.src = eZoomImage.src.substr(0, eZoomImage.src.lastIndexOf('.') - 1) + eZoomImage.src.substr(eZoomImage.src.lastIndexOf('.'), eZoomImage.src.length);
	}
	
	function zoomImageLoaded(){
		oZoomImgLoad.loaded = true;

		if(eZoomFromIdGalery == 0 || (eZoomImgGalerys[eZoomFromIdGalery])){
			

			
			if($('miniZoomImage').innerHTML != ''){
				var srcTemp = eZoomImage.src.substr(0, eZoomImage.src.lastIndexOf('.') - 1) + 'm' + eZoomImage.src.substr(eZoomImage.src.lastIndexOf('.'), eZoomImage.src.length);
				var i;
				for(i=0;i<$('miniZoomImage').childNodes.length;i++){
					if($('miniZoomImage').childNodes[i].tagName && $('miniZoomImage').childNodes[i].tagName.toLowerCase() == 'a'){
						if($('miniZoomImage').childNodes[i].firstChild.src == srcTemp){
							eZoomImage = $('miniZoomImage').childNodes[i].firstChild;
						}
					}
				}
				
			}

			
			//if(eZoomImgPrincipal)eZoomImage = $('principal' + eZoomFromIdGalery);
			
			zoomShowLoader(false);
			zoomImageIn();
		}
	}
	function zoomImageListener(){
		if(eZoomImgReq.respuestaXML){
			$('miniZoomImage').innerHTML = eZoomImgReq.respuestaXML.firstChild.data;
			eZoomImgGalerys[eZoomFromIdGalery] = new Array();
			eZoomImgGalerys[eZoomFromIdGalery]['html'] = eZoomImgReq.respuestaXML.firstChild.data;
			eZoomImgGalerys[eZoomFromIdGalery]['cantidad'] = eZoomImgReq.respuestaXML.childNodes[1].getAttribute('cantidad');
			eZoomImgGalerys[eZoomFromIdGalery]['widthImg'] = eZoomImgReq.respuestaXML.childNodes[1].getAttribute('widthImg');
			zoomRedimContMini();
			
		}
		else alert(eZoomImgReq.respuestaHTML);
		
		if(oZoomImgLoad.loaded){
			
			/*if(eZoomImgPrincipal)eZoomImage = $('principal' + eZoomFromIdGalery);*/
			if($('miniZoomImage').innerHTML != ''){
				var srcTemp = eZoomImage.src.substr(0, eZoomImage.src.lastIndexOf('.') - 1) + 'm' + eZoomImage.src.substr(eZoomImage.src.lastIndexOf('.'), eZoomImage.src.length);
				var i;
				for(i=0;i<$('miniZoomImage').childNodes.length;i++){
					if($('miniZoomImage').childNodes[i].tagName && $('miniZoomImage').childNodes[i].tagName.toLowerCase() == 'a'){
						if($('miniZoomImage').childNodes[i].firstChild.src == srcTemp){
							eZoomImage = $('miniZoomImage').childNodes[i].firstChild;
						}
					}
				}
				
			}
			
			
			zoomShowLoader(false);
			zoomImageIn();
		}
		
	}
	function zoomRedimContMini(){
		$('miniZoomImage').style.width = (eZoomImgGalerys[eZoomFromIdGalery]['cantidad']*eZoomImgGalerys[eZoomFromIdGalery]['widthImg'])+'px';
		var longitudContMini = Math.round((80*iZoomImgW/100));
	
		
		
		if(longitudContMini < $('miniZoomImage').offsetWidth){
			
			var diferencia = Math.round(longitudContMini/eZoomImgGalerys[eZoomFromIdGalery]['widthImg']);
			longitudContMini = Math.round(diferencia*eZoomImgGalerys[eZoomFromIdGalery]['widthImg']);
			
			
			$('zoomContAntSig').style.width = (longitudContMini + $('anteriorMini').offsetWidth + $('siguienteMini').offsetWidth + 20)+'px';
			$('zoomContAntSig').style.marginLeft = (Math.round(iZoomImgW-$('zoomContAntSig').offsetWidth)/2)+'px';			
			$('zoomContAntSig').style.top = (HScreen()-eZoomImgMinis.offsetHeight-10)+YPos()+'px';		
			$('zoomContAntSig').style.visibility = 'visible';		
		}
		else{
			$('zoomContAntSig').style.visibility = 'hidden';
			$('zoomContAntSig').style.top = '-5000px';					
		}
		eZoomImgMinis.style.width = longitudContMini+'px';
		eZoomImgMinis.style.marginLeft = (Math.round(iZoomImgW-eZoomImgMinis.offsetWidth)/2)+'px';
		
		
		scrollWidth = eZoomImgMinis.offsetWidth+4;
		

	}
	
	function zoomShowLoader(bShow){
		if(bShow){
			eZoomImgLoader.style.top = Math.ceil(((iZoomImgH - eZoomImgLoader.offsetHeight) / 2) + iZoomImgY) + 'px';
			eZoomImgLoader.style.left = Math.ceil(((iZoomImgW - eZoomImgLoader.offsetWidth) / 2) + iZoomImgX) + 'px';
			eZoomImgLoader.style.visibility = 'visible';
		}
		else{
			eZoomImgLoader.style.top = '-' + (eZoomImgLoader.offsetHeight + 20) + 'px';
			eZoomImgLoader.style.visibility = 'hidden';
		}
	}
	
	function zoomImageIn(){
		if(eZoomImgDesdePartir){
			var iIniW = eZoomImgDesdePartir.width;
			var iIniH = eZoomImgDesdePartir.height;
		}
		else{
			var iIniW = eZoomImage.width;
			var iIniH = eZoomImage.height;
		}
		var iEndW = oZoomImgLoad.width;
		var iEndH = oZoomImgLoad.height;

		var DIFERENCIA = 0;
		if($('miniZoomImage').innerHTML != '' && eZoomFromIdGalery > 0){
			DIFERENCIA = $('miniZoomImage').offsetHeight + 4;
		}
		var iPorc = iEndW / iEndH;
		
		var oPos;
		if(eZoomImgDesdePartir){
			oPos = getElementPos(eZoomImgDesdePartir);			
		}
		else{
			oPos = getElementPos(eZoomImage);
		}

	
		var iIniX = oPos.x;
		var iIniY = oPos.y;
		
		if(bZoomImgAnim != true){
				aZoomImgInfo['iIniW'] = iIniW;
				aZoomImgInfo['iIniH'] = iIniH;
				aZoomImgInfo['iIniX'] = iIniX;
				aZoomImgInfo['iIniY'] = iIniY;
				
				eZoomImgImage.style.height = iIniH + 'px';
				eZoomImgImage.style.width = iIniW + 'px';
				eZoomImgImage.src = oZoomImgLoad.src;
				eZoomImgImage.title = eZoomImage.title;
				
				eZoomImgLayer.style.top = iIniY + 'px';
				eZoomImgLayer.style.left = iIniX + 'px';
				
				setOpacity(0, eZoomImgLayer);
				eZoomImgLayer.style.visibility = 'visible';
				
				var iDif = 0;

				if(trim(eZoomImage.alt) != ''){
					eZoomImgEpi.firstChild.innerHTML = eZoomImage.alt;
					eZoomImgEpi.style.width = iIniW + 'px';
					eZoomImgEpi.style.display = 'block';
					
					iDif = eZoomImgEpi.offsetHeight;
				}
				
				if(iEndW > iZoomImgW - iZoomMinMarging){
					iEndW = iZoomImgW - iZoomMinMarging;
					iEndH = iEndW / iPorc;
				}
				if(iEndH > (iZoomImgH-DIFERENCIA) - iZoomMinMarging - iDif){
					iEndH = (iZoomImgH-DIFERENCIA) - iZoomMinMarging - iDif;
					iEndW = (iEndH - iDif) * iPorc;
				}
				
				var iChangeX = (((iZoomImgW / 2) - (iEndW / 2) - iIniX) + iZoomImgX);
				var iChangeY = ((((iZoomImgH-DIFERENCIA) / 2) - (iEndH / 2) - iIniY) + iZoomImgY - (iDif / 2));
				var iChangeW = (iEndW - iIniW);
				var iChangeH = (iEndH - iIniH);
				var sOpacity = "(100 / iZoomFrames) * iCurFrame";
				
				setTimeout('zoomImageAnim('+iIniW+', '+iChangeW+', '+iIniH+', '+iChangeH+', '+iIniX+', '+iChangeX+', '+iIniY+', '+iChangeY+', 0, "in")', iZoomDelay);
				bZoomImgAnim = true;
				oPos = null;
			
		}
	}
	
	function zoomImageOut(){
		if(bZoomImgAnim != true){
			
			eZoomImgMinis.style.visibility = 'hidden';
			eZoomImgMinis.style.top = '-100px';
			
			$('zoomContAntSig').style.visibility = 'hidden';
			$('zoomContAntSig').style.top = '-100px';					
			
			
			RemEvent(document, 'keypress', zoomImageKeypress);
			
			eZoomImgBlock.style.display = 'none';
			eZoomImgClose.style.visibility = eZoomImgBack.style.visibility = eZoomImgDown.style.visibility =
			eZoomImgFord.style.visibility = 'hidden';
			
			var iIniW = parseInt(eZoomImgImage.style.width);
			var iIniH = parseInt(eZoomImgImage.style.height);
			var iEndW = eZoomImage.width;
			var iEndH = eZoomImage.height;
			
			var iIniX = parseInt(eZoomImgLayer.style.left);
			var iIniY = parseInt(eZoomImgLayer.style.top);
			
			var iChangeX = aZoomImgInfo['iIniX'] - iIniX;
			var iChangeY = aZoomImgInfo['iIniY'] - iIniY;
			var iChangeW = aZoomImgInfo['iIniW'] - iIniW;
			var iChangeH = aZoomImgInfo['iIniH'] - iIniH;
			
			setTimeout('zoomImageAnim('+iIniW+', '+iChangeW+', '+iIniH+', '+iChangeH+', '+iIniX+', '+iChangeX+', '+iIniY+', '+iChangeY+', 0, "out")', iZoomDelay);
			bZoomImgAnim = true;
		}
	}
	
	function zoomImageAnim(iIniW, iChangeW, iIniH, iChangeH, iIniX, iChangeX, iIniY, iChangeY, iCurFrame, sMode){
		if(iCurFrame == (iZoomFrames + 1)){
			bZoomImgAnim = false;
			if(sMode == 'in'){ zoomImageInEnd(); }
			else{ zoomImageOutEnd(); }
		}
		else{
			var w = strongEaseInOut(iCurFrame, iIniW, iChangeW, iZoomFrames);
			var h = strongEaseInOut(iCurFrame, iIniH, iChangeH, iZoomFrames);
			var x = strongEaseInOut(iCurFrame, iIniX, iChangeX, iZoomFrames);
			var y = strongEaseInOut(iCurFrame, iIniY, iChangeY, iZoomFrames);
			var i = (sMode == 'in')? (100 / iZoomFrames) * iCurFrame : (100 / iZoomFrames) * (iZoomFrames - iCurFrame);
			
			eZoomImgLayer.style.left = x + 'px';
			eZoomImgLayer.style.top = y + 'px';
			eZoomImgImage.style.width = w + 'px';
			eZoomImgImage.style.height = h + 'px';
			
			if(eZoomImgEpi.style.display == 'block'){
				eZoomImgEpi.style.width = w + 'px';
			}
			
			setOpacity(i, eZoomImgLayer);
			
			iCurFrame++;
			
			setTimeout('zoomImageAnim('+iIniW+', '+iChangeW+', '+iIniH+', '+iChangeH+', '+iIniX+', '+iChangeX+', '+iIniY+', '+iChangeY+', '+iCurFrame+', "'+sMode+'")', iZoomDelay);
		}
	}
	
	function zoomImageInEnd(){
		bZoomImgOn = true;
		eZoomImgClose.style.top = (parseInt(eZoomImgLayer.style.top) - (eZoomImgClose.offsetHeight / 2)) + 'px';
		if(eZoomImgClosePos == 'left'){ eZoomImgClose.style.left = (parseInt(eZoomImgLayer.style.left) -  (eZoomImgClose.offsetWidth / 2)) + 'px'; }
		else{ eZoomImgClose.style.left = (parseInt(eZoomImgLayer.style.left) + parseInt(eZoomImgImage.style.width) -  (eZoomImgClose.offsetWidth / 2)) + 'px'; }
		eZoomImgClose.style.visibility = 'visible';
		if(eZoomFromGalery && !!eZoomImage.parentNode && !!eZoomImage.parentNode.nextSibling && !!eZoomImage.parentNode.nextSibling.nextSibling){
			eZoomHasFord = true;
			eZoomImgFord.style.top = (((iZoomImgH - eZoomImgFord.offsetHeight) / 2) + iZoomImgY) + 'px';
			eZoomImgFord.style.visibility = 'visible';
		}
		else{ eZoomHasFord = false; }
		
		if(eZoomFromGalery && !!eZoomImage.parentNode && !!eZoomImage.parentNode.previousSibling && !!eZoomImage.parentNode.previousSibling.previousSibling){
			eZoomHasBack = true;
			eZoomImgBack.style.top = (((iZoomImgH - eZoomImgBack.offsetHeight) / 2) + iZoomImgY) + 'px';
			eZoomImgBack.style.visibility = 'visible';
		}
		else{ eZoomHasBack = false; }

		if(eZoomShowDown){
			eZoomImgDown.style.top = (((iZoomImgH - eZoomImgDown.offsetHeight) / 2) + iZoomImgY + eZoomImgBack.offsetHeight) + 'px';
			eZoomImgDown.style.visibility = 'visible';
		}


		
		if(eZoomFromIdGalery > 0)zoomImagePosicionarMinis();
		
		var n = (HBody() > iZoomImgH)? HBody():iZoomImgH;
		eZoomImgBlock.style.height = n + 'px';
		eZoomImgBlock.style.width = WBody() + 'px';
		eZoomImgBlock.style.display = 'block';
		
		AddEvent(document, 'keypress', zoomImageKeypress);
	}
	
	function zoomImagePosicionarMinis(){
		eZoomImgMinis.style.top = (HScreen()-eZoomImgMinis.offsetHeight-10)+YPos()+'px';
		eZoomImgMinis.style.visibility = 'visible';
		
		
		if(eZoomImgAnt)eZoomImgAnt.className = '';
		eZoomImage.className = 'zoomImageMinisOn';
		eZoomImgAnt = eZoomImage;
		zoomImageOpacityMinis(50);
	}
	function zoomImageOpacityMinis(opa){
		setOpacity(opa, eZoomImgMinis);	
	}
	
	function zoomImageOutEnd(){
		bZoomImgOn = false;
		eZoomImgLayer.style.visibility = 'hidden';
		eZoomImgLayer.style.top = '-1000px';
		eZoomImgLayer.style.left = '0';
		if(eZoomImgAnt)eZoomImgAnt.className = '';		
	}
	
	function zoomImageNext(){
		if(eZoomHasFord){
			eZoomFromBtnGalery = true;
			FireEvent(eZoomImage.parentNode.nextSibling.nextSibling.firstChild, 'click');
		}
	}
	
	function zoomImagePrev(){
		if(eZoomHasBack){
			eZoomFromBtnGalery = true;
			FireEvent(eZoomImage.parentNode.previousSibling.previousSibling.firstChild, 'click');
		}
	}
	function zoomImageDown(){
		var img = eZoomImage.src.substr(0, eZoomImage.src.lastIndexOf('.') - 1) + HR + eZoomImage.src.substr(eZoomImage.src.lastIndexOf('.'), eZoomImage.src.length);	
		if(Nav.esIE6)document.location = DIR_SERVER_ROOT+'requests/descargaFoto.php'+'?foto='+img;
		else $('galeriaFrame').src = DIR_SERVER_ROOT+'requests/descargaFoto.php?foto='+img;
	}	
	
	function zoomImageKeypress(e){
		if(bZoomImgAnim != true){
			if(e.keyCode == 27){ zoomImageOut(); }
			else if(e.keyCode == 39){ zoomImageNext(); }
			else if(e.keyCode == 37){ zoomImagePrev(); }
		}
	}

	var scrollHeight = 473;
	var scrollWidth = 250;
	var frames = 15;
	var delay = 4;
	var scrollDownTimes = 0;
	var scrollRightTimes = 0;
	var scrollElement = null;



	function zoomImageScrollRight(){
		var o = $('miniZoomImage');
		var e = $('siguienteMini');
		var i = 0, t = 0;
		
		if(!!scrollElement || e.className == 'siguienteOff'){ return false; }
		o = o.childNodes;
		for(i; i < o.length; i++){

			if(!!o[i].tagName){

				if(t == scrollRightTimes){
					scrollElement = o[i];
					var to = scrollWidth;
					setTimeout('zoomImageScrollLeftRightAnim(0, -'+to+', 0)', delay);
					scrollRightTimes++;
					break;
				}
				else{ t++; }
			}
		}
	}
	function zoomImageScrollLeft(){
		var o = $('miniZoomImage');
		var i = 0, t = 0;
		if(!!scrollElement || scrollRightTimes == 0){ return false; }
		o = o.childNodes;
		
		for(i; i < o.length; i++){
			if(!!o[i].tagName){

				if(t == (scrollRightTimes - 1)){
					scrollElement = o[i];
					var dif = parseInt(o[i].style.marginLeft);
					setTimeout('zoomImageScrollLeftRightAnim('+dif+', '+(-dif)+', 0)', delay);
					scrollRightTimes--;
					break;
				}
				else{ t++; }
			}
		}
	}
	function zoomImageScrollLeftRightAnim(from, inc, current){
		if(current != (frames + 1)){
			var t = strongEaseInOut(current, from, inc, frames);
			scrollElement.style.marginLeft = t + 'px';
			current++;
			setTimeout('zoomImageScrollLeftRightAnim('+from+', '+inc+', '+current+')', delay);
		}
		else{
			
			scrollElement = null;
			zoomImageScrollLeftRightControl();
		}
	}
	function zoomImageScrollLeftRightControl(){
		var o = $('zoomImageMinis').childNodes;
		var e = $('siguienteMini');
		var i = 0, t = 0, b = true;
		
		for(i; i < o.length; i++){
			if(!!o[i].tagName){
				if(t == (scrollRightTimes)){

					b = false;
					break;
				}
				else{
					if(t == scrollRightTimes){
						FireEvent(o[i].firstChild, 'click');
					}
					t++;
				}
			}
		}
				
		e.className = 'siguiente' + ((b)? 'Off':'');
		e = $('anteriorMini');
		e.className = 'anterior' + ((scrollRightTimes > 0)? '':'Off');
	}

/******************************************/
Cookie = function(){ this.init(); }
var p = Cookie.prototype;
p.path = DIR_SERVER_ROOT;
p.init = function(){ }
p.set = function(n, v){
	var d = new Date();
	d.setMonth(d.getMonth() + 1);
	//d.setSeconds(d.getSeconds() + 3);
	var t = d.toGMTString();
	document.cookie = n + '=' + escape(v) + '; expires=' + t + '; path=' + this.path + ';';
}
p.unset = function(n){
	document.cookie = n + '=; expires=Fri, 21 Dec 1976 04:31:24 GMT; path=' + this.path + ';';
}
p.get = function(n){
	var iIni = 0, iEnd = 0, ret = '';
	if (document.cookie.length > 0){
		var iIni = document.cookie.indexOf(n + '=');
		if (iIni != -1){ 
			iIni = iIni + n.length + 1; 
			iEnd = document.cookie.indexOf(";", iIni);
			if(iEnd == -1) iEnd = document.cookie.length;
			ret = unescape(document.cookie.substring(iIni, iEnd));
		}
	}
	return ret;
}
var oCookie = new Cookie();

/******************************************/
function form(nombre, archivo){
	
	var error = $('error' + nombre);
	var loader = $('loader' + nombre);
	
	var enviando = false;
	var errores = 0;
	var aCampos = new Array();
	var aValidar = new Array();
	var aLimpiar = new Array();
	var req = new Request();
	var elemento = false;
	this.moreInfo = '';
	//
	this.onSuccess = null;
	this.onError = null;
	this.onSend = null;
	
	//
	req.listener = function(){

		var d = req.respuestaXML;
		block(false);
		if(!!loader){ loader.style.display = 'none'; }
		if(!d){ alert(req.respuestaHTML); }
		else if(d.getAttribute('exito') == 'si'){
			

			if(!this.onSuccess){
				block(true);
				Exito.onAccept = onAccept;
				
				Exito.show(d.firstChild.data);
			}
			else{ this.onSuccess(d); }

		}
		else{
			if(!this.onError){
				block(true);
				LayError.onAccept = onAccept;
				LayError.show(d.firstChild.data);
			}
			else{ this.onError(d); }
		}

	}.closure(this);
	
	this.pedirExterno = function(archivo,valor){
		req.pedir(archivo,valor);	
	}
	
	this.onAccept = function(){
		onAccept();	
	}
	
	var onAccept = function(){
		clean();
		block(false);
	}.closure(this);
	
	this.addField = function(campo, nombre, expresion, clear){

		var o = {'c':campo, 'n':nombre};
		//
		aCampos.push(o);
		if(expresion){
			campo.expresion = expresion;
			campo.inputError = inputError;

			if(campo.tagName.toLowerCase() != 'select')campo.onblur = funcVal.closure(campo);
			else campo.onchange = funcVal.closure(campo);
			//
			aValidar.push(aCampos.length - 1);
		}
		
		if(clear){ aLimpiar.push(aCampos.length - 1); }
		return aCampos.length-1;
	}
	
	var clean = function(){
		var i = null;
		//
		for(i=0;i<aLimpiar.length;i++){ aCampos[aLimpiar[i]]['c'].value = ''; }
		for(i=0;i<aCampos.length;i++){ inputError(aCampos[i]['c'], false); }
		errores = 0;
		showError();
	}
	
	this.enter = function(event){
		if(event.keyCode == 13){ this.send(); }
	}.closure(this);
	
	this.send = function(event,sinBlock){
		var v = '', i = null;
		if(!!event){ StopEvent(event); }
		if(!!this.onSend){ this.onSend(); }
		//

		
	
		if(enviando){ return false; }
		else if(validate()){ return false; }
				//
		block(true);
		if(!!loader){ loader.style.display = 'block'; }
		//

		for(i=0;i<aCampos.length;i++){
			v += aCampos[i]['n'] + SEP_IGUAL + trim(aCampos[i]['c'].value) + SEP_AND;
		}
		if(this.moreInfo != ''){ v += this.moreInfo; }
			//
		req.pedir(DIR_SERVER_ROOT + 'requests/' + archivo + '.php', v);
		return true;
	}.closure(this);
	
	var inputError = function(c, b){
		errores += (b)? 1:0;
		c.parentNode.className = (b)? 'fieldsetError':'';
	}.closure(this);
	
	var showError = function(){
		error.style.display = (errores > 0)? 'block':'none';
	}
	
	var funcVal = function(){
		this.value = trim(this.value);
		if(this.value.search(this.expresion) == 0 && !this.errorDesactivado){ this.inputError(this, false); }
		else{ this.inputError(this, true); }
	}
	
	var validate = function(){
		var i = null, c;
		//

		errores = 0;
		for(i=0;i<aValidar.length;i++){
			c = aCampos[aValidar[i]]['c'];
			if(!c.disabled){ 
				if(c.tagName.toLowerCase() != 'select')c.onblur();
				else c.onchange();
				
			}
		}
		
		showError();
		return (errores > 0);
	}
	
	this.unblock = function(){
		var i = null;		
		enviando = false;
		for(i=0;i<aCampos.length;i++){ aCampos[i]['c'].disabled = false; }
		
	}
	
	var block = function(b){
		var i = null;
		//
		enviando = b;
		for(i=0;i<aCampos.length;i++){ aCampos[i]['c'].disabled = b; }
	}

}

//
var Loader = new function(){
	//H
	this.hide = function(){
		if(loader)loader.style.display = 'none';
	}
	
	//I
	this.init = function(){
		loader = $('LoaderGeneral');
	}
	
	//S
	this.show = function(){
		if(!iniciado)this.init();
		loader.style.top = Math.round((HScreen()-loader.offsetHeight)/2+YPos())+'px';		
		loader.style.width = Math.round((WScreen()-loader.offsetWidth/2))+'px';
		loader.style.visibility = 'visible';
	}
	
	var loader = null;
	var iniciado = false;
}

/******************************************/
var Orden = function(conf){
	var oConf = conf;
	var contenedor = $(oConf.contenedor);
	var input = $(oConf.input);
	var contOpc = $(oConf.contenedorOpciones);
	var lineaAnterior = null;
	
	var selectOrden = $(oConf.selectOrden);
	var onRequestLoad = function(){
		var d = req.respuestaXML;
		if(!d){
			alert(req.respuestaHTML);
			return false;
		}
		ocultarCargando();
		contenedor.innerHTML = d.firstChild.data;
	}
	var req = new Request(onRequestLoad);
	
	this.cambiarOrden = function(linea,e){
		mostrarCargando();
		if(lineaAnterior)lineaAnterior.className = '';
		lineaAnterior = linea;
		lineaAnterior.className = 'on';
		oCookie.unset('orderBy'+oConf['anexo']);
		oCookie.set('orderBy'+oConf['anexo'], linea.id);
		if(e)StopEvent(e);
		req.pedir(DIR_SERVER_ROOT+'requests/cargar.php?orderBy'+oConf['anexo']+'='+linea.id+'&'+oConf['get'],'file'+SEP_IGUAL+oConf['file']+SEP_AND);
		
	}
	var mostrarCargando = function(){

		block.style.width = contenedor.offsetWidth+'px';
		block.style.height = contenedor.offsetHeight+'px';
		block.style.marginTop = '-'+contenedor.offsetHeight+'px';
		if(!block.seteado){
			setOpacity(70,block);			
			block.seteado = true;
		}
		contenedor.appendChild(block);
		contenedor.appendChild(loader);

		loader.style.marginTop = Math.round((contenedor.offsetHeight-31)/2)-(contenedor.offsetHeight)+'px';
		loader.style.marginLeft = Math.round((contenedor.offsetWidth-150)/2)+'px';		
		loader.style.display = 'block';
		block.style.display = 'block'

	}
	var ocultarCargando = function(){
		block.style.display = 'none';
		loader.style.display = 'none';
		document.body.appendChild(block);
		document.body.appendChild(loader);
	}
	var valCook = oCookie.get('orderBy'+oConf['anexo']);
	var inp = $(valCook);
	if(inp){
		if(inp){
			input.value = inp.innerHTML;
		}
	}
	AddEvent(input,'click',function(){
		contOpc.style.display = 'block';
	});
	
	
	
	var block = document.createElement('div');
	block.className = 'blockOrden';
	var loader = document.createElement('div');
	loader.innerHTML = '<img src="'+DIR_ROOT_CSS_CENTRAL+'img/loader.gif">';
	loader.className = 'loaderOrden';
	var cook = oCookie.get('orderBy'+oConf['anexo']);
	if(cook){
		lineaAnterior = $(cook);	
	}
	else{
		lineaAnterior = $('nombreDesc');			
			
	}
	lineaAnterior.className = 'on';	
	//contenedor.insertBefore(block,contenedor.firstChild);
}

/******************************************/
var CufonMenuTop = false;
var oDropDownMenu = new function () {
		var menus = {};
		this.menuMarginTop = 0;
		this.menuMarginLeft = 0;
		
		this.show = function (el, menu, arrow, cls, grp, lvl, evt) {
			if (evt) { StopEvent(evt); }
			addDocEvent();
			this.hide(grp, lvl, false);
			
			el._prevClass = el.className;
			el.className += ' on';
			el.parentNode._on = true;
			
			menu.style.marginLeft = '-1000px'; //Fix para el ancho automatico
			menu.style.width = menu.scrollWidth + 'px';
			menu.style.marginLeft = '0px';
			
			if (lvl > 0) {
				opaque(grp, lvl - 1, true);
				
				arrow.style.display = 'block';
				arrow.style.marginTop = ((el.offsetHeight - arrow.offsetHeight) / 2) + 'px';
				arrow.style.marginLeft = (el.offsetWidth - (arrow.offsetWidth / 2)) + 'px';
				
				menu.style.marginTop = '-' + (el.offsetHeight) + 'px';
				menu.style.marginLeft = (el.offsetWidth + 5) + 'px';
				
				if (!!arrow._src) {
					arrow.src = arrow._src;
					try { delete arrow._src; } catch(e){ ; }
				}
				
				if (outOfScreen(menu, grp, lvl)) {
					arrow.style.marginLeft = '-' + (arrow.offsetWidth / 2) + 'px';
					arrow._src = arrow.src;
					arrow.src = arrow.src.substr(0, arrow.src.lastIndexOf('.')) + 'I' + arrow.src.substr(arrow.src.lastIndexOf('.'));
					
					menu.style.marginLeft = '-' + (menu.offsetWidth + 5) + 'px';
				}
			}
			else {
				if (outOfScreen(menu, grp, lvl)) {
					if (Nav.esIE7 || Nav.esIE6) { menu.style.marginLeft = '-' + (menu.offsetWidth + 5) + 'px'; }
					else { menu.style.marginLeft = '-' + (menu.offsetWidth - el.offsetWidth) + 'px'; }
				}
				else if (Nav.esIE7 || Nav.esIE6) { menu.style.marginLeft = '-' + (el.offsetWidth + 5) + 'px'; }
			}
			
			var from = 0, to = menu.scrollHeight, opa = 0;
			var anim = new Tween(menu.style, 'height', Tween.strongEaseOut, from, to, 0.5, 'px');
			anim.onMotionChanged = function (args) {
				if (from == 0) { opa = (args.target._pos / to * 100).toFixed(0); }
				else { opa = (args.target._pos / from * 100).toFixed(0); }
				setOpacity(opa, menu);
			}
			anim.onMotionFinished = function () {
				if (from == 0) {
					menu.style.overflow = 'visible';
					
					if (!window.innerWidth) { menu.style.filter = ''; }
					
					cls.style.display = 'block';
					w = (cls.offsetWidth / 2);
					cls.style.marginTop = '-' + (cls.offsetHeight / 2) + 'px';
					cls.style.marginLeft = ((!arrow._src)? (menu.offsetWidth - w) : '-' + w) + 'px';
				}
			}
			anim.start();
			
			if (!menus[grp]) { menus[grp] = []; }
			menus[grp][lvl] = {el: el, menu: menu, arrow: arrow, cls:cls, anim: anim};
		}
		
		this.hide = function (grp, lvl, evt) {
			if (evt) {
				StopEvent(evt);
				addDocEvent();
			}
			
			for(var x in menus) {
				var to = (x == grp)? lvl : 0;
				for(var i = menus[x].length - 1; i >= lvl; i--) {
					menus[x][i].anim.stop();
					menus[x][i].menu.style.overflow = 'hidden';
					menus[x][i].menu.style.height = '0px';
					menus[x][i].el.className = menus[x][i].el._prevClass;
					menus[x][i].arrow.style.display = 'none';
					menus[x][i].cls.style.display = 'none';
					
					if (i > 0) { opaque(x, i - 1, false); }
				}
			}
		}
		
		var opaque = function (grp, lvl, doIt) {
			if (!menus[grp] || !menus[grp][lvl]) { return false; }
			var els = menus[grp][lvl].menu.childNodes;
			for (var i = 0; i < els.length; i++) {
				if (!!els[i].tagName && !els[i]._on) {
					if (doIt) { setOpacity(40, els[i]); }
					else {
						if (!window.innerWidth) { els[i].style.filter = ''; }
						else { els[i].style.opacity = ''; }
					}
				}
			}
		}
		
		var outOfScreen = function (menu, grp, lvl) {
			var left = menu.offsetLeft + menu.offsetWidth;
			for (var i = lvl - 1; i >= 0; i--) { left += menus[grp][i].menu.offsetLeft; }
			return (left > document.documentElement.offsetWidth);
		}
		
		var docEvent = false, docTime = false;
		var addDocEvent = function () {
			if (!docEvent) {
				AddEvent(document, 'click', docEvent = function () {
					docTime = window.setTimeout(function(){
						oDropDownMenu.hide(0, 0, false);
						if (docEvent) { RemEvent(document, 'click', docEvent); }
						docEvent = false;
					}, 10);
				});
			}
			if (docTime) {
				window.clearTimeout(docTime);
				docTime = false;
			}
		}
		
		//
		
		var interval = false;
		
		this.showOver = function (el, menu, arrow, grp, lvl, evt, lateral) {
			StopEvent(evt);
			if (!!interval) {
				window.clearInterval(interval);
				interval = false;
			}
			
			hideOver(grp, lvl + 1);
			if (!!menus[grp] && !!menus[grp][lvl] && menus[grp][lvl].el.parentNode._on) {
				return false;
			}
			
			el.parentNode._on = true;
			
			menu.style.marginLeft = '-1000px'; //Fix para el ancho automatico
			menu.style.width = menu.scrollWidth + 'px';
			menu.style.marginLeft = '0px';
			
			if (lvl > 0 || lateral) {
				
				if(lvl > 0){
					opaque(grp, lvl - 1, true);
				}					
				arrow.style.display = 'block';

				arrow.style.marginTop = (((el.offsetHeight - arrow.offsetHeight) / 2)) + 'px';
				arrow.style.marginLeft = (el.offsetWidth - (arrow.offsetWidth / 2)) + 'px';

				menu.style.marginTop = '-' + (el.offsetHeight) + 'px';
				//menu.style.marginLeft = (el.offsetWidth) + 'px';
				
				if (!!arrow._src) {
					arrow.src = arrow._src;
					try { delete arrow._src; } catch(e){ ; }
				}
				
				if (outOfScreen(menu, grp, lvl)) {
					arrow.style.marginLeft = '-' + (arrow.offsetWidth / 2) + 'px';
					arrow._src = arrow.src;
					arrow.src = arrow.src.substr(0, arrow.src.lastIndexOf('.')) + 'I' + arrow.src.substr(arrow.src.lastIndexOf('.'));
					
					menu.style.marginLeft = '-' + (menu.offsetWidth) + 'px';
				}
		
			}
			else {
				//menu.style.marginTop = (el.offsetHeight) + 'px';
				if (outOfScreen(menu, grp, lvl)) {
					
					if (Nav.esIE7 || Nav.esIE6) { menu.style.marginLeft = '-' + (menu.offsetWidth + 5) + 'px'; }
					else { menu.style.marginLeft = '-' + (menu.offsetWidth - el.offsetWidth) + 'px'; }
				}
				else if (Nav.esIE7 || Nav.esIE6) {
					menu.style.marginLeft = '-' + (el.offsetWidth + 5) + 'px'; 
				}
			}
			
			
			var from = 0, to = menu.scrollHeight, opa = 0;
			var anim = new Tween(menu.style, 'height', Tween.strongEaseOut, from, to, 1, 'px');
			anim.onMotionChanged = function (args) {
				if (from == 0) { opa = (args.target._pos / to * 100).toFixed(0); }
				else { opa = (args.target._pos / from * 100).toFixed(0); }
				setOpacity(opa, menu);
			}
			anim.onMotionFinished = function () {
				if (from == 0) {
					menu.style.overflow = 'visible';
					
					if (!window.innerWidth) { menu.style.filter = ''; }
				}
			}
			anim.start();
			
			if (!menus[grp]) { menus[grp] = []; }
			menus[grp][lvl] = {el: el, menu: menu, arrow: arrow, anim: anim};
		}
		
		this.hideOver = function (grp, lvl, evt) {
			if (evt) { StopEvent(evt); }
			interval = window.setTimeout(function () { hideOver(grp, 0); }, 500);
		}
		
		var hideOver = function (grp, lvl) {
			for(var x in menus) {
				var to = (x == grp)? lvl : 0;
				for(var i = menus[x].length - 1; i >= to; i--) {
					if (!menus[x][i]) { continue; }
					
					menus[x][i].el.parentNode._on = false;
					menus[x][i].anim.stop();
					menus[x][i].menu.style.overflow = 'hidden';
					menus[x][i].menu.style.height = '0px';
					menus[x][i].arrow.style.display = 'none';
					
					if (i > 0) { opaque(x, i - 1, false); }
					
					delete menus[x][i];
				}
			}
			interval = false;
		}
		
		//
		
		this.showOver2 = function (el, menu, arrow, grp, lvl, evt, lateral, trigger) {
			if (evt) { StopEvent(evt); }
			if (!!interval) {
				window.clearInterval(interval);
				interval = false;
			}
			
			hideOver2(grp, lvl + 1);
			if (!!menus[grp] && !!menus[grp][lvl] && menus[grp][lvl].el.parentNode._on) {
				if (menus[grp][lvl].el.id == el.id) {
					return false;
				}
				else {
					restore(grp, lvl);
					opaque(grp, lvl - 1, false);
				}
			}
			
			el.parentNode._on = true;
			
			menu.style.marginLeft = '-1000px'; //Fix para el ancho automatico
			
			if (!lateral) {
				var w = el.offsetWidth + ((trigger == 'arrow')? arrow.offsetWidth : 0);
				if (menu.scrollWidth > w) {
					menu.style.width = menu.scrollWidth + 'px';
					menu.style.marginLeft = '-' + ((menu.scrollWidth - w) / 2) + 'px';
				}
				else {
					menu.style.width = w + 'px';
					menu.style.marginLeft = '0px';
				}
			}
			
			if (!el._className) { el._className = el.className; }
			if (el.className != (el._className + ' on')) { el.className += ' on'; }
			
			if (!!arrow && !arrow._className) { arrow._className = arrow.className; }
			if (trigger == 'arrow' && arrow.className != (arrow._className + ' on')) { arrow.className += ' on'; }
			
			//
			var marginTop = el.parentNode.parentNode.firstChild.offsetTop;
			var marginLeft = el.offsetLeft;
			
			if (lateral) {
				
				if (lvl > 0) { opaque(grp, lvl - 1, true); }
				menu.style.marginTop = '-' + (el.offsetHeight) + 'px';
				menu.style.marginLeft = (el.offsetWidth) + 'px';
				
				if (outOfScreen(menu, grp, lvl)) {
					menu.style.marginLeft = '-' + (menu.offsetWidth) + 'px';
				}
			}
			else if (lvl > 0) {
				
				if (lvl > 0) { opaque(grp, lvl - 1, true); }
				
				menu.style.marginTop = '-' + (el.offsetHeight + marginTop) + 'px';
				menu.style.marginLeft = (el.offsetWidth + marginTop) + 'px';
				
				if (outOfScreen(menu, grp, lvl)) {
					menu.style.marginLeft = '-' + (menu.offsetWidth - marginLeft) + 'px';
				}
			}
			else {
			
				if (trigger == 'arrow' && CufonMenuTop) {
					try {
						var defConf = CufonMenuTop;
						defConf.color = defConf.colorOn;
						Cufon.replace(el, defConf);
					}
					catch(e) {}
				}
				
				menu.style.marginTop = (el.offsetHeight + this.menuMarginTop) + 'px';
				var left = 0;
				if (outOfScreen(menu, grp, lvl)) {
					
					if (Nav.esIE7 || Nav.esIE6) { left = menu.offsetWidth + (marginLeft * 2); }
					else { left = menu.offsetWidth - el.offsetWidth; }
				}
				else if (Nav.esIE7 || Nav.esIE6) {
					left = (menu.offsetWidth - (menu.offsetWidth - (el.offsetWidth + ((Nav.esIE7 && trigger != 'arrow')? 0 : arrow.offsetWidth) + (marginLeft * 2))) / 2);
				}
				menu.style.marginLeft = (-left + this.menuMarginLeft) + 'px';
			}
			
			
			var from = 0, to = menu.scrollHeight, opa = 0;
			var anim = new Tween(menu.style, 'height', Tween.strongEaseOut, from, to, 1, 'px');
			anim.onMotionChanged = function (args) {
				if (from == 0) { opa = (args.target._pos / to * 100).toFixed(0); }
				else { opa = (args.target._pos / from * 100).toFixed(0); }
				setOpacity(opa, menu);
			}
			anim.onMotionFinished = function () {
				if (from == 0) {
					menu.style.overflow = 'visible';
					
					if (!window.innerWidth) { menu.style.filter = ''; }
				}
			}
			anim.start();
			
			if (!menus[grp]) { menus[grp] = []; }
			menus[grp][lvl] = {el: el, menu: menu, arrow: arrow, anim: anim, trigger: trigger};
		}
		
		this.hideOver2 = function (grp, lvl, evt) {
			if (evt) { StopEvent(evt); }
			interval = window.setTimeout(function () { hideOver2(grp, 0); }, 500);
		}
		
		var hideOver2 = function (grp, lvl) {
			for(var x in menus) {
				var to = (x == grp)? lvl : 0;
				for(var i = menus[x].length - 1; i >= to; i--) {
					if (!menus[x][i]) { continue; }
					restore(x, i);
					if (i > 0) { opaque(x, i - 1, false); }
					
					delete menus[x][i];
				}
			}
			interval = false;
		}
		
		var restore = function (grp, lvl) {
			menus[grp][lvl].el.parentNode._on = false;
			menus[grp][lvl].el.className = menus[grp][lvl].el._className;
			menus[grp][lvl].anim.stop();
			menus[grp][lvl].menu.style.overflow = 'hidden';
			menus[grp][lvl].menu.style.height = '0px';
			menus[grp][lvl].menu.style.width = '';
			if (!!menus[grp][lvl].arrow) menus[grp][lvl].arrow.className = menus[grp][lvl].arrow._className;
			if (lvl == 0 && CufonMenuTop) {
				try {
					if (menus[grp][lvl].el.className.indexOf(' on ') === -1) {
						var defConf = CufonMenuTop;
						defConf.color = defConf.colorOff;
						Cufon.replace(menus[grp][lvl].el, defConf);
					}
				}
				catch(e) {}
			}
		}
		
		this.stopHideOver2 = function (el, grp, lvl, evt) {
			if (!!menus[grp] && !!menus[grp][lvl] && menus[grp][lvl].el.parentNode._on && menus[grp][lvl].el.id == el.id) {
				StopEvent(evt);
				if (!!interval) {
					window.clearInterval(interval);
					interval = false;
				}
			}
		}
	};

/******************************************/
var swfobject = function() {
	
	var UNDEF = "undefined",
		OBJECT = "object",
		SHOCKWAVE_FLASH = "Shockwave Flash",
		SHOCKWAVE_FLASH_AX = "ShockwaveFlash.ShockwaveFlash",
		FLASH_MIME_TYPE = "application/x-shockwave-flash",
		EXPRESS_INSTALL_ID = "SWFObjectExprInst",
		
		win = window,
		doc = document,
		nav = navigator,
		
		domLoadFnArr = [],
		regObjArr = [],
		timer = null,
		storedAltContent = null,
		storedAltContentId = null,
		isDomLoaded = false,
		isExpressInstallActive = false;
	
	/* Centralized function for browser feature detection
		- Proprietary feature detection (conditional compiling) is used to detect Internet Explorer's features
		- User agent string detection is only used when no alternative is possible
		- Is executed directly for optimal performance
	*/	
	var ua = function() {
		var w3cdom = typeof doc.getElementById != UNDEF && typeof doc.getElementsByTagName != UNDEF && typeof doc.createElement != UNDEF && typeof doc.appendChild != UNDEF && typeof doc.replaceChild != UNDEF && typeof doc.removeChild != UNDEF && typeof doc.cloneNode != UNDEF,
			playerVersion = [0,0,0],
			d = null;
		if (typeof nav.plugins != UNDEF && typeof nav.plugins[SHOCKWAVE_FLASH] == OBJECT) {
			d = nav.plugins[SHOCKWAVE_FLASH].description;
			if (d) {
				d = d.replace(/^.*\s+(\S+\s+\S+$)/, "$1");
				playerVersion[0] = parseInt(d.replace(/^(.*)\..*$/, "$1"), 10);
				playerVersion[1] = parseInt(d.replace(/^.*\.(.*)\s.*$/, "$1"), 10);
				playerVersion[2] = /r/.test(d) ? parseInt(d.replace(/^.*r(.*)$/, "$1"), 10) : 0;
			}
		}
		else if (typeof win.ActiveXObject != UNDEF) {
			var a = null, fp6Crash = false;
			try {
				a = new ActiveXObject(SHOCKWAVE_FLASH_AX + ".7");
			}
			catch(e) {
				try { 
					a = new ActiveXObject(SHOCKWAVE_FLASH_AX + ".6");
					playerVersion = [6,0,21];
					a.AllowScriptAccess = "always";  // Introduced in fp6.0.47
				}
				catch(e) {
					if (playerVersion[0] == 6) {
						fp6Crash = true;
					}
				}
				if (!fp6Crash) {
					try {
						a = new ActiveXObject(SHOCKWAVE_FLASH_AX);
					}
					catch(e) {}
				}
			}
			if (!fp6Crash && a) { // a will return null when ActiveX is disabled
				try {
					d = a.GetVariable("$version");  // Will crash fp6.0.21/23/29
					if (d) {
						d = d.split(" ")[1].split(",");
						playerVersion = [parseInt(d[0], 10), parseInt(d[1], 10), parseInt(d[2], 10)];
					}
				}
				catch(e) {}
			}
		}
		var u = nav.userAgent.toLowerCase(),
			p = nav.platform.toLowerCase(),
			webkit = /webkit/.test(u) ? parseFloat(u.replace(/^.*webkit\/(\d+(\.\d+)?).*$/, "$1")) : false, // returns either the webkit version or false if not webkit
			ie = false,
			windows = p ? /win/.test(p) : /win/.test(u),
			mac = p ? /mac/.test(p) : /mac/.test(u);
		/*@cc_on
			ie = true;
			@if (@_win32)
				windows = true;
			@elif (@_mac)
				mac = true;
			@end
		@*/
		return { w3cdom:w3cdom, pv:playerVersion, webkit:webkit, ie:ie, win:windows, mac:mac };
	}();

	/* Cross-browser onDomLoad
		- Based on Dean Edwards' solution: http://dean.edwards.name/weblog/2006/06/again/
		- Will fire an event as soon as the DOM of a page is loaded (supported by Gecko based browsers - like Firefox -, IE, Opera9+, Safari)
	*/ 
	var onDomLoad = function() {
		if (!ua.w3cdom) {
			return;
		}
		addDomLoadEvent(main);
		if (ua.ie && ua.win) {
			try {  // Avoid a possible Operation Aborted error
				doc.write("<scr" + "ipt id=__ie_ondomload defer=true src=//:></scr" + "ipt>"); // String is split into pieces to avoid Norton AV to add code that can cause errors 
				var s = getElementById("__ie_ondomload");
				if (s) {
					s.onreadystatechange = function() {
						if (this.readyState == "complete") {
							this.parentNode.removeChild(this);
							callDomLoadFunctions();
						}
					};
				}
			}
			catch(e) {}
		}
		if (ua.webkit && typeof doc.readyState != UNDEF) {
			timer = setInterval(function() { if (/loaded|complete/.test(doc.readyState)) { callDomLoadFunctions(); }}, 10);
		}
		if (typeof doc.addEventListener != UNDEF) {
			doc.addEventListener("DOMContentLoaded", callDomLoadFunctions, null);
		}
		addLoadEvent(callDomLoadFunctions);
	}();
	
	function callDomLoadFunctions() {
		if (isDomLoaded) {
			return;
		}
		if (ua.ie && ua.win) { // Test if we can really add elements to the DOM; we don't want to fire it too early
			var s = createElement("span");
			try { // Avoid a possible Operation Aborted error
				var t = doc.getElementsByTagName("body")[0].appendChild(s);
				t.parentNode.removeChild(t);
			}
			catch (e) {
				return;
			}
		}
		isDomLoaded = true;
		if (timer) {
			clearInterval(timer);
			timer = null;
		}
		var dl = domLoadFnArr.length;
		for (var i = 0; i < dl; i++) {
			domLoadFnArr[i]();
		}
	}
	
	function addDomLoadEvent(fn) {
		if (isDomLoaded) {
			fn();
		}
		else { 
			domLoadFnArr[domLoadFnArr.length] = fn; // Array.push() is only available in IE5.5+
		}
	}
	
	/* Cross-browser onload
		- Based on James Edwards' solution: http://brothercake.com/site/resources/scripts/onload/
		- Will fire an event as soon as a web page including all of its assets are loaded 
	 */
	function addLoadEvent(fn) {
		if (typeof win.addEventListener != UNDEF) {
			win.addEventListener("load", fn, false);
		}
		else if (typeof doc.addEventListener != UNDEF) {
			doc.addEventListener("load", fn, false);
		}
		else if (typeof win.attachEvent != UNDEF) {
			win.attachEvent("onload", fn);
		}
		else if (typeof win.onload == "function") {
			var fnOld = win.onload;
			win.onload = function() {
				fnOld();
				fn();
			};
		}
		else {
			win.onload = fn;
		}
	}
	
	/* Main function
		- Will preferably execute onDomLoad, otherwise onload (as a fallback)
	*/
	function main() { // Static publishing only
		var rl = regObjArr.length;
		for (var i = 0; i < rl; i++) { // For each registered object element
			var id = regObjArr[i].id;
			if (ua.pv[0] > 0) {
				var obj = getElementById(id);
				if (obj) {
					regObjArr[i].width = obj.getAttribute("width") ? obj.getAttribute("width") : "0";
					regObjArr[i].height = obj.getAttribute("height") ? obj.getAttribute("height") : "0";
					if (hasPlayerVersion(regObjArr[i].swfVersion)) { // Flash plug-in version >= Flash content version: Houston, we have a match!
						if (ua.webkit && ua.webkit < 312) { // Older webkit engines ignore the object element's nested param elements
							fixParams(obj);
						}
						setVisibility(id, true);
					}
					else if (regObjArr[i].expressInstall && !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac)) { // Show the Adobe Express Install dialog if set by the web page author and if supported (fp6.0.65+ on Win/Mac OS only)
						showExpressInstall(regObjArr[i]);
					}
					else { // Flash plug-in and Flash content version mismatch: display alternative content instead of Flash content
						displayAltContent(obj);
					}
				}
			}
			else {  // If no fp is installed, we let the object element do its job (show alternative content)
				setVisibility(id, true);
			}
		}
	}
	
	/* Fix nested param elements, which are ignored by older webkit engines
		- This includes Safari up to and including version 1.2.2 on Mac OS 10.3
		- Fall back to the proprietary embed element
	*/
	function fixParams(obj) {
		var nestedObj = obj.getElementsByTagName(OBJECT)[0];
		if (nestedObj) {
			var e = createElement("embed"), a = nestedObj.attributes;
			if (a) {
				var al = a.length;
				for (var i = 0; i < al; i++) {
					if (a[i].nodeName.toLowerCase() == "data") {
						e.setAttribute("src", a[i].nodeValue);
					}
					else {
						e.setAttribute(a[i].nodeName, a[i].nodeValue);
					}
				}
			}
			var c = nestedObj.childNodes;
			if (c) {
				var cl = c.length;
				for (var j = 0; j < cl; j++) {
					if (c[j].nodeType == 1 && c[j].nodeName.toLowerCase() == "param") {
						e.setAttribute(c[j].getAttribute("name"), c[j].getAttribute("value"));
					}
				}
			}
			obj.parentNode.replaceChild(e, obj);

		}
	}
	
	/* Fix hanging audio/video threads and force open sockets and NetConnections to disconnect
		- Occurs when unloading a web page in IE using fp8+ and innerHTML/outerHTML
		- Dynamic publishing only
	*/
	function fixObjectLeaks(id) {
		if (ua.ie && ua.win && hasPlayerVersion("8.0.0")) {
			win.attachEvent("onunload", function () {
				var obj = getElementById(id);
				if (obj) {
					for (var i in obj) {
						if (typeof obj[i] == "function") {
							obj[i] = function() {};
						}
					}
					obj.parentNode.removeChild(obj);
				}
			});
		}
	}
	
	/* Show the Adobe Express Install dialog
		- Reference: http://www.adobe.com/cfusion/knowledgebase/index.cfm?id=6a253b75
	*/
	function showExpressInstall(regObj) {
		isExpressInstallActive = true;
		var obj = getElementById(regObj.id);
		if (obj) {
			if (regObj.altContentId) {
				var ac = getElementById(regObj.altContentId);
				if (ac) {
					storedAltContent = ac;
					storedAltContentId = regObj.altContentId;
				}
			}
			else {
				storedAltContent = abstractAltContent(obj);
			}
			if (!(/%$/.test(regObj.width)) && parseInt(regObj.width, 10) < 310) {
				regObj.width = "310";
			}
			if (!(/%$/.test(regObj.height)) && parseInt(regObj.height, 10) < 137) {
				regObj.height = "137";
			}
			doc.title = doc.title.slice(0, 47) + " - Flash Player Installation";
			var pt = ua.ie && ua.win ? "ActiveX" : "PlugIn",
				dt = doc.title,
				fv = "MMredirectURL=" + win.location + "&MMplayerType=" + pt + "&MMdoctitle=" + dt,
				replaceId = regObj.id;
			// For IE when a SWF is loading (AND: not available in cache) wait for the onload event to fire to remove the original object element
			// In IE you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
			if (ua.ie && ua.win && obj.readyState != 4) {
				var newObj = createElement("div");
				replaceId += "SWFObjectNew";
				newObj.setAttribute("id", replaceId);
				obj.parentNode.insertBefore(newObj, obj); // Insert placeholder div that will be replaced by the object element that loads expressinstall.swf
				obj.style.display = "none";
				win.attachEvent("onload", function() { obj.parentNode.removeChild(obj); });
			}
			createSWF({ data:regObj.expressInstall, id:EXPRESS_INSTALL_ID, width:regObj.width, height:regObj.height }, { flashvars:fv }, replaceId);
		}
	}
	
	/* Functions to abstract and display alternative content
	*/
	function displayAltContent(obj) {
		if (ua.ie && ua.win && obj.readyState != 4) {
			// For IE when a SWF is loading (AND: not available in cache) wait for the onload event to fire to remove the original object element
			// In IE you cannot properly cancel a loading SWF file without breaking browser load references, also obj.onreadystatechange doesn't work
			var el = createElement("div");
			obj.parentNode.insertBefore(el, obj); // Insert placeholder div that will be replaced by the alternative content
			el.parentNode.replaceChild(abstractAltContent(obj), el);
			obj.style.display = "none";
			win.attachEvent("onload", function() { obj.parentNode.removeChild(obj); });
		}
		else {
			obj.parentNode.replaceChild(abstractAltContent(obj), obj);
		}
	}	

	function abstractAltContent(obj) {
		var ac = createElement("div");
		if (ua.win && ua.ie) {
			ac.innerHTML = obj.innerHTML;
		}
		else {
			var nestedObj = obj.getElementsByTagName(OBJECT)[0];
			if (nestedObj) {
				var c = nestedObj.childNodes;
				if (c) {
					var cl = c.length;
					for (var i = 0; i < cl; i++) {
						if (!(c[i].nodeType == 1 && c[i].nodeName.toLowerCase() == "param") && !(c[i].nodeType == 8)) {
							ac.appendChild(c[i].cloneNode(true));
						}
					}
				}
			}
		}
		return ac;
	}
	
	/* Cross-browser dynamic SWF creation
	*/
	function createSWF(attObj, parObj, id) {
		var r, el = getElementById(id);
		if (typeof attObj.id == UNDEF) { // if no 'id' is defined for the object element, it will inherit the 'id' from the alternative content
			attObj.id = id;
		}
		if (ua.ie && ua.win) { // IE, the object element and W3C DOM methods do not combine: fall back to outerHTML
			var att = "";
			for (var i in attObj) {
				if (attObj[i] != Object.prototype[i]) { // Filter out prototype additions from other potential libraries, like Object.prototype.toJSONString = function() {}
					if (i == "data") {
						parObj.movie = attObj[i];
					}
					else if (i.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
						att += ' class="' + attObj[i] + '"';
					}
					else if (i != "classid") {
						att += ' ' + i + '="' + attObj[i] + '"';
					}
				}
			}
			var par = "";
			for (var j in parObj) {
				if (parObj[j] != Object.prototype[j]) { // Filter out prototype additions from other potential libraries
					par += '<param name="' + j + '" value="' + parObj[j] + '" />';
				}
			}
			el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>';
			fixObjectLeaks(attObj.id); // This bug affects dynamic publishing only
			r = getElementById(attObj.id);	
		}
		else if (ua.webkit && ua.webkit < 312) { // Older webkit engines ignore the object element's nested param elements: fall back to the proprietary embed element
			var e = createElement("embed");
			e.setAttribute("type", FLASH_MIME_TYPE);
			for (var k in attObj) {
				if (attObj[k] != Object.prototype[k]) { // Filter out prototype additions from other potential libraries
					if (k == "data") {
						e.setAttribute("src", attObj[k]);
					}
					else if (k.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
						e.setAttribute("class", attObj[k]);
					}
					else if (k != "classid") { // Filter out IE specific attribute
						e.setAttribute(k, attObj[k]);
					}
				}
			}
			for (var l in parObj) {
				if (parObj[l] != Object.prototype[l]) { // Filter out prototype additions from other potential libraries
					if (l != "movie") { // Filter out IE specific param element
						e.setAttribute(l, parObj[l]);
					}
				}
			}
			el.parentNode.replaceChild(e, el);
			r = e;
		}
		else { // Well-behaving browsers
			var o = createElement(OBJECT);
			o.setAttribute("type", FLASH_MIME_TYPE);
			for (var m in attObj) {
				if (attObj[m] != Object.prototype[m]) { // Filter out prototype additions from other potential libraries
					if (m.toLowerCase() == "styleclass") { // 'class' is an ECMA4 reserved keyword
						o.setAttribute("class", attObj[m]);
					}
					else if (m != "classid") { // Filter out IE specific attribute
						o.setAttribute(m, attObj[m]);
					}
				}
			}
			for (var n in parObj) {
				if (parObj[n] != Object.prototype[n] && n != "movie") { // Filter out prototype additions from other potential libraries and IE specific param element
					createObjParam(o, n, parObj[n]);
				}
			}
			el.parentNode.replaceChild(o, el);
			r = o;
		}
		return r;
	}
	
	function createObjParam(el, pName, pValue) {
		var p = createElement("param");
		p.setAttribute("name", pName);	
		p.setAttribute("value", pValue);
		el.appendChild(p);
	}
	
	function getElementById(id) {
		return doc.getElementById(id);
	}
	
	function createElement(el) {
		return doc.createElement(el);
	}
	
	function hasPlayerVersion(rv) {
		var pv = ua.pv, v = rv.split(".");
		v[0] = parseInt(v[0], 10);
		v[1] = parseInt(v[1], 10);
		v[2] = parseInt(v[2], 10);
		return (pv[0] > v[0] || (pv[0] == v[0] && pv[1] > v[1]) || (pv[0] == v[0] && pv[1] == v[1] && pv[2] >= v[2])) ? true : false;
	}
	
	/* Cross-browser dynamic CSS creation
		- Based on Bobby van der Sluis' solution: http://www.bobbyvandersluis.com/articles/dynamicCSS.php
	*/	
	function createCSS(sel, decl) {
		if (ua.ie && ua.mac) {
			return;
		}
		var h = doc.getElementsByTagName("head")[0], s = createElement("style");
		s.setAttribute("type", "text/css");
		s.setAttribute("media", "screen");
		if (!(ua.ie && ua.win) && typeof doc.createTextNode != UNDEF) {
			s.appendChild(doc.createTextNode(sel + " {" + decl + "}"));
		}
		h.appendChild(s);
		if (ua.ie && ua.win && typeof doc.styleSheets != UNDEF && doc.styleSheets.length > 0) {
			var ls = doc.styleSheets[doc.styleSheets.length - 1];
			if (typeof ls.addRule == OBJECT) {
				ls.addRule(sel, decl);
			}
		}
	}
	
	function setVisibility(id, isVisible) {
		var v = isVisible ? "visible" : "hidden";
		if (isDomLoaded) {
			getElementById(id).style.visibility = v;
		}
		else {
			createCSS("#" + id, "visibility:" + v);
		}
	}
	
	function getTargetVersion(obj) {
	    if (!obj)
	        return 0;
		var c = obj.childNodes;
		var cl = c.length;
		for (var i = 0; i < cl; i++) {
			if (c[i].nodeType == 1 && c[i].nodeName.toLowerCase() == "object") {
			    c = c[i].childNodes;
			    cl = c.length;
			    i = 0;
			}     
			if (c[i].nodeType == 1 && c[i].nodeName.toLowerCase() == "param" && c[i].getAttribute("name") == "swfversion") {
			   return c[i].getAttribute("value"); 
			}
		}
		return 0;
	}
    
	function getExpressInstall(obj) {
	    if (!obj)
	        return "";
		var c = obj.childNodes;
		var cl = c.length;
		for (var i = 0; i < cl; i++) {
			if (c[i].nodeType == 1 && c[i].nodeName.toLowerCase() == "object") {
			    c = c[i].childNodes;
			    cl = c.length;
			    i = 0;
			}     
			if (c[i].nodeType == 1 && c[i].nodeName.toLowerCase() == "param" && c[i].getAttribute("name") == "expressinstall") { 
			    return c[i].getAttribute("value"); 
			}	       
		}
		return "";
	}
    
	return {
		/* Public API
			- Reference: http://code.google.com/p/swfobject/wiki/SWFObject_2_0_documentation
		*/ 
		registerObject: function(objectIdStr, swfVersionStr, xiSwfUrlStr) {
			if (!ua.w3cdom || !objectIdStr) {
				return;
			}
			var obj = document.getElementById(objectIdStr);
			var xi = getExpressInstall(obj);
			var regObj = {};
			regObj.id = objectIdStr;
			regObj.swfVersion = swfVersionStr ? swfVersionStr : getTargetVersion(obj);
			regObj.expressInstall = xiSwfUrlStr ? xiSwfUrlStr : ((xi != "") ? xi : false);
			regObjArr[regObjArr.length] = regObj;
			setVisibility(objectIdStr, false);
		},
		
		getObjectById: function(objectIdStr) {
			var r = null;
			if (ua.w3cdom && isDomLoaded) {
				var o = getElementById(objectIdStr);
				if (o) {
					var n = o.getElementsByTagName(OBJECT)[0];
					if (!n || (n && typeof o.SetVariable != UNDEF)) {
				    	r = o;
					}
					else if (typeof n.SetVariable != UNDEF) {
						r = n;
					}
				}
			}
			return r;
		},
		
		embedSWF: function(swfUrlStr, replaceElemIdStr, widthStr, heightStr, swfVersionStr, xiSwfUrlStr, flashvarsObj, parObj, attObj) {
			if (!ua.w3cdom || !swfUrlStr || !replaceElemIdStr || !widthStr || !heightStr || !swfVersionStr) {
				return;
			}
			widthStr += ""; // Auto-convert to string to make it idiot proof
			heightStr += "";
			if (hasPlayerVersion(swfVersionStr)) {
				setVisibility(replaceElemIdStr, false);
				var att = (typeof attObj == OBJECT) ? attObj : {};
				att.data = swfUrlStr;
				att.width = widthStr;
				att.height = heightStr;
				var par = (typeof parObj == OBJECT) ? parObj : {};
				if (typeof flashvarsObj == OBJECT) {
					for (var i in flashvarsObj) {
						if (flashvarsObj[i] != Object.prototype[i]) { // Filter out prototype additions from other potential libraries
							if (typeof par.flashvars != UNDEF) {
								par.flashvars += "&" + i + "=" + flashvarsObj[i];
							}
							else {
								par.flashvars = i + "=" + flashvarsObj[i];
							}
						}
					}
				}
				addDomLoadEvent(function() {
					createSWF(att, par, replaceElemIdStr);
					if (att.id == replaceElemIdStr) {
						setVisibility(replaceElemIdStr, true);
					}
				});
			}
			else if (xiSwfUrlStr && !isExpressInstallActive && hasPlayerVersion("6.0.65") && (ua.win || ua.mac)) {
				setVisibility(replaceElemIdStr, false);
				addDomLoadEvent(function() {
					var regObj = {};
					regObj.id = regObj.altContentId = replaceElemIdStr;
					regObj.width = widthStr;
					regObj.height = heightStr;
					regObj.expressInstall = xiSwfUrlStr;
					showExpressInstall(regObj);
				});
			}
		},
		
		getFlashPlayerVersion: function() {
			return { major:ua.pv[0], minor:ua.pv[1], release:ua.pv[2] };
		},
		
		hasFlashPlayerVersion:hasPlayerVersion,
		
		createSWF: function(attObj, parObj, replaceElemIdStr) {
			if (ua.w3cdom && isDomLoaded) {
				return createSWF(attObj, parObj, replaceElemIdStr);
			}
			else {
				return undefined;
			}
		},
		
		createCSS: function(sel, decl) {
			if (ua.w3cdom) {
				createCSS(sel, decl);
			}
		},
		
		addDomLoadEvent:addDomLoadEvent,
		
		addLoadEvent:addLoadEvent,
		
		getQueryParamValue: function(param) {
			var q = doc.location.search || doc.location.hash;
			if (param == null) {
				return q;
			}
		 	if(q) {
				var pairs = q.substring(1).split("&");
				for (var i = 0; i < pairs.length; i++) {
					if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) {
						return pairs[i].substring((pairs[i].indexOf("=") + 1));
					}
				}
			}
			return "";
		},
		
		// For internal usage only
		expressInstallCallback: function() {
			if (isExpressInstallActive && storedAltContent) {
				var obj = getElementById(EXPRESS_INSTALL_ID);
				if (obj) {
					obj.parentNode.replaceChild(storedAltContent, obj);
					if (storedAltContentId) {
						setVisibility(storedAltContentId, true);
						if (ua.ie && ua.win) {
							storedAltContent.style.display = "block";
						}
					}
					storedAltContent = null;
					storedAltContentId = null;
					isExpressInstallActive = false;
				}
			} 
		}
		
	};

}();

/******************************************/
function Delegate() {}
Delegate.create = function (o, f) {
	var a = new Array() ;
	var l = arguments.length ;
	for(var i = 2 ; i < l ; i++) a[i - 2] = arguments[i] ;
	return function() {
		var aP = [].concat(arguments, a) ;
		f.apply(o, aP);
	}
}

Tween = function(obj, prop, func, begin, finish, duration, suffixe){
	this.init(obj, prop, func, begin, finish, duration, suffixe)
}
var t = Tween.prototype;

t.obj = new Object();
t.prop='';
t.func = function (t, b, c, d) { return c*t/d + b; };
t.begin = 0;
t.change = 0;
t.prevTime = 0;
t.prevPos = 0;
t.looping = false;
t._duration = 0;
t._time = 0;
t._pos = 0;
t._position = 0;
t._startTime = 0;
t._finish = 0;
t.name = '';
t.suffixe = '';
t._listeners = new Array();	
t.setTime = function(t){
	this.prevTime = this._time;
	if (t > this.getDuration()) {
		if (this.looping) {
			this.rewind (t - this._duration);
			this.update();
			this.broadcastMessage('onMotionLooped',{target:this,type:'onMotionLooped'});
		} else {
			this._time = this._duration;
			this.update();
			this.stop();
			this.broadcastMessage('onMotionFinished',{target:this,type:'onMotionFinished'});
		}
	} else if (t < 0) {
		this.rewind();
		this.update();
	} else {
		this._time = t;
		this.update();
	}
}
t.getTime = function(){
	return this._time;
}
t.setDuration = function(d){
	this._duration = (d == null || d <= 0) ? 100000 : d;
}
t.getDuration = function(){
	return this._duration;
}
t.setPosition = function(p){
	this.prevPos = this._pos;
	var a = this.suffixe != '' ? this.suffixe : '';
	this.obj[this.prop] = Math.round(p) + a;
	this._pos = p;
	this.broadcastMessage('onMotionChanged',{target:this,type:'onMotionChanged'});
}
t.getPosition = function(t){
	if (t == undefined) t = this._time;
	return this.func(t, this.begin, this.change, this._duration);
};
t.setFinish = function(f){
	this.change = f - this.begin;
};
t.geFinish = function(){
	return this.begin + this.change;
};
t.init = function(obj, prop, func, begin, finish, duration, suffixe){
	if (!arguments.length) return;
	this._listeners = new Array();
	this.addListener(this);
	if(suffixe) this.suffixe = suffixe;
	this.obj = obj;
	this.prop = prop;
	this.begin = begin;
	this._pos = begin;
	this.setDuration(duration);
	if (func!=null && func!='') {
		this.func = func;
	}
	this.setFinish(finish);
}
t.start = function(){
	this.rewind();
	this.startEnterFrame();
	this.broadcastMessage('onMotionStarted',{target:this,type:'onMotionStarted'});
	//alert('in');
}
t.rewind = function(t){
	this.stop();
	this._time = (t == undefined) ? 0 : t;
	this.fixTime();
	this.update();
}
t.fforward = function(){
	this._time = this._duration;
	this.fixTime();
	this.update();
}
t.update = function(){
	this.setPosition(this.getPosition(this._time));
	}
t.startEnterFrame = function(){
	this.stopEnterFrame();
	this.isPlaying = true;
	this.onEnterFrame();
}
t.onEnterFrame = function(){
	if(this.isPlaying) {
		this.nextFrame();
		setTimeout(Delegate.create(this, this.onEnterFrame), 0);
	}
}
t.nextFrame = function(){
	this.setTime((this.getTimer() - this._startTime) / 1000);
	}
t.stop = function(){
	this.stopEnterFrame();
	this.broadcastMessage('onMotionStopped',{target:this,type:'onMotionStopped'});
}
t.stopEnterFrame = function(){
	this.isPlaying = false;
}
t.continueTo = function(finish, duration){
	this.begin = this._pos;
	this.setFinish(finish);
	if (this._duration != undefined)
		this.setDuration(duration);
	this.start();
}
t.resume = function(){
	this.fixTime();
	this.startEnterFrame();
	this.broadcastMessage('onMotionResumed',{target:this,type:'onMotionResumed'});
}
t.yoyo = function (){
	this.continueTo(this.begin,this._time);
}
t.addListener = function(o){
	this.removeListener (o);
	return this._listeners.push(o);
}
t.removeListener = function(o){
	var a = this._listeners;	
	var i = a.length;
	while (i--) {
		if (a[i] == o) {
			a.splice (i, 1);
			return true;
		}
	}
	return false;
}
t.broadcastMessage = function(){
	var arr = new Array();
	for(var i = 0; i < arguments.length; i++){
		arr.push(arguments[i])
	}
	var e = arr.shift();
	var a = this._listeners;
	var l = a.length;
	for (var i=0; i<l; i++){
		if(a[i][e])
		a[i][e].apply(a[i], arr);
	}
}
t.fixTime = function(){
	this._startTime = this.getTimer() - this._time * 1000;
}
t.getTimer = function(){
	return new Date().getTime() - this._time;
}
Tween.backEaseIn = function(t,b,c,d,a,p){
	if (s == undefined) var s = 1.70158;
	return c*(t/=d)*t*((s+1)*t - s) + b;
}
Tween.backEaseOut = function(t,b,c,d,a,p){
	if (s == undefined) var s = 1.70158;
	return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
}
Tween.backEaseInOut = function(t,b,c,d,a,p){
	if (s == undefined) var s = 1.70158; 
	if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
	return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
}
Tween.elasticEaseIn = function(t,b,c,d,a,p){
	if (t==0) return b;  
	if ((t/=d)==1) return b+c;  
	if (!p) p=d*.3;
	if (!a || a < Math.abs(c)) {
		a=c; var s=p/4;
	}
	else 
		var s = p/(2*Math.PI) * Math.asin (c/a);
	
	return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
}
Tween.elasticEaseOut = function (t,b,c,d,a,p){
		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
		if (!a || a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		return (a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b);
}
Tween.elasticEaseInOut = function (t,b,c,d,a,p){
	if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) var p=d*(.3*1.5);
	if (!a || a < Math.abs(c)) {var a=c; var s=p/4; }
	else var s = p/(2*Math.PI) * Math.asin (c/a);
	if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
	return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
}
Tween.bounceEaseOut = function(t,b,c,d){
	if ((t/=d) < (1/2.75)) {
		return c*(7.5625*t*t) + b;
	} else if (t < (2/2.75)) {
		return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
	} else if (t < (2.5/2.75)) {
		return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
	} else {
		return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
	}
}
Tween.bounceEaseIn = function(t,b,c,d){
	return c - Tween.bounceEaseOut (d-t, 0, c, d) + b;
}
Tween.bounceEaseInOut = function(t,b,c,d){
	if (t < d/2) return Tween.bounceEaseIn (t*2, 0, c, d) * .5 + b;
	else return Tween.bounceEaseOut (t*2-d, 0, c, d) * .5 + c*.5 + b;
}
Tween.strongEaseInOut = function(t,b,c,d){
	return c*(t/=d)*t*t*t*t + b;
}
Tween.regularEaseIn = function(t,b,c,d){
	return c*(t/=d)*t + b;
}
Tween.regularEaseOut = function(t,b,c,d){
	return -c *(t/=d)*(t-2) + b;
}
Tween.regularEaseInOut = function(t,b,c,d){
	if ((t/=d/2) < 1) return c/2*t*t + b;
	return -c/2 * ((--t)*(t-2) - 1) + b;
}
Tween.strongEaseIn = function(t,b,c,d){
	return c*(t/=d)*t*t*t*t + b;
}
Tween.strongEaseOut = function(t,b,c,d){
	return c*((t=t/d-1)*t*t*t*t + 1) + b;
}
Tween.strongEaseInOut = function(t,b,c,d){
	if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
	return c/2*((t-=2)*t*t*t*t + 2) + b;
}
strongEaseInOut = Tween.strongEaseInOut;

/******************************************/
var oRedMenu = new function(){

	//A
	this.analizarMenu = function(conf){
		var i;
		MENU[conf['id']] = new Object();
		MENU[conf['id']].conf = conf;
		
		var menu = $(conf['id']);
		var widthOrig = menu.offsetWidth-20;
		var widthTotal = 0;
		var moverSecciones = false;
		var arrTemp = new Array();
		for(i=0;i<menu.childNodes.length;i++){
			if(menu.childNodes[i].tagName && menu.childNodes[i].tagName.toLowerCase() == 'li'){
				if(!moverSecciones){
					if((widthTotal + menu.childNodes[i].offsetWidth) < widthOrig)widthTotal = widthTotal + menu.childNodes[i].offsetWidth;
					else{
						crearMenuMostrar(conf['id']);
						moverSecciones = true;
						arrTemp.push(menu.childNodes[i]);
					}
				}
				else{
					arrTemp.push(menu.childNodes[i]);
				}
			}
		}
		if(moverSecciones){
			for(i in arrTemp){
				MENU[conf['id']].ul.appendChild(arrTemp[i]);
			}
			MENU[conf['id']].flecha.style.marginLeft = (menu.offsetWidth - MENU[conf['id']].flecha.offsetWidth - 5) + 'px';
			MENU[conf['id']].menu.style.marginLeft = (menu.offsetWidth - MENU[conf['id']].menu.offsetWidth - 5) + 'px';			
			MENU[conf['id']].menu.style.display = 'none';
			MENU[conf['id']].menu.style.visibility = 'visible';
		}
	}	

	//C
	var crearMenuMostrar = function(id){
		MENU[id].menu = cTag('div',MENU[id].conf['classDiv']);
		MENU[id].ul = cTag('ul',MENU[id].conf['classUl']);
		MENU[id].menu.appendChild(MENU[id].ul);
		MENU[id].flecha = cTag('a',MENU[id].conf['classFlecha']);
		MENU[id].flecha.innerHTML = 'Flecha';
		
		AddEvent(MENU[id].flecha,'click',function(){mostrarMenu(MENU[id].menu)});
		
		if($(id).nextSibling){
			$(id).parentNode.insertBefore(MENU[id].menu,$(id).nextSibling);
			$(id).parentNode.insertBefore(MENU[id].flecha,$(id).nextSibling);			
		}
		else{
			$(id).parentNode.appendChild(MENU[id].flecha);
			$(id).parentNode.appendChild(MENU[id].menu);
		}
	}
	var cTag = function(tag,clase){
		var dev = document.createElement(tag);
		if(clase)dev.className = clase;
		return dev;
	}
	
	//M
	var mostrarMenu = function(menu){
		if(menu.style.display == 'block')menu.style.display = 'none';
		else menu.style.display = 'block';
	}
	var MENU = new Array();	
}

