//---------------------------
// Variables Globales
//---------------------------
// Este javascript está en /ardandir/extremadura2006/ pero puede residir en cualquier directorio
// Por desgracia, el explorer y el firefox tratan de forma distinta los url relativos en 
// iframes que llaman a funciones del padre.
// Para evitar depender de directorios, los scripts php deben estar en el directorio raiz.
// Las imagenes deben estar en un subdirectorio /imagenes
//
//---------------------------
/*
var filas=25;
var pagina=1;
var orden="nombre";
var tipo="asc";
var listacampos="1,2,3";
*/
var altopantalla;
//--------------------------------------------------------------------
// Crea select Nodes y selectSingleNode en Mozilla
// mozXPath [http://km0ti0n.blunted.co.uk/mozxpath/] km0ti0n@gmail.com
//--------------------------------------------------------------------
function implementaMetodosXPath(){
    if( document.implementation.hasFeature("XPath", "3.0") ){
	    if( typeof XMLDocument == "undefined" ){ XMLDocument = Document; }
      XMLDocument.prototype.selectNodes = function(cXPathString, xNode){
        if( !xNode ) { xNode = this; } 
		    var oNSResolver = this.createNSResolver(this.documentElement)
		    var aItems = this.evaluate(cXPathString, xNode, oNSResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)
		    var aResult = [];
		    for( var i = 0; i < aItems.snapshotLength; i++){aResult[i] =  aItems.snapshotItem(i);	}
		    return aResult;
	    }
	    XMLDocument.prototype.selectSingleNode = function(cXPathString, xNode){
		    if( !xNode ) { xNode = this; } 
		    var xItems = this.selectNodes(cXPathString, xNode);
		    if( xItems.length > 0 ){return xItems[0];	}
		    else{return null;	}
	    }
	    Element.prototype.selectNodes = function(cXPathString){
		    if(this.ownerDocument.selectNodes){	return this.ownerDocument.selectNodes(cXPathString, this);}
		    else{throw "For XML Elements Only";}
	    }
	    Element.prototype.selectSingleNode = function(cXPathString){	
		    if(this.ownerDocument.selectSingleNode){return this.ownerDocument.selectSingleNode(cXPathString, this);	}
		    else{throw "For XML Elements Only";}
	    }
    }
}
implementaMetodosXPath();

//---------------------------------------------------------------
//---------------------------------------------------------------
//-------FUNCIONES PARA MANEJAR EL XSL EN MEMORIA DINAMICAMENTE
//---------------------------------------------------------------
//---------------------------------------------------------------
function getNodoValor(nodo)
{   
    var valor="";
    if( nodo.firstChild ) valor=nodo.firstChild.nodeValue;
    return valor;
}
function getVariable(variable){
    var busqueda='//xsl:variable[@name="'+variable+'"]';
    nodo=estiloTablaXSL.selectSingleNode(busqueda);
    return getNodoValor(nodo);
}
function setNodoValor(nodo,valor){
    var hijoviejo=nodo.firstChild;
    //creo un nodo nuevo para ello uso cualquier hoja xml, en este caso datosXML, debe existir si no falla
    nodonuevo=datosXML.createTextNode(valor);
    nodo.replaceChild(nodonuevo,hijoviejo);        	
}
function setVariable(variable,valor){
    var busqueda='//xsl:variable[@name="'+variable+'"]';
    nodo=estiloTablaXSL.selectSingleNode(busqueda);
    var hijoviejo=nodo.firstChild;
    nodonuevo=estiloTablaXSL.createTextNode(valor);
    nodo.replaceChild(nodonuevo,hijoviejo);        	
}
//
// --------------------------------------------------------------
// Crea un objeto XMLHTTPREQUEST
// --------------------------------------------------------------
function getHttpRequest(){
	req=false;
	if(window.XMLHttpRequest){
		try{
			req= new XMLHttpRequest();
		} catch(e) {req = false;}
	}
	else if(window.ActiveXObject){
		try{
			req= new ActiveXObject("Msxml2.XMLHTTP");
		} catch(e) {
		try{
			req= new ActiveXObject("Microsoft.XMLHTTP");
		} catch (e) {req=false;}	
	}				
	}
	return req;
}
// --------------------------------------------------------------
// Cargamos xml SINCRONO puede parar el navegador
// El parametro indica la URL donde descargar el XML
// Utiliza un objeto XMLHTTPRequest
// --------------------------------------------------------------
function loadxml(url){  
	var http=getHttpRequest();
	if(http){
		http.open("GET",url,false);
		http.send(null);
		return http.responseXML;
	}
	else
		return false;	
}
// --------------------------------------------------------------
// Cargamos xml SINCRONO puede parar el navegador
// El parametro indica la URL donde descargar el XML
// Utiliza un objeto XMLHTTPRequest
// --------------------------------------------------------------
function loadhtml(url){  
	var http=getHttpRequest();
	if(http){
		http.open("GET",url,false);
		http.send(null);
		return http.responseText;
	}
	else
		return false;	
}

//Cargamos un codigo html directamente en un objeto 
// -------------------------------------------------------------------------------
// -------------------------------------------------------------------------------
function loadxmlpost(url,datos){
    var http=getHttpRequest();
    if(http) 
    {
        http.open("POST", url, false);
        http.setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=iso-8859-1');
        http.send(datos);
        return http.responseXML;
    }
}
//Cargamos un codigo html directamente en un objeto 
// -------------------------------------------------------------------------------
// -------------------------------------------------------------------------------
function loadxmlpostasinc(url,datos){
    var http=getHttpRequest();
    if(http) 
    {
        http.onreadystatechange = function() {
            if(http.readyState == 4) {               
		        http.onreadystatechange = function () {}; 
		        if(http.responseXML)
		            datosXML=http.responseXML;
		        else
		            alert(http.responseText);
                marcaCamposVisibles();
                if(datosXML && estiloTablaXSL){         
                    transformaXml(datosXML,estiloTablaXSL,'tabla');
                    cuandoscroll();
                }                           
	        }
        }    
        http.open("POST", url, true);
        http.setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=iso-8859-1');
        http.send(datos);        
    }
}


// --------------------------------------------------------------
// Realiza la transformación XSLT utilizando dos DOM XML, una de datos
// y otra de estilo conteniendo el XML y XSL respectivamente.
// El resultado de la transformación se vuelca en la la página XML
// como hijo del objeto destino
// --------------------------------------------------------------
function transformaXml(datos,estilo,destino){
	if(window.XSLTProcessor){
		var proc=new XSLTProcessor();
		proc.importStylesheet(estilo);
		var nuevoDocumento=proc.transformToFragment(datos,document);
		document.getElementById(destino).innerHTML="";
		document.getElementById(destino).appendChild(nuevoDocumento);
	}
	else{
        	var strxml=datos.transformNode(estilo);        
        	document.getElementById(destino).innerHTML=strxml;
	}
}
// --------------------------------------------------------------
// Carga DOM xml desde una URL, lo transforma con una hoja de estilo
// y lo coloca como hijo de un elemento HTML.
// Parametros, 
// url dirección internet de los datos xml
// estilo, dirección internet de la hoja de estilo
// 
// --------------------------------------------------------------
function marcaCamposVisibles(){
    //Primero marco todos con no visibles por defecto vienen como visibles
    var arrNodos=datosXML.selectNodes("//columnas/columna/visible");
    for(i=0;i<arrNodos.length;i++)
        setNodoValor(arrNodos[i],"no");
    var listacampos=datosXML.selectSingleNode('//listacampos').firstChild.nodeValue;
    var arraycampos=listacampos.split(',');
    for(i=0;i<arraycampos.length;i++)
    {
        var indice=parseInt(arraycampos[i]);
        var busqueda="//columnas/columna";
        var nodos=datosXML.selectNodes(busqueda)
        var nodo=nodos[indice -1];
        busqueda="visible";
        var nodo=nodo.selectSingleNode(busqueda);
        setNodoValor(nodo,"si");
    }
    
}

//Recarga solo los datos, mantiene la hoja de estilo, la transformación la hace el loadxmlpostasinc
//Es asincrono y por compatibilidad se ha de definir la url completa
function carganewxml(){
    location='index.php?option=com_empresas&task='+tasklistado+'&pagina='+pagina+'&filas='+filas+'&orden='+orden+'&tipo='+tipo+'&listacampos='+listacampos;
}


//Carga una hoja excel en una pagina web nuevo
function descargarExcel(){
	window.open('components/com_empresas/excel/index.php?orden='+orden+'&tipo='+tipo+'&idioma='+idioma+'&listado='+listado,'_blank');
}
//Carga una hoja excel en una pagina web nuevo
function descargarPdf(){
	window.open('components/com_empresas/print/index.php?orden='+orden+'&tipo='+tipo+'&idioma='+idioma+'&listado='+listado,'_blank');
}


//Hemos variado algun dato en memoria, solo hay que transformar
//Recarga solo los datos, mantiene la hoja de estilo
function cargasamexml(){
    if(datosXML && estiloTablaXSL){         
       transformaXml(datosXML,estiloTablaXSL,'tabla');
       cuandoscroll();
    }                           
}
//Cargamos un codigo html directamente en un objeto 
// -------------------------------------------------------------------------------
// -------------------------------------------------------------------------------
function LoadHttp2Div(url,datos,div){
    var http=getHttpRequest();
    if(http) 
    {
        http.onreadystatechange = function() {
            if(http.readyState == 4) {               
		        http.onreadystatechange = function () {};   
                document.getElementById(div).innerHTML=http.responseText; 
	        }
        }
        http.open("POST", url, true);
        http.setRequestHeader('Content-Type','application/x-www-form-urlencoded;charset=iso-8859-1');
        http.send(datos);
    }
}
// -------------------------------------------------------------------------------
// -------------------------------------------------------------------------------
function cargahtml(url,datos,div){
    resultado= new LoadHttp2Div(url,datos,div);
}
// -------------------------------------------------------------------------------
// -------------------------------------------------------------------------------
// Los dialogos se cargan en un iframe (framedialogo) y tienen una funcion de retorno
// en su evento onload que pasa una cadena vacia o el contenido del dialogo en html.
// -------------------------------------------------------------------------------
function retornodialogo(texto){
    var divdialogo=document.getElementById('divdialogo');
    if(texto!=""){
        divdialogo.innerHTML=texto;
        divdialogo.style.display='block';
        var texto=document.getElementById('texto');
        if(texto) texto.focus();
    }
    else{
        divdialogo.style.display='none';
        pagina=1;
        carganewxml();
    }       
}
// -------------------------------------------------------------------------------
// Existe un solo div para los dialogos si se pulsa cancelar se oculta simplemente
// 
// -------------------------------------------------------------------------------
function canceladlg(objetoboton){
    var divdialogo=document.getElementById('divdialogo');
    divdialogo.style.display='none';
}
// -------------------------------------------------------------------------------
// -------------------------------------------------------------------------------
// -------------------------------------------------------------------------------

// FUNCIONES ESPECIFICAS DE LA APLICACIÓN

//RECALCULO DE ALTO DE PANTALLA Y FILAS QUE ENTRAN EN LA MISMA
// --------------------------------------------------------------
// Recalculafilas verifica el alto del cliente de body
// --------------------------------------------------------------
function recalculaFilas(){
   altopantalla=parseInt(document.getElementsByTagName('body')[0].clientHeight);
   var filasnew=parseInt((altopantalla- 200)/18);
   if(Math.abs(filas-filasnew)>1) filas=filasnew;
}

    
    
function obtieneCampo(id,campo){
    var xpath="//fila[@id = '"+id+"']/"+campo;
    var nodo=datosXML.selectSingleNode(xpath);
    return(parseFloat(getNodoValor(nodo)));
}
    


//---------------------------------------------------------------
// EVENTOS on
//---------------------------------------------------------------
function cuandoscroll(){
var x=parseInt(document.body.scrollLeft) + 5;
colocaVentanas(x);
}
function cuandohaceclicksobrefila(objetofila){
    location='index.php?option=com_empresas&task='+taskficha+'&id='+objetofila.id;
}
function imagenonload(){
		new Effect.Appear('fade_imagen');
}
function cuandoestasobrefila(objetofila,imagen){
    if(objetofila.className!="filaseleccionada")
        objetofila.className="filaactual";
/*
	if(imagen!='') {
		if(!document.getElementById('fade_imagen'))
		{
			fadeImagen=document.createElement('IMG');
			fadeImagen.setAttribute('id','fade_imagen');
			fadeImagen.setAttribute('style',"position: absolute; z-index: 999; float: none; display:none;");
			document.getElementsByTagName('BODY')[0].appendChild(fadeImagen);
		}
		fadeImagen=document.getElementById('fade_imagen');
		var offsets = Position.cumulativeOffset(objetofila);
		fadeImagen.style.left=(offsets[0]+500)+'px';
		fadeImagen.style.top=(offsets[1]+25) + 'px';
		Position.absolutize(fadeImagen);		
		fadeImagen.style.width="";
		fadeImagen.style.height="";
		fadeImagen.onload=imagenonload;
		fadeImagen.src='http://sr5.ardan.es/expgal/imagenes/'+directorioimagenes+'/'+imagen;
	}
*/	
    return;
}
function cuandosaledefila(objetofila){
//	if(document.getElementById('fade_imagen'))
//		document.getElementById('fade_imagen').style.display="none";
    if(objetofila.className!="filaseleccionada")
        objetofila.className=objetofila.getAttribute("miclase");
    return;
}


function menuover(objeto){
	objeto.className='lineadover';
}
function menuout(objeto){
	objeto.className='linead';
}




// --------------------------------------------------------------
// Funciones de paginación
// --------------------------------------------------------------
// Ir a pagina, valores raros para salto 0=primera null=ultima
function iraPagina(objeto,salto)
{
    if(salto==null)
        pagina=parseInt(objeto.getAttribute("ultima"));
    else
    {
        if(salto==0)
            pagina=1;
        else
            pagina=parseInt(objeto.getAttribute("pagina"))+salto;
        if(salto>0)
            if(pagina>parseInt(objeto.getAttribute("ultima")))
                pagina=parseInt(objeto.getAttribute("ultima"))
    }
    if (pagina<1) pagina=1;
    carganewxml();
}
function irNumeroPagina(objeto)
{
    pagina=document.getElementById('clNumPag').value;
    ultima=objeto.getAttribute("ultima")
    try{
        pagina=parseInt(pagina);
        ultima=parseInt(ultima);
    }
    catch(error){pagina=1;}
    if( pagina>0 && pagina>ultima )pagina=ultima;
    if (pagina<1) pagina=1;
    carganewxml();
}

function variaFilas(objeto,cantidad)
{
    filas=parseInt(objeto.getAttribute("filaspagina"))+cantidad;
    carganewxml();
}



function alternaFiltrar(){
    var opcionactual=parseInt(getVariable('opcionFiltrar'));
    opcionactual= opcionactual==0 ? 1 : 0;
    setVariable('opcionFiltrar',opcionactual);
    cargasamexml();
}

function alternaOrdenar(){
    var opcionactual=parseInt(getVariable('opcionOrdenar'));
    opcionactual= opcionactual==0 ? 1 : 0;
    setVariable('opcionOrdenar',opcionactual);
    cargasamexml();
}

function alternaVerTodos(){
	return;
    window.scrollTo(0,0);
    colocaVentanas(5);
    var opcionactual=parseInt(getVariable('opcionVerTodos'));
    opcionactual= opcionactual==0 ? 1 : 0;
    setVariable('opcionVerTodos',opcionactual);
    cargasamexml();
}


function ordena(campo,tipodatos){
	if(orden==campo)
		tipo=tipo=="asc" ? "desc" : "asc";
	else
		tipo="asc";
    orden=campo;
    carganewxml();
}




