function whichVer(){
	IE = document.all ? true : false
	NS = (navigator.appName.indexOf('Netscape') > -1) ? true : false
}

//set browser type
whichVer()

function repeat(s,n){
	var str = ""
	for(var i=0; i < n; i++){
		str += s
	}
	return str
}

function getValue(el){
	for(var i = 0; i < el.length; i++){
		if(el.options[i].selected == true){
			break
		}
	}
	return el.options[i].value
}

//------------------------------------------------------------
//Patterns
var IsAThroughZ = /^[a-zA-Z\s\,]*$/;
var IsAThroughZLastName = /^[a-zA-Z\s\,\']*$/;
var IsNumber = '^[0-9]+([,][0-9]{3})*([.][0-9]+)*$'
var IsWholeNumber = '^[0-9]+([,][0-9]{3})*$'
var IsPhone = '[(]?[0-9]{3}[)-]? ?[0-9]{3}[ -]?[0-9]{4}'
var IsAnyUrl = '^(http://)?[/a-z0-9._?-]+(/|([.][a-z0-9_-]{2,4}))([?][a-z0-9=&_-]*){0,1}$'
var IsUrl = '^(http://)+[/a-z0-9._?-]+(/|([.][a-z0-9_-]{2,4}))([?][a-z0-9=&_-]*){0,1}$'
var IsNotEmpty = '^[^ ]+'
var IsEmail = '^[_a-z0-9\'-]+(\.[a-z0-9]+)*@[a-z0-9-]+[.][a-z0-9.-]+[^.-]$'
var IsDate = '^((0?[0-9])|(10|11|12))[/ -](([0-2]?[0-9])|(30|31))[/ -][1-2][0-9]{3}$'
var IsCurrency = '^[$]?[0-9]*([.][0-9]{2})?$'
var IsWebImage = '[.](gif|jpg|jpeg)$'

//Function
function jsValidate(e, pattern)
{
	//RH added code to allow tab, delete, home, backspace, enter, etc
	if(NS)
	{
		if((e.which == 8)||(e.which == 0)||(e.which == 13))
			return true;		
	}
	var re = (typeof pattern == 'string')?new RegExp(pattern, 'i'):pattern;
	return re.test(String.fromCharCode((window.event)?window.event.keyCode:e.which));
}

//------------------------------------------------------------
/*OBSOLETE USE THE REG EXP ABOVE*/

var jsDate = 1
var jsText = 2
var jsMoney = 3
var jsNumber = 4
var jsInteger = 5
var jsZipcode = 6
var jsAlpha = 7
var jsMonth = 8
var jsDay = 9
var jsYear = 10
var jsNumberPositive = 11
var jsSearchDate = 12
var jsIntegerAllowComma = 13

function mask(e, mask_type){
	var value
	var el
	
	if(IE){	
		value = event.keyCode 
		el = event.srcElement
	}
	
	if(NS){
		value = e.which 
		el = e.target
	}
	
	var key = String.fromCharCode(value)
	
	//Check for backspace
	if(parseInt(value) == 8){
		return true;
	}
	
	//Allow comma or space when mask_type is jsIntegerAllowComma
	if((parseInt(value) == 44 || parseInt(value) == 32) && mask_type == jsIntegerAllowComma){
		return true;
	}
	
	//added code to allow tab, delete, home, backspace, enter, etc
	if(NS && e.type.toLowerCase() == "keypress")
	{
		if((value == 0)||(value == 13))
			return true;		
	}
	
	if(mask_type == jsSearchDate) {return searchdate_mask(el, key)}
	if(mask_type == jsDate){return date_mask(el, key)}
	if(mask_type == jsMonth){return month_mask(el, key)}
	if(mask_type == jsDay){return day_mask(el, key)}
	if(mask_type == jsYear){return year_mask(el, key)}
	if(mask_type == jsNumber){return number_mask(el, key, mask.arguments[2],mask.arguments[3], mask.arguments[4])}
	if(mask_type == jsMoney){return money_mask(el, key, mask.arguments[2], mask.arguments[3], mask.arguments[4])}
	if(mask_type == jsInteger || mask_type == jsIntegerAllowComma){return isInteger(key)}
	if(mask_type == jsZipcode){return zipcode_mask(el, key, mask.arguments[2])}
	if(mask_type == jsAlpha){return isAlpha(key)}
	if(mask_type == jsNumberPositive){return pos_number_mask(el, key, mask.arguments[2],mask.arguments[3], mask.arguments[4])}
}

function setFocus(el, masktype) {

	if (masktype==jsNumber) {
		el.value=stripCharsInBag(el.value,',')
	}
	if (masktype==jsMoney) {
		el.value=stripCharsInBag(el.value,'$,')
	}
	el.select()
}

var daysInMonth = new Array(12);
daysInMonth[1] = 31;
daysInMonth[2] = 29;   // must programmatically check this
daysInMonth[3] = 31;
daysInMonth[4] = 30;
daysInMonth[5] = 31;
daysInMonth[6] = 30;
daysInMonth[7] = 31;
daysInMonth[8] = 31;
daysInMonth[9] = 30;
daysInMonth[10] = 31;
daysInMonth[11] = 30;
daysInMonth[12] = 31;

function searchdate_mask(el, key)
{
	if(isNumber(key) || key == "/"){
		return true
	}
	
	return false
}

function date_mask(el, key){
	var c = el.value
	c += key					//add key value.
	c = stripCharsInBag(c,"/_") //Strip previous formating.
	
	var len = c.length
	
	//Check for number and len.
	if(!isNumber(key) || len > 8){
		return false
	}

	if(len <= 2){ //Month
		if(len == 1 && parseFloat(c) > 1){
			el.value = ''
			return false
		}
		if(isMonth(parseFloat(c)) || c == 0){
			if(len == 1){
				el.value =	reformat(c, "",1,"_/__/____")
			}
			if(len == 2){
				el.value = reformat(c, "",2,"/__/____")
			}
		}
	}
	
	if(len > 2 && len <= 4){ //Day
		var month = parseFloat(c.substr(0,2))
		if(len == 3){
			var day = parseFloat(c.substr(2)) * 10
			if(day <= daysInMonth[month]){
				el.value =	reformat(c, "", 2, "/", 1, "_/____")
			}
		}else{
			
			if(c.substr(2)<= daysInMonth[month] && c.substr(2) > 0){
				el.value = reformat(c, "", 2, "/", 2, "/____")
			}
		}
	}

	if(len > 4 && len <=8){ //Year
		var year = c.substr(4)
		if(len == 5 && (year == 1 || year == 2)){
			el.value = reformat(c, "", 2, "/", 2, "/", 1, "___")
		}
		if(len == 6 && (year >= 19 && year <= 20)){
			el.value = reformat(c, "", 2, "/", 2, "/", 2, "__")
		}
		if(len == 7){
			el.value = reformat(c, "", 2, "/", 2, "/", 3, "_")
		}
		if(len == 8){
			el.value = reformat(c, "", 2, "/", 2, "/",4)
		}
	}
	return false
}
function isIntegerInRange(s, a, b){   
    if (!isInteger(s, false)) return false;
    var num = parseInt (s);
   return ((num >= a) && (num <= b));
}
function isMonth (s){
    return isIntegerInRange (s, 1, 12);
}
function isDay (s, m){   
 alert(s);
 alert(m);
 alert(daysInMonth[m]);
    return isIntegerInRange (s, 1, daysInMonth[m]);
}
// daysInFebruary (INTEGER year)
// 
// Given integer argument year,
// returns number of days in February of that year.
function daysInFebruary (year){
    // February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (  ((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0) ) ) ? 29 : 28 );
}
function isLeapYear(intYear) {
	if ((((intYear % 4) == 0) && ((intYear % 100) != 0)) || (((intYear % 100) == 0) && ((intYear % 400) == 0))){
		return true
	}else{
		return false
	}
}
function isYear(s){
   if (isEmpty(s)) 
       if (isYear.arguments.length == 1) return defaultEmptyOK;
       else return (isYear.arguments[1] == true);
    if (!isNonnegativeInteger(s)) return false;
    return ((s.length == 2) || (s.length == 4));
}

function month_mask(el, key){
	if(! isNumber(key)){
		return false
	}
	
	var c = el.value + key
	
	if(! isMonth(c)){
		return false
	}
	return true
}

function day_mask(el, key){
	if(! isNumber(key)){
		return false
	}
	
	var c = el.value + key
	var len = c.length
	
	if(len == 1 && key <= 0){
		return false
	}
	if(len == 2 && (c <= 0 || c > 31)){
		return false
	}
	return true
}

function year_mask(el, key){
	if(! isNumber(key)){
		return false
	}
	
	var c = el.value + key
	var len = c.length
	
	if(len == 1 && key != 1 && key != 2){
		return false
	}

	if(len == 2 && key != 0 && key != 9){
		return false
	}

	return true
}

function pos_number_mask(el, key, elReformat, numDecimals)
{
	//If negative character is found return false
	if(key == "-"){
	   return false;
	}
	else
	{
		//Continue with number mask
	    return number_mask(el, key, elReformat, numDecimals)
	}

}
function number_mask(el, key, elReformat, numDecimals){
	if((navigator.appName.indexOf('Netscape') > -1)&&(document.getElementById)){
		//we support NS8 and FF should be ok -- elReformat = false
	}
	if(elReformat){
		el.value = stripCharsNotInBag(el.value,"0123456789.-") //Strip invalid chars.
	}
	if(! elReformat){ // We are inputing.	
		var ch = el.value
		var dpos = ch.lastIndexOf(".")
		/* if(dpos > 0){ OLD
		changed because it was not counting for when the dot
		was the first character in the textfield. CS Feb 09,2005*/
		if (dpos != -1) {
			var decimalnumbers = ch.substring(dpos,ch.length)
			if (decimalnumbers.length > numDecimals) {
				return false
			}
		}
	}

	if(! elReformat){ // We are inputing.
	
		if(key == "." && numDecimals < 1){
				return false
			}
			
		if((!isNumber(key) && key != "." && key != "," && key != "-")||(key == " ")){
			return false
		}else{
			if(key == "." && el.value.indexOf('.') >= 0){
				return false
			}
			return true
		}
	}else{
		if(key == "." && numDecimals < 1){
				return false
			}
		else
		{
		key = ""
		}
	}
	
	var bNegNum = false;
	var c = el.value
	if(c.charAt(0) == "-"){
		bNegNum = true;
		c = c.substr(1,c.length-1);
	}
	var decimalpos = c.lastIndexOf(".")
	
	if(decimalpos == -1){
		decimalpos = 0
	}
	
	//c = parseFloat(c)			//Strip out leading/ending zeros.
	//
	//if(isNaN(c)){				//If not a number clear element.
	//	el.value = ""
	//	return true
	//}

	c.toString()			//Convert back to string.
	var len = c.length
	
	if(decimalpos > 0){
		var lftNum = c.substr(0,len -  (len - decimalpos))
	}else{
		var lftNum = c
	}

	var rtNum = c.substr(lftNum.length)
	var nlen = lftNum.length
	var n = Math.ceil(nlen / 3) - 1

	if(n > 0){
		var first_pos = nlen - (n * 3)
		first_pos = first_pos > 0 ? first_pos : 1

		var eval_str = "c, '', " + first_pos
		for(var i = 0; i < n; i++){
			eval_str += ", ',', 3"
		}
		eval("el.value = reformat(" + eval_str + ")")
		if(decimalpos > 0){
			el.value += rtNum
		}
	}else{
		if(decimalpos > 0){
			el.value = lftNum + rtNum
		}else{
			el.value = c
		}
	}
	if(el.value.toString().charAt(0) == "."){
		el.value = '0' + el.value;
	}
	if(bNegNum){
		el.value = '-' + el.value;
	}
	
//tpm - 4/4/00 - fix incorrect comma placement in values < 1
	if (parseFloat(el.value)<1 && parseFloat(el.value) > -1) {
		el.value = stripCharsInBag(el.value,",")
	}
	
//rdh 9/23/03 removing the decimal point if numDecimals < 1
	if (numDecimals < 1)
	{
		el.value = stripCharsInBag(el.value,".")
	}
return false
}

function money_mask(el, key, elReformat, numDecimals){
	if((navigator.appName.indexOf('Netscape') > -1)&&(document.getElementById)){
		elReformat = false
	}
	if(elReformat){
		el.value = stripCharsNotInBag(el.value,"0123456789.") //Strip invalid chars.
	}
	if(! elReformat){ // We are inputing.	
		var ch = el.value
		var dpos = ch.lastIndexOf(".")
		if (dpos > 0) {
			var decimalnumbers = ch.substring(dpos,ch.length)
			if (decimalnumbers.length > numDecimals) {
				return false
			}
		}
	}

	if(! elReformat){ // We are inputing.
		if((!isNumber(key) && key != "." && key != ",")||(key == " ")){
			return false
		}else{
			if(key == "." && el.value.indexOf('.') >= 0){
				return false
			}
			return true
		}
	}else{
		key = ""
	}	

	var c = el.value
	
	var decimalpos = c.lastIndexOf(".")
	if(decimalpos == -1){
		decimalpos = 0
	}

	c = parseFloat(c)			//Strip out leading 0's.

	if(isNaN(c)){				//If not a number clear element.
		el.value = ""
		return true
	}

	c = c.toString()			//Convert back to string.
	var len = c.length
	
	if(decimalpos > 0){
		var lftNum = c.substr(0,len -  (len - decimalpos))
	}else{
		var lftNum = c
	}

	var rtNum = c.substr(lftNum.length)
	var nlen = lftNum.length
	var n = Math.ceil(nlen / 3) - 1
	if(n > 0){
		var first_pos = nlen - (n * 3)
		first_pos = first_pos > 0 ? first_pos : 1

		var eval_str = "c, '$', " + first_pos
		for(var i = 0; i < n; i++){
			eval_str += ", ',', 3"
		}
		eval("el.value = reformat(" + eval_str + ")")
		if(decimalpos > 0){
			el.value += rtNum
		}
	}else{
		if(decimalpos > 0){
			el.value = "$" + lftNum + rtNum
		}else{
			el.value = "$" + c
		}
	}

//tpm - 4/4/00 - fix incorrect comma placement in values < 1
	c=el.value.substr(1,el.value.length)
	if (parseFloat(c)<1) {
		el.value = stripCharsInBag(el.value,",")
	}
	
	if((el.value.indexOf('.') == -1))
	{
		el.value += ".00"
	}
	
	return false
}

function isNumber(n){
	return (n >= 0 && n <= 9) ? true : false
}

function isInteger(s){
    var i;

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);

        if (!isDigit(c)) return false;
    }

    // All characters are numbers.
    return true;
}

function isDigit(c){  
	return ((c >= "0") && (c <= "9"))
}

function zipcode_mask(el, key, multi) {
	if(!isNumber(key) && !multi){
		return false
	}
	
	if(!isNumber(key) && multi && key != ","){
			return false
	}
	return true
}

function isAlpha(s){
    var i;

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);

        if (isDigit(c)) return false;
    }

    // All characters are numbers.
    return true;
}

function stripCharsInBag (s, bag){
   var i;
    var returnString = "";

    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }

    return returnString;
}

function stripCharsNotInBag (s, bag){
    var i;
    var returnString = "";

    // Search through string's characters one by one.
    // If character is in bag, append to returnString.

    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) != -1) returnString += c;
    }

    return returnString;
}

function reformat (s){
    var arg;
    var sPos = 0;
    var resultString = "";

    for (var i = 1; i < reformat.arguments.length; i++) {
       arg = reformat.arguments[i];
       if (i % 2 == 1) resultString += arg;
       else {
           resultString += s.substring(sPos, sPos + arg);
           sPos += arg;
       }
    }
    return resultString;
}

function goodDates() {
	var ListedBeforeYear = parseInt(document.pfForm1.fDateYYYY.value)
	if (parseInt(document.pfForm1.tDateYYYY.value) > ListedBeforeYear) {
		alert('The Listed Before year Must be greater than or equal\r\t     to The Listed After year.')
		document.pfForm1.fDateYYYY.focus()
		TrackWebErrors("ForLeaseSearch","SearchListedBeforeYear_FL","30","840",ListedBeforeYear,"Listed Before Year must be greater than or equal to Listed After Year")
		return false;
	}
	if (parseInt(document.pfForm1.tDateYYYY.value) == parseInt(document.pfForm1.fDateYYYY.value)) {
		var ListedBeforeMonth = parseInt(document.pfForm1.fDateMM.value)
		if(parseInt(document.pfForm1.tDateMM.value) > ListedBeforeMonth) {
			alert('The Listed Before month Must be greater than or equal\r\t     to The Listed After month.')
			document.pfForm1.fDateMM.focus()
			TrackWebErrors("ForLeaseSearch","SearchListedBeforeMonth_FL","30","820",ListedBeforeMonth,"Listed Before Month must be greater than or equal to Listed After Month")
			return false;
		}
	}
	if (parseInt(document.pfForm1.tDateYYYY.value) == parseInt(document.pfForm1.fDateYYYY.value)) {
		if(parseInt(document.pfForm1.fDateMM.value) == parseInt(document.pfForm1.tDateMM.value)) {
			var ListedBeforeDay = parseInt(document.pfForm1.tDateDD.value)
			if(parseInt(document.pfForm1.fDateDD.value) <= ListedBeforeDay) {
				alert('The Listed Before day Must be greater than\r\t The Listed After day.')
				document.pfForm1.fDateDD.focus()
				TrackWebErrors("ForLeaseSearch","SearchListedBeforeDay_FL","30","830",ListedBeforeDay,"Listed Before Day must be greater than or equal to Listed After Day")
				return false;
			}
		}
	}
return true;
}

function checkListingDate(dt, dateYYYY, dateMM, dateDD, module, method, escYYYY, escMM, escDD) {
	if (dt.length > 0) {
		if (dateMM.value.length==0) {
			alert('You must enter a month.')
			dateMM.focus()
			TrackWebErrors(module,method,"10",escMM,"","Month is a required field")
			return false;
		}
		
		if (!isInteger(dateMM.value)){
			dateMMVal = dateMM.value;
			alert('Invalid month.')
			dateMM.focus()
			TrackWebErrors(module,method,"20",escMM,dateMMVal,"Invalid Month entered")
			return false;
		}
		
		if (dateDD.value.length==0) {
			alert('You must enter a day.')
			dateDD.focus()
			TrackWebErrors(module,method,"10",escDD,"","Day is a required field")
			return false;
		}

		if (!isInteger(dateDD.value)){
			dateDDVal = dateDD.value;
			alert('Invalid day.')
			dateDD.focus()
			TrackWebErrors(module,method,"20",escDD,dateDDVal,"Invalid Day entered")
			return false;
		}
		
		if (dateYYYY.value<1995) {
			dateYYYYVal = dateYYYY.value;
			alert('Invalid year.')
			dateYYYY.focus()
			TrackWebErrors(module,method,"30",escYYYY,dateYYYYVal,"Invalid Year -- Less Than 1995")
			return false;
		}
		if (dateYYYY.value>2200) {
			dateYYYYVal = dateYYYY.value;
			alert('Invalid year.')
			TrackWebErrors(module,method,"30",escYYYY,dateYYYYVal,"Invalid Year -- Greater Than 2200")
			dateYYYY.focus()
			return false;
		}
		if (!isInteger(dateYYYY.value)){
			dateYYYYVal = dateYYYY.value;
			alert('Invalid Year.')
			dateYYYY.focus()
			TrackWebErrors(module,method,"20",escYYYY,dateYYYYVal,"Invalid Year entered -- Value not an Integer")
			return false;
		}
	}

	if (dt.length > 0 && dt.length <= 8) {
		if (dateYYYY.value.length < 4) {
			dateYYYYVal = dateYYYY.value;
			alert('You must enter a complete 4 digit year (1999, 2000, etc.)')
			dateYYYY.focus()
			TrackWebErrors(module,method,"20",escYYYY,dateYYYYVal,"Invalid Year entered -- Length Less Than 4")
			return false;
		}
		var mm, dd
		if (dateMM.value.length==0){ 
			mm=0
		} else{
			mm = parseInt(dateMM.value)
		}
		if (dateDD.value.length==0){ 
			dd=0
		} else {
			dd = parseInt(dateDD.value)
		}
		
		if (mm==0) {
			alert('You must enter a month.')
			dateMM.focus()
			TrackWebErrors(module,method,"10",escMM,"","Month is a required field")
			return false;
		}
					
		if (mm==9 || mm==4 || mm==6 || mm==11) {
			if (dd<1 || dd>30) {
				alert('Day may not be 0 or greater than 30.')
				dateDD.focus()
				TrackWebErrors(module,method,"30",escDD,mm,"Invalid Day Entered -- Out of Range")
				return false;
			}
		}
		if (mm==2){
			if (dd<1 || dd>29) {
				alert('Day may not be 0 or greater than 29.')
				dateDD.focus()
				TrackWebErrors(module,method,"30",escDD,dd,"Invalid Day Entered -- Out of Range")
				return false;
			}
			if (!isLeapYear(dateYYYY.value)) {
				if (dd==29) {
					alert('Day may not be greater than 28')
					dateDD.focus()
					TrackWebErrors(module,method,"30",escDD,dd,"Invalid Day Entered -- Out of Range")
					return false
				}
			}
		}
	}
return true;
}
