/*
description: This file contains sitewide validation rules used by auto and manual validators. 
*/

FBPUILib.Framework.Validation.prototype = {
	
	// checks for valid currency format
	isCurrency : function(strValue)  
	{
		var objRegExp = /((^\$\d{1,3}(,\d{3})*\.\d{2}$)|(^\(\$\d{1,3}(,\d{3})*\.\d{2}\)$)|(^\d{1,3}(,\d{3})*\.\d{2}$)|(^\(\d{1,3}(,\d{3})*\.\d{2}\)$))/;
		return objRegExp.test( strValue );
	},
	// checks for valid 12 hour time
	isTime : function (strValue) 
	{
		var objRegExp = /^([1-9]|1[0-2]):[0-5]\d(:[0-5]\d(\.\d{1,3})?)?$/;
		return objRegExp.test( strValue );
	},
	// checks format of social security number
	isSSN : function(strValue) 
	{
		var objRegExp  = /^\d{3}\-\d{2}\-\d{4}$/;
		return objRegExp.test(strValue);
	},
	// checks format of email address
	isEmail : function(strValue) 
	{
		strValue = this.Trim(strValue);
		var objRegExp  = /^([a-zA-Z0-9_\-\.\']*[a-zA-Z0-9])@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
		return objRegExp.test(strValue);
	},
	// checks format of email address
	isEmailList : function(strValue)
	{
		var emailTest = true;
		var objRegExp = /\,/g; 
		strValue = strValue.replace(objRegExp,";");
		var emailArray=strValue.split(";");
		
		for (i = 0; i < emailArray.length; i++)
		{
			if (!this.isEmail(emailArray[i]))
			{
				emailTest=false;
			}
		}
		return emailTest;
	},
	isHTMLChars : function(strValue)
	{
	    strValue=strValue.replace(/&lt;/g,'<').replace(/&gt;/g,'>')
		invalidChars = "<>\"";
		for (i=0; i<invalidChars.length; i++) {
			badChar = invalidChars.charAt(i);
			if (strValue.indexOf(badChar,0) > -1) {
				return true;
			}
		}
	},	
	isInvalidChars : function(strValue)
	{
		invalidChars = " ~\'^\`\"*+=\\|][(){}$&!#%/:;";
		for (i=0; i<invalidChars.length; i++) {
			badChar = invalidChars.charAt(i);
			if (strValue.indexOf(badChar,0) > -1) {
				return true;
			}
		}
	},
	// checks format of US phone number
	isUSPhone : function(strValue) 
	{
		var objRegExp  = /^\(?(\d{3})\)?[\.\-\/ ]?(\d{3})[\.\-\/ ]?(\d{4})$/;
		return objRegExp.test(strValue); 
	},
	// checks for valid integer value
	isInteger : function(strValue) 
	{
		var objRegExp  = /(^-?\d\d*$)|(^-?\d{1,3}(,\d{3})*$)/;
		return objRegExp.test(strValue);
	},
	// Non-negative integer only
	isNonNegativeInteger : function(strValue) 
	{
		var objRegExp  = /(^\d\d*$)|(^\d{1,3}(,\d{3})*$)/;
		return objRegExp.test(strValue);
	},
	isEmpty : function(str)
	{
		str = this.Trim(str)
		if (str.length < 1) { return true }
		return false;
	},
	isCustomValidationPass : function(str,additional)
	{
		if (additional.disabled==false)
		{
			if (this.Trim(additional.value) == '')
			{
			return false;
			}
		}
		return true;
	},
	// checks for blank form field
	isNotEmpty : function(str,defaultValue,flag)
	{
		if (this.Trim(str) == '') { return false }
		if (this.Trim(str) == 'Select One') { return false }
		if (str==defaultValue && flag==true){return false}
		return true;
	},
	Trim : function(str)
	{
		return str.replace(/^\s+/,'').replace(/\s+$/,'');
	},
	// Match spaces at beginning and end of text and replace with null strings
	trimAll : function(str)
	{
		return this.Trim(str)
	},
	// checks for valid numeric value
	isNumeric : function(strValue) {
		var objRegExp  =  /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)|(^-?\d{1,3}(,\d{3})*\.?\d*$)/; 
		return objRegExp.test(strValue);
	},
	// used by screeners.js
	validateNumeric : function(strValue) 
	{
		var objRegExp  =  /(^-?\d\d*\.\d*$)|(^-?\d\d*$)|(^-?\.\d\d*$)/; 
		return objRegExp.test(strValue);
	},
	// Non-negative decimal only
	isNonNegativeNumeric : function(strValue) 
	{
		var objRegExp  =  /(^\d\d*\.\d*$)|(^\d\d*$)|(^\.\d\d*$)|(^\d{1,3}(,\d{3})*\.?\d*$)/; 
		return objRegExp.test(strValue);
	},
	isPositiveNumber : function(strValue)
	{
		var objRegExp  =  /(^\d*\.?\d*[1-9]+\d*$)|(^[1-9]+\d*\.\d*$)/; 
		return objRegExp.test(strValue);
	},
	// checks for valid US zip code
	isZipCode : function(strValue) 
	{
		var objRegExp  = /(^\d{5}$)|(^\d{5}-\d{4}$)/;
		return objRegExp.test(strValue);
	},
	// checks for valid AccountID format
	isAccountID : function( strValue ) 
	{
		var objRegExp  = /(^[a-zA-Z0-9]{8,9}$)/;
		return objRegExp.test(strValue);
	},
	// checks for valid date in US format
	isUSDate : function(strValue, defaultValue)
	{
		if (strValue == defaultValue) {return true}
		var objRegExp  = /^\d{2}\/\d{2}\/\d{4}$/;
		if (isNaN(Date.parse(strValue)) || !objRegExp.test(strValue)) return false;
		var aSource = strValue.split(strValue.replace(/\d+/g, '').substr(0, 1));
		var dSource = new Date(Date.parse(strValue));
		if (navigator.appName.indexOf("WebTV")!=-1){dSource.setDate(dSource.getDate()+1);}
		return (aSource[0]-0 == dSource.getMonth()+1 && aSource[1]-0 == dSource.getDate() && aSource[2]-0 == dSource.getFullYear());
	},
	isDate : function(strValue)
	{
		var objRegExp  = /^\d{1,2}(\-|\/)\d{1,2}\1\d{4}$/;
		if (isNaN(Date.parse(strValue)) || !objRegExp.test(strValue)) return false;
		var aSource = strValue.split(strValue.replace(/\d+/g, '').substr(0, 1));
		var dSource = new Date(Date.parse(strValue));
		if (navigator.appName.indexOf("WebTV")!=-1){dSource.setDate(dSource.getDate()+1);}
		return (aSource[0]-0 == dSource.getMonth()+1 && aSource[1]-0 == dSource.getDate() && aSource[2]-0 == dSource.getFullYear());
	},
	// checks a string against supplied pattern
	isValue : function( strValue, strMatchPattern ) 
	{
		var objRegExp = new RegExp( strMatchPattern);
		return objRegExp.test(strValue);
	},
	isValue : function( strValue, strMatchPattern, isNegativePattern )
	{
		var objRegExp = new RegExp( strMatchPattern );
		var isMatch = objRegExp.test( strValue );
		if( isNegativePattern )
			isMatch = !isMatch;
		return isMatch;
	},
	isLength : function(strValue, l, op)
	{
		if ( eval('str.length' + op + l) ) { return true }
		return false;
	},
	isCheck : function(formObj)
	{
		if (!(formObj.checked)) { return false }
		return true;
	},
	isRadio : function(formObj) 
	{
	for (j=0; j < formObj.length; j++) {
		if (formObj[j].checked) 
		{
			return true;
		}
	}
	return false;
	},
	isSelect : function(formObj,i) 
	{
		return (formObj.selectedIndex > ( i - 1));
	},
	// checks for valid Name format (alphanumeric characters only, non-leading spaces)
	isName : function(strValue)
	{
		var objRegExp = /^[a-zA-Z. ]*$/;
		return objRegExp.test(strValue);
	},
	// checks for valid Staff Name format (alphanumeric characters only, non-leading spaces)
	isValidStaffName : function(strValue)
	{
		var objRegExp = /^[a-zA-Z. '-()]*$/;
		return objRegExp.test(strValue);
	},
	// checks for valid Name format (alphanumeric characters only, non-leading spaces)
	isEmailName : function(strValue)
	{	    
		var objRegExp = /^[a-zA-Z0-9._]*$/;
		return objRegExp.test(strValue);
	},	
	// checks for an invalid characters in the field
	isValidCharacters : function(pSource)
	{
		return pSource.replace(/[~|!|@|#|$|%|^|&|\*|\\|\/|>|<]/, '') == pSource;
	},
	// is a ticker symbol
	isTicker : function(strValue) 
	{
		var objRegExp  = /^([a-zA-Z' \d.]+([\ \'\-\.\@\_][a-zA-Z' \d.])?[a-zA-Z' \d.]*)(\,\ *([a-zA-Z' \d.]+([\ \'\-\.\@\_][a-zA-Z' \d.])?[a-zA-Z' \d.]*))*$/;
		return objRegExp.test(strValue);
	},
	// checks for invalid symbol characters in the field; this does not test for position like isTicker() and is more generalized
	// Symbols can have A-Z, a-z, 0-9, ., ', _, and ,
	isValidSymbol : function(testValue)
	{
		var objRegExp = /^[ \w-\@\'\.\/,]+$/;
		return objRegExp.test(testValue);
	},
	isEmptySymbol : function(strValue)
	{
		var objRegExp = /\,/g; 
		strValue = strValue.replace(objRegExp,"");
		return isEmpty(strValue);
	},
	isMultiSymbol : function(testValue)
	{
		var objRegExp = /\,/g; 
		return objRegExp.test(testValue);
	}
}
//Initialize global variable...
jsFBPUI = new FBPUILib.Framework.Validation();