
/*------------------------------------------*/
/* srart of form validator object             */
/*------------------------------------------*/
function _formValidator(){
	this._fieldNames = new Array();
	this._fieldTypes = new Array();
	this._failMessage = new Array();
	this._matchedFieldNames = new Array();
	this._matchedFieldMessages = new Array();
	this._triggers = new Array();
}
/*1=text,2=radio,3=select list*/
_formValidator._isText=1;
_formValidator._isRadio=2;
_formValidator._isList=3;

var p = _formValidator.prototype;
p.addField=function(sFieldName,nFieldType,sFailMessage,sMatchedFieldName,sMatchedFieldMessage){
	this._fieldNames[this._fieldNames.length]=sFieldName;
	this._fieldTypes[this._fieldTypes.length]=nFieldType;
	this._failMessage[this._failMessage.length]=sFailMessage;
	this._matchedFieldNames[this._matchedFieldNames.length]=sMatchedFieldName||null;
	this._matchedFieldMessages[this._matchedFieldMessages.length]=sMatchedFieldMessage||null;
};
p.validate=function(){
	var aElms,bIsChecked;
	for(var i=0; i < this._fieldNames.length; i++){
		switch(this._fieldTypes[i]){
			case _formValidator._isText:
				if(jQuery.trim($('#'+this._fieldNames[i]).val()).length==0){
					jAlert(this._failMessage[i],'Validation Error');
					return false;
				}
				break;
			case _formValidator._isRadio:
				aElms = document.getElementsByName(this._fieldNames[i]);
				bIsChecked=false;
				for(var x=0; x<aElms.length; x++){
					if(aElms[x].checked){
						bIsChecked=true;
						break;
					}
				}
				if(!bIsChecked){
					jAlert(this._failMessage[i],'Validation Error');
					return false;
					
				}
				break;
			case _formValidator._isList:
				if(($('#'+this._fieldNames[i]+' option:first')[0] === $('#'+this._fieldNames[i]+' option:selected')[0]) && $('#'+this._fieldNames[i]).attr('disabled') != 'disabled'){
					jAlert(this._failMessage[i],'Validation Error');
					return false;
				}
				break;
		}
	   /* matched fields (like passwords, emails must match 
	   currently only supports text fields */
	   if(this._matchedFieldNames[i]){
	      if($('#'+this._fieldNames[i]).val()!=$('#'+this._matchedFieldNames[i]).val()){
	            jAlert(this._matchedFieldMessages[i],'Validation Error');
	           return false;
	      }
	   }
	}
	
	return true;
}
p.addTrigger=function(arrg){
	this._triggers[this._triggers.length]=arrg;
};
p.processTriggers=function(){
	for(var i=0;i<this._triggers.length;i++){
		if(typeof(this._triggers[i])=='object'||typeof(this._triggers[i])=='function'){
			if(!this._triggers[i]()){
				return false;
				break;
			}
		}else if(typeof(this._triggers[i])=='string'){
			eval(this._triggers[i]);
		}
	}
	return true;
}	
p.getFieldNames=function(){
	return this._fieldNames;
}
p.clearFields=function(){
	delete this._fieldNames;
	delete this._fieldTypes;
	delete this._failMessage;
	delete this._matchedFieldNames;
	delete this._matchedFieldMessages;
	delete this._triggers;

	this._fieldNames = new Array();
	this._fieldTypes = new Array();
	this._failMessage = new Array();
	this._matchedFieldNames = new Array();
	this._matchedFieldMessages = new Array();
	this._triggers = new Array();

}
var formValidator = new _formValidator();
/*------------------------------------------*/
/* end of form validator object             */
/*------------------------------------------*/
	
function getRadioValue(nRadioName){
	var oRadios = document.getElementsByName(nRadioName);
	if(oRadios){
		for(var i = 0; i< oRadios.length; i++){
			if(oRadios[i].checked){
				return oRadios[i].value;
			}
		}
	}
	return null;
}
/* returns the number of checkboxs with name [nCheckName] that are checked */
function getCheckBoxCount(nCheckBoxName){
	var oChecksBoxes = document.getElementsByName(nCheckBoxName);
	var nCheckCount=0;
	if(oChecksBoxes){
		for(var i = 0; i< oChecksBoxes.length; i++){
			if(oChecksBoxes[i].checked){
				nCheckCount+=1;
			}
		}
	}
	return nCheckCount;
}


function getRadioOption(oRadios){
	if(oRadios){
		for(var i = 0; i< oRadios.length; i++){
			if(oRadios[i].checked){
				return oRadios[i].value;
			}
		}
	}
	return null;
}
function setSpanText(sSpanID,sSpanText){
	if(!sSpanText)sSpanText=' ';
	document.getElementById(sSpanID).firstChild.data=sSpanText;	
}
function unCheckAllBut(oControl){
	var elms = document.forms[0].elements
	for(var i = 0 ; i < elms.length ; i++ ){
		if(elms[i].type == 'checkbox' || elms[i].type == 'radio'){
			if(elms[i]!==oControl){
				elms[i].checked=false;
			}
		}
	}
}

//called by RoundOff when a number has less than 2 or has no decimal places..
//adds trailing zeros
function PadZeros(thestr){
	if (thestr.indexOf(".") == -1){
		return thestr + ".00";
	}
	else{
		var leftside = thestr.substring(0,thestr.indexOf("."));
		var rightside = thestr.substr(thestr.indexOf(".")+1);
		if (parseInt(rightside) == 0)
			return leftside + ".00";
		else 
			if (rightside.length == 1)
				return leftside + "." + rightside + "0";
			else
				return leftside + "." + rightside
	}
}

// called by RoundOff when a number has more than 2 decimal places
// returns the number rounded off to the nearest cent
function DoRoundOff(thestr){
var nums = new Array();
	var leftnum = parseInt(thestr.substring(0,thestr.indexOf(".")));
	var rightside = thestr.substr(thestr.indexOf(".")+1);
	
	for (var i=0;i<rightside.length;i++){
		nums[i] = parseInt(rightside.substr(i,1));
	}
	
	for (var i=rightside.length-1;i>1;i--){
		if (nums[i] >= 5) {
			nums[i-1] += 1;
		}
	}
	if (nums[1] > 9) {
		nums[1] = 0;
		nums[0] += 1;
		if (nums[0] > 9){
			nums[0] = 0;
			leftnum += 1;
		}
	}
	return leftnum.toString() + "." + nums[0].toString() + nums[1].toString();
}

function RoundOff(theNum){
	return parseFloat(xRoundOff(theNum));
}


// Returns a number which has been rounded off and/or 
// formatted to a currency value
function xRoundOff(thenum){
	var thestr = thenum.toString();
	if (thestr.indexOf(".") == -1){
		return PadZeros(thestr);
	} else {
		var leftside = thestr.substring(0,thestr.indexOf("."));
		var rightside = thestr.substr(thestr.indexOf(".")+1);
		if (parseInt(rightside) == 0)
			return leftside + ".00";
		else
			if (rightside.length >= 2)
				return DoRoundOff(thestr);
			else
				return PadZeros(thestr);
	}
}

function validateEmail(inputvalue){	
    var pattern=/^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\.([a-zA-Z])+([a-zA-Z])+/;
    if(pattern.test(inputvalue)){         
		return true;
    }else{   
		return false;
    }
} 
