function agregarFuncionJs(funciones,llamarFuncion){
	var vFunciones = new Array();
	vFunciones = explotarCadena(funciones,',');

	cCargaFuncion++;
	acCargaFuncion[cCargaFuncion]=vFunciones.length;
	acCargandoFuncion[cCargaFuncion]=0;
	//alert(funciones + ',' + llamarFuncion + '->' + acCargaFuncion[cCargaFuncion]);
	for(k=0;k<vFunciones.length;k++){
		funcion=vFunciones[k];
		var i=0;
		var b=0;
		for(i=0;i<funcionesJsCargadas.length;i++){
			if(funcionesJsCargadas[i]==funcion){
				b=1;
				i=funcionesJsCargadas.length;
			}
		}
		if(b==0){
			var elemento=document.createElement('script'); 
			elemento.setAttribute('type','text/javascript'); 
			elemento.setAttribute('src',funcion);
			if(llamarFuncion!=''){
				elemento.setAttribute('onLoad',"llamadaFuncionPosAgregarFuncionJs(" + cCargaFuncion + ",'" + llamarFuncion + "');");
				elemento.onreadystatechange = function () {
					if (this.readyState == 'loaded' || this.readyState == 'complete') {
						llamadaFuncionPosAgregarFuncionJs(cCargaFuncion,llamarFuncion);
					}
				}
			}
			document.getElementsByTagName('head')[0].appendChild(elemento); 
			funcionesJsCargadas[funcionesJsCargadas.length]=funcion;
		}else{
			llamadaFuncionPosAgregarFuncionJs(cCargaFuncion,llamarFuncion);
		}
	}
}

function llamadaFuncionPosAgregarFuncionJs(cCargaFuncion,llamarFuncion){
	acCargandoFuncion[cCargaFuncion]++;
	//alert(acCargaFuncion[cCargaFuncion] + '=' + acCargandoFuncion[cCargaFuncion]);
	if(acCargaFuncion[cCargaFuncion]==acCargandoFuncion[cCargaFuncion]){
		if(llamarFuncion!=''){
			//alert(llamarFuncion);
			setTimeout(llamarFuncion, 1);
		}
	}
}

function agregarEstiloCss(estilo){
	var i=0;
	var b=0;
	for(i=0;i<estilosCssCargados.length;i++){
		if(estilosCssCargados[i]==estilo){
			b=1;
		}
	}
	if(b==0){
		var elemento=document.createElement('link'); 
		elemento.setAttribute('rel','stylesheet');
		elemento.setAttribute('href',estilo);
		elemento.setAttribute('type','text/css');
		document.getElementsByTagName('head')[0].appendChild(elemento); 
		estilosCssCargados[estilosCssCargados.length]=estilo;
	}
}

function cargarSeccion(seccion,aplicacion,parametros,elementoDest,aplicarSiempre){
	if(aplicacion==null){aplicacion='';}
	if(parametros==null){parametros='';}
	if(elementoDest==null){elementoDest='entorno_contenido';}
	if(aplicarSiempre==null){aplicarSiempre=true;}
	
	if(elementoDest=='entorno_contenido'){
		document.location.href = '#cuerpo';
	}
	var procesar=0;
	if(elementoDest=='ventana'){
	    $('#cargandoVentana').show();
		nivelVentana++;
		if(ventanasCargadas<nivelVentana){
			// cargar ventana al final del body
			var onLoad = "cargarSeccion('" + seccion + "','" + aplicacion + "','" + codificarParametros(parametros) + "','ventana" + nivelVentana + "_contenido');";
			cargarVentana(onLoad);
		}else{
			//$("#ventana" + nivelVentana).draggable();

			$("#ventanaRecuadro" + nivelVentana).css('top', (posClickY-100) + 'px')
			mostrar('ventana' + nivelVentana);
			elementoDest='ventana' + nivelVentana + '_contenido';
			procesar=1;
		}
	}else{
		if($('#' + elementoDest).length){
			if(seccionesCargadas[elementoDest]!=seccion + ',' + aplicacion + ',' + parametros + ',' + aplicarSiempre){
				seccionesCargadas[elementoDest]=seccion + ',' + aplicacion + ',' + parametros + ',' + aplicarSiempre;
				procesar=1;
			}else{
				if(aplicarSiempre==true){
					procesar=1;
				}
			}
		}else{
			alert('El elemento div id="' + elementoDest + '" no se encuentra en el documento');
		}
	}
	if(procesar==1){
    if(elementoDest!='cuerpo'){
		  cargando(elementoDest,1);
    }
		var ajax=nuevoAjax();
		ajax.open("POST", "index.php?o=secciones",true);
		ajax.onreadystatechange=function(){
			if(ajax.readyState==4){
				var row = procesarCadena(ajax.responseText);
				if(ajax.responseText.substr(0,12)!='esq#->#ok#*#'){
					$('#' + row['elementoDest']).html('<b>DATOS FUERA DEL ESQUEMA NORMAL:</b><br><br>' + ajax.responseText);
				}else{
					cargarEnlaceDirecto();
					$('#' + row['elementoDest']).html(row['html']);
					mostrarOcultarSegunPermisos(row['permisosHabilitados'],row['permisosNoHabilitados']);
					
					if((row['exigir_login']=='t')&&(row['estado_login']=='f')){
						var accionLogin = "cargarSeccion(\'inicio\');";
						cargarSeccion('usuarios','logueo','ventana=no&accionLogin=' + accionLogin,'entorno_contenido',false);
					}
					
					if(row['onLoad']!=''){
						setTimeout(row['onLoad'], 1);
					}
				}
        $('#cargandoVentana').hide();
			}
		}
		ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		if(parametros!=''){
			parametros=descodificarParametros(parametros);
			parametros='&' + parametros;
		}
		ajax.send('seccion=' + seccion + '&aplicacion=' + aplicacion + '&elementoDest=' + elementoDest + parametros);
	}
}

function cargarVentana(onLoad){
	// alert('cargarVentana(' + onLoad + ')');
	var ajax=nuevoAjax();
	ajax.open("POST", "index.php?o=ventana",true);
	ajax.onreadystatechange=function(){
		if(ajax.readyState==4){
			//alert(ajax.responseText);
			var row = procesarCadena(ajax.responseText);
			var elemento=document.createElement('div');
			elemento.setAttribute('id','ventana' + row['nivelVentana']);
			elemento.innerHTML=row['html'];
			document.getElementById('ventanas').appendChild(elemento);			
			if(row['onLoad']!=''){
				setTimeout(row['onLoad'], 1);
			}
			
			//agregarFuncionJs('fuentestra/funciones/js/jquery.ui.core.js,fuentestra/funciones/js/jquery.ui.widget.js,fuentestra/funciones/js/jquery.ui.mouse.js,fuentestra/funciones/js/jquery.ui.draggable.js',dragVentana());
			
			$("#ventana" + nivelVentana).draggable({ disabled: true });

/*			
$( ".selector" ).draggable({ disabled: true });
var disabled = $( ".selector" ).draggable( "option", "disabled" );
$( ".selector" ).draggable( "option", "disabled", true );
*/
			
			ventanasCargadas++;
		}
	}
	ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	ajax.send('nivelVentana=' + nivelVentana + '&onLoad=' + onLoad + '&posClickX=' + posClickX + '&posClickY=' + posClickY);
}

function dragVentana(){
	$("#ventana" + nivelVentana).draggable( "option", "disabled", false );
}
function noDragVentana(){
	$("#ventana" + nivelVentana).draggable( "option", "disabled", true );
}

function rpcSeccion(seccion,accion,vParametros,accionSiguiente){
	var ajax=nuevoAjax();
	ajax.open("POST", "index.php",true);
	ajax.onreadystatechange=function(){
		if(ajax.readyState==4){
			var row = procesarCadena(ajax.responseText);
			if(ajax.responseText.substr(0,12)!='esq#->#ok#*#'){
				alert('DATOS FUERA DEL ESQUEMA NORMAL: ' + ajax.responseText);
			}else{
				if(row['mensaje']!=''){
					dialogo(row['mensaje'],row['mensajeBotones']);
				}else{
					if(row['accionSiguiente']!=''){
						if(row['accionSiguiente'].substr(0,3)=='id:'){
							var idElemento = row['accionSiguiente'].substr(3,row['accionSiguiente'].length-3);
							if(document.getElementById(idElemento)=='[object HTMLInputElement]'){
								$('#' + idElemento).val(row['html']);
							}else{
								$('#' + idElemento).html(row['html']);
							}
						}else if(row['accionSiguiente'].substr(0,4)=='id.:'){
							var idElemento = row['accionSiguiente'].substr(4,row['accionSiguiente'].length-4);
							if(document.getElementById(idElemento)=='[object HTMLInputElement]'){
								$('#' + idElemento).val($('#' + idElemento).val() + row['html']);
							}else{
								$('#' + idElemento).html($('#' + idElemento).html() + row['html']);
							}
						}else if(row['accionSiguiente'].substr(0,3)=='fn:'){
							var nombreFuncion = row['accionSiguiente'].substr(3,row['accionSiguiente'].length-3);
							rowRPC = row;
							setTimeout(nombreFuncion, 1);
						}	
					}
				}
				
				if((row['exigir_login']=='t')&&(row['estado_login']=='f')){
					var accionLogin = "cargarSeccion(\'inicio\');";
					cargarSeccion('usuarios','logueo','ventana=no&accionLogin=' + accionLogin,'entorno_contenido',false);
				}
				
				mostrarOcultarSegunPermisos(row['permisosHabilitados'],row['permisosNoHabilitados']);
			}
		}
	}
	ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	var cparametros='';
	var auxValor='';
	cparametros+='o=secciones';
	cparametros+='&seccion=' + seccion;
	cparametros+='&accionRPC=' + accion;
	cparametros+='&accionSiguiente=' + accionSiguiente;
	for(name in vParametros){
		auxValor = vParametros[name];
		if((auxValor!=true)&&(auxValor!=false)&&(auxValor!=undefined)){
			auxValor=auxValor.toString();
			auxValor=replaceAll(auxValor,'&','746t985otroParametro746t985');
		}
		cparametros+='&' + name + '=' + auxValor;
	}
	cparametros=replaceAll(cparametros,"+",'|signomas|');
	ajax.send(cparametros);
}

function mostrarOcultarSegunPermisos(permisosHabilitados,permisosNoHabilitados){
	var i=0;
	if(permisosHabilitados!=''){
		var vPermisosHabilitados = new Array();
		vPermisosHabilitados = explotarCadena(permisosHabilitados,',');
		for(i=0;i<vPermisosHabilitados.length;i++){
			//alert( 'show: ' + '.permiso_' + vPermisosHabilitados[i]);
			$('.permiso_' + vPermisosHabilitados[i]).show();
		}
	}
	
	if(permisosNoHabilitados!=''){
		var vPermisosNoHabilitados = new Array();
		vPermisosNoHabilitados = explotarCadena(permisosNoHabilitados,',');
		for(i=0;i<vPermisosNoHabilitados.length;i++){
			//alert( 'hide: ' + '.permiso_' + vPermisosNoHabilitados[i]);
			$('.permiso_' + vPermisosNoHabilitados[i]).hide();
		}
	}
}

function nuevoAjax(){
	var xmlhttp=false;
 	try {
 		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
 	} catch (e) {
 		try {
 			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
 		} catch (E) {
 			xmlhttp = false;
 		}
  	}

	if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
 		xmlhttp = new XMLHttpRequest();
	}
	return xmlhttp;
}

function procesarCadena(cadena){
	var v1 = new Array();
	var v2 = new Array();
	var row = new Array();
	
	separadorAsignacion = '#->#';
	separadorCampo = '#*#' + String.fromCharCode(13) + String.fromCharCode(10);
	v1=explotarCadena(cadena,separadorCampo);
	for(i=0;i<v1.length;i++){
		v2=explotarCadena(v1[i], separadorAsignacion);
		row[v2[0]]=v2[1];
	}
	return row;
}

function explotarCadena(cadena,separador){

  var k = 0;
  var c = 0;
  var subCadena = '';
  var v = new Array();

  for(k=0;k<cadena.length;k++){
    if(cadena.substr(k,separador.length)==separador){
      v[c]=subCadena;
      subCadena='';
      c++;
      k+=separador.length;
    }
    subCadena+=cadena.substr(k,1);
  }
  v[c]=subCadena;
  return v;
}

function cargando(elementoId,tipo,detalle){
	var imagen='';
	if(detalle==null){
		detalle='';
	}else{
		detalle='<td>' + detalle + '</td>';
	}
	
	if(tipo==null){tipo=1;}
	if(tipo==1){imagen='ajax-loader-circ-c-gris.gif';}
	if(tipo==2){imagen='ajax-loader-horiz-c-gris.gif';}
	if(tipo==3){imagen='ajax-loader-horiz-g-gris.gif';}
	if(tipo==4){imagen='ajax-loader-horiz-m-gris.gif';}
	$('#' + elementoId).html('<table><tr>' + detalle + '<td><img src="fuentestra/imagenes/loader/' + imagen + '"></td></tr></table>');
}

function codificarParametros(cadena){
	cadena=replaceAll(cadena,'=','746t985esIgual746t985');
	cadena=replaceAll(cadena,'&','746t985otroParametro746t985');
	cadena=replaceAll(cadena,"'",'746t985comillaSimple746t985');
	return cadena;
}

function descodificarParametros(cadena){
	cadena=replaceAll(cadena,'746t985esIgual746t985','=');
	cadena=replaceAll(cadena,'746t985otroParametro746t985','&');
	cadena=replaceAll(cadena,'746t985comillaSimple746t985',"'");
	
	return cadena;
}

function dialogo(texto,botones,imagen){
	if(imagen==null){imagen='advertencia';}
	if(botones==null){botones='aceptar';}

	var parametros = '';
	parametros+='texto=' + texto;
	parametros+='&botones=' + codificarParametros(botones);
	parametros+='&imagen=' + imagen;
	parametros+='&nivelVentana=' + (nivelVentana+1);
	cargarSeccion('dialogo','',parametros,'ventana');
}

function replaceAll(text,stringToFind,stringToReplace){
		if(text==null){

			return '';
		}
		if(text==''){
			return '';
		}
    var index = text.indexOf(stringToFind);
    while(index != -1){
        text = text.replace(stringToFind,stringToReplace);
        index = text.indexOf(stringToFind);
    }
    return text;
}
