function validarNoComillas(e)
{
	var keynum;
	var keychar;
	
	//Para Internet Explorer
	if(window.event) {
	  	keynum = e.keyCode;
	}
	//Netscape, Firefox, Opera
	else if(e.which) {
		keynum = e.which;
	}
	
	keychar = String.fromCharCode(keynum);
	if (keychar == '"') { 
		return false;
	}
	else {
		return true;
	}
}

/**
Estas funciones están probadas en browsers Netscape 4.x y Explorer 4.x.
*/
function rtrim(cadena) {
	cadena += "";
	for (var i = cadena.length -1; (i >= 0) && ((cadena.charAt(i) == ' ')); i--)
		;
	return cadena.substring(0, i+1);
}

function ltrim(cadena) {
	cadena += "";
	for (var i = 0; (i < cadena.length) && ((cadena.charAt(i) == ' ')); i++)
		;
	if (i == cadena.length) {
		return "";
	}
	return cadena.substring(i);
}

function trim(cadena) {
	return ltrim(rtrim(cadena));
}

/** Las siguientes funciones se utilizan para validar un número de punto flotante. */
var r1Float = new RegExp("(\,\,)|([0-9]{4}\,)|(^[0]{0,}\,)|([\,]+[0-9]{0,2}[\,$])|(\\..*[\\.\,])");
var r2Float = new RegExp("(((\\[?)[0-9]\\,[0-9]{3}(\\]?))|(^[0-9]*))(\\.[0-9]+)?$")

function isFloat(number) {
	number = trim(number + "")
	return (!r1Float.test(number) && r2Float.test(number));
}

/*Esta funcion recibe un float y un rango y lo valida*/
function isFloatRange(number, min, max)  {
	if (!isFloat(number)) {
		return false;
	}
	var theValue = parseFloat(number.split(",").join(""));
	return theValue >= min && theValue <= max
}

var r1Int = new RegExp("(\,\,)|([0-9]{4}\,)|(^[0]{0,}\,)|([\,]+[0-9]{0,2}[\,$])");
var r2Int = new RegExp("((\\[?)[0-9]\\,[0-9]{3}(\\]?)$)|(^[0-9]+)$")

function isInt(number) {
	number = trim(number);
	return (!r1Int.test(number) && r2Int.test(number));
}

/*Esta funcion recibe un entero y un rango y lo valida*/
function isIntRange(number, min, max)  {
	if (!isInt(number)) {
		return false;
	}
	var theValue = parseInt(number.split(",").join(""));
	return theValue >= min && theValue <= max
}


/*Esta funcion valida una hora y retorna falso o verdadero*/
/* Recibe el formato de HH:MM*/
function isTime(time)  {
	var HP
	time = trim(time)
	HP = time.split(":")
	if (HP.length != 2) {
		return false;
	}
	return(HP[0] < 24 && HP[0] >= 0 && HP[1] < 60 && HP[1] >= 0)
}


/*Esta funcion valida una fecha y retorna falso o verdadero*/
/* Recibe el formato de Dia/Mes/Ano*/
function isDateDMY(date)  {
	var FP
	date = trim(date)
	FP = date.split("/")
	if (FP.length != 3) {
		return false
	}
	return isSplitDateDMY(FP[0], FP[1], FP[2])
}


function isSplitDateDMY(day, month, year)  {
	if (!isInt(day) || !isInt(month) || !isInt(year)) {
		return false;
	}
	date = new Date(year, month-1, day)
	return (date.getDate() == day) && ((date.getMonth()+1) == month) && (date.getFullYear() == year);
}


// Retorna si la fecha inferior efectivamente es inferior
// que la fecha superior. La fecha debe encontrarse en formato dd/mm/yyyy
// -1 a < b, 0 a == b, 1 a > b
function compareDatesDMY(a, b) {
	var firstDateArray, secondDateArray;
	firstDateArray = a.split("/");
	secondDateArray = b.split("/");
	aDate = new Date(firstDateArray[2], firstDateArray[1]-1, firstDateArray[0]);
	bDate = new Date(secondDateArray[2], secondDateArray[1]-1, secondDateArray[0]);
	if (aDate.getTime() < bDate.getTime()) {
		return -1;
	}
	if (aDate.getTime() == bDate.getTime()) {
		return 0;
	}
	return 1;
}

function isChecked(field) {
	if (!field) {
		return false;
	}
	if (field.length) {
		for (var i = 0; i < field.length; i++) {
			if (field[i].checked) {
				return true;
			}
		}
		return false;
	}
	return field.checked;
}


/** Valida un email */
function buscarEspacios(cadena) {
	for (var i = 0; i < cadena.length; i++){
		if (cadena.charAt(i) == ' ') {
			return true;
		}
	}
	return false;
}

function isEmail(str) {
	var r1 = new RegExp("(@.*@)|(\\.\\.)|(@\\.)|(^\\.)");
	var r2 = new RegExp("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,5}|[0-9]{1,5})(\\]?)$");
	return (!r1.test(str) && r2.test(str) && !(buscarEspacios(str)));
}


/** Estas son la validaciones en si de las formas */

var _campoError = null;
var _errores    = "";

function appendErrorMessage(msgError) {
	_errores += ((_errores != "") ? "\n":"") + "        " + msgError
}

function validarLista(lista, msgError, indiceInicial, funcion) {
	if (!indiceInicial && indiceInicial != 0) {
		indiceInicial = 1;
	}
	if (lista.selectedIndex < indiceInicial ||
		(funcion ? !eval("funcion(lista)") : false)) {
		appendErrorMessage(msgError)
		if (_campoError == null) {
			_campoError = lista;
		}
		return false;
	}
	return true;
}

function validarSeleccion(campo, msgError, funcion) {
	if (!isChecked(campo) ||
		(funcion ? !eval("funcion(campo)") : false)) {
		appendErrorMessage(msgError)
		if (_campoError == null) {
			if (campo.length) {
				_campoError = campo[0]
			} else {
				_campoError = campo;
			}
		}
		return false;
	}
	return true;
}


function validarCampo(campo, msgError, longitudMinima, longitudMaxima, funcion) {
	if (!longitudMinima  && longitudMinima != 0) {
		longitudMinima = 1
	}
	if (!longitudMaxima ) {
		longitudMaxima = Number.MAX_VALUE
	}
	var value = trim(campo.value)
	if (value.length < longitudMinima || value.length > longitudMaxima ||
		(funcion ? !eval("funcion(campo)") : false)) {
		appendErrorMessage(msgError)
		if (_campoError == null) {
			_campoError = campo;
		}
		return false;
	}
	return true;
}

function validarCampoOpcional(campo, msgError, longitudMinima, longitudMaxima, funcion) {
	if (trim(campo.value).length > 0) {
		return validarCampo(campo, msgError, longitudMinima, longitudMaxima, funcion)
	}
}

function validarFecha(dia, mes, ano, msgError, funcion) {
	if (!isIntRange(parseInt(dia.value, 10) + "", 1, 31)) {
		appendErrorMessage(msgError)
		if (_campoError == null) {
			_campoError = dia;
		}
		return false;
	}
	if (mes.selectedIndex < 1) {
		appendErrorMessage(msgError)
		if (_campoError == null) {
			_campoError = mes;
		}
		return false;
	}
	if (!isInt(ano.value)) {
		appendErrorMessage(msgError)
		if (_campoError == null) {
			_campoError = ano;
		}
		return false;
	}
	if (!isDateDMY(dia.value + "/" + mes.options[mes.selectedIndex].value + "/" + ano.value) ||
			(funcion ? !eval("funcion(dia, mes, ano)") : false)) {
		appendErrorMessage(msgError)
		if (_campoError == null) {
			_campoError = dia;
		}
		return false;
	}
	return true;
}


function validarFechaOpcional(dia, mes, ano, msgError, funcion) {
	if (trim(dia.value).length > 0 ||
			mes.selectedIndex > 0 || trim(ano.value).length > 0) {
		return validarFecha(dia, mes, ano, msgError, funcion)
	}
}


function validarEntero(campo, msgError, limiteInferior, limiteSuperior,
		funcion) {
	if (!limiteInferior && limiteInferior != 0) {
		limiteInferior = Number.NEGATIVE_INFINITY
		limiteSuperior = Number.MAX_VALUE
	}
	if (!isIntRange(campo.value, limiteInferior, limiteSuperior) ||
		(funcion ? !eval("funcion(campo)") : false)) {
		appendErrorMessage(msgError)
		if (_campoError == null) {
			_campoError = campo;
		}
		return false;
	}
	return true;
}

function validarEnteroOpcional(campo, msgError, limiteInferior, limiteSuperior, funcion) {
	if (trim(campo.value).length > 0) {
		return validarEntero(campo, msgError, limiteInferior, limiteSuperior, funcion)
	}
}


function validarFloat(campo, msgError, limiteInferior, limiteSuperior, funcion) {
	if (!limiteInferior && limiteInferior != 0) {
		limiteInferior = Number.NEGATIVE_INFINITY
		limiteSuperior = Number.MAX_VALUE
	}
	if (!isFloatRange(campo.value, limiteInferior, limiteSuperior) ||
		(funcion ? !eval("funcion(campo)") : false)) {
		appendErrorMessage(msgError)
		if (_campoError == null) {
			_campoError = campo;
		}
		return false;
	}
	return true;
}

function validarFloatOpcional(campo, msgError, limiteInferior, limiteSuperior, funcion) {
	if (trim(campo.value).length > 0) {
		return validarFloat(campo, msgError, limiteInferior, limiteSuperior, funcion)
	}
}

function validarEmail(campo, msgError) {
	if (!isEmail(trim(campo.value))) {
		appendErrorMessage(msgError)
		if (_campoError == null) {
			_campoError = campo;
		}
		return false;
	}
	return true;
}


function validarEmailOpcional(campo, msgError) {
	if (trim(campo.value).length > 0) {
		return validarEmail(campo, msgError);
	}
}


var _mensajeAdvertencia = "Por favor verifique la siguiente información: \n\n";

function validarForma(forma) {
	_errores = ""
	_campoError = null;

	eval("hacerValidaciones_" + forma.name +"(forma)");
	if (_errores != "") {
		alert(_mensajeAdvertencia + _errores);
		_campoError.focus();
		return false;
	}
	return true;
}




function separarMiles(numero, numeroDecimales) {
    if ((numero + " ") == " ") {
        return "";
    }
    var negativo = (numero<0);
    if (negativo) {
        numero = -numero;
    }
    var entero = Math.floor(numero) + "";

    var decimal = calcularBaseDecimal(numero - entero);
    var decimalFormateado = "";
    var valorASumar = 0;
    if (numeroDecimales) {
        var baseDecimal = Math.round(rpad(decimal.substring(decimal.indexOf('.') + 1), "0", numeroDecimales*1 + 1)/10) + "";
        if (baseDecimal.length > numeroDecimales) {
            baseDecimal = baseDecimal.substring(1);
            valorASumar = 1;
        }
        decimalFormateado = "." + lpad(baseDecimal, "0", numeroDecimales);
    }
    entero = (entero*1 + valorASumar*1) + "";

    var enteroFormateado = "";
    var longitudPrimerGrupo = entero.length % 3;
    if ((longitudPrimerGrupo == 0) && (entero.length > 0)) {
        longitudPrimerGrupo = 3;
    }
    var enteroFormateado = entero.substring(0, longitudPrimerGrupo);

    for (var i=longitudPrimerGrupo; i<entero.length; i += 3) {
        enteroFormateado += "," + entero.substring(i, i + 3);
    }

    return (negativo ? "-":"") + enteroFormateado + decimalFormateado;
}

function calcularBaseDecimal(numero) {
	var strNumero = numero + "";
	var idxPunto = strNumero.indexOf(".");
	var idxNotCient = strNumero.indexOf("e-")
	if (idxNotCient != -1) {
		var cantidadCeros = strNumero.substring(idxNotCient + 2) - 1;
		strNumero = "0." + rpad("", "0", cantidadCeros) + strNumero.substring(0, idxPunto)
				+ strNumero.substring(idxPunto +1, idxNotCient);
	}
	return strNumero;
}


function lpad(que, conQue, aCuanto) {
    var aRetornar = que;
    while (aRetornar.length < aCuanto) {
        aRetornar = ("" + conQue) + ("" + aRetornar);
    }
    var desde = aRetornar.length - aCuanto;
    return (desde > 0) ? aRetornar.substring(desde) : aRetornar;
}


function rpad(que, conQue, aCuanto) {
    var aRetornar = que;
    while (aRetornar.length < aCuanto) {
        aRetornar += "" + conQue;
    }
    return aRetornar.substring(0, aCuanto);
}

function validarChequeadas(campo, minChequeadas,maxChequeadas, msgError, showMsg) {	
  	var total = 0;
	
	for (i = 0; i < campo.length; i++)
		if (campo[i].checked == true) {
			total = total +1;
		}
	if(minChequeadas && total < minChequeadas){
		appendErrorMessage(msgError+". Seleccione mínimo "+minChequeadas);
		if (_campoError == null) {
			_campoError = campo[0];
		}
		return false;
	}	
	else if (maxChequeadas && total > maxChequeadas){
		if(showMsg == true){
			appendErrorMessage(msgError+". Selecciones máximo "+maxChequeadas);
		}
		else{
			appendErrorMessage(msgError);
		}
		if (_campoError == null) {
			_campoError = campo[0];
		}
		return false;
	} 
	else {
		return true;
	}		
}

//Variable que se usa como bandera para forzar a que se realice una seleccion de actividad primaria
var principalActivityFlag = false;
//Variable qeu contabiliza el numero de intentos de envio de los datos
var attempts = 0;
//Realiza la validacion de las preguntas en las plantillas MSREG04 y MSREG01
function validateQuestions(forma){
	principalActivityFlag = false;
	var compania_actividades = null;		  
	var checkboxes = new Array("");
	var radios = new Array("");
	var re = new RegExp("-[0-9-]*-[NA0-9]*-[PSU]");	      
	
	for ( var iter=0;iter<forma.elements.length;iter++){				
			if(re.test(forma.elements[iter].name) && !forma.elements[iter].disabled){
				if(forma.elements[iter].type == "select-one" || forma.elements[iter].type == "select-multiple"){
					var reOption = new RegExp("option-[0-9-]*-[NA0-9]*-P");						
					if(reOption.test(forma.elements[iter].name)){
						compania_actividades = forma.elements[iter];
						principalActivityFlag = validarLista(forma.elements[iter], "Actividad Principal", 1);
					}
					else if(!reOption.test(forma.elements[iter].name)){
						validarLista(forma.elements[iter], document.getElementById("label-"+forma.elements[iter].name).firstChild.nodeValue, 1);
					}
				}
				else if(forma.elements[iter].type == "text"){
					var reCheckboxtext = new RegExp("checkboxtext-[0-9-]*-[NA]*-S-099");					
					var reCheckboxtextSec = new RegExp("checkboxtext-[0-9-]*-[NA]*-S-[0-9]*");
					var reCheckboxtextOther = new RegExp("checkboxtext-[0-9-]*-[0-9-]*-[PSU]*-[0-9]*");
					var reTextP = new RegExp("text-[0-9-]*-[NA0-9]*-P");
					if(!reCheckboxtext.test(forma.elements[iter].name) 
						&& !reCheckboxtextSec.test(forma.elements[iter].name)
						&& !reCheckboxtextOther.test(forma.elements[iter].name)
						&& !reTextP.test(forma.elements[iter].name)){						
						validarCampo(forma.elements[iter], document.getElementById("label-"+forma.elements[iter].name).firstChild.nodeValue);						
					}
					else if(!reTextP.test(forma.elements[iter].name)){						
						var nameFields = forma.elements[iter].name.split('-');		
						validarCampo(forma.elements[iter], document.getElementById("checkboxtext-label-"+nameFields[1]+"-"+nameFields[2]+"-"+nameFields[3]+"-"+nameFields[4]+"-"+nameFields[5]).firstChild.nodeValue);
					}			
					else if(reTextP.test(forma.elements[iter].name)){
						principalActivityFlag = validarCampo(forma.elements[iter], document.getElementById("label-"+forma.elements[iter].name).firstChild.nodeValue);
					}		
				}
				else if(forma.elements[iter].type == "checkbox"){						
					if(checkboxes[checkboxes.length-1] != forma.elements[iter].name)
						checkboxes[checkboxes.length] = forma.elements[iter].name;
				}	
				else if(forma.elements[iter].type == "radio"){						
					if(radios[radios.length-1] != forma.elements[iter].name)
						radios[radios.length] = forma.elements[iter].name;
				}					
			}
		}
		//Valida que los checkboxes tenga la selecciona minima y maxima permitida
		for(var iter=0;iter<checkboxes.length;iter++){
			var checkbox = document.getElementsByName(checkboxes[iter]);
			var reCheckbox = new RegExp("checkbox-[0-9-]*-[NA0-9]*-S");
			if(checkbox[0] && reCheckbox.test(checkbox[0].name)){					
				validarChequeadas(checkbox, 0, 2, document.getElementById("label-"+checkbox[0].name).firstChild.nodeValue, false);
			}
			else if(checkbox[0]){
				validarChequeadas(checkbox, 1, null, document.getElementById("label-"+checkbox[0].name).firstChild.nodeValue, true);
			}
		}
		//Valida que los radios buttons tengan al menos una seleccion
		for(var iter=0;iter<radios.length;iter++){
			var radio = document.getElementsByName(radios[iter]);
			if(radio[0]){
				validarSeleccion(radio, document.getElementById("label-"+radio[0].name).firstChild.nodeValue);
			}
		}
		
		if (compania_actividades && compania_actividades[compania_actividades.selectedIndex].value == '099')  {
			for ( var iter=0;iter<forma.elements.length;iter++){
				if(forma.elements[iter].type == "text"){
					var re = new RegExp("text-[0-9-]*-[NA0-9]*-P");
					if(re.test(forma.elements[iter].name) && !forma.elements[iter].disabled){
						principalActivityFlag = validarCampo(forma.elements[iter], "Descripción de la Actividad");
					}
				}
			}
		}
}
//Si existe la pregunta principal y esta tiene la seleccion 099 deshabilita el campo de suscripcion fisica
function disableSuscription(){
}

//Funcion que valida que se halla hecho una seleccion de la actividad principal
//en caso de no ser asi se aumenta el numero de intentos
function validatePrincipalActivitySelection(languague){
	if(principalActivityFlag || ocupacion == '098'){
		return true;
	}
	else{
		if(attempts>3){
			if(languague && languague=="ES"){
				alert("Ha excedido el número máximo de intentos, debe reiniciar el proceso de ingreso de datos.");
			}
			else{
				alert("It has exceeded the maximum number of attempts, you must reinitiate the process of data entry.");
			}
			history.back();
			return false;
		}
		if(languague && languague=="ES"){
			alert("Por favor verifíque la siguiente información:\n  Actividad Principal");
		}
		else{
			alert("Please check the following information:\n  Principal Activity");
		}
		attempts++;
	}
	
	return false;
}


//FUNCIONES PARA OMNITURE
//--------------------------------------------------------------------------

/**
 * Codifica el String proporcionado a el encoding UTF-8
 * s: String a ser codificado
 */
function encodeUTF8(s)
{  
	//Codificar el String a formato UTF-8
	return unescape(encodeURIComponent(s));
}

/**
 * Verifica si el String proporcionado es una cadena valida en el encoding UTF-8
 * s: String a ser verificado
 * return: true si el String es una cadena UTF-8 valida, false de lo contrario
 */
function validateUTF8(s)
{  
	try 
	{
		//Decodificar el String
		decodeUTF8(s);
		return true;
	}
	catch (error) 
	{
		//Si se produjo error decodificando el String entonces éste no es valido
		return false;
	}
}


/**
 * Decodifica el String proporcionado (que se supone se encuenta en UTF-8)
 * s: String a ser decodificado
 * return: String decodificado
 */
function decodeUTF8(s)
{  
	return decodeURIComponent(escape(s));
}


/**
 * Devuelve un String cuya cantidad de bytes en el encoding UTF-8 no 
 * excede el maximo numero de bytes permitidos por Omniture.
 * s: String que se desea enviar a Omniture
 * return: String cuya cantidad de bytes en el encoding UTF-8 no 
 *         excede el maximo numero de bytes permitidos por Omniture.
 */
function omnitureEncode(str) 
{
	var MAX_LENGTH = 100;
	//Codificar el String a UTF8
	str = encodeUTF8(str);
	
	//Si el String codificado a UTF 8 mide mas de 100 caracteres
	if (str.length > MAX_LENGTH) {
		//Solo tomar los 100 caracteres
		str = str.substring(0, MAX_LENGTH);
	}
	
	//Validar si el String es valido en UTF-8
	var valido = validateUTF8(str);
	//Iterar hasta que el String sea una cadena UTF8 valida
	while (valido == false) 
	{
		//Quitar el ultimo caracter del String
		str = str.substring(0, str.length - 1);
		//Validar si el String es valido en UTF-8
		valido = validateUTF8(str);
		
	}
	//Decodificar el String 
	return decodeUTF8(str);
}

/**
 * Remplaza los guiones de la cadena de texto proporcionada 
 * por el caracter dado
 */
function omnitureRemplazarGuiones(str, character) 
{
	//Remplazar los guiones por el valor del atributo character
	str = str.replace(/-/g, character);
	return str;
}