function formatCurrency(num) {
    num = num.toString().replace(/\$|\,/g,'');
    if(isNaN(num))
        num = "0";
    sign = (num == (num = Math.abs(num)));
    num = Math.floor(num*100+0.50000000001);
    cents = num%100;
    num = Math.floor(num/100).toString();
    if(cents<10)
        cents = "0" + cents;
    return (((sign)?'':'-') + num + '.' + cents);
}

function validateDate(yearField,monthField,dayField) {
    var tempDay, tempYear,tempMonth;
    tempDay = new Number(dayField.options[dayField.selectedIndex].value);
    tempYear = new Number(yearField.options[yearField.selectedIndex].value);
    tempMonth = new String(monthField.options[monthField.selectedIndex].value);
    if (tempMonth == '2' || tempMonth == '4' || tempMonth == '6' || tempMonth == '9' || tempMonth == '11') {
        if (tempMonth == '2') {
            if (tempYear % 4 == 0) {
                if (tempDay > 29) {
                    alert('THERE ARE ONLY 29 DAYS IN FEB ' + tempYear);
                    dayField.focus();
                    return 0;
                }
            } else {
                if (tempDay > 28) {
                    alert('THERE ARE ONLY 28 DAYS IN FEB ' + tempYear);
                    dayField.focus();
                    return 0;
                }
            }
        } else if (tempDay > 30) {
            if (tempMonth == '4') {tempMonth = 'APR'}
            if (tempMonth == '6') {tempMonth = 'JUN'}
            if (tempMonth == '9') {tempMonth = 'SEP'}
            if (tempMonth == '11') {tempMonth = 'NOV'}
            alert('THERE ARE ONLY 30 DAYS IN ' + tempMonth);
            dayField.focus();
            return 0;
        }
    }
    return 1;
}

function validatePhoneNumber(fieldNameA,fieldNameB,fieldNameC,name) {
    var actualNumber = fieldNameA.value + fieldNameB.value + fieldNameC.value;
    if (isNaN(actualNumber) || (fieldNameA.value.length != 3) || (fieldNameB.value.length != 3) || (fieldNameC.value.length != 4)) {
        alert('INVALID ENTRY: A PART OF THE ENTERED ' + name + ' PHONE NUMBER IS INVALID');
        fieldNameB.select();
        fieldNameB.focus();
        return 0;
    }
    return 1;
}

//validate a text area
function validateTextArea(objAddressField,min,max,required,name) {
    var textAreaValue = objAddressField.value;
    if (checkForInvalidCharacters(objAddressField,name) == false) {return 0;}
    if (required == 1 && textAreaValue.length == 0) {
        alert('INVALID ENTRY : YOU NEED TO ENTER ' + name);
        objAddressField.select();
        objAddressField.focus();
        return 0;
    }
    if ((textAreaValue.length < min || textAreaValue.length > max)) {
        if (min == max) {
            alert('INVALID ENTRY : ' + name + ' MUST BE ' + min +' CHARACTERS');
            objAddressField.select();
            objAddressField.focus();
            return 0;
        } else {
            alert('INVALID ENTRY : ' + name + ' MUST BE BETWEEN ' + min + ' AND ' + max +' CHARACTERS');
            objAddressField.select();
            objAddressField.focus();
            return 0;
        }
    }
    return 1;
}

// validates a text field
function validateTextField(objAddressField,min,max,type,required,name) {
	var textEntered = objAddressField.value;
    var myText, myRegEx, result
    if (required == 1 && textEntered.length == 0) {
        alert('INVALID ENTRY : YOU NEED TO ENTER ' + name);
        objAddressField.select();
        objAddressField.focus();
        return 0;
    }
	if (required == 1 || textEntered.length > 0) {
	    // whole number
	    if (type == 'wn') {
	        if (isNaN(textEntered) || textEntered.indexOf('.') > 0) {
	            alert('INVALID ENTRY : ' + name + ' MUST BE AN INTEGER');
	            objAddressField.select();
	            objAddressField.focus();
	            return 0;
	        }
	    } else if (type == 'file') {
            return 1;
	    } else if (type == 'wnp') {
	        if (isNaN(textEntered) || textEntered.indexOf('.') >= 0) {
	            alert('INVALID ENTRY : ' + name + ' MUST BE AN INTEGER GREATER THAN OR EQUAL TO ZERO');
	            objAddressField.select();
	            objAddressField.focus();
	            return 0;
	        } else {
	            if (Number(textEntered) < 0) {
    	            alert('INVALID ENTRY : ' + name + ' MUST BE AN INTEGER GREATER THAN OR EQUAL TO ZERO');
    	            objAddressField.select();
    	            objAddressField.focus();
    	            return 0;
	            }
	        }
	    } else if (type == 'n') {
	        if (isNaN(textEntered) || textEntered.indexOf('.') >= 0) {
	            alert('INVALID ENTRY : ' + name + ' MUST BE AN INTEGER');
	            objAddressField.select();
	            objAddressField.focus();
	            return 0;
	        }
        } else if (type == 'np') {
	        if (isNaN(textEntered) || textEntered <= 0) {
                alert('INVALID ENTRY : ' + name + ' MUST BE A NUMBER GREATER THAN 0');
                objAddressField.select();
                objAddressField.focus();
                return 0;
              }
        } else if (type == 'np0') {
	        if (isNaN(textEntered) || textEntered < 0) {
                alert('INVALID ENTRY : ' + name + ' MUST BE A NUMBER GREATER THAN OR EQUAL TO 0');
                objAddressField.select();
                objAddressField.focus();
                return 0;
              }
	    } else if (type == 'phone') {
	        if (textEntered.length < 7 || textEntered.length > 12) {
	            alert('INVALID ENTRY : IMPROPER ' + name + ' FORMAT');
	            objAddressField.select();
	            objAddressField.focus();
	            return 0;
	        }
	        if (textEntered.indexOf('-') > -1) {
	            if (textEntered.indexOf('-') != 3 || textEntered.lastIndexOf('-') != 7) {
    	            alert('INVALID ENTRY : IMPROPER ' + name + ' FORMAT');
    	            objAddressField.select();
    	            objAddressField.focus();
    	            return 0;
                }
            }
    		myText = new String(textEntered);
    		myRegEx = new RegExp('-','g');
    		myText = myText.replace(myRegEx,'');
    		myRegEx = new RegExp(' ','g');
    		myText = myText.replace(myRegEx,'');
    		myRegEx = new RegExp('[0-9][0-9][0-9][0-9][0-9][0-9][0-9]','g');
    		result = myText.match(myRegEx);
    		if (result == null) {
    			alert('INVALID ENTRY : IMPROPER ' + name + ' FORMAT');
    			objAddressField.select();
    			objAddressField.focus();
    			return 0;
    		}
	    } else {
	        if (checkForInvalidCharacters(textEntered,objAddressField,type,name) == false) {return 0;}
	    }
        if ((textEntered.length < min || textEntered.length > max) && (type != 'f')) {
            if (min == max) {
                alert('INVALID ENTRY : ' + name + ' MUST BE ' + min +' CHARACTERS');
                objAddressField.select();
                objAddressField.focus();
                return 0;
            } else {
                alert('INVALID ENTRY : ' + name + ' MUST BE BETWEEN ' + min + ' AND ' + max +' CHARACTERS');
                objAddressField.select();
                objAddressField.focus();
                return 0;
            }
        }
    }
    return 1;
}
// checks for bad characters
function checkForInvalidCharacters(textstring,objAddressField,type,name) {
    // need to check for any characters that cause a problem
    if (textstring.indexOf('\'') > -1) {
        alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \' IN IT');
        objAddressField.select();
        objAddressField.focus();
        return 0;
    }
    if (textstring.indexOf('\@') > -1) {
        alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \@ IN IT');
        objAddressField.select();
        objAddressField.focus();
        return 0;
    }
    if (textstring.indexOf('\`') > -1) {
        alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \` IN IT');
        objAddressField.select();
        objAddressField.focus();
        return 0;
    }
    if (textstring.indexOf('\~') > -1) {
        alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \~ IN IT');
        objAddressField.select();
        objAddressField.focus();
        return 0;
    }
    if (textstring.indexOf('\^') > -1) {
        alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \^ IN IT');
        objAddressField.select();
        objAddressField.focus();
        return 0;
    }
    if (textstring.indexOf('\#') > -1) {
        alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \# IN IT');
        objAddressField.select();
        objAddressField.focus();
        return 0;
    }
    if (textstring.indexOf('\$') > -1) {
        alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \$ IN IT');
        objAddressField.select();
        objAddressField.focus();
        return 0;
    }
    if (textstring.indexOf('\%') > -1) {
        alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \% IN IT');
        objAddressField.select();
        objAddressField.focus();
        return 0;
    }
    if (textstring.indexOf('\=') > -1) {
        alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \= IN IT');
        objAddressField.select();
        objAddressField.focus();
        return 0;
    }
    if (textstring.indexOf('\*') > -1) {
        alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \* IN IT');
        objAddressField.select();
        objAddressField.focus();
        return 0;
    }
    if (textstring.indexOf('\{') > -1) {
        alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \{ IN IT');
        objAddressField.select();
        objAddressField.focus();
        return 0;
    }
    if (textstring.indexOf('\}') > -1) {
        alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \} IN IT');
        objAddressField.select();
        objAddressField.focus();
        return 0;
    }
    if (textstring.indexOf('\[') > -1) {
        alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \[ IN IT');
        objAddressField.select();
        objAddressField.focus();
        return 0;
    }
    if (textstring.indexOf('\]') > -1) {
        alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \] IN IT');
        objAddressField.select();
        objAddressField.focus();
        return 0;
    }
    if (textstring.indexOf('\|') > -1) {
        alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \| IN IT');
        objAddressField.select();
        objAddressField.focus();
        return 0;
    }
    if (textstring.indexOf('\\') > -1) {
        alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \\ IN IT');
        objAddressField.select();
        objAddressField.focus();
        return 0;
    }
    if (textstring.indexOf('\/') > -1) {
        alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \/ IN IT');
        objAddressField.select();
        objAddressField.focus();
        return 0;
    }
    if (textstring.indexOf('\<') > -1) {
        alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \< IN IT');
        objAddressField.select();
        objAddressField.focus();
        return 0;
    }
    if (textstring.indexOf('\>') > -1) {
        alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \> IN IT');
        objAddressField.select();
        objAddressField.focus();
        return 0;
    }
    if (textstring.indexOf('\"') > -1) {
        alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \" IN IT');
        objAddressField.select();
        objAddressField.focus();
        return 0;
    }
    if (type == 'alpha' || type == 'alphanum' || type == 'email2' || type == 'name' || type == 'email1' || type == 'userpass') {
        if (textstring.indexOf('\,') > -1) {
            alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \, IN IT');
            objAddressField.select();
            objAddressField.focus();
            return 0;
        }
        if (textstring.indexOf('\:') > -1) {
            alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \: IN IT');
            objAddressField.select();
            objAddressField.focus();
            return 0;
        }
        if (textstring.indexOf('\;') > -1) {
            alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \; IN IT');
            objAddressField.select();
            objAddressField.focus();
            return 0;
        }
        if (textstring.indexOf('\!') > -1) {
            alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \! IN IT');
            objAddressField.select();
            objAddressField.focus();
            return 0;
        }
        if (textstring.indexOf('\?') > -1) {
            alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \? IN IT');
            objAddressField.select();
            objAddressField.focus();
            return 0;
        }
        if (textstring.indexOf('\(') > -1) {
            alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \( IN IT');
            objAddressField.select();
            objAddressField.focus();
            return 0;
        }
        if (textstring.indexOf('\)') > -1) {
            alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \) IN IT');
            objAddressField.select();
            objAddressField.focus();
            return 0;
        }
    }
    if (type == 'alpha' || type == 'alphanum' || type == 'email2' || type == 'name' || type == 'userpass') {
        if (textstring.indexOf('\_') > -1) {
            alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \_ IN IT');
            objAddressField.select();
            objAddressField.focus();
            return 0;
        }
        if (textstring.indexOf('\+') > -1) {
            alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \+ IN IT');
            objAddressField.select();
            objAddressField.focus();
            return 0;
        }
        if (textstring.indexOf('\&') > -1) {
            alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \& IN IT');
            objAddressField.select();
            objAddressField.focus();
            return 0;
        }
    }
    if (type == 'email1' || type == 'email2' || type == 'userpass') {
        if (textstring.indexOf(' ') > -1) {
            alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY SPACES IN IT');
            objAddressField.select();
            objAddressField.focus();
            return 0;
        }
    }
    if (type == 'alpha' || type == 'alphanum' || type == 'email2' || type == 'userpass') {
        if (textstring.indexOf('\-') > -1) {
            alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \- IN IT');
            objAddressField.select();
            objAddressField.focus();
            return 0;
        }
    }
    if (type == 'alpha' || type == 'alphanum' || type == 'userpass') {
        if (textstring.indexOf('\.') > -1) {
            alert('INVALID ENTRY : ' + name + ' CANNOT HAVE ANY \. IN IT');
            objAddressField.select();
            objAddressField.focus();
            return 0;
        }
    }
    if (type == 'alpha') {
        if (textstring.indexOf('0') > -1) {
            alert('INVALID ENTRY : ' + name + ' MUST BE ALPHABETIC');
            objAddressField.select();
            objAddressField.focus();
            return 0;
        }
        if (textstring.indexOf('1') > -1) {
            alert('INVALID ENTRY : ' + name + ' MUST BE ALPHABETIC');
            objAddressField.select();
            objAddressField.focus();
            return 0;
        }
        if (textstring.indexOf('2') > -1) {
            alert('INVALID ENTRY : ' + name + ' MUST BE ALPHABETIC');
            objAddressField.select();
            objAddressField.focus();
            return 0;
        }
        if (textstring.indexOf('3') > -1) {
            alert('INVALID ENTRY : ' + name + ' MUST BE ALPHABETIC');
            objAddressField.select();
            objAddressField.focus();
            return 0;
        }
        if (textstring.indexOf('4') > -1) {
            alert('INVALID ENTRY : ' + name + ' MUST BE ALPHABETIC');
            objAddressField.select();
            objAddressField.focus();
            return 0;
        }
        if (textstring.indexOf('5') > -1) {
            alert('INVALID ENTRY : ' + name + ' MUST BE ALPHABETIC');
            objAddressField.select();
            objAddressField.focus();
            return 0;
        }
        if (textstring.indexOf('6') > -1) {
            alert('INVALID ENTRY : ' + name + ' MUST BE ALPHABETIC');
            objAddressField.select();
            objAddressField.focus();
            return 0;
        }
        if (textstring.indexOf('7') > -1) {
            alert('INVALID ENTRY : ' + name + ' MUST BE ALPHABETIC');
            objAddressField.select();
            objAddressField.focus();
            return 0;
        }
        if (textstring.indexOf('8') > -1) {
            alert('INVALID ENTRY : ' + name + ' MUST BE ALPHABETIC');
            objAddressField.select();
            objAddressField.focus();
            return 0;
        }
        if (textstring.indexOf('9') > -1) {
            alert('INVALID ENTRY : ' + name + ' MUST BE ALPHABETIC');
            objAddressField.select();
            objAddressField.focus();
            return 0;
        }
    }
    return 1;
}

// validates an email address
function validateEmail(objAddressField,required,max) {
    var atindex, localpart, domainpart
	var emailAddressEntered = objAddressField.value;
    if (required == 1 && emailAddressEntered.length == 0) {
		alert('INVALID ENTRY : YOU MUST ENTER THE EMAIL ADDRESS');
		objAddressField.focus();
		objAddressField.select();
    	return 0;
    }
	if (required == 1 || emailAddressEntered.length > 0) {
        atindex = emailAddressEntered.indexOf('\@')
        if (atindex < 1 || emailAddressEntered.length > max){
   	          alert('INVALID ENTRY : IMPROPER EMAIL ADDRESS');
		    objAddressField.focus();
	          objAddressField.select();
    	    return 0;
        }
        localpart = emailAddressEntered.substr(0,atindex)
        domainpart = emailAddressEntered.substr(atindex + 1)
        if (localpart.indexOf('\@') > -1 || domainpart.indexOf('\@') > -1) {
	        alert('INVALID ENTRY : IMPROPER EMAIL ADDRESS');
	        objAddressField.focus();
	        objAddressField.select();
            return 0;
        }
        if (emailAddressEntered.lastIndexOf('\.') < atindex + 2) {
            alert('INVALID ENTRY : IMPROPER EMAIL ADDRESS');
            objAddressField.focus();
            objAddressField.select();
            return 0;
	    }
        if (checkForInvalidCharacters(localpart,objAddressField,'email1','EMAIL ADDRESS LOCAL PART') == false) {return 0;}
        if (checkForInvalidCharacters(domainpart,objAddressField,'email2','EMAIL ADDRESS DOMAIN PART') == false) {return 0;}
    }
    return 1;
}
// validates a postal Code
function validatePostalCode(objAddressField,required) {
    var myText, myRegEx, result
	var postalCodeEntered = objAddressField.value;
	if (required == 1 || postalCodeEntered.length > 0) {
		if (postalCodeEntered.length != 6) {
			alert('INVALID ENTRY : IMPROPER POSTAL CODE');
			objAddressField.select();
			objAddressField.focus();
			return 0;
		}
		myText = new String(postalCodeEntered);
		myText = myText.toUpperCase();
		myRegEx = new RegExp('[A-Z][0-9][A-Z][0-9][A-Z][0-9]','g');
		result = myText.match(myRegEx);
		if (result == null) {
			alert('INVALID ENTRY : IMPROPER POSTAL CODE FORMAT');
			objAddressField.select();
			objAddressField.focus();
			return 0;
		}
    }
    return 1;
}
// validates a select field
function validateSelect(objAddressField,required,name) {
	var optionSelected = false;
    if (objAddressField.options[objAddressField.selectedIndex].value.length > 0) {
        optionSelected = true;
    }
	if (optionSelected == false && required == 1) {
	    alert('INVALID ENTRY : YOU MUST SELECT ' + name);
	    objAddressField.focus();
	    return 0;
    } else {return 1;}
}
// validates a check box
function validateCheckBox(objAddressField,required,name,num) {
	var optionSelected = false;
	if (required == 1) {
	    if (num > 1) {
            for (var i=0; i<num; i++) {
                if (objAddressField[i].checked == true) {
                    optionSelected = true;
                }
            }
	    } else {
	        if (objAddressField.checked == true) {
                optionSelected = true;
	        }
	    }
    	if (optionSelected == false) {
    	    alert('INVALID ENTRY : YOU MUST SELECT ' + name);
    	    return 0;
        } else {return 1;}
	}
}
