// JavaScript Document

var validationRules = new Array();

function vRule( formField, labelID, ruleParserName ){
	this.formField = formField;
	this.labelID = labelID;
	this.ruleParserName = ruleParserName;
	this.allowNull = true;
	this.passed = false;
	this.validate = vr_validate	;
	this.validationFailureMessage = vr_validationFailureMessage;
	this.displayVisual = vr_displayVisual;
	this.vfmsg = "";
	this.oldClassName = "";
}

function vr_displayVisual(problem){
	//cms_form_label_inputProblem

	var identity;
	var f;
	f = this.formField.name + "_label";
	identity=document.getElementById( f ); 
	if (problem == true && isNull( identity ) == false  ) {
		this.oldClassName  = identity.className;
		identity.className='cms_form_label_inputProblem';
	}else{
		if(this.oldClassName !="" ){
			identity.className=this.oldClassName ;
		}
	}
}

function vr_validate(){
	var r = true;
	var v;
	v = trim( this.formField.value );
	
	this.vfmsg = "";
	

	
	/*if( this.allowNull == true &&  v == '' ){
		r = true;
	}else{*/
		switch(this.ruleParserName){
		  case 'money':
			if( !IsNumeric( v)  ){
				r = false;	
				this.vfmsg = "Must be formated as money (XX.XX) ";
			}
	
		  break;    
		  
		case 'sqldate':
			if(  !matchEntireRegex( v, /[0-9]+\/[0-9]+\/[0-9]+/) ){
				r = false;	
				this.vfmsg = "Must be formated (MM/DD/YYYY)";				
			}			
			break;
		case 'sqltime':
			if(  !matchEntireRegex( v, /[0-9]+:[0-9]+\s*[APap][Mm]/) ){
				r = false;	
				this.vfmsg = "Must be formated (HH:MM PM)";			
			}			
			break;
		case 'sqldatetime':
			if(  !matchEntireRegex( v, /[0-9]+\/[0-9]+\/[0-9].\s[0-9]+:[0-9]+\s*[APap][Mm]/) ){
				r = false;	
				this.vfmsg = "Must be formated (YYYY/MM/DD HH:MM PM)";		
			}
			break;
		case 'numeric':
			if( !IsNumeric( v )  ){
				r = false;	
				this.vfmsg = "Must be a number";
			}			
			break;
		case 'integer':
		  if(  hasInvalidChars( v, "0123456789" )  ){
				r = false;
				this.vfmsg = "Must be an Integer";		  
		  }
		  
		  break;
		case 'notnull':
			if( v == "" ){
				r = false;
				this.vfmsg = "Cannot be empty";
			}
			break;
		default:
			
		}
	/*}*/
	this.passed = r;
	return r;
}

function vr_validationFailureMessage(){
	return this.vfmsg ;
}

function addValidationRule( formField, labelID, ruleParserName ){
	var r;
	r = new vRule( formField, labelID, ruleParserName );
	validationRules.push(r);
	
}

function validateForm(){
	var passed = true;
	
	for (i in validationRules ){
		if( typeof validationRules[i] == 'object' ){ 
			if( !validationRules[i].validate() ){
				passed = false;
			}else{
			}
		}
	}
		
	if ( passed == false){
		var r ;
		r = "Please enter required values.\n\n" ;
		for (i in validationRules ){
			if( typeof validationRules[i] == 'object' ){
				if( validationRules[i].passed == false ){
					r = r + "\n" +  validationRules[i].labelID  + " : " + validationRules[i].validationFailureMessage();
					validationRules[i].displayVisual(true);
				}else{
					validationRules[i].displayVisual(false);
				}
			}
		}		
		
		alert(r);
	}else{
		
	}
	
	return passed;
}

function vfr_Required( formField, labelID ){
	if( formField.value != "" ){
		return true;
	}else{
		return false;
	}
}

function IsNumeric(sText){
   var ValidChars = "0123456789.";
   var IsNumber=true;
   var Char;
 
   for (i = 0; i < sText.length && IsNumber == true; i++) { 
      Char = sText.charAt(i); 
      if (ValidChars.indexOf(Char) == -1){
         IsNumber = false;
      }
   }
   return IsNumber;
}

function trim(str){
   return str.replace(/^\s*|\s*$/g,"");
}

function validateEmail(email){
// a very simple email validation checking.  you can add more complex email checking if it helps 
    if(email.length <= 0){
	  return true;
	}
    var splitted = email.match("^(.+)@(.+)$");
    if(splitted == null) return false;
    if(splitted[1] != null ){
      var regexp_user=/^\"?[\w-_\.]*\"?$/;
      if(splitted[1].match(regexp_user) == null) return false;
    }
    if(splitted[2] != null){
      var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
      if(splitted[2].match(regexp_domain) == null) 
      {
	    var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
	    if(splitted[2].match(regexp_ip) == null) return false;
      }
      return true;
    }
	return false;
}


function matchEntireRegex( matchString, myRe ){ //regexString ) {
//	myRe =  new RegExp (regexString)// /[0-9]+\/[0-9]+\/[0-9].\s[0-9]+:[0-9]+\s*[APap][Mm]/
	myArray = myRe.exec(matchString);
	if ( typeof myArray  == 'object' && myArray   ) {
		if( myArray[0] == matchString ){	//	if (myString.match("[0-9]\/[0-9]+\/[0-9].")) { 
			return true;
		 }else{
			return false;	 
		 }
	}else{
		return false;
	}		 
	 
}	


/*
        case "alnum": 
        case "alphanumeric": 
           { 
              var charpos = objValue.value.search("[^A-Za-z0-9]"); 
              if(objValue.value.length > 0 &&  charpos >= 0) 
              { 
               if(!strError || strError.length ==0) 
                { 
                  strError = objValue.name+": Only alpha-numeric characters allowed "; 
                }//if 
                alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 
                return false; 
              }//if 
              break; 
           }//case alphanumeric 
        case "num": 
        case "numeric": 
           { 
              var charpos = objValue.value.search("[^0-9]"); 
              if(objValue.value.length > 0 &&  charpos >= 0) 
              { 
                if(!strError || strError.length ==0) 
                { 
                  strError = objValue.name+": Only digits allowed "; 
                }//if               
                alert(strError + "\n [Error character position " + eval(charpos+1)+"]"); 
                return false; 
              }//if 
              break;               
           }//numeric 
        case "alphabetic": 
        case "alpha": 
           {
		   
              var charpos = objValue.value.search("[^A-Za-z]"); 
   */

function hasInvalidChars( searchSet, allowedChar ){
	var charpos = searchSet.search( "[^"+allowedChar+"]" ); 
	if(searchSet.length > 0 &&  charpos >= 0) { 
			return true; 
	}			
	return false;
}

function preventCharacter( searchSet, disallowedChar ){
	var charpos = searchSet.search( "["+disallowedChar+"]" ); 
	if(searchSet.length > 0 &&  charpos >= 0) { 
			return true; 
	}			
	return false;
}

function isNull(a){
   return typeof a == 'object' && !a;
}
