/*
 * @Package: essAjax
 * @Authors: H4 and others
 * @Description: Ajax library for essCore.
 * @RevDate: 20090414
 * 
 */

var DEBUG=false;
/**
 * Se inicializa servidor a falso, para que luego lo autodetecte y controle 
 * los hosts_permitidos.
 */
var servidor=false;
var hosts_permitidos= new Array("corazonesnuevos.com.ar");

function obtener_servidor(){
	var c,n,h,t;
	h = window.location.host;
	n = false;
	try{
		n = arguments[0]!=undefined;
                if (DEBUG) alert(n);
	}
	catch(e){
            if (DEBUG) alert(e);
        }
	for(c=0;c<hosts_permitidos.length;c++){
            if (DEBUG) alert(c+": "+hosts_permitidos[c]);
	    if (n!=false) {
			if (hosts_permitidos[c]==h) {
				servidor=h;
				break;
			}
        }
	    else {
	    	t = new RegExp(hosts_permitidos[c],"gim");
			m = t.test(h);
			if (m!=false) {
				servidor=h;
				break;
			}
	    }
	}
	if (DEBUG) {
            if (servidor===false) alert("Servidor No Permitido: "+h);
        }
	return servidor;
}

obtener_servidor();

var cliente=false;

function obtener_cliente(){
	if (window.ActiveXObject) cliente = "IE";
	else cliente = "Mozilla";
	return cliente;
}

obtener_cliente();

function ess_ajax() {
	var xmlhttp = false;
	/*@cc_on @*/
	/*@if (@_jscript_version >= 5)
	var c;
	var msxml = ["Msxml2.XMLHTTP.5.0","Msxml2.XMLHTTP.4.0", "Msxml2.XMLHTTP.3.0","Msxml2.XMLHTTP","Microsoft.XMLHTTP"];
	for(var c=0; !xmlhttp && c<msxml.length; c++) {
	    try{
	    	xmlhttp = new ActiveXObject(msxml[c]);
	    }
	    catch(e) {
	    	xmlhttp = false;
	    }
	}
	@end @*/

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

function get_data_xml(ess_ajax){
	return ess_ajax.responseXML;
}

function get_html(url, parametros, metodo){
	if (servidor){
		var ess = new ess_ajax();
		try {
			ess.open(metodo, url, false);
		}
		catch(error){
	  		alert("No se puede conectar con el Orígen\n"+error);
	  	}
	  	
		if (metodo.toUpperCase()=="POST") ess.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
		else ess.setRequestHeader("Content-Type","text/html; charset=UTF-8");
	  	
	  	try{
	  		ess.send(parametros);
	  		//control status:
	  	}
	  	catch(error){
	  		alert("Error al Enviar datos\n"+error);
	  	}
	}
	else {
		if(DEBUG) alert("Servidor No Permitido.\nPosible XSS. Consulte con su Webamaster.");
	}
	return ess;
}

function put_html(destino, origen){
	//destino as DOM object
	//origen as ess_ajax object
	if ((window)&&(window.netscape)&&(window.netscape.security)){
		rng = document.createRange();
		el = document.getElementById(destino);
		rng.setStartBefore(el);
		htmlFrag = rng.createContextualFragment(origen.responseText);
		while (el.hasChildNodes()) el.removeChild(el.lastChild);
		el.appendChild(htmlFrag);
	}
	else {
		try{
			document.getElementById(destino).innerHTML=origen.responseText;
		}
		catch(error){
			if (DEBUG) alert("No se pudo Insertar el Código DHTML\n"+error);
		}
	}
}


function encodeURLString(string) {
        var value;
        
        varArray = string.split('&');
        for (i = 0; i < varArray.length; i++){
            evcont = 'value = document.getElementById(\''+varArray[i]+'\').value;';
            eval(evcont);
           
            varArray[i] = encVar(varArray[i], value);
        }
    return varArray.join('&');
}
    
function encVar(name, value) {
        var varString = escape(name) + "=" + escape(value);
        return varString;
}
    
function agregar_nodo(id_nodo,id_padre,tag){
	var nodo;
	if (id_padre.toUpperCase()=='BODY') objeto = this.body;
	else objeto = document.getElementById(id_padre);
   	nodo = document.createElement(tag);
   	nodo.id=id_nodo;
   	return nodo;
}

function remover_nodo(id_nodo,id_padre){

	var nodo;
	var rNodo;
	var padre;

	try {			
		if (id_padre.toUpperCase()=='BODY') padre = this.body;
		else padre = document.getElementById(id_padre);
		nodo = document.getElementById(id_nodo);
		rNodo = padre.removeChild(nodo);
	}
	catch(error){
		if (DEBUG) alert('Objeto no encontrado\n [ess.ajax.js]remover_nodo(id_nodo, id_padre)\n\n' + error);
	}
	return rNodo;
}

function make_post(padre){

	var datos = "";
	var i;
	
	try{
		var objeto = document.getElementById(padre);
	}
	catch(e){}
	for (i=0;i<objeto.childNodes.length;i++){
		if (objeto.childNodes[i].nodeName=="INPUT"||objeto.childNodes[i].nodeName=="SELECT") {
			//alert (objeto.childNodes[i].nodeName+"="+objeto.childNodes[i].value+"|"+objeto.childNodes[i].id+objeto.childNodes[i].nodeValue);
			datos += encVar(objeto.childNodes[i].id,objeto.childNodes[i].value)+"&";
		}
	} 
	return datos;
}

function make_post_rec(padre){

	var datos1 = "";
	var x;
	
	try{
		var objeto1 = document.getElementById(padre);
	}
	catch(e){}
	for (x=0;x<objeto1.childNodes.length;x++){
		if (objeto1.childNodes[x].nodeName=="FIELDSET"){
			datos1 += make_post(objeto1.childNodes[x].id);
		}
		if (objeto1.childNodes[x].nodeName=="INPUT"||objeto1.childNodes[x].nodeName=="SELECT"){

			datos1 += encVar(objeto1.childNodes[x].id,objeto1.childNodes[x].value)+"&";
		}
	}
	return datos1;
}

function limpiar_componente(campos){
	var objeto = campos.split(','); //lista separada por comas sin espacios!
	var campo,i;
	for (i=0;i<objeto.length;i++){
		campo = document.getElementById(objeto[i]);
		if (campo.nodeName=="INPUT") {
			campo.value='';
		}
		if (campo.nodeName=="SELECT") {
			campo.selectedIndex=0;
		}
	}
	return true;
}

function remover_componente(nombre_capa, foco) {

	try {
	var objeto = document.getElementById(nombre_capa);
	objeto.parentNode.removeChild(objeto);
	}
	catch(e){
		if (DEBUG) alert(' [ess.ajax.js]remover_componente(nombre_capa, foco)\n\n'+e);
	}

/*			
	if (document.getElementById(nombre_capa).style.visibility='hidden') {
		try {
			document.getElementById(foco).focus();
		} catch(e){}
		return true;
	}	
	else return false;
*/
}


function obj_validation(cadena,especial){

	var error = false;
	var banned= new RegExp("[<>\/\\\*\?\}\{\+=&%\$#@\|\"\'!`\^]|[;\.]");
	var valid= new RegExp("[A-Za-z0-9_]");
	
	if (especial==true) {
		banned= new RegExp("[<>\/\*\?\}\{\+&%\$#@\|!\^]");
		valid = new RegExp("[\(]|[\)][;\.]|[,A-Za-z0-9_?????????????????????]");
	}

	banned.test(cadena)&&cadena!=""?error='Caracteres inv?lidos':null;
	!valid.test(cadena)&&cadena!=""?error='Caracteres inv?lidos':null;
	
	return error;
}

function dom_element(){
	this.label = new Array();
	this.id = new Array();
	this.type = new Array();
	this.type_length = new Array();
	this.control_type = new Array();
	this.default_value = new Array();
	this.constraint_value = new Array();
	this.constraint_label = new Array();
	this.extra_code = new Array();
}

function dom_form_attributes(name, action, method, enctype, accept, onsubmit, onreset, accept_charset, target){
	this.name = name;
	this.action = action;
	this.method = method;
	this.enctype = enctype;
	this.accept = accept;
	this.onsubmit = onsubmit;
	this.onreset = onreset;
	this.accept_charset = accept_charset;
	this.target = target;
}

function parse_dom_elements(campos, tabla, condicion){

	var error = false;
	var parsed = new dom_element;
	var i = 0;
	var k = 0;
	var aux = new Array();
	var default_values = new Array();
	var constraint_values = new Array();
	var constraint_labels = new Array();
	var aux_constraint = new Array();

	for(i=0;i<campos.length;i++){
		aux = campos[i].split('|');
		
		if (obj_validation(aux[4],true)==false){
			aux[4]!="null" && aux[4].indexOf('[')==-1?default_values[i]=aux[4]:default_values[i]="NULL";
		}
		else alert(aux[4]);
		
		if (obj_validation(aux[5],true)==false){
			if (aux[5]!="null" && aux[5].indexOf('[')==-1 && aux[5].indexOf('.'!=-1)){
				aux_constraint = aux[5].split('.');
				constraint_values[i] = "["+get_fields_values(aux_constraint[0], aux_constraint[1], '').replace(/\|/g,',')+"]";
			}
			else constraint_values[i]=aux[5];
		}
		else alert(aux[5]);
		
		if (obj_validation(aux[6],true)==false){
			if (aux[6]!="null" && aux[6].indexOf('[')==-1 && aux[6].indexOf('.'!=-1)){
				aux_constraint = aux[6].split('.');
				constraint_labels[i] = "["+get_fields_values(aux_constraint[0], aux_constraint[1], '').replace(/\|/g,',')+"]";
			}
			else constraint_labels[i]=aux[6];
		}
		else alert(aux[6]);
	}
	
	default_values = get_fields_values(tabla, default_values, condicion).split('|');

	for(i=0;i<campos.length;i++){
		aux = campos[i].split('|');

		obj_validation(aux[0],true)?alert(aux[0]):parsed.label[i]=aux[0];
		obj_validation(aux[1],false)?alert(aux[1]):parsed.id[i]=aux[1];
		obj_validation(aux[2],true)?alert(aux[2]):parsed.type[i]=aux[2];
		aux[2].indexOf('(')!=-1?parsed.type_length[i]=aux[2].substring(aux[2].indexOf('(')+1,aux[2].indexOf(')')):null;
		obj_validation(aux[3],false)?alert(aux[3]):parsed.control_type[i]=aux[3];
		default_values[i]!=undefined?parsed.default_value[i]=default_values[i]:parsed.default_value[i]="";
		constraint_values[i]!=undefined?parsed.constraint_value[i]=constraint_values[i]:parsed.constraint_value[i]="";
		constraint_labels[i]!=undefined?parsed.constraint_label[i]=constraint_labels[i]:parsed.constraint_label[i]="";
		obj_validation(aux[7],true)?alert(aux[7]):parsed.extra_code[i]=aux[7];
	}

	return error?error:parsed;
}

/* DOM ELEMENTS FUNCTIONS */

function hidden(label, id, type, default_value, constraint_value, constraint_label, control_length, extra_code){
	var dom_object = "";

	dom_object+="<INPUT TYPE='hidden' id='"+id+"' name='"+id+"' value='"+default_value+"'/>";
	return dom_object;
}

function text(label, id, type, default_value, constraint_value, constraint_label, control_length, extra_code){
	var dom_object = "";
	var dom_object_size = 0;
	var dom_object_maxlength = 0;
	var aux = new Array();

	aux = control_length.split(',');
	dom_object_size = aux[0];
	dom_object_maxlength = aux[1];
	
	dom_object="<LABEL FOR='"+id+"'>"+label+": </LABEL>";
	dom_object+="<INPUT TYPE='text' SIZE='"+dom_object_size+"' MAXLENGTH='"+dom_object_maxlength+"' id='"+id+"' name='"+id+"' value='"+default_value+"'/>";
	return dom_object;
}

function file(label, id, type, default_value, constraint_value, constraint_label, control_length, extra_code){
	var dom_object = "";
	var dom_object_size = 0;
	var dom_object_maxlength = 0;
	var aux = new Array();

	aux = control_length.split(',');
	dom_object_size = aux[0];
	dom_object_maxlength = aux[1];
	
	dom_object="<LABEL FOR='"+id+"'>"+label+": </LABEL>";
	dom_object+="<INPUT TYPE='file' SIZE='"+dom_object_size+"' MAXLENGTH='"+dom_object_maxlength+"' id='"+id+"' name='"+id+"' value='"+default_value+"'/>";
	return dom_object;
}

function select(label, id, type, default_value, constraint_value, constraint_label, control_length, extra_code){
	var dom_object = "";
	var options_values = new Array();
	var options_labels = new Array();
	var i = 0;
	var aux = "";
	var options = "";
	//alert(default_value);

	dom_object="<LABEL FOR='"+id+"'>"+label+": </LABEL>";
	dom_object+="<SELECT id='"+id+"' name='"+id+"'>";
	
	if (constraint_value.indexOf('[')!=-1){
		aux = constraint_value.substring(constraint_value.indexOf('[')+1,constraint_value.indexOf(']'));
		options_values = aux.split(',');
	}
	
	if (constraint_label.indexOf('[')!=-1){
		aux = constraint_label.substring(constraint_label.indexOf('[')+1,constraint_label.indexOf(']'));
		options_labels = aux.split(',');
	}
	
	//Default Option
	if (control_length!=""){
		aux = control_length.split(',');
		options+="<OPTION value='"+aux[0]+"' selected>"+aux[1]+"</OPTION>";
	}

	for(i=0;i<options_values.length;i++){
		options+="<OPTION value='"+options_values[i]+"'>"+options_labels[i]+"</OPTION>";
	}
	dom_object+=options;
	dom_object+="</SELECT>";
	return dom_object;
}

function textarea(label, id, type, default_value, constraint_value, constraint_label, control_length, extra_code){
	var dom_object = "";
	var dom_object_cols = 0;
	var dom_object_rows = 0;
	var aux = new Array();

	aux = control_length.split(',');
	dom_object_cols = aux[0];
	dom_object_rows = aux[1];
	
	dom_object="<LABEL FOR='"+id+"'>"+label+": </LABEL>";
	dom_object+="<TEXTAREA COLS='"+dom_object_cols+"' ROWS='"+dom_object_rows+"' id='"+id+"' name='"+id+"'>"+default_value+"</TEXTAREA>";
	return dom_object;
}

function button(label, id, type, default_value, constraint_value, constraint_label, control_length, extra_code){
	var dom_object = "";

	dom_object+="<INPUT TYPE='"+type+"' id='"+id+"' name='"+id+"' value='"+label+"' "+extra_code+" />";
	return dom_object;
}

function radio(label, id, type, default_value, constraint_value, constraint_label, control_length, extra_code){

}

function checkbox(label, id, type, default_value, constraint_value, constraint_label, control_length, extra_code){

}

function make_objects(label, id, type, type_length, control_type, default_value, constraint_value, constraint_label, extra_code){
	var cad_obj = "";
	var control = new String;
	var control_length = new String;
	
	if (control_type.indexOf('(')!=-1) {
		control=control_type.substring(0,control_type.indexOf('('));
		control_length=control_type.substring(control_type.indexOf('(')+1,control_type.indexOf(')'));
	}
	cad_obj = "var obj = "+control+"('"+label+"', '"+id+"','"+type+"' , '"+default_value+"', '"+constraint_value+"', '"+constraint_label+"', '"+control_length+"', '"+extra_code+"');";
	eval(cad_obj);
	return obj;
}


function make_form(parsed, html_object, atributos){
	
	var error = false;
	var id = "";
	var name = "";
	var i = 0;
	var obj = "";
	var dom = ""
	var dom_object = new Object;
	
	for (i=0;i<parsed.label.length;i++){
		obj+= make_objects(parsed.label[i],parsed.id[i],parsed.type[i],parsed.type_length[i],parsed.control_type[i],parsed.default_value[i],parsed.constraint_value[i],parsed.constraint_label[i], parsed.extra_code[i]); 
	}
	dom+="<HTML><BODY><FORM name='"+atributos.name+"' id='"+atributos.name+"' action='"+atributos.action+"' method='"+atributos.method+"' enctype='"+atributos.enctype+"' accept='"+atributos.accept+"' accept-charset='"+atributos.accept_charset+"' target='"+atributos.target+"' onsubmit='"+atributos.onsubmit+"' onreset='"+atributos.onreset+"'>";
	dom+=obj;
	dom+="</FORM></BODY></HTML>";
	
	dom_object = document.getElementById(html_object);
	dom_object.innerHTML = dom;
}

function change_properties(form_name,elements,property,value){
	if (elements.indexOf(',')!=-1){
		aux = elements.split(',');
		for (i=0;i<aux.length;i++) {
			cad_obj = "document.getElementById(form_name)."+aux[i]+"."+property+"="+value+";";
			eval (cad_obj);
		}
	}
	else if (elements!=""){
		cad_obj = "document.getElementById(form_name)."+elements+"."+property+"="+value+";";
		eval (cad_obj);
	}
}

/*

Outline de PDT 2.0.0.v20081218-1419 muestra a h4 como Objeto.

function h4(){
	this.uid=0;
	this.__construct = function(){}
}

var me;
me = new h4();
*/
