//General validation function to ANSWER in Cytera Systems WSN.
//Globals var to store reference to field to process.
var gField;
var gField_mask_specific;
var gField_mask_global;
var ARRAY_FORMAT= new Array();
var SEPARATOR; 
var yyyy,mm,dd;
var re2;
var messind = 'ES';
var setReSubmit;
//Global Array containt reference to validation function.
var methodLookup = new Array();
methodLookup["isNotSpaceOnly"] = new dispatcherVal(isNotSpaceOnly);
methodLookup["isNotEmpty"] = new dispatcherVal(isNotEmpty);
methodLookup["isLetter"] = new dispatcherVal(isLetter);
methodLookup["isAlphaNum"] = new dispatcherVal(isAlphaNum);
methodLookup["isPosNumber"] = new dispatcherVal(isPosNumber);
methodLookup["isCCN"] = new dispatcherVal(isCCN);
methodLookup["isNumber"] = new dispatcherVal(isNumber);
methodLookup["isPhone"] = new dispatcherVal(isPhone);
methodLookup["isSSN"] = new dispatcherVal(isSSN);
methodLookup["isTimer"] = new dispatcherVal(isTimer);
methodLookup["isDate"] = new dispatcherVal(isDate);
methodLookup["isBoolean"] = new dispatcherVal(isBoolean);
methodLookup["isEmail"] = new dispatcherVal(isEmail);
methodLookup["isNotNone"] = new dispatcherVal(isNotNone);
methodLookup["isDate_Format"] = new dispatcherVal(isDate_Format);
//jg: oct 2002. new validations for these XAnswers
methodLookup["isNotEmptyMultipleSelect"] = new dispatcherVal(isNotEmptyMultipleSelect);
methodLookup["isNotEmptyMultipleCheckbox"] = new dispatcherVal(isNotEmptyMultipleCheckbox);
methodLookup["isNotEmptyListRadio"] = new dispatcherVal(isNotEmptyListRadio);
//jg: deprecated
methodLookup["isNotEmptyMultipleCheckboxOrRadio"] = new dispatcherVal(DEPRECATED_isNotEmptyMultipleCheckboxOrRadio);

var priorField = null;
var priorChecks = null;

var isSubmit= false;

//jg:  jan 2004 - focus & double alert issue: Esta variable 'isValidate' se pone a FALSE cuando una validacion falla (probablemente emitiendo un alert), 
//                y se puede usar para condicionar mensajes de validacion propias de la app., para evitar q salga mas de un alert-msg.
var isValidated= true;

 
function StartSubmit(form)
{
	//alert("Star Submit 4");
    isSubmit= true;
}
function StopSubmit(form)
{
	//jg:  jan 2004 - focus & double alert issue: 
	isValidated= true;
	isSubmit= false;
}

function 	setFORM_FORMAT_LANG_DATATYPE_DATE(sValue){
	gField_mask_global= sValue;
}

//recibe MESSIND para lo que pueda servir mas adelante aqui
function validation_init(sMESSIND)
{
	setReSubmit=false;
	messind= sMESSIND;
	setArray_Format(gField_mask_global);
}


function unsatisfiedValidate(field, bgcolorError)
{
	//jg:  jan 2004 - focus & double alert issue: 
	isValidated=false;

	//jg:  jan 2004 - focus & double alert issue:  prevents that onchange events steals focus and BLOCKING the onsubmit event
	//alert(field.name + "  s="+isSubmit);
	if( isSubmit )
	{
		//alert("setfocus");
		field.focus();
		
		if(field.type.indexOf("select") == -1) {
			field.select();
		}	
	}
	field.color=0xFF;
	field.style.backgroundColor = bgcolorError;

	priorField = null;
	 return ! isSubmit; 
}

function validate(field, method)
{
	gField = field;
	if(field.name == null){
		gField = field[0];
		field = gField;
	}
	return validateDo(arguments, 2);
}

function validatemask(field, method, mask)
{
	//alert("Entrando a validatemask= " + field.name + " - "+ method);
	gField = field;
	gField_mask_specific= mask;
	//alert(gField_mask_specific);
	if(field.name == null){
		gField = field[0];
		field = gField;
	}
	return validateDo(arguments, 3);
	//alert("Saliendo de validatemask");
}

function validateDo(method, n_init){
	var bgcolorOK = "#FFFFFF";
	var bgcolorError = "#DFECF9";
	var minLength = "isMinLength".length;
	var field = method[0];
	//alert(n_init +  " - " + method[0]+ "\n"+ method[1] + "\n" + method[2]);
	
	for(var i = n_init; i < method.length; i++) {
		//alert(methodLookup[method[i]]);
		if(!methodLookup[method[i]]) {
			if(method[i].indexOf("isMinLength") == 0) {
					if(!isMinLength(parseInt(method[i].substring(minLength,method[i].length)))) {
					return unsatisfiedValidate(field, bgcolorError);
					}
			}
			else if(eval("window."+method[i])) {
				if(!eval(method[i]+"(field)")) {
					return unsatisfiedValidate(field, bgcolorError);
				}
			}
			else {
				alert("Warning function '"+method[i]+"' not found,\n"+
					"this is called to validation in HTML element '"+field.name+"'.");
				return unsatisfiedValidate(field, bgcolorError);
			}
		}
		else if(!methodLookup[method[i]].doValidate()) {
			return unsatisfiedValidate(field, bgcolorError);
		}
	}
	field.color=0x11;
	field.style.backgroundColor = bgcolorOK;
	//jg:  jan 2004 - focus & double alert issue: 
	if( !isSubmit )
	{
		isValidated=true;
		//alert("v=true")
	}
	return true;
}

function priorValidate(sync, check)
{
	if(sync == priorField) {
		return true;
	}
	if(check && priorField != null) {
		var arrayChek = priorChecks.slice(0,priorChecks.length);
		var field = priorField;
		var minLength = "isMinLength".length;
		var bgcolorOK = "#FFFFFF";
		var bgcolorError = "#DFECF9";
		gField = field;

		for(var i = 0; i < arrayChek.length; i++) {
			if(!methodLookup[arrayChek[i]]) {
				if(arrayChek[i].indexOf("isMinLength") == 0) {
					if(!isMinLength(parseInt(arrayChek[i].substring(minLength,arrayChek[i].length)))) {
					return unsatisfiedValidate(field, bgcolorError);
					}
				}
				else if(eval("window."+arrayChek[i])) {
					if(!eval(arrayChek[i]+"(field)")) {
						return unsatisfiedValidate(field, bgcolorError);
					}
				}
				else {
					alert("Warning function '"+arrayChek[i]+"' not found,\n"+
						"this is called to validation in HTML element '"+field.name+"'.");
					return unsatisfiedValidate(field, bgcolorError);
				}
			}
			else {
				if(!methodLookup[arrayChek[i]].doValidate()) {
					return unsatisfiedValidate(field, bgcolorError);
			}
		}
	}
	field.color=0x11;
	field.style.backgroundColor = bgcolorOK;
	}
	//jg:  jan 2004 - focus & double alert issue: 
	if( !isSubmit )
	{
		isValidated=true;
		//alert("v=true")
	}
	
	return true;
}

function cacheValidate(field, method)
{
	if(field == priorField) {
		return true;
	}
	priorField = field;
	priorChecks = new Array();

	for(var i = 2; i < arguments.length; i++) {
		priorChecks[i-1] = arguments[i];
	}
	return true;
}

function dispatcherVal(validationFunc)
{
	this.doValidate = validationFunc;
}

function index()
{
	for(var i = 0; i < gForm.length; i++) {
		if(gField.name == gForm.elements[i].name) {
			return i;
		}
	}
	return 'none';
}

function isPosInteger(inputStr)
{
	var oneChar;
	for(var i = 0; i < inputStr.length; i++) {
		oneChar = inputStr.charAt(i);
		if(oneChar < "0" || oneChar > "9") {
			return false;
		}
	}
	return true;

}

function isTime(inputStr, time)
{
	var valor = parseInt(inputStr);
	if(!isNaN(valor) && valor <= time) {
		return true;
	}
	return false;
}

function getFrom(inputStr, search)
{
	foundIdx = inputStr.indexOf(search);
	if(foundIdx == -1) {
		return null;
	}
	return inputStr.substring(0,foundIdx);
}

function getEnd(inputStr, search)
{
	foundIdx = inputStr.indexOf(search);
	if(foundIdx == -1) {
		return null;
	}
	return inputStr.substring(foundIdx+search.length,inputStr.length);
}

function replaceString(inputStr, search, replace)
{
	var front = getFrom(inputStr,search);
	var end = getEnd(inputStr,search);
	if(front != null && end != null) {
		return front + replace + end;
	}
	return null;
}

function isNotSpaceOnly()
{
	var inputStr = gField.value;
//	alert("In isNotSpaceOnly : " + inputStr);
	var oneChar;
	var ret = false;
	for(var i = 0; i < inputStr.length; i++) {
		oneChar = inputStr.charAt(i);
		if(oneChar != " ") {
			ret = true;
			break;
		}
	}
	if(!ret) {
				
		if(messind=="SP" || messind=="ES")
			validationalert("Este campo no acepta espacios!");
		else if(messind=="PT")
			validationalert("Este campo n?o aceita s? espa?os!");
		else
			validationalert("This field don't accept only spaces!");
		
	}
	return ret;
}

//jg:  jan 2004 - focus & double alert issue:  Esta funcion debe ser usada en 
//              vez de los alert tradicionales p/ todos los mensajes de validacion en validation.js
var alertField;
function validationalert(s)
{
	if( isSubmit && ! isValidated )
	{
		return;
	}
	
	alertField= gField;
	s= escape(s);
	//var sName= alertField.name;
	

	eval("self.setTimeout('alert(unescape(\""+s+"\"));delayedFocusAndSelect(alertField);', 140)");
	//self.setTimeout( "alert('"+s+"');",  140 );
}

function delayedFocusAndSelect(field)
{
		field.focus();
		
		if(field.type.indexOf("select") == -1) {
			field.select();
		}	
}


function isNotEmpty()
{
	var inputStr = gField.value;
	if(inputStr == null || inputStr == "") {
		if(messind=="SP" || messind=="ES")
			validationalert('Existen campos que no pueden estar vacios!!');
		else if(messind=="PT")
			validationalert("Este campo n?o ? enchido!!");
		else
			validationalert("This field is not filled!!");		
		return false;
	}
	return true;
}

//Validate is field is letter.
function isLetter()
{
	var inputStr = gField.value.toLowerCase();
	var oneChar;
	for(var i = 0; i < inputStr.length; i++) {
		oneChar = inputStr.charAt(i);
		if(oneChar == " ") {
			continue;
		}
		if(oneChar < "a" || oneChar > "z") {

			if(messind=="SP" || messind=="ES")
				validationalert("Este campo solo acepta letras");
			else
				validationalert("This field only accept letters");

			return false;
		}
	}
	return true;
}

//Validation is all chars in fields is number or letters.
function isAlphaNum()
{
	var inputStr = gField.value.toLowerCase();
	var oneChar;
//	alert("In isAlphaNum with : " + inputStr);
	for(var i = 0; i < inputStr.length; i++) {
		oneChar = inputStr.charAt(i);
		if(oneChar == " " || isPosInteger(oneChar) ) {
			continue;
		}
		if(oneChar < "a" || oneChar > "z") {
			if(messind=="SP" || messind=="ES")
				validationalert("Este campo solo acepta letras, n?meros o espacios en blanco");
			else
				validationalert("This field only accept letters, numbers or white spaces.");
			
			return false;
		}
	}
	return true;
}
//Verify if fields is positive integer.
function isPosNumber()
{
	var inputStr = gField.value;
	var oneChar;
	for(var i = 0; i < inputStr.length; i++) {
		oneChar = inputStr.charAt(i);
		if(!isPosInteger(oneChar)) {
			if(messind=="SP" || messind=="ES")
				validationalert("Este campo solo acepta n?meros del 0 al 9");
			else
				validationalert("This field only accept digits from 0 to 9");

			return false;
		}
	}
	return true;
}
//Verify valid format in card number.
function isCCN()
{
	var inputStr = gField.value;
	if( inputStr.length == 0  )
		return true;

	if(inputStr.length < 13 || inputStr.length > 16) {
		if(messind=="SP" || messind=="ES")
			validationalert("Chequee el n?mero de tarjeta, la longitud no es correcta.");
		else
			validationalert("Check your card number, the length is incorrect.");
		
		return false;
	}
	if(!isPosInteger(inputStr)) {
		if(messind=="SP" || messind=="ES")
			validationalert("El n?mero de tarjeta debe tener s?lo d?gitos.");
		else
			validationalert("Your card number must contain digits only.");
		
		return false;
	}
	return true;
}

function isNumber()
{
	var inputStr = gField.value;
	var oneChar;
	for(var i = 0; i < inputStr.length; i++) {
		oneChar = inputStr.charAt(i);
		if(oneChar == "." || oneChar == ","){
			continue;
		}
		if(!isPosInteger(oneChar)) {
			if(messind=="SP" || messind=="ES")
				validationalert("Este campo solo acepta digitos del 0 al 9, '.' o ','");
			else			
				validationalert("This field accept digits only from '0' to '9', '.' or ','");			

			return false;
		}
	}
	return true;
}

function isPhone()
{
	var inputStr = gField.value;
	var oneChar;
	for(var i = 0; i < inputStr.length; i++) {
		oneChar = inputStr.charAt(i);
		if(oneChar == "#" || oneChar == "-" || oneChar == "(" || oneChar == ")") {
			continue;
		}
		if(!isPosInteger(oneChar)) {
			if(messind=="SP" || messind=="ES")
				validationalert("D?gito '" + oneChar + "' no es v?lido en un n?mero telef?nico.");
			else
				validationalert("Digit '" + oneChar + "'is not valid in phone number");
			return false;
		}
	}
	return true;
}

function isSSN()
{
	var inputStr = gField.value;
	if( inputStr.length == 0  )
		return true;

	if(inputStr.length == 11) {
		var ArraySSN = inputStr.split("-");
		if(ArraySSN.length == 3 && ArraySSN[0].length == 3 && isPosInteger(ArraySSN[0]) &&
		   ArraySSN[1].length == 2 && isPosInteger(ArraySSN[1]) &&
		   ArraySSN[2].length == 4 && isPosInteger(ArraySSN[2])) {
			return true;
		}
	}
	else if(inputStr.length == 9 && isPosInteger(inputStr)) {
		return true;
	}
	if(messind=="SP" || messind=="ES")
		validationalert("Este campo acepta s?lo d?gitos del '0' al '9'\ncon el formato '999999999' o '999-99-9999'");
	else
		validationalert("This field accept only digits from '0' to '9'\nwith the format '999999999' or '999-99-9999'");
	
	return false;
}

function isTimer()
{
	var inputStr = gField.value;
	if( inputStr.length == 0  )
		return true;

	if(inputStr.length == 5) {
		var ArrayTimer = inputStr.split(":");
		if (ArrayTimer.length == 2 && ArrayTimer[0].length == 2 &&
		    isTime(ArrayTimer[0],24) && ArrayTimer[1].length == 2 &&
		    isTime(ArrayTimer[1],59)) {
			return true;
		}
	}

	if(inputStr.length == 8 || inputStr.length == 11) {
		var ArrayTimer = inputStr.split(":");
		if (ArrayTimer.length == 3 && ArrayTimer[0].length == 2 &&
		    isTime(ArrayTimer[0],24) && ArrayTimer[1].length == 2 &&
		    isTime(ArrayTimer[1],59) && (ArrayTimer[2].length == 2 ||
		    ArrayTimer[2].length == 5) && isTime(ArrayTimer[2],59)) {
			return true;
		}
	}
	if(messind=="SP" || messind=="ES")
		validationalert("Este campo solo acepta los caracteres ':', '.' o los d?gitos desde '0' hasta '9'\nejemplo '09:07:05.01'");
	else
		validationalert("This field accept only chars ':', '.' or digits from '0' to '9'\nexample '09:07:05.01'");

	return false;
}


function isBoolean()
{
	var inputStr = gField.value;
	if( inputStr.length == 0  )
		return true;

	if(inputStr.length == 1 && (inputStr == "0" || inputStr == "1" || inputStr == "Y" ||
	   inputStr == "N" || inputStr == "T" || inputStr == "F")) {
		return true;
	}
	if(messind=="SP" || messind=="ES")
		validationalert("Este campo s?lo acepta los siguientes \ncaracteres '0', '1', 'Y', 'N', 'T' or 'F'");
	else
		validationalert("This field only accepts the following \ncharacter '0', '1', 'Y', 'N', 'T' or 'F'");
	return false;
}

function isEmail()
{
	var inputStr = gField.value;
	if( inputStr.length == 0  )
		return true;

	var regexp = /^\w([\w\.\-]+[\w\-]+\w+)\@([\w\-]+\.)+(\w+)$/;
	if(!regexp.test(inputStr)) {
		if(messind=="SP" || messind=="ES")
			validationalert("Este campo solo acepta formato valido de email.");
		else
			validationalert("This field only accept valid e-mail format.");

		return false;
	}
	return true;
}

function isNotNone()
{
	var inputStr = gField.options[gField.selectedIndex].value;
	//alert("In isNotNone value is : " + inputStr + " type is : " + gField.type);
	if(inputStr.toLowerCase() == "none") {
		
		if(messind=="SP" || messind=="ES")
			validationalert("Este campo requiere una elecci?n.");
		else
			validationalert("This field requires a valid choice");

		return false;
	}
	return true;
}

function isMinLength(mValue)
{
	//alert('isMinLength received '+mValue);
	var inputStr = gField.value;
	if(inputStr.length < mValue) {
		if(messind=="SP" || messind=="ES")
			validationalert("Este campo requiere una longitud m?nima de " + mValue);
		else
			validationalert("This field requires a minimal length of "+mValue);
		
		return false;
	}
	return true;
}

function isNotEmptyMultipleSelect()
{
//	sel = gField.options[gField.selectedIndex].value;
	var sel = gField;

	for(var i = 0; i < sel.length;i ++) 
	{
        if (sel.options[i].selected){
			return true;
        }
	}

	if(messind=="SP" || messind=="ES")
		validationalert("Este campo requiere una elecci?n.");
	else
		validationalert("This field requires a valid choice");

    return false;
}

function isNotEmptyMultipleCheckbox()
{
	return true;

}

function isNotEmptyListRadio()
{
	return true;

}

//deprecated
function DEPRECATED_isNotEmptyMultipleCheckboxOrRadio()
{
	return true;
}

/***** A partir del engine 05/11/2003 *****/ 
function isDate_Format()
{
		var re;
		var specific_format_date= gField_mask_specific.toLowerCase();
		var global_format_date= gField_mask_global.toLowerCase();
		var date_value= gField.value;
		var format;
		var sep=new Array();
		var array_date= new Array();
		// Rules for the date regular expression:
		// The format of the date is:
		// 	dd: date
		//	mm: month
		//	yyyy: year
		// 	SEPARATOR Ej. '/', '-', '@', '*', '.'
		// Days: Valid between 1 and 31
		// The first digit may either be a 3 followed by a 0 or a 1 
		// or it could be a 0 followed by 1 to 9, or a 1 or 2, 
		// followed by any digit.
		// Then follows a backslash
		// Months: Valid between 1 and 12
		// The month may be a 0 followed by 1 to 9, or a 1 followed by 
		// either a 0, 1 or 2. 
		// Then follows a backslash
		// The year must comprise of any 2 digits or of any 4 digits
		if(date_value =="")
			return true;	
		
		if(specific_format_date != null && specific_format_date != ""){
			 format= specific_format_date;
		}else if (global_format_date != null && global_format_date != ""){
			format= global_format_date;
		}else{
			if (messind == "SP" || messind == "ES")
				validationalert("No existe formato de fecha.");
			else
				validationalert("Format Date not exist.");
			
			return false;
		}
		
		var re= setArray_Format(format);
		//alert(" 100 FORMATTER= " + format + "\n re= "+ re.test(date_value));
		if (re.test(date_value) == true){
			//alert("100 sep.length= " + sep.length ); 
			if(SEPARATOR != null && SEPARATOR != "")
				sep = date_value.split(SEPARATOR);
			if (sep.length > 1){
				//alert(sep.length);
				if(sep.length == 2){
					if (messind == "SP" || messind == "ES")
						validationalert('Fecha invalida. Formato correcto : ' +  format);
					else
						validationalert('Invalid date. Correct format : ' +  format);
					gField.focus();
					gField.select();
					return false;
				}else{
					for(var i=0; i < sep.length; i++){
						array_date[i]= sep[i];
					}
				}
			}else{
				//alert("100 re2= " + re2);
				sep = date_value.match(re2);
				if(sep == null){
					if (messind == "SP" || messind == "ES")
						validationalert('Fecha invalida. Formato correcto : ' +  format);
					else
						validationalert('Invalid date. Correct format : ' +  format);
					gField.focus();
					gField.select();
					return false;
				}else{
					for(var i=1; i < sep.length; i++){
						array_date[i-1]= sep[i];
					}
				}
			}
			//alert("ARRAY_FORMAT= " + ARRAY_FORMAT);
			//alert("array_date= " + array_date);
			if (isDate2(ARRAY_FORMAT, array_date)){
				//alert('Valid date');
				return true;
			}else{
				if (messind == "SP" || messind == "ES")
					validationalert('Fecha invalida. Formato correcto : ' +  format);
				else
					validationalert('Invalid date. Correct format : ' +  format);
				gField.focus();
				gField.select();
				return false;
			}
		}else{
				if (messind == "SP" || messind == "ES")
					validationalert('Fecha invalida. Formato correcto : ' +  format);
				else
					validationalert('Invalid date. Correct format : ' +  format);
				gField.focus();
				gField.select();
				return false;
		}
		return false;
}

function setArray_Format(format){
		//alert("Entrando en setArray_Format    " + format);
		if(format == null || format == "" || format == "FALSE" || format == "null")
			return;
		else {
			format= format.toLowerCase();
			var regexp_sp= /([ymd]+)([^ymd])?/gi;
			var regexp_sp2= /(y+|m+|d+)(d+|m+)?(d+|m+|y+)/gi;
			var sep= regexp_sp.exec(format);
			var sep2= regexp_sp2.exec(format);
			
			re= '/^';
			re2='/^';
			//alert(sep.length);
			if(sep && sep.length > 1){
				SEPARATOR = sep[2];
				//alert(SEPARATOR);
				if(SEPARATOR != null && SEPARATOR != ""){
					sep = format.split(SEPARATOR);
				}else{
					sep= sep2.slice(1, sep2.length);
				}
				//alert(sep);
				for(var i=0; i < sep.length; i++){
					//alert(sep[i]);
					if(sep[i].indexOf('y') != -1){
						re+= '\\d{2}|\\d{4}';
						re2+= '(\\d{2}|\\d{4})';
						//re+=  '\\'+SEPARATOR + '?';
						re+=  '\\'+SEPARATOR;
						ARRAY_FORMAT[i]= sep[i];
					}else if (sep[i].indexOf('m') != -1){
						re+= '(0[1-9]|1[012])';
						re2+= '(\\d{2})';
						//re+=  '\\'+SEPARATOR+ '?';
						re+=  '\\'+SEPARATOR;
						ARRAY_FORMAT[i]= sep[i];
					}else if (sep[i].indexOf('d') != -1){ 
						re+= '(3[01]|0[1-9]|[12]\\d)';
						re2+= '(\\d{2})';
						//re+=  '\\'+SEPARATOR + '?';
						re+=  '\\'+SEPARATOR ;
						ARRAY_FORMAT[i]= sep[i];
					}else{
						re2= '';
						re=  '';
					}
				}
			}
			//alert(ARRAY_FORMAT);
			if(SEPARATOR != null && SEPARATOR != "")
				re= re.substring(0, re.length-2);
			else
				re= re.substring(0, re.length-1);
			//alert("100 re= " + re);
			re += '$/';
			re2 += '$/';
			//alert("200 re= " + re);
			re= eval(re);
			//alert("200 re= " + re);
			re2= eval(re2);
			//alert("300 re= " + re);
			//alert("100 re2= " + re2);
			return re;
		}
}

function isDate2(ar_format, ar_values){
	//alert("Entrando en la funcion isDate2");
	var oneChar;
	var val_delim;
	
	//alert("ar_format = " + ar_format);
	//alert("ar_values = " + ar_values);
	for(var i=0; i < ar_format.length; i++){
		if(ar_format[i].indexOf('y')!= -1){
			yyyy= ar_values[i];
		}else if (ar_format[i].indexOf('mm')!= -1){
			mm= ar_values[i];
		}else{
			dd= ar_values[i];
		}
	}
	//alert("yyyy= " + yyyy);
	//alert("mm= " + mm);
	//alert("dd= " + dd);
	if(isNaN(yyyy) || isNaN(mm) || isNaN(dd)) {
		if(messind=="SP" || messind=="ES")
			validationalert("El formato ingresado no es aceptable. El formato aceptado por este campo es : "  + format);
		else
			validationalert("The entry format is not acceptable. This field accept format is : " + format);

		return false;
	}
	if(yyyy < 1000) {
		if(yyyy < 0) {
			if(messind=="SP" || messind=="ES")
				validationalert("El a?o debe ser mayor o igual a cero.");
			else
				validationalert("The year should be bigger or equal than cero");

			return false;
		}
		if(yyyy > 60) {
			yyyy = parseInt(yyyy, 10) +  1900;
		}else {
			yyyy = parseInt(yyyy, 10) + 2000;
		}
	}
	
	if(mm < 1 || mm > 12) {
		if(messind=="SP" || messind=="ES")
			validationalert("Los meses deben estar entre 01(Enero) y 12(Diciembre).");
		else
			validationalert("Months must be between 01(January) and 12(December)");
		
		return false;
	}
	
	var referencedd = 31;
	if(mm == 2) {
		if(yyyy % 4 > 0) {
			//alert("28");
			referencedd = 28;
		}	else{
			//alert("29");
			referencedd = 29;
		}
	} else if(mm == 4 || mm == 6 || mm == 9 || mm == 11) {
		referencedd = 30;
	}
	if(dd < 1 || dd > referencedd) {
		if(messind=="SP" || messind=="ES")
			validationalert("El d?a del mes " + mm + " debe ser menor que " + referencedd + " y mayor que 01.");	
		else
			validationalert("Days for moth " + mm + " must be smaller than " + referencedd + " and bigger than 01");
		
		return false;
	}
	var dateCorrect="";
	for(var i=0; i < ar_format.length; i++){
		if(ar_format[i].indexOf('yyyy')!= -1){
			dateCorrect+= yyyy + SEPARATOR;
		}else if (ar_format[i].indexOf('yy')!= -1){
			dateCorrect+= ar_values[i] + SEPARATOR;
		}else if (ar_format[i].indexOf('mm')!= -1){
			dateCorrect+= mm + SEPARATOR;
		}else{
			dateCorrect+= dd + SEPARATOR;
		}
	}
	dateCorrect= dateCorrect.substring(0, dateCorrect.length-1);
	gField.value= dateCorrect;
	//	alert("last value is : " + gField.value);
	return true;
}

function isDate()
{
	var inputStr = gField.value;
	if( inputStr.length == 0  )
		return true;
	while(inputStr.indexOf("-") != -1) {
		inputStr = replaceString(inputStr,"-","/");
	}

//	alert("new value : " + inputStr);
	
	var delim1 = inputStr.indexOf("/");
	var delim2 = inputStr.lastIndexOf("/");
	if(delim1 != -1 && delim1 == delim2) {
		if(messind=="SP" || messind=="ES")
			validationalert("El formato ingresado no es aceptable.\El formato aceptado por este campo es:\n yyyymmdd, yyyy/mm/dd, yyyy-mm-dd, mm/dd/yyyy, mm-dd-yyyy");
		else
			validationalert("The entry format is not acceptable.\This field accept format is :\n yyyymmdd, yyyy/mm/dd, yyyy-mm-dd, mm/dd/yyyy, mm-dd-yyyy");

		return false;
	}
	var yyyy,mm,dd;
	if(delim1 != -1) {
		yyyy = parseInt(inputStr.substring(0,delim1),10);
		mm = parseInt(inputStr.substring(delim1+1,delim2),10);
		dd = parseInt(inputStr.substring(delim2+1,inputStr.length),10);
		if(yyyy < 13) {
			var tmp = yyyy;
			yyyy = dd;
			dd = mm;
			mm = tmp;
		}
	}
	else
	{
		yyyy = parseInt(inputStr.substring(0,4),10);
		mm = parseInt(inputStr.substring(4,6),10);
		dd = parseInt(inputStr.substring(6,inputStr.length),10);
	}
	if(isNaN(yyyy) || isNaN(mm) || isNaN(dd)) {
		if(messind=="SP" || messind=="ES")
			validationalert("El formato ingresado no es aceptable.\El formato aceptado por este campo es:\n yyyymmdd, yyyy/mm/dd, yyyy-mm-dd, mm/dd/yyyy, mm-dd-yyyy");
		else
			validationalert("The entry format is not acceptable.\This field accept format is :\n yyyymmdd, yyyy/mm/dd, yyyy-mm-dd, mm/dd/yyyy, mm-dd-yyyy");

		return false;
	}
	if(yyyy < 1000) {
		if(yyyy < 0) {
			if(messind=="SP" || messind=="ES")
				validationalert("El a?o debe ser mayor o igual a cero.");
			else
				validationalert("The year should be bigger or equal than cero");

			return false;
		}
		if(yyyy > 60) {
			yyyy += 1900;
		}
		else {
			yyyy += 2000;
		}
	}
	if(mm < 1 || mm > 12) {
		if(messind=="SP" || messind=="ES")
			validationalert("Los meses deben estar entre 01(Enero) y 12(Diciembre).");
		else
			validationalert("Months must be between 01(January) and 12(December)");
		
		return false;
	}
	var referencedd = 31;
	if(mm == 2) {
		if(yyyy % 4 > 0) {
			referencedd = 28;
		}
		else
		{
			referencedd = 29;
		}
	}
	else if(mm == 4 || mm == 6 || mm == 9 || mm == 11) {
		referencedd = 30;
	}
	if(dd < 1 || dd > referencedd) {
		if(messind=="SP" || messind=="ES")
			validationalert("El d?a del mes " + mm + " debe ser menor que " + referencedd + " y mayor que 01.");	
		else
			validationalert("Days for moth " + mm + " must be smaller than " + referencedd + " and bigger than 01");

		return false;
	}
	gField.value = inputStr;
//	alert("last value is : " + gField.value);
	return true;
}

function passwordValidation()
{
	// Esta funci?n verifica que el string que recibe (que es un password), no tiene espacios en blanco y tiene por lo menos un n?mero.
	var inputStr = gField.value;
	var oneChar;
	var countNumber = 0;
	for(var i = 0; i < inputStr.length; i++) 
	{
		oneChar = inputStr.charAt(i);
		if(oneChar == " ")
		{
			if(messind=="SP" || messind=="ES")
				validationalert("No se permiten espacios en la contrase?a.");
			else
				validationalert("White spaces are not permitted in the password.");			

			return false;
		}
		if(isPosInteger(oneChar))
		{
			countNumber++;
		}
	}
	if (countNumber == 0)
	{
		if(messind=="SP" || messind=="ES")
			validationalert("La contrase?a debe tener por lo menos un n?mero.");
		else
			validationalert("The password must have at least one number.");			

		return false;
	}
	return true;
}

// MaxLength manuales para TextAreas

function MaxLength_10000() { return valMaxLength(gField,10000); }
function MaxLength_4000() { return valMaxLength(gField,4000); }
function MaxLength_2000() { return valMaxLength(gField,2000); }
function MaxLength_1000() { return valMaxLength(gField,1000); }
function MaxLength_255(){ return valMaxLength(gField,255); }
function MaxLength_250(){ return valMaxLength(gField,250); }
function MaxLength_200(){ return valMaxLength(gField,200); }
function MaxLength_150(){ return valMaxLength(gField,150); }
function MaxLength_100(){ return valMaxLength(gField,100); }
function MaxLength_70(){ return valMaxLength(gField,70); }
function MaxLength_50(){ return valMaxLength(gField,50); }


function valMaxLength(field, maxlimit) {
	// Ayuda a limira el texto en un TEXTAREA
	if (field.value.length > maxlimit){ 
		field.value = field.value.substring(0, maxlimit);
		if(messind=="SP")
			alert("La longitud m?xima permitida por este campo es de " + maxlimit + " caracteres. El contenido fue truncado hasta esta longitud");

		if(messind=="EN")
			alert("The maximum length allowed by this field is " + maxlimit + " characters. Field was truncated");
		unsatisfiedValidate(field, "#DFECF9");
		return false;
	}
	return true;
}
function alltrim(dato) { 
return dato.replace(/^\s+|\s+$/, ''); 
};
function isVacio(dato, nombre, tipo){
	var estaok = false;
	
	if(tipo == "select"){
		if(alltrim(dato).toLowerCase() == "none"){
			dato = "";
		}
	}
	
	if(alltrim(dato)=="" || dato == null){
		alert("Existen datos que no pueden estar vacios!");
		var obj = MM_findObj(nombre);
		if(obj != null){
			obj.style.background = "#DFECF9";
		}
		estaok = false;
	}else{
		estaok = true;
	}
	return estaok;
}

