// Fixes

var charexp = /./;
var intexp = /^[\-{0,1}\+{0,1}]{0,1}\d{1,}$/g;
var posintexp = /^\d{1,4}$/i;
var realexp = /^[\-{0,1}\+{0,1}]{0,1}((\d{1,3}(,\d{3}){0,})|(\d{1,}))((\.\d{1,})|)$/g;
var numericexp = /^[\-{0,1}\+{0,1}]{0,1}\d{1,}((\.\d{1,})|)$/;
var moneyexp = /^\${0,1}((\d{1,3}(,\d{3}){0,})|(\d{1,}))((\.\d{1,})|)$/g;
var convertreal = /[^0-9\.\-]/g;
var convertmoney = convertreal;
var alphaexp = /\w/;
var mmddyyyyexp = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
var taxidexp = /\d{2}\-\d{7}$/;
var letterexp = /[a-z]/i;
var lettercapsexp = /^[a-zA-Z]+$/;
var letterhyphenexp = /^[a-zA-Z]+-[a-zA-Z]+$/;
var hyphenexp = /^-+$/;
var digexp = /[0-9]/i;
var sizeexp = /^\d{1,3}(%|px){0,1}$/;

//var emailexp = /^.*@.*\..*$/g;
var emailexp = /^[a-z][a-z_0-9\.\-]+@[a-z_0-9\.\-]+\.[a-z]{2,}$/i;
var freemailexp = /hotmail.com$|yahoo.com$|gmail.com$/;

var exchangeexp = /^\w[^#'\/<>\?\*:;`\|\[\]=\+@\\]*$/g;
var convertexchangestr = /[#'\/<>\?\*:;`\|\[\]=\+@\\]*/g;
var searchexp = /^[^%]*$/g;
var convertsearchexp = /[%]*/g;

// Function that test str for matching to regular expression
function isValid(pattern, str) {
	return pattern.test(str.trim());
}

// Add bunch of usefull functions to String prototype
String.prototype.trim = function()
{
    return this.replace(/(^\s*)|(\s*$)/g, "");
}

String.prototype.hasLetter = function()
{
	return isValid(letterexp, this);
}

String.prototype.hasHyphen = function()
{
	return isValid(hyphenexp, this);
}

String.prototype.hasDigit = function()
{
	return isValid(digexp, this);
}

String.prototype.isInteger = function()
{
	return isValid(intexp, this);
}

String.prototype.isPosInteger = function()
{
	return isValid(posintexp, this);
}

String.prototype.isReal = function()
{
	return isValid(realexp, this);
}

String.prototype.isNumeric = function()
{
	return isValid(numericexp, this);
}

String.prototype.isSize = function()
{
	return isValid(sizeexp, this);
}

String.prototype.isMoney = function()
{
	return isValid(moneyexp, this);
}

String.prototype.isDateTime = function()
{
	return !isNaN(Date.parse(this));
}

String.prototype.isBlank = function()
{
	return !isValid(charexp,this);
}

// Functions that are used in client code

function Trim(str){
	return str.trim();
}

function HasLetter(str){
	return str.hasLetter();
}

function HasHyphen(str){
	return str.hasHyphen();
}

function HasDigit(str){
	return str.hasDigit();
}

function IsInt(str){
	return str.isInteger();
}

function IsPositiveInt(str){
	return str.isPosInteger();
}

function IsReal(str){
	return str.isReal();
}

function IsNumeric(str){
	return str.isNumeric();
}

function IsSize(str){
	return str.isSize();
}

function IsMoney(str){
	return str.isMoney();
}

function IsNotBlank(str){
	return !(str.isBlank());
}

function IsEmail(str){
	return isValid(emailexp,str)
}

function IsFreemail(str){
	return !isValid(freemailexp,str)
}

function IsDate(str){
	return str.isDateTime();
}

function Ismmddyyyy(str){
	return isValid(mmddyyyyexp,str);
}

function IsTaxID(str){
	return isValid(taxidexp,str);
}

function IsExchangeStr(str){
	return isValid(exchangeexp, str);
}

function IsSearchStr(str){
	return isValid(searchexp, str);
}

function IsAlphaStr(str){
	return isValid(alphaexp, str);
}

function IsLetterStr(str){
	return isValid(letterexp, str);
}

function IsLetterHyphenStr(str){
	return isValid(letterhyphenexp, str);
}

function IsHyphenStr(str){
	return isValid(hyphenexp, str);
}

function IsLetterCapsStr(str){
	return isValid(lettercapsexp, str);
}

function ConvertReal(str){
	return stripChars(convertreal,str);
}

function ConvertMoney(str){
	return stripChars(convertmoney, str);
}

function ConvertDate(str){
	var d = new Date(Date.parse(str));
	return isNaN(d)?'':d.toLocaleString(); 
}

function ConvertExchangeStr(str){
	return stripChars(convertexchangestr, str);
}

function CheckField(fptr, name, str, form, doc, required){
	if  (IsNotBlank(doc.forms[form].elements[name].value) && !fptr(doc.forms[form].elements[name].value)  || !IsNotBlank(doc.forms[form].elements[name].value) && required) {
		alert(str);
		//25-FEB-03 OK
		//doc.forms[form].elements[name].focus();
		try{doc.forms[form].elements[name].focus()}catch(e){}
		//25-FEB-03 OK End
		return false;
	}
	return true;
}

function CheckPositiveInt(name, str, form, doc, required){
	return CheckField(IsPositiveInt, name, str, form, doc, required);
}

function CheckInt(name, str, form, doc, required){
	return CheckField(IsInt, name, str, form, doc, required);
}

function CheckString(name, str, form, doc, required){
	return CheckField(IsNotBlank, name, str, form, doc, required);
}

function CheckReal(name, str, form, doc, required){
	return CheckField(IsReal, name, str, form, doc, required);
}

function CheckNumeric(name, str, form, doc, required){
	return CheckField(IsNumeric, name, str, form, doc, required);
}

function CheckSize(name, str, form, doc, required){
	return CheckField(IsSize, name, str, form, doc, required);
}

function CheckMoney(name, str, form, doc, required){
	return CheckField(IsMoney, name, str, form, doc, required);
}

function CheckEmail(name, str, form, doc, required){
	return CheckField(IsEmail, name, str, form, doc, required);
}

function CheckFreemail(name, str, form, doc, required){
	return CheckField(IsFreemail, name, str, form, doc, required);
}

function CheckDate(name, str, form, doc, required){
	return CheckField(IsDate, name, str, form, doc, required)
}

function Checkmmddyyyy(name, str, form, doc, required){
	return CheckField(Ismmddyyyy, name, str, form, doc, required)
}

function CheckExchangeStr(name, str, form, doc, required){
	return CheckField(IsExchangeStr, name, str, form, doc, required)
}

function CheckSearchStr(name, str, form, doc, required){
	return CheckField(IsSearchStr, name, str, form, doc, required)
}

function CheckAlphaStr(name, str, form, doc, required) {
	return CheckField(IsAlphaStr, name, str, form, doc, required)
}

function CheckTaxIDStr(name, str, form, doc, required) {
	return CheckField(IsTaxIDStr, name, str, form, doc, required)
}

function SetValue(name, form, doc, fptr){
	doc.forms[form].elements[name].value = fptr(doc.forms[form].elements[name].value)	;
}

function stripChars(pattern, str) {
	return str.replace(pattern,"")
}

function stripNonDigits(str) {
	return str.replace(/[^0-9]/g,"")
}

function GetTimeZone(){
	return (new Date()).getTimezoneOffset() / 60;
}

function EnableButton(buttonname, formname) {
	document.forms[formname].elements[buttonname].disabled = false;	
}

function DisableButton(buttonname, formname) {
	document.forms[formname].elements[buttonname].disabled = true;	
}


function ChangeOptions(strFormName, lstPrimary, lstSecondary, strArray, strMode) 
{
  
    var listLen = 0
    var i
    
    if(strFormName != "" ) {
       strFormName = "'" + strFormName + "'";
    }
    else {
      strFormName = "0";
    }
    var objForm = eval("document.forms[" + strFormName + "]");
    if(strArray != "" && lstSecondary != "") { 
       var strKey  = eval("document.forms[" + strFormName + "]." + lstPrimary + ".options[document.forms[" + strFormName + "]." + lstPrimary + ".selectedIndex].value");
    try {
       var objArr = eval(strArray + strKey);
       var objSecondary = eval("document.forms[" + strFormName + "]." + lstSecondary);
       var alen = objArr.length;
       if (strKey == "" && alen > 1){ alen = 1;}
       objSecondary.options.length = 0;
       for(var i = 0; i < alen; i++){
           objSecondary.options[listLen] = new Option(objArr[i][1], objArr[i][0])
           listLen = listLen + 1;
       }
    }
    catch (e){
       var objSecondary = eval("document.forms[" + strFormName + "]." + lstSecondary);
       objSecondary.options.length = 0;
       
       }
       if(listLen > 0){
          objSecondary.options[0].selected = true;
          if(strMode != "" ){
             objForm.elements['_mode'].value="'" + strMode + "'";
             objForm.submit();    
          }   
       }
       else{
          objSecondary.options[0] = new Option( 'No records', '' );
       }
    }
    else{
       if(strMode != ""){
          objForm.elements['_mode'].value="'" + strMode + "'";
          objForm.submit();    
       } 
    }
}

//26-MAR-02 MK
function CheckBlankField(name, str, form, doc){
    var varvalue = document.forms[form].elements[name].value;
    varvalue = (varvalue.replace(/^\W+/,'')).replace(/\W+$/,'');

	if  (!IsNotBlank(varvalue)) {
		if(  str != "") {alert(str);} //28-AUG-01 SDV
		try{doc.forms[form].elements[name].focus()}catch(e){}
		return false;
	}
	return true;
}

function CheckBlankText(name, str, form, doc){
    var varvalue = document.forms[form].elements[name].innerText;
    varvalue = (varvalue.replace(/^\W+/,'')).replace(/\W+$/,'');

	if  (!IsNotBlank(varvalue)) {
		if(  str != "") {alert(str);}
		try{doc.forms[form].elements[name].focus()}catch(e){}
		return false;
	}
	return true;
}

//Used only for custom properties
function CheckNumericField(name, str, form, doc)
{
    var value = doc.forms[form].elements[name].value;

	if (IsNotBlank(value))
	{
		if (IsNumericVBS(value))
		{
			if (!validateNumericPrecision(name, form, doc))
			{
				return false;
			}
		}
		else
		{
			alert(str);
			try{doc.forms[form].elements[name].focus()}catch(e){}
			return false;	
		}
	}
	return true;
}


//Validates numeric for precision
function validateNumericPrecision(name, form, doc)
{
    var value = doc.forms[form].elements[name].value;
	
	//Defined in SQL db
	var integerlimit = 25; 
	var fractionallimit = 10;
	
	var arr;
	var integerpart;
	var fractionalpart;
	var dotposition;
	var delimiter = '.';

	value = FormatNumberVBS(value);
	value = value.toString();
	dotposition = value.indexOf(delimiter)
	if (dotposition != -1)
	{
		arr = value.split(delimiter)
		integerpart = arr[0];

		//Validate integer part length
		if (integerpart.length > integerlimit)
		{
			alert('The integer part of number is exceed the allowed limit of ' + integerlimit + ' digits. \nPlease correct.');
			try{doc.forms[form].elements[name].focus()}catch(e){}
			return false;
		}
		//Validate fractional part length
		if (arr.length == 2)
		{
			fractionalpart = arr[1];
			fractionalpart = Trim(fractionalpart);
			if (fractionalpart.length > fractionallimit)
			{
				alert('The fractional part of number is exceed the allowed limit of ' + fractionallimit + ' digits. \nPlease correct.');
				try{doc.forms[form].elements[name].focus()}catch(e){}				
				return false;
			}
		}
	}
	else
	{
		if (value.length > integerlimit)
		{
			alert('The value is exceed the allowed limit of ' + integerlimit + ' digits. \nPlease correct.');
			try{doc.forms[form].elements[name].focus()}catch(e){}
			return false;
		}
	}
	return true;
}


function CheckBlankRadioArray(name, str, form, doc){

    for(var i=0; i<doc.forms[form].elements[name].length; i++)
    {
		if (doc.forms[form].elements[name][i].checked == true)
		{
			return true;
		}
	}

	if(  str != "") {alert(str)};
	return false;
}

function checkLength(what,length) 
{
	var string = '';
	var msgstring = 'Must be less than ' + length + ' characters!';
	var fieldindex;
	
	for (var i=0;i<document.forms[0].elements.length;i++)
	{
		if (what == document.forms[0].elements[i])
		{
			fieldindex = i;
		}
	}
	
	var string = document.forms[0].elements[fieldindex].value;
	if (!string == '') 
	{
		if (string.length > length) 
		{
			try{document.forms[0].elements[fieldindex].focus();}catch(e){}	
			alert(msgstring);
			return false;
		}
		return true;
	}
	return true;
}

function checkValidDate(formname,fieldname){
	var arrdate;
	var datevalue;
	var yearvalue;
	
	if (IsNotBlank(document.forms[formname].elements[fieldname].value)) {
		if (!isValidDate(document.forms[formname].elements[fieldname].value)){
			try{document.forms[formname].elements[fieldname].focus();}catch(e){}
			return false;}
		datevalue = document.forms[formname].elements[fieldname].value;
		arrdate = datevalue.split("/");
		yearvalue = arrdate[2];
		if (yearvalue.length == 4){
			if (yearvalue > 2099){yearvalue = 2099;}
			if (yearvalue < 1900){yearvalue = 1900;}
		}
		if (yearvalue.length == 2){
			if (yearvalue > 50){yearvalue = '19' + yearvalue;}
			if (yearvalue <= 50){yearvalue = '20' + yearvalue;}}
		document.forms[formname].elements[fieldname].value = arrdate[0] + '/' + arrdate[1] + '/' + yearvalue;
	}
	
	return true;
};

function isValidDate(dateStr) {
	// Checks for the following valid date formats:
	// MM/DD/YY   MM/DD/YYYY   MM-DD-YY   MM-DD-YYYY
	// Also separates date into month, day, and year variables

	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{2}|\d{4})$/;

	// To require a 4 digit year entry, use this line instead:
	// var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;

	var matchArray = dateStr.match(datePat); // is the format ok?
	
	if (matchArray == null) 
	{
		alert("Date is not in a valid format.")
		return false;
	}
	
	month = matchArray[1]; // parse date into variables
	day = matchArray[3];
	year = matchArray[4];
	
	if (month < 1 || month > 12) 
	{ // check month range
		alert("Month must be between 1 and 12.");
		return false;
	}
	
	if (day < 1 || day > 31) 
	{
		alert("Day must be between 1 and 31.");
		return false;
	}
	
	if ((month==4 || month==6 || month==9 || month==11) && day==31) 
	{
		alert("Month "+month+" doesn't have 31 days!")
		return false
	}
	
	if (month == 2) 
	{ // check for february 29th
		var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
		if (day>29 || (day==29 && !isleap)) 
		{
			alert("February " + year + " doesn't have " + day + " days!");
			return false;
		}
	}
	return true;  // date is valid
}

function validatedStartWith(string) {
    var output = string;
    var Chars = "_%";
    for (var i=0; i<string.length; i++) {
       if (Chars.indexOf(string.charAt(i)) !== -1) {
          alert('Invalid character! ' + '"' + string.charAt(i) + '"');
          return false;
       }
    }
    return true;
};
function validatedDTSCriterion(string) {
    var output = string;
    var Chars = '_%"*?#~&:/()';
    for (var i=0; i<string.length; i++) {
       if (Chars.indexOf(string.charAt(i)) !== -1) {
          alert('Invalid character! ' + '"' + string.charAt(i) + '"');
          return false;
       }
    }
    return true;
};

function validated(string) {
    var output = string;
    var Chars = "\\#";
  //22-MAY-02 OK End 
    for (var i=0; i<string.length; i++) {
       if (Chars.indexOf(string.charAt(i)) !== -1) {
          alert('Invalid character! ' + '"' + string.charAt(i) + '"');
          return false;
       }
    }
    return true;
};


function CheckDateCriteria(formname,dateminfield,datemaxfield){
	var datemin = document.forms[formname].elements[dateminfield].value;
	var datemax = document.forms[formname].elements[datemaxfield].value;
	
	if (IsNotBlank(datemax)){
		if (Date.parse(datemax) < Date.parse(datemin)) {
			alert('Invalid Date value');
			document.forms[formname].elements[datemaxfield].focus();
			return false;   
		}
	}
	return true;
};

function ValidateSQLString(formname,fieldname,string) {
	if (IsNotBlank(string)){
		if (!((HasLetter(string)) || (HasDigit(string)))){
			alert('Sorry, your search yielded no results. \nPlease revise your search query and try again.');
			//25-FEB-03 OK
			//document.forms[formname].elements[fieldname].focus()
			try{document.forms[formname].elements[fieldname].focus()}catch(e){}
			//25-FEB-03 OK End
			return false;
		}
	}
    return true;
}; 

function ValidateSearchString(formname,fieldname,alertStr) {
	var fieldValue = document.forms[formname].elements[fieldname].value;
	if (IsNotBlank(fieldValue)){
		if (!(IsHyphenStr(fieldValue) || IsLetterCapsStr(fieldValue))){
			alert('Please try again. \n' + alertStr + ' may only contain letters and hyphens (-).');
			try{document.forms[formname].elements[fieldname].focus()}catch(e){}
			return false;
		}
	}
    return true;
}; 

//Function implemented for backward compatibility
function hasChar(str) {
	return IsNotBlank(str)
}


function emailCheck(emailStr) {
if(!emailexp.test(emailStr)){
	alert("Email address seems incorrect.  Please try again (check the '@' and '.'s in the email address)");
	return false;
};
return true;
}


function ExpandElement(strElement) {
    objElement = eval(strElement);
    if (objElement) {
        if (objElement.style.display != "block") 
            objElement.style.display  = "block";
        else 
            objElement.style.display  = "none"; 
    }
}


function AddHTTP (value)
{
	if (value == '') {return '';}
	
	var arrValue = value.split(',');
	var current;
	
	for (var i=0; i<arrValue.length; i++)
	{
		current = Trim(arrValue[i]);
		arrValue[i] = current;
		
		if ((current.substring(0,7).toLowerCase() != 'http://') && 
			(current.substring(0,8).toLowerCase() != 'https://'))
		{
			arrValue[i] = 'http://' + current;
		}
	}
	return arrValue.join(', ');
}

function ValidateFTICriterion(formname,fieldname,length)
{
	var criterion = document.forms[formname].elements[fieldname].value;	
	criterion = criterion.trim();

	if (IsNotBlank(criterion))
	{
		if (!((HasLetter(criterion)) || (HasDigit(criterion))))
		{
			alert('Sorry, your search yielded no results.\nPlease revise your search query and try again.');
			document.forms[formname].elements[fieldname].focus()
			return false;
		}
		if (criterion.length < length)
		{
			alert('The search parameter that you\'ve entered is too broad. \nPlease refine your search by entering at least three characters in the \'Search For\' field.');
			document.forms[formname].elements[fieldname].focus()
			return false;
		}
	}
    return true;
}

function ValidateStrLength(name,str,form,doc,length)
{
	var string=doc.forms[form].elements[name].value;
	if (string.length>length)
	{
		alert(str);
		try{doc.forms[form].elements[name].focus();}catch(e){}
		return false;
	}
	else
	{
		return true;
	}	
}

function CurrencyToNumber(str) 
{
	return str.replace(/[\$\s\,]/g,'');
}


// *** UTILS FUNCTIONS ***

//This script and many more are available free online at 
//The JavaScript Source!! http://javascript.internet.com 

function movepic(img_name,img_src) 
{
	document[img_name].src=img_src;
}

function moveThePix(img_name,img_src,msg) 
{
	document[img_name].src=img_src;
	window.status=msg;
	//document.picform.T1.value = msg;
	document.all.piclabel.innerHTML = '<p class="Description">' + msg + "</p>";
	return true;
}

function toTop(type, pix, ref) 
{
	// type = display text
	// pix = name of picture
	// ref = bookmark to go to
	document.write('<A  style="text-decoration: none" href="' + ref + '" onmouseover="changepic(\'' + pix + '\',\'../general/UpArrow.gif\')" onmouseout="changepic(\'' + pix + '\',\'../general/UpArrow-sm.gif\')">'); 
	document.write(' ' + type + '<IMG NAME=\"' + pix + '\" SRC="../general/UpArrow-sm.gif" ALT="Image" border="0" width="17" height="18"></A>'); 
}	

function showMail(type, pix, ref) 
{
	// type = display text
	// pix = name of picture  
	// ref = bookmark to go to
	document.write('<A  style="text-decoration: none" href="' + ref + '" onmouseover="changepic(\'' + pix + '\',\'..\/general\/mail.gif\')\" onmouseout=\"changepic(\'' + pix + '\',\'../general/mail-sm.gif\')\">'); 
	document.write(' ' + type + ' <IMG NAME="' + pix + '" SRC="../general/mail-sm.gif" ALT="Image" border="0" width="31" height="23"><\/A>'); 
}	

function showHand(type, pix, ref, target) 
{
	// type = display text
	// pix = name of picture  
	// ref = bookmark to go to
	document.write('<A target ="' + target + '" style="text-decoration: none" href="' + ref + '" onmouseover="changepic(\'' + pix + '\',\'../general/RightHand.gif\')" onmouseout="changepic(\'' + pix + '\',\'../general/RightHand-sm.gif\')">'); 
	document.write(' <IMG NAME="' + pix + '" SRC="../general/RightHand-sm.gif" ALT="Image" border="0"> ' + type + '<\/A>'); 
}

// *** END UTILS FUNCTIONS ***

// *** NOCLICK FUNCTIONS ***

function clickIE4(){
	if (event.button==2){
		return false;
	}
}


function clickNS4(e){
	if (document.layers||document.getElementById && !document.all){
		if (e.which==2||e.which==3){
			return false;
		}
	}
}


if (document.layers){
	document.captureEvents(Event.MOUSEDOWN);
	document.onmousedown=clickNS4;
}
else if (document.all && !document.getElementById){
	document.onmousedown=clickIE4;
}


document.oncontextmenu=new Function("return false")

// *** END OF NOCLICK FUNCTIONS ***

// ** CHANGEPIC FUNCTIONS ***
<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! http://javascript.internet.com -->
function changepic(img_name,img_src) 
{
	document[img_name].src=img_src;

	return true;
}
// ** END OF CHANGEPIC FUNCTIONS ***
