/* SARENA */
var isIE5=(window.navigator.appName=="Microsoft Internet Explorer"&&window.navigator.appVersion.substring(window.navigator.appVersion.indexOf("MSIE")+5,window.navigator.appVersion.indexOf("MSIE")+8)==5.0);
if (isIE5) {
	var undefined = 'undefined';
}
/* SARENA */

function jsTrim(sf_string){
	if (sf_string!=undefined){
		sf_string=sf_string.replace(/ +/g," ");
		sf_string=sf_string.replace(/^ /,"");
		sf_string=sf_string.replace(/ $/,"");
	}
	return(sf_string);
}

validation = function() {}
	
	
/*
 si está entrando por el catch, agregar la siguiente línea
	GlosarioJS(objXMLDictionary)
 luego de la línea
	objXMLDictionary.setURI "", userLang
*/
try{
	validation.prototype.errorRequiredField = objGlossary.getText("error_require-field");
	validation.prototype.errorNotValid = objGlossary.getText("error_invalid");
	validation.prototype.errorNotValidExt = objGlossary.getText("error_invalid-ext");
	validation.prototype.errorNotValidFormat = objGlossary.getText("error_no-exist");
	validation.prototype.errorNotSelectedAtLeast =  objGlossary.getText("error_course-sel");
	validation.prototype.errorNotEqual =  objGlossary.getText("error_not-equal");
	validation.prototype.errorNotValidUsername = objGlossary.getText("error_invalid-user");
} catch(er) {
	validation.prototype.errorRequiredField = "error_require-field";
	validation.prototype.errorNotValid = "error_invalid";
	validation.prototype.errorNotValidExt = "error_invalid-ext";
	validation.prototype.errorNotValidFormat = "error_no-exist";
	validation.prototype.errorNotSelectedAtLeast =  "error_course-sel";
	validation.prototype.errorNotEqual =  "error_not-equal";
	validation.prototype.errorNotValidUsername = "error_invalid-user";
}

validation.prototype.ckeckedFields = new Array();

validation.prototype.getDNNode = function(node){
	keyword = node.getAttribute("displayName");
	if(keyword != "" && keyword != undefined){
		return this.getNode(keyword);
	}else{
		return "";
	}
}

validation.prototype.getNode = function(node){
	if(node != "" && node != undefined){
		if(this.dataXML && node.indexOf(" ") <= 0){
			if(this.dataXML.XMLDocument.childNodes[1].selectSingleNode(node)){
				return this.dataXML.XMLDocument.childNodes[1].selectSingleNode(node).text;
			}else{
				return node;
			}
		}else{
			return node;
		}
	}
}

validation.prototype.printError = function(field, errorKey){		
	alert(field + " " + errorKey);
}

validation.prototype.validateIsEmpty = function(objField){
var fieldValue
	if(objField){
		if(objField.tagName == "SELECT"){
			if(objField.selectedIndex >= 0)
				fieldValue = objField[objField.selectedIndex].value;	//select
			else
				fieldValue = '';
		}else{
			fieldValue = objField.value;							//regular input
		}

		if(this.isEmpty(jsTrim(fieldValue))){
			try{
				objField.focus();		
				this.printError(objField.getAttribute("displayName"), this.errorRequiredField);
				return true;
			}catch(e){
				return false;
			}
		}else{
			return false;
		}
	}
}

validation.prototype.validateIsNotEqual = function(objField, objCompare){
	if(objField != objCompare){
		this.printError(this.getDNNode(objField), this.errorRequiredField)
	    //objField.focus();
	    return true;
	}else{
		return false;
	}
}

validation.prototype.validateIsNotPhone = function(objField){
	if(!this.isPhoneNumber(jsTrim(objField.value))){
		this.printError(this.getDNNode(objField), this.errorNotValid)
	    //objField.focus();
	    return true;
	}else{
		return false;
	}
}

validation.prototype.validateIsNotEmail = function(objField){
	if(!this.isEmail(jsTrim(objField.value))){
		this.printError(this.getDNNode(objField), this.errorNotValid)
	    //objField.focus();
	    return true;
	}else{
		return false;
	}
}

validation.prototype.validateIsNotUrl = function(objField){
	if(!this.isURL(jsTrim(objField.value))){
		this.printError(this.getDNNode(objField), this.errorNotValid)
	    //objField.focus();
	    return true;
	}else{
		return false;
	}
}

validation.prototype.validateIsNotAlphaNumericOnlyNumeric = function(objField){
	if((!this.isAlphaNumeric(jsTrim(objField.value))) || ( (this.isNumeric(jsTrim(objField.value))) && !isEmpty(jsTrim(objField.value))) ){
		this.printError(this.getDNNode(objField), this.errorNotValid)
	    //objField.focus();
	    return true;
	}else{
		return false;
	}
}

validation.prototype.validateIsNotAlphaNumericNumeral = function(objField){
	if(!this.isAlphaNumericNumeral(jsTrim(objField.value))){
		this.printError(this.getDNNode(objField), this.errorNotValid)
	    //objField.focus();
	    return true;
	}else{
		return false;
	}
}

validation.prototype.validateIsNotAlphaNumeric = function(objField){
	if(!this.isAlphaNumeric(jsTrim(objField.value))){
		this.printError(this.getDNNode(objField), this.errorNotValid)
	    //objField.focus();
	    return true;
	}else{
		return false;
	}
}

validation.prototype.validateIsNotAlphaNumericExtended = function(objField){
	if(!this.isAlphaNumericExtended(jsTrim(objField.value))){
		this.printError(this.getDNNode(objField), this.errorNotValid)
	    //objField.focus();
	    return true;
	}else{
		return false;
	}
}

validation.prototype.validateIsNotAlphaNumeric_Course = function(objField){
	if(!this.isAlphaNumeric_Course(jsTrim(objField.value))){
		this.printError(this.getDNNode(objField), this.errorNotValid)
	    //objField.focus();
	    return true;
	}else{
		return false;
	}
}


validation.prototype.validateIsNotAlphaNumericValName = function(objField){
	if(!this.isAlphaNumericValName(jsTrim(objField.value))){
		this.printError(this.getDNNode(objField), this.errorNotValid)
	    //objField.focus();
	    return true;
	}else{
		return false;
	}
}

validation.prototype.validateIsNotAlphabetic = function(objField){
	if(!this.isAlphabetic(jsTrim(objField.value))){
		this.printError(this.getDNNode(objField), this.errorNotValid)
	    //objField.focus();
	    return true;
	}else{
		return false;
	}
}

validation.prototype.validateIsNotPositiveInteger = function(objField){
	if(!this.isNumeric(jsTrim(objField.value))){
		this.printError(this.getDNNode(objField), this.errorNotValid)
	    //objField.focus();
	    return true;
	}else{
		return false;
	}
}

validation.prototype.validateIsNotPositiveIntegerNotCero = function(objField){
	var fieldValue = jsTrim(objField.value);
	var Min;
	var Max;
	if(fieldValue!="") {
    	if (objField.getAttribute("min")) {
            Min = parseInt(objField.getAttribute("min"));
        } else {
            Min = -1;
        }
        
    	if (objField.getAttribute("max")) {
            Max = parseInt(objField.getAttribute("max"));
        } else {
            Max = 2146474837;
        }
    	if(!this.isNumeric(fieldValue)){
    		this.printError(this.getDNNode(objField), this.errorNotValid)
    	    //objField.focus();
    	    return true;
    	}else if((parseInt(fieldValue) < Min) || (parseInt(fieldValue) > Max)){
    		this.printError(this.getDNNode(objField), this.errorNotValid)
    	    //objField.focus();
    	    return true;
    	} else {
    		return false;
    	}
    } else {
        return false;
    }
}

validation.prototype.validateIsNotImageFile = function(objField){
var imgSrc;
	imgSrc = jsTrim(objField.value);
	if(!this.isImageFile(imgSrc)){
		this.printError(this.getDNNode(objField), this.errorNotValidExt)
	    //objField.focus();
	    return true;
	}
	/*else if((!objField.isvalid) && (imgSrc != "")){
		this.printError(this.getDNNode(objField), this.errorNotValidFormat)
	    objField.focus();
	    return true;
	}*/
	else{	
		return false;
	}
}

validation.prototype.validateIsNotUsername = function(objField){
    if(!this.isUsername(objField.value)){
		this.printError(this.getDNNode(objField), this.errorNotValidUsername);
		//objField.focus();
		return true;
	} else {
		return false;
	}
}

validation.prototype.validateIsNotGlossaryTerm = function(objField){
    if (!this.isAlphaNumeric_glossary(objField.value)){
        this.printError(this.getDNNode(objField), this.errorNotValid);
        //objField.focus();
        return true;
    }else{
        return false;
    }
}

validation.prototype.resetCheckeds = function(objField){
	this.ckeckedFields = new Array();
}

validation.prototype.setAsChecked = function(objField){
	this.ckeckedFields[this.ckeckedFields.length] = objField;
}

validation.prototype.wasChecked = function(objField){
var i;
	for(i=0;i<this.ckeckedFields.length;i++){
		if(this.ckeckedFields[i] == objField){
			return true;
		}
	}
	return false;
}

validation.prototype.validateNotOneChecked = function(objField){
var i;
    if(!this.wasChecked(objField)){
  	//alert(objField);
		vForm = objField.split('.')[0];
		vInput = objField.split('.')[1];
		objChecks = document[vForm][vInput];
		if(objChecks){
			if (objChecks.length) {
				for(i=0;i<objChecks.length;i++){
					if(objChecks[i].checked){
						return false;
					}
				}
				this.setAsChecked(objField);
        if (objChecks[0].getAttribute("displayName")=='common_course') //hardcoded...
					alert(this.getNode('error_course-sel') + ' ' + this.getNode(objChecks[0].getAttribute("displayName")))
        else
					alert(this.getNode(objChecks[0].getAttribute("displayName")))
			} else {
				if(objChecks.checked){
					return false;
				}
				alert(this.getNode(objChecks.getAttribute("displayName")));
			}
			
		}
		return true;
	}
}

validation.prototype.validateNotConfirmed = function(objField){
		if(objField){
			if(!this.isEmpty(jsTrim(objField.value))){
			     try{
				    objConfirm = eval(objField.form.name + '.' + objField.name + '_confirm')
				 }catch(er) {
                    objConfirm = document.getElementById(objField.name + '_confirm');
                 }
				if(this.isEmpty(jsTrim(objConfirm.value))){
					this.printError(this.getDNNode(objConfirm), this.errorRequiredField)
				    //objConfirm.focus();
				    return true;
				}else if(objConfirm.value != objField.value){
					this.printError(this.getDNNode(objField) + "/" + this.getDNNode(objConfirm) , this.errorNotEqual)
				    //objConfirm.focus();
				    return true;
				}
			}
		}
}

/*Basic Validation Functions*/
validation.prototype.isEmpty = function(str){
	return ( str == "")
}

validation.prototype.isPhoneNumber = function(str){
	if(this.isEmpty(str)) return true;
    var path = /^(\([\d]+\)){0,1}[\s]*[\d]+(\-\d+)*$/;
    return path.test( str );
}
	
validation.prototype.isAlphabetic = function(str){
	if(this.isEmpty(str)) return true;
    var path = /^[a-zA-ZáéíóúÁÉÍÓÚñÑüÜ\.\-\(\) \']+$/;
    return path.test( str );
}

validation.prototype.isNumeric = function(str){
	if(this.isEmpty(str)) return true;
    var path = /^[0-9]+$/;
    return path.test( str );
}

validation.prototype.isAlphaNumeric = function(str){
	if(this.isEmpty(str)) return true;
    var path = /^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑüÜ\.\-\(\) ]+$/;
    return path.test( str );
}

validation.prototype.isAlphaNumericNumeral = function(str){
	if(this.isEmpty(str)) return true;
    var path = /^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑüÜ\.\-\(\)\# ]+$/;
    return path.test( str );
}

validation.prototype.isAlphaNumericExtended = function(str){
	if(this.isEmpty(str)) return true;
    var path = /^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑüÜ\.\-\_\(\)\'\"\#\$\%\&\/\| ]+$/;
    return path.test( str );
}

validation.prototype.isAlphaNumeric_Course = function(str){
	if(this.isEmpty(str)) return true;
    var path = /^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑüÜ\.\-\_\(\)\&\#\'\" ]+$/;
    return path.test( str );
}

validation.prototype.isAlphaNumeric_glossary = function(str){
	if(this.isEmpty(str)) return true;
    var path = /^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ\.\-\_\(\)\'\*\&\[\]\{\}\@ ]+$/;
    return path.test( str );
}

validation.prototype.isAlphaNumericValName = function(str){
	if(this.isEmpty(str)) return true;
    var path = /^[a-zA-Z0-9\-\_ ]+$/;
    return path.test( str );
}

validation.prototype.isEmail = function(str){
	if(this.isEmpty(str)) return true;
    var path = /^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i;
    return path.test( str );
}

validation.prototype.isURL = function(str){
	if(this.isEmpty(str)){
		return true;}
	var path = /^(([a-zA-Z0-9\_\-]+\.?)+)\:?(\d*)$/;
	var indice_spliter = str.indexOf("://")
	var first_apear = str.substring(0,indice_spliter)
	var second_apear = str.substring(indice_spliter + 3 ,str.length)
	if ((first_apear == "http")||(first_apear == "ftp")||(first_apear == "https")){
	    if (!(path.test(second_apear))) {
	                        this.printError(this.getDNNode(objField), this.errorNotValid)
	                        return true;
	                        }else{ return false;}
	}else{
	      return true;}
}

validation.prototype.isImageFile = function(str){
	if(this.isEmpty(str)) return true;
    var path = /^(jpg|gif|png|jpeg)$/i;
    return path.test( this.getExtencion( str ) );
}

validation.prototype.isUsername = function(str){
    /*
		Valid:
			name.lastname
			name.lastname_company
			name_lastname
		Invalid:
			.
			.name
			name.lastname_
			namelastname.
			{empty}
			name lastname
			{less than 5 letters}
	*/
	if(this.isEmpty(str)) return false;
	var strict_regex = /^([a-zA-Z0-9]{1}[a-zA-Z0-9\_\.]{1,98}[a-zA-Z0-9]{1})$/;
	var loose_regex  = /([a-zA-Z0-9]{1,100})/;
    return (strict_regex.test( str ) && loose_regex.test( str ));
}

validation.prototype.getExtencion = function(str){
	return str.substring(str.lastIndexOf(".")+1);
}

