/*
	Name: class.validation.js
	Developed by: Diego S. Macadar
	Owner: Tecnonexo
	Last modification date: 29/08/2003
*/
/* 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);
}

function validation(datasrc){
	if(datasrc.split("_")[1] != ""){
		this.dataXML = eval(datasrc.replace("#",""));
	}else{
		this.dataXML = undefined
	}
	this.errorRequiredField = "error_require-field";
	this.errorNotValid = "error_invalid";
	this.errorNotValidExt = "error_invalid-ext";
	this.errorNotValidFormat = "error_no-exist";
	this.errorNotSelectedAtLeast =  "error_course-sel";
	this.errorNotEqual =  "error_not-equal";
	this.errorNotValidUsername = "error_invalid-user";
	this.ckeckedFields = new Array();
}

function validation.prototype.getDNNode(node){
	keyword = node.displayName;
	if(keyword != "" && keyword != undefined){
		return this.getNode(keyword)
	}else{
		return "";
	}
}

function validation.prototype.getNode(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;
		}
	}
}

function validation.prototype.printError(field, errorKey){		
	alert(field + " " + this.getNode(errorKey));
}

function validation.prototype.validateIsEmpty(objField){
var fieldValue
	if(objField){
		if(objField.tagName == "SELECT"){
			fieldValue = objField[objField.selectedIndex].value;	//select
		}else{
			fieldValue = objField.value;							//regular input
		}

		if(this.isEmpty(jsTrim(fieldValue))){
			try{
				objField.focus();				
				this.printError(this.getDNNode(objField), this.errorRequiredField);
				return true;
			}catch(e){
				return false;
			}
		}else{
			return false;
		}
	}
}

function validation.prototype.validateIsNotEqual(objField, objCompare){
	if(objField != objCompare){
		this.printError(this.getDNNode(objField), this.errorRequiredField)
	    objField.focus();
	    return true;
	}else{
		return false;
	}
}

function validation.prototype.validateIsNotPhone(objField){
	if(!this.isPhoneNumber(jsTrim(objField.value))){
		this.printError(this.getDNNode(objField), this.errorNotValid)
	    objField.focus();
	    return true;
	}else{
		return false;
	}
}

function validation.prototype.validateIsNotEmail(objField){
	if(!this.isEmail(jsTrim(objField.value))){
		this.printError(this.getDNNode(objField), this.errorNotValid)
	    objField.focus();
	    return true;
	}else{
		return false;
	}
}

function validation.prototype.validateIsNotUrl(objField){
	if(!this.isURL(jsTrim(objField.value))){
		this.printError(this.getDNNode(objField), this.errorNotValid)
	    objField.focus();
	    return true;
	}else{
		return false;
	}
}

function validation.prototype.validateIsNotAlphaNumericOnlyNumeric(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;
	}
}


function validation.prototype.validateIsNotAlphaNumeric(objField){
	if(!this.isAlphaNumeric(jsTrim(objField.value))){
		this.printError(this.getDNNode(objField), this.errorNotValid)
	    objField.focus();
	    return true;
	}else{
		return false;
	}
}

function validation.prototype.validateIsNotAlphaNumericExtended(objField){
	if(!this.isAlphaNumericExtended(jsTrim(objField.value))){
		this.printError(this.getDNNode(objField), this.errorNotValid)
	    objField.focus();
	    return true;
	}else{
		return false;
	}
}

function validation.prototype.validateIsNotAlphaNumeric_Course(objField){
	if(!this.isAlphaNumeric_Course(jsTrim(objField.value))){
		this.printError(this.getDNNode(objField), this.errorNotValid)
	    objField.focus();
	    return true;
	}else{
		return false;
	}
}


function validation.prototype.validateIsNotAlphaNumericValName(objField){
	if(!this.isAlphaNumericValName(jsTrim(objField.value))){
		this.printError(this.getDNNode(objField), this.errorNotValid)
	    objField.focus();
	    return true;
	}else{
		return false;
	}
}

function validation.prototype.validateIsNotAlphabetic(objField){
	if(!this.isAlphabetic(jsTrim(objField.value))){
		this.printError(this.getDNNode(objField), this.errorNotValid)
	    objField.focus();
	    return true;
	}else{
		return false;
	}
}

function validation.prototype.validateIsNotPositiveInteger(objField){
	if(!this.isNumeric(jsTrim(objField.value))){
		this.printError(this.getDNNode(objField), this.errorNotValid)
	    objField.focus();
	    return true;
	}else{
		return false;
	}
}

function validation.prototype.validateIsNotPositiveIntegerNotCero(objField){
	var fieldValue = jsTrim(objField.value);
	if(!this.isNumeric(fieldValue)){
		this.printError(this.getDNNode(objField), this.errorNotValid)
	    objField.focus();
	    return true;
	}else if((fieldValue <= 0) || (fieldValue > 2146474838)){
		this.printError(this.getDNNode(objField), this.errorNotValid)
	    objField.focus();
	    return true;
	}else{
		return false;
	}
}

function validation.prototype.validateIsNotImageFile(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;
	}
}

function validation.prototype.validateIsNotUsername(objField){
    if(!this.isUsername(objField.value)){
		this.printError(this.getDNNode(objField), this.errorNotValidUsername);
		objField.focus();
		return true;
	} else {
		return false;
	}
}

function validation.prototype.validateIsNotGlossaryTerm(objField){
    if (!this.isAlphaNumeric_glossary(objField.value)){
        this.printError(this.getDNNode(objField), this.errorNotValid);
        objField.focus();
        return true;
    }else{
        return false;
    }
}

function validation.prototype.resetCheckeds(objField){
	this.ckeckedFields = new Array();
}

function validation.prototype.setAsChecked(objField){
	this.ckeckedFields[this.ckeckedFields.length] = objField;
}

function validation.prototype.wasChecked(objField){
var i;
	for(i=0;i<this.ckeckedFields.length;i++){
		if(this.ckeckedFields[i] == objField){
			return true;
		}
	}
	return false;
}

function validation.prototype.validateNotOneChecked(objField){
var i;
    if(!this.wasChecked(objField)){
		objChecks = eval(objField);
		if(objChecks){
			if (objChecks.length) {
				for(i=0;i<objChecks.length;i++){
					if(objChecks[i].checked){
						return false;
					}
				}
				this.setAsChecked(objField);
                if (objChecks[0].displayName=='common_course') //hardcoded... 
					alert(this.getNode('error_course-sel') + ' ' + this.getNode(objChecks[0].displayName))
                else
					alert(this.getNode(objChecks[0].displayName))                
			} else {
				if(objChecks.checked){
					return false;
				}
				alert(this.getNode(objChecks.displayName));
			}
			
		}
		return true;
	}
}

function validation.prototype.validateNotConfirmed(objField){
		if(objField){
			if(!this.isEmpty(jsTrim(objField.value))){
				objConfirm = eval(objField.form.name + '.' + objField.name + '_confirm')
				if(this.isEmpty(jsTrim(objConfirm.value))){
					alert(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*/
function validation.prototype.isEmpty(str){
	return ( str == "")
}

function validation.prototype.isPhoneNumber(str){
	if(this.isEmpty(str)) return true;
    var path = /^(\([\d]+\)){0,1}[\s]*[\d]+(\-\d+)*$/;
    return path.test( str );
}
	
function validation.prototype.isAlphabetic(str){
	if(this.isEmpty(str)) return true;
    var path = /^[a-zA-ZáéíóúÁÉÍÓÚñÑüÜ\.\-\(\) \']+$/;
    return path.test( str );
}

function validation.prototype.isNumeric(str){
	if(this.isEmpty(str)) return true;
    var path = /^[0-9]+$/;
    return path.test( str );
}

function validation.prototype.isAlphaNumeric(str){
	if(this.isEmpty(str)) return true;
    var path = /^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑüÜ\.\-\(\) ]+$/;
    return path.test( str );
}

function validation.prototype.isAlphaNumericExtended(str){
	if(this.isEmpty(str)) return true;
    var path = /^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑüÜ\.\-\_ ]+$/;
    return path.test( str );
}

function validation.prototype.isAlphaNumeric_Course(str){
	if(this.isEmpty(str)) return true;
    var path = /^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑüÜ\.\-\_\(\)\&\#\'\" ]+$/;
    return path.test( str );
}

function validation.prototype.isAlphaNumeric_glossary(str){
	if(this.isEmpty(str)) return true;
    var path = /^[a-zA-Z0-9áéíóúÁÉÍÓÚñÑ\.\-\_\(\)\' ]+$/;
    return path.test( str );
}

function validation.prototype.isAlphaNumericValName(str){
	if(this.isEmpty(str)) return true;
    var path = /^[a-zA-Z0-9\-\_ ]+$/;
    return path.test( str );
}

function validation.prototype.isEmail(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 );
}

function validation.prototype.isURL(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;}
}

function validation.prototype.isImageFile(str){
	if(this.isEmpty(str)) return true;
    var path = /^(jpg|gif|png|jpeg)$/i;
    return path.test( this.getExtencion( str ) );
}

function validation.prototype.isUsername(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\_\.]{3,98}[a-zA-Z0-9]{1})$/;
	var loose_regex  = /([a-zA-Z0-9]{1,100})/;
    return (strict_regex.test( str ) && loose_regex.test( str ));
}

function validation.prototype.getExtencion(str){
	return str.substring(str.lastIndexOf(".")+1);
}