/*=============================
	Constantes
=============================*/
AXN_NUEVO=5;
AXN_ENVIAR=3;
MONEDA_MXP='MXP';
MONEDA_USD='USD';
LANG_ES='es';
LANG_EN='en';

/*=============================
	Funciones generales
=============================*/
function enviarBuscar() {
	var formName='frmBuscar';
	var form=document.forms[formName];
	var field=null;
	var nChars=3;

	field=form.elements['txtBuscar'];
	if(estaVacio(trim(field.value))) {
		alert("Introduzca la palabra/frase a buscar");
		field.focus();
		return false;
	} // if
	if(field.value.length<3) {
		alert("Introduzca una palabra/frase a buscar de por lo menos "+nChars.toString()+" caracteres");
		field.focus();
		return false;
	} // if

	transluce();
	return true;
} // enviarBuscar

function enviarLogin() {
	var formName='frmLogin';
	var form=document.forms[formName];
	var field=null;

	field=form.elements['txtUsuarioLogin'];
	if(estaVacio(trim(field.value))) {
		alert("Introduzca un valor en el campo [Usuario]");
		field.focus();
		return false;
	} // if
	field=form.elements['txtContrasenaLogin'];
	if(estaVacio(trim(field.value))) {
		alert("Introduzca un valor en el campo [Contraseña]");
		field.focus();
		return false;
	} // if

	transluce();
	return true;
} // enviarLogin

function establecerPaginaInicio() {
	var browser=navigator.appName;
	if(browser=="Microsoft Internet Explorer") {
		with(document.frmHidden.btnHidden) {
			style.behavior="url(#default#homepage)";
			setHomePage("http://www.cinit.org.mx");
		} // with
	} // if
} // establecerPaginaInicio

function popUpCursoRegistro(idCurso,moneda) {
	popUpWindow("cursoRegistro.php?idCurso="+idCurso+"&moneda="+moneda,"cursoregistro",640,480,"no","no","no","no","yes","no");
} // popUpCursoRegistro

function popUpEmail(idContacto) {
	popUpWindow("email.php?idContacto="+idContacto,"email",640,480,"no","no","no","no","no","no",80,200);
} // popUpEmail

function popUpWindow(src,name,width,height,location,menubar,resizable,status,scrollbars,toolbar,top,left) {
	if(estaVacio(top)&&estaVacio(left)) {
		top=(screen.height-width)/2;
		left=(screen.width-height)/2;
	} else {
		if(estaVacio(left)) left=(screen.width-height)/2;
	} // if
	var ventana=window.open(src,name,"top="+top+",left="+left+",height="+height+",width="+width+",location="+location+",menubar="+menubar+",resizable="+resizable+",status="+status+",scrollbars="+scrollbars+",toolbar="+toolbar);
	ventana.focus();
} // popUpWindow

function transluce() {
	var div=null;
	if(document.getElementById) div=document.getElementById("divTrans");
	else if(document.all) div=document.all("divTrans");
	if(div) {
		with(div.style) {
			width=document.body.scrollWidth;
			height=document.body.scrollHeight;
			visibility="visible";
		} // with
	} // if
} // transluce

/*=============================
	Funciones de Strings
=============================*/
function ltrim(s) {
	return s.replace(/^\s*/,"");
} // ltrim

function rtrim(s) {
	return s.replace(/\s*$/,"");
} // rtrim

function trim(s) {
	return rtrim(ltrim(s));
} // trim

/*=============================
	Funciones de enmascaramiento
	de campos HTML
=============================*/
function esChar(charCode,tipo) {
	switch(tipo) {
		case "SP": return charCode==32; break;
		case "ENTER": return charCode==13; break;
		case "BS": return charCode==8; break;
		case "lower": return (charCode>96&&charCode<123); break;
		case "upper": return (charCode>64&&charCode<91); break;
		case "spanish_chars":
			return charCode==193||charCode==201||charCode==205||charCode==209||charCode==211||charCode==218||
			charCode==220||charCode==225||charCode==233||charCode==237||charCode==241||charCode==243||charCode==250||
			charCode==252;
			break;
		case "numbers": return (charCode>47&&charCode<58); break;
		case "symbols": 
			return esChar(charCode,",")||esChar(charCode,"-")||esChar(charCode,".")||esChar(charCode,"/")||
			esChar(charCode,":")||esChar(charCode,";")||esChar(charCode,"@")||esChar(charCode,"_")||
			esChar(charCode,"parentesis")||esChar(charCode,"corchetes");
			break;
		case ",": return charCode==44; break;
		case "-": return charCode==45; break;
		case ".": return charCode==46; break;
		case "/": return charCode==47; break;
		case ":": return charCode==58; break;
		case ";": return charCode==59; break;
		case "@": return charCode==64; break;
		case "_": return charCode==95; break;
		case "parentesis": return charCode==40||charCode==41; break;
		case "corchetes": return charCode==91||charCode==93; break;
	} // switch
} // esChar

function esCharAlfanumericoPermitido(charCode) {
	return esChar(charCode,"SP")||esChar(charCode,"BS")||esChar(charCode,"lower")||
	esChar(charCode,"upper")||esChar(charCode,"spanish_chars")||esChar(charCode,"numbers")||
	esChar(charCode,"symbols");
} // esCharAlfanumericoPermitido

function esCharNumericoPermitido(charCode) {
	return esChar(charCode,"BS")||esChar(charCode,".")||esChar(charCode,"-")||esChar(charCode,"numbers");
} // esCharNumericoPermitido

function esStringAlfanumericoPermitido(s) {
	for(var i=0;i<s.length;i++) {
		var charCode=s.charAt(i).charCodeAt(0);
		if(!esCharAlfanumericoPermitido(charCode)) return false;
	} // for
	return true;
} // esStringAlfanumericoPermitido

function permitirCharsAlfanumericos(evt,tipo) {
	evt=(evt)?evt:((window.event)?event:null);
	if(evt) {
		var elem=(evt.target)?evt.target:((evt.srcElement)?evt.srcElement:null);
		if(elem) {
			var charCode=(evt.charCode)?evt.charCode:((evt.which)?evt.which:evt.keyCode);
			switch(tipo) {
				// Alfanumericos
				case "spanish_chars":
					return esChar(charCode,"BS")||esChar(charCode,"SP")||esChar(charCode,"lower")||
					esChar(charCode,"upper")||esChar(charCode,"spanish_chars")||esChar(charCode,".")||
					esChar(charCode,",");
					break;
				case "username":
					return esChar(charCode,"BS")||esChar(charCode,"lower")||esChar(charCode,"numbers");
					break;
				case "email":
					return esChar(charCode,"BS")||esChar(charCode,"lower")||esChar(charCode,"numbers")||
					esChar(charCode,".")||esChar(charCode,"-")||esChar(charCode,"_")||esChar(charCode,"@");
					break;
				case "password":
					return esChar(charCode,"BS")||esChar(charCode,"lower")||esChar(charCode,"upper")||esChar(charCode,"numbers")||
					esChar(charCode,".")||esChar(charCode,"-")||esChar(charCode,"_");
					break;
				case "tel":
					return esChar(charCode,"BS")||esChar(charCode,"SP")||esChar(charCode,"lower")||esChar(charCode,"upper")||
					esChar(charCode,"numbers")||(esChar(charCode,"symbols")&&!(esChar(charCode,"@")||esChar(charCode,"_")));
					break;
				case "rfc":
					return esChar(charCode,"BS")||esChar(charCode,"upper")||esChar(charCode,"lower")||esChar(charCode,"numbers");
					break;
				case "memo":
					return esCharAlfanumericoPermitido(charCode)||esChar(charCode,"ENTER");
					break;
				// Numericos
				case "decimal":
					return esChar(charCode,"BS")||esChar(charCode,"numbers")||esChar(charCode,"-")||esChar(charCode,".");
					break;
				case "decimal_positive":
					return esChar(charCode,"BS")||esChar(charCode,"numbers")||esChar(charCode,".");
					break;
				case "integer":
					return esChar(charCode,"BS")||esChar(charCode,"numbers")||esChar(charCode,"-");
					break;
				case "integer_positive":
					return esChar(charCode,"BS")||esChar(charCode,"numbers");
					break;
				case "BS":
					return esChar(charCode,"BS");
					break;
			} // switch
		} // if
	} // if
} // permitirCharsAlfanumericos

function permitirCharsAlfanumericosTextArea(evt,field,maxlength) {
	if(permitirCharsAlfanumericos(evt,"BS")) return true;
	if(!permitirCharsAlfanumericos(evt,"memo")) return false;

	if(field.value.length>maxlength-1) {
		field.value=field.value.substring(0,maxlength);
		alert("Este campo solo permite "+maxlength+" caracteres de longitud.");
		return false;
	} // if
	return true;
} // permitirCharsAlfanumericosTextArea

function permitirPasteCharsAlfanumericosCustom(tipo) {
	var sPasteData=window.clipboardData.getData("Text");
	switch(tipo) {
		default:
			return esStringAlfanumericoPermitido(sPasteData);
			break;
		case "decimal":
			return esNumeroDecimal(sPasteData);
			break;
		case "decimal_positive":
			return esNumeroDecimalPositivo(sPasteData);
			break;
		case "integer":
			return esNumeroEntero(sPasteData);
			break;
		case "integer_positive":
			return esNumeroEnteroPositivo(sPasteData);
			break;
	} // switch
} // permitirPasteCharsAlfanumericos

/*=============================
	Funciones de validacion
=============================*/
function esEmailValido(s) {
	if(estaVacio(s)) return false;
	return (s.match(new RegExp("^[a-z0-9]+[a-z0-9_\.-]*@([a-z0-9]+(\-*[a-z0-9]+)*\.)+[a-z]{2,}$")))?true:false;
} // esEmailValido

// Verifica que sea un numero (entero/decimal positivo/negativo)
function esNumero(s) {
	if(estaVacio(s)) return false;
	return (s.match(new RegExp("^[-]?[0-9]+(\.[0-9]+)?$")))?true:false;
} // esNumero

function esNumeroDecimal(s) {
	return esNumero(s);
} // esNumeroDecimal

function esNumeroDecimalPositivo(s) {
	if(estaVacio(s)) return false;
	return (s.match(new RegExp("^[0-9]+(\.[0-9]+)?$")))?true:false;
} // esNumeroDecimalPositivo

function esNumeroEnRango(n,n1,n2,inclusiveN1,inclusiveN2) {
	if((!esNumero(n))||(!esNumero(n1))||(!esNumero(n2))) return false

	inclusiveN1=(inclusiveN1!=null)?inclusiveN1:true;
	inclusiveN2=(inclusiveN2!=null)?inclusiveN2:true;

	n=parseFloat(n);
	n1=parseFloat(n1);
	n2=parseFloat(n2);

	if((inclusiveN1)&&(inclusiveN2)) return ((n>=n1)&&(n<=n2));
	else if((inclusiveN1)&&(!inclusiveN2)) return ((n>=n1)&&(n<n2));
	else if((!inclusiveN1)&&(inclusiveN2)) return ((n>n1)&&(n<=n2));
	else if((!inclusiveN1)&&(!inclusiveN2)) return ((n>n1)&&(n<n2));
} // esNumeroEnRango

function esNumeroEntero(s) {
	if(estaVacio(s)) return false;
	return (s.match(new RegExp("^[-]?[0-9]+$")))?true:false;
} // esNumeroEntero

function esNumeroEnteroPositivo(s) {
	if(estaVacio(s)) return false;
	return (s.match(new RegExp("^[0-9]+$")))?true:false;
} // esNumeroEnteroPositivo

function estaVacio(o) {
	switch(typeof(o)) {
		case "string":
			return ((trim(o)).length==0);
			break;
		case "number":
			return false;
			break;
		default:
			return (o==null);
			break;
	} // switch
} // estaVacio

/*
--------------------------------------------------------
Tabla de grupos de caracteres alfanumericos
--------------------------------------------------------
[8]			Chars: (Backspace)
[32]		Chars: (Space)
[40-41]		Chars: ( )
[44-47]		Chars: , - . /
[48-57]		Chars: 0-9
[58-59]		Chars: : ;
[64]		Chars: @
[65-90]		Chars: A-Z
[91,93]		Chars: [ ]
[95]		Chars: _
[97-122]	Chars: a-z
[193]		Chars: Á
[201]		Chars: É
[205]		Chars: Í
[209]		Chars: Ñ
[211]		Chars: Ó
[218]		Chars: Ú
[220]		Chars: Ü
[225]		Chars: á
[233]		Chars: é
[237]		Chars: í
[241]		Chars: ñ
[243]		Chars: ó
[250]		Chars: ú
[252]		Chars: ü

--------------------------------------------------------
Tabla de grupos de caracteres de control
--------------------------------------------------------
[13]		Chars: (Enter)
[35-40]		Chars: (Arrows,Home,End)
[46]		Chars: (Del)

--------------------------------------------------------
Tabla de grupos de caracteres numericos
--------------------------------------------------------
[45-46]		Chars: - .
[48-57]		Chars: 0-9
*/