//alert ("Definning checkForm");
//ESTA TABLA DE TRADUCCION CONTENDRÁ LAS EQUIVALENCIAS ENTRE LOS NOMBRES DE LOS CAMPOS Y EL TEXTO QUE DEBE CONTENER Y EL QUE PUEDE CONTENER, ES DECIR REQUIRED SIRVE PARA AFIRMAR QUE SE DEBEN ENCONTRAR COINCIDENCIAS DE ESOS CARACTERES Y VALID QUE PUEDE UTILIZARSE SOLO LOS QUE ESTÃN EN LA LISTA, SI NO SE ESPECIFICA VALID NI INVALID
var modeTranslator_required = new Object();
var modeTranslator_valid = new Object();
var modeTranslator_invalid = new Object();
modeTranslator_required['email']='EmailModeR';
modeTranslator_valid['email']='EmailMode';
modeTranslator_valid['area']='EmailMode';
modeTranslator_valid['ubicacion']='EmailMode';
modeTranslator_required['contact']='contact';
modeTranslator_valid['username']='EmailMode';
modeTranslator_invalid['enumeracion']='DBInvalid';
modeTranslator_invalid['elemento']='DBInvalid';
//modeTranslator_invalid['descripcion']='DBInvalid';
//modeTranslator_invalid['description']='DBInvalid';
modeTranslator_valid['visible']='Boolean';
modeTranslator_valid['activo']='Boolean';
modeTranslator_valid['iva']='Float';
modeTranslator_valid['precio']='Float';
modeTranslator_valid['cotizacion']='Float';
modeTranslator_valid['descuento']='Float';
modeTranslator_valid['discount']='Float';
modeTranslator_invalid['area']='DBInvalid';
modeTranslator_invalid['ubicacion']='DBInvalid';
var TextMode = [];
TextMode['LoginMode']="0123456789abcdefghijklmnopqrstuvwxyzÃ¡Ã©Ã­Ã³Ãºï¿½ï¿½ï¿½ï¿½ï¿½ï¿½_-ABCDEFGHIJKLMNOPQRSTUVWXYZÃï¿½.";
TextMode['EmailMode']="0123456789abcdefghijklmnopqrstuvwxyz@_-ABCDEFGHIJKLMNOPQRSTUVWXYZ.";
TextMode['EmailModeR']="@.";
TextMode['TextMode']="0123456789abcdefghijklmnopqrstuvwxyzï¿½ï¿½ï¿½ï¿½ï¿½ï¿½@Ã¡Ã©Ã³Ã­Ãºï¿½ï¿½ï¿½ï¿½ï¿½ï¿½_-ABCDEFGHIJKLMNOPQRSTUVWXYZï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½.?ï¿½[]{}ï¿½ï¿½*+/#|!ï¿½ï¿½ï¿½():,; <>\\\"%^&='";
TextMode['DBMode']="0123456789abcdefghijklmnopqrstuvwxyzï¿½ @ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½_-ABCDEFGHIJKLMNOPQRSTUVWXYZï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½ï¿½.-:;&";
TextMode['DBInvalid']=";%&<>`'\"\\";
TextMode['Integer']='0987654321-+';
TextMode['Float']='0987654321-+.';
TextMode['Boolean']='01';
CheckMode=TextMode['TextMode'];

function checkForm(TheForm,tMode){
CheckMode=TextMode[tMode];
return checkForm(TheForm);
}
var MSG=new Array();
function checkForm(TheForm){
FormStat=true;
for (i=0;i<document.forms[TheForm].elements.length;i++){
document.forms[TheForm].elements[i].value = trim(document.forms[TheForm].elements[i].value);
if (document.forms[TheForm].elements[i].name.indexOf("ic-")!=0){
if (!document.forms[TheForm].elements[i].value){
	MSG['es']="El campo "+document.forms[TheForm].elements[i].name+" No está completo\n Es necesario para poder brindar un mejor servicio\nLos campos indicados con un asterisco * son los únicos obligatorios";
	MSG['en']="The field "+document.forms[TheForm].elements[i].name+" isn't filled\n is neccesary to have all required fields filled\nSee ones marked";
	if(window.getLang){
		alert(MSG[getLang()]);
	}else{
		alert(MSG['es']);
	}
FormStat=false; break;}
}
}//end for
return FormStat;
}//end checkform

function intelliCheck(TheForm,tMode){
	if(tMode!=''){
		CheckMode=TextMode[tMode];
	}else{
		CheckMode=TextMode['TextMode'];
	}
return intelliCheck(theForm);
}

function intelliCheck(TheForm){
FormState=true;
if (!checkForm(TheForm)){return false;}

for (jj=0;jj<document.forms[TheForm].elements.length;jj++){
	
	if (document.forms[TheForm].elements[jj].name=='email' || document.forms[TheForm].elements[jj].name=='E-MAIL'){
		//alert("Revisando email: "+document.forms[TheForm].elements[jj].value);
		if (!requiredChars(document.forms[TheForm].elements[jj].value,TextMode['EmailModeR'])){alert(document.forms[TheForm].elements[jj].value+"\n"+" NO ES CORRECTO COMO e-mail!");return false;}
		if (!validChars(document.forms[TheForm].elements[jj].value,EmailMode)){alert(document.forms[TheForm].elements[jj].value+"\n"+" NO ES CORRECTO COMO e-mail!");return false;}
		RE = /.*(hotmail\.com).*/i;
		if (document.forms[TheForm].elements[jj].value.search(RE)!=-1){alert('HOTMAIL '+FuckMsg);return false;}
		RE = /.*(msn\.com).*/i;
		if (document.forms[TheForm].elements[jj].value.search(RE)!=-1){alert('MSN '+FuckMsg);return false;}
	}//end email
	else{
		switch (document.forms[TheForm].elements[jj].name){
		case 'submit':
		break;
		//case default
		if (document.forms[TheForm].elements[i].name.indexOf("ic-")!=0){
			if (hasInvalidChars(document.forms[TheForm].elements[jj].value,DBInvalid)){alert(document.forms[TheForm].elements[jj].value+"\n"+" NO ES CORRECTO COMO CAMPO\n"+"NO USAR: ["+DBInvalid+"]");return false;}
		}
		}
	}
}//end for
return FormStat;
}//end intellicjheck

function trim(Text){
if(!Text)return Text;
while((Text.indexOf(" ")==0) && (Text.length>0)){
Text=Text.substring(1,Text.length);
//alert("\""+Text+"\":"+Text.length);
}//end while
while((Text.lastIndexOf(" ")==Text.length-1) && Text.lengt>0){
Text=Text.substring(0,Text.length-1);
//alert("\""+Text+"\":"+Text.length);
}//end while
return Text;
}//end trim

FuckMsg="NO ES VÁLIDO COMO CORREO DEBIDO A QUE NO RECIBE LOS EMAILS OTROS LUGARES\nESCRIBA .PUF EN VEZ DE .COM SI DESEA\nENVIAR EL FORMULARIO DE TODAS FORMAS\nLO LEEREMOS PERO NUNCA RESPONDEREMOS";
ValidTags=new Array();
RepTags=new Array();

FuckCounter=3;

ValidTags[0]="<center>";
ValidTags[1]="</center>";
ValidTags[2]="<br>";
ValidTags[3]="<br>";//only for compatibility
ValidTags[4]="<b>";
ValidTags[5]="</b>";

RepTags[0]="[({center})]";
RepTags[1]="[({/center})]";
RepTags[2]="[({br})]";
RepTags[3]="[({br})]";//only for compatibility
RepTags[4]="[({b})]";
RepTags[5]="[({/b})]";

function alertValidTags(){
Text="";
for (i=0;i<ValidTags.length;i++){
Text=Text+"\n"+ValidTags[i];
}//end for
alert("ETIQUETAS PERMITIDAS\n"+Text);
}//end validtags
function validChars(Text,Mode){
	return validChars(Text,Mode,true);
}
function validChars(Text,Mode,Verbose){
Status=true;
for(i=0;i<Text.length;i++){
if (TextMode[Mode].indexOf(Text.charAt(i))==-1){Status=false; break;}
}//end check
if(!Status && Verbose) alert(Text+"\n"+" NO ES CORRECTO, CONTIENE UN CARACTER NO VALIDO");
return Status;
}//end checkValidChars

function requiredChars(Text,Mode){
Status=true;
for(i=0;i<TextMode[Mode].length;i++){
//alert("Char Mode:"+Mode.charAt(i));
if (Text.indexOf(TextMode[Mode].charAt(i))==-1){Status=false; break;}
}//end check
//if(!Status) alert(Text+"\n"+" NO ES CORRECTO: \n"+Mode);
//if(!Status) alert(Text+"\n"+" NO ES CORRECTO!");
return Status;
}//end checkValidChars
//esta funcion resuelve el problema de unicode

function hasInvalidChars(Text,Mode){
Status=false;
for(i=0;i<TextMode[Mode].length;i++){
//alert("Char Mode:"+Mode.charAt(i));
if (Text.indexOf(TextMode[Mode].charAt(i))!=-1){Status=true; break;}
}//end check
//if(!Status) alert(Text+"\n"+" NO ES CORRECTO: \n"+Mode);
//if(!Status) alert(Text+"\n"+" NO ES CORRECTO!");
return Status;
}//end checkValidChars

function validTags(Text){
Head=true;
for (i=0;i<ValidTags.length;i+=2){
KeepOn="";
Line="";
REQArray["TAGSYN"]=Text;
while(REQArray["TAGSYN"].indexOf(ValidTags[i])!=-1 || REQArray["TAGSYN"].indexOf(ValidTags[i+1])!=-1){
        if(Head){
        KeepOn=REQ("TAGSYN",ValidTags[i]);
        REQArray["KeepOn"]=KeepOn;
        repall("KeepOn",ValidTags[i+1],"");
        Line=Line+REQArray["KeepOn"]+ValidTags[i];
        }else{
        KeepOn=REQ("TAGSYN",ValidTags[i+1]);
        REQArray["KeepOn"]=KeepOn;
        repall("KeepOn",ValidTags[i],"");
        Line=Line+REQArray["KeepOn"]+ValidTags[i+1];
        }//end if
        if(!Head)Head=true; else Head=false;
}//end while
if (Head){Text=Line+REQArray["TAGSYN"];}else{Text=Line+REQArray["TAGSYN"]+ValidTags[i+1];}
}//end for
return Text;
}//end valid tags

function validateTags(Text){
//Server Check this out
//but if it's made
//server not need to do replacements
//and of course go a litle bit more faster.
REQArray["VTAG"]=Text;
for (i=0;i<ValidTags.length;i++){
repall("VTAG",ValidTags[i],RepTags[i]);
}//end for
repall("VTAG","<","&lt;");
repall("VTAG",">","&gt;");
repall("VTAG","\\\\","\\");
repall("VTAG","\#__\#","\#_ _\#");
repall("VTAG","\\\"","/(/c/)/");
repall("VTAG","\"","/(/c/)/");
repall("VTAG","\\","\\\\");
repall("VTAG","/(/c/)/","\\\"");
for (i=0;i<ValidTags.length;i++){
repall("VTAG",RepTags[i],ValidTags[i]);
}//end for
return REQArray["VTAG"];
}//end function validtags

function alertU(Text){
Text=unescape(Text);
alert(Text);
}//end unescape alertU

function iCheck(TheForm){
FormState=true;
if (!checkForm(TheForm)){return false;}

for (jj=0;jj<document.forms[TheForm].elements.length;jj++){
//si existe una entrada para caracteres requeridos verificar si los tiene
if ((name=modeSearch(modeTranslator_required,(""+document.forms[TheForm].elements[jj].name).toLowerCase()))!='unknown'){
	if(!requiredChars(document.forms[TheForm].elements[jj].value,modeTranslator_required[name])){
	MSG['es']="El campo "+document.forms[TheForm].elements[jj].name+" No es correcto Falta alguno de estos caracteres: "+TextMode[modeTranslator_required[name]];
	MSG['en']="The field "+document.forms[TheForm].elements[i].name+" isn't good, it left some chars: "+TextMode[modeTranslator_required[name]];
	if(window.getLang){
		alert(MSG[getLang()]);
	}else{
		alert(MSG['es']);
	}
	return false;}
}
//si existe una entrada para caracteres permitidos verificar que los tenga
if ((name=modeSearch(modeTranslator_valid,(""+document.forms[TheForm].elements[jj].name).toLowerCase()))!='unknown'){
	if(!validChars(document.forms[TheForm].elements[jj].value,modeTranslator_valid[name],false)){
	MSG['es']="El campo "+document.forms[TheForm].elements[jj].name+" No es correcto, sólo se permiten estos caracteres: "+TextMode[modeTranslator_valid[name]];
	MSG['en']="The field "+document.forms[TheForm].elements[i].name+" isn't good, allowed chars: "+TextMode[modeTranslator_valid[name]];
	if(window.getLang){
		alert(MSG[getLang()]);
	}else{
		alert(MSG['es']);
	}
	return false;}
}
//si existe una entrada para caracteres NO permitidos verificar que NO los tenga
if ((name=modeSearch(modeTranslator_invalid,(""+document.forms[TheForm].elements[jj].name).toLowerCase()))!='unknown'){
	if(hasInvalidChars(document.forms[TheForm].elements[jj].value,modeTranslator_invalid[name])){
	MSG['es']="El campo "+document.forms[TheForm].elements[jj].name+" No es correcto, no se permiten estos caracteres: "+TextMode[modeTranslator_invalid[name]];
	MSG['en']="The field "+document.forms[TheForm].elements[i].name+" isn't good, this aren't allowed chars: "+TextMode[modeTranslator_invalid[name]];
	if(window.getLang){
		alert(MSG[getLang()]);
	}else{
		alert(MSG['es']);
	}
	return false;}
}

}//end for
return FormStat;
}//end intellicjheck

function modeSearch(Translator,Field){
	for (key in Translator){
		if(Field.indexOf(key)!=-1){
			return key;
		}
	}
	return 'unknown';
}
//TODO: Esta funcion debe recorrer las listas y decodificar todas las opciones.
function unescapeForm(FormName){
	if(!document.forms[FormName]){alert('Error interno el formulario:'+FormName+" no existe");return}
	for (jj=0;jj<document.forms[FormName].elements.length;jj++){
		plus=/\+/g;
		if(document.forms[FormName].elements[jj].options){
			for (opt=0;opt<document.forms[FormName].elements[jj].options.length;opt++){
				document.forms[FormName].elements[jj].options[opt].value=document.forms[FormName].elements[jj].options[opt].value.replace(plus,' ');
				document.forms[FormName].elements[jj].options[opt].text=document.forms[FormName].elements[jj].options[opt].text.replace(plus,' ');
				document.forms[FormName].elements[jj].options[opt].value=utf8Decode(unescape(document.forms[FormName].elements[jj].options[opt].value));
				document.forms[FormName].elements[jj].options[opt].text=utf8Decode(unescape(document.forms[FormName].elements[jj].options[opt].text));
			}	
		}else{
		document.forms[FormName].elements[jj].value=document.forms[FormName].elements[jj].value.replace(plus,' ');
		document.forms[FormName].elements[jj].value=utf8Decode(unescape(document.forms[FormName].elements[jj].value));
		}
	}
}
function unescapeForms(){
	for(FormName=0;FormName<document.forms.length;FormName++){
		unescapeForm(FormName);
	}
}
function utf8Decode(utftext) {
    var string = "";
    var i = 0;
    var c = c1 = c2 = 0;

    while ( i < utftext.length ) {

        c = utftext.charCodeAt(i);

        if (c < 128) {
            string += String.fromCharCode(c);
            i++;
        }
        else if((c > 191) && (c < 224)) {
            c2 = utftext.charCodeAt(i+1);
            string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
            i += 2;
        }
        else {
            c2 = utftext.charCodeAt(i+1);
            c3 = utftext.charCodeAt(i+2);
            string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
            i += 3;
        }

    }

    return string;
}//end utf8decode
function utf8Encode(string) {
    string = string.replace(/\r\n/g,"\n");
    var utftext = "";

    for (var n = 0; n < string.length; n++) {

        var c = string.charCodeAt(n);

        if (c < 128) {
            utftext += String.fromCharCode(c);
        }
        else if((c > 127) && (c < 2048)) {
            utftext += String.fromCharCode((c >> 6) | 192);
            utftext += String.fromCharCode((c & 63) | 128);
        }
        else {
            utftext += String.fromCharCode((c >> 12) | 224);
            utftext += String.fromCharCode(((c >> 6) & 63) | 128);
            utftext += String.fromCharCode((c & 63) | 128);
        }

    }

    return utftext;
}//end utf8encode
function addOption(selectbox,value,text){
var optn = document.createElement("OPTION");
optn.text = text;
optn.value = value;
selectbox.options.add(optn);
}
function clearForm(FName){
	Frm=document.getElementById(FName);
	if(Frm==null){
		alert('el objeto se debe nombrar con name y con id al mismo tiempo y por igual');
		return;
	}
	flen=document.forms[FName].elements.length;
	for (var i=flen-1; i>=0; i--){
		key=document.forms[FName].elements[i].name;
		el=document.getElementById(key);
		if(el!=null){
			try{
				Frm.removeChild(el);
				el=null;
			}catch(error){
				//alert(error);
			}
		}
	}
}
function clearList(FName,ListName){
	if(document.forms[FName]){
		if(document.forms[FName].elements[ListName]){
			document.forms[FName].elements[ListName].options.length=0;
		}else{
			alert("El listado '"+ListName+"' no existe en el formulario '"+FName+"'");
		}
	}else{
		alert("El formulario '"+FName+"' No existe");
	}
	
}

function addInput(FName, IName, IValue,IType){
Frm=document.getElementById(FName);
if(Frm == null){alert('Se especificó un formulario que no existe, revisar que el formulario:'+FName+" exista en este DOM"); return;}
element=document.createElement('input');
element.id=IName;
element.name=element.id;
element.value=IValue;
element.type=IType;
Frm.appendChild(element);
}
//alert ("Definning checkForm");