function setCookie(name, value, expires, path, domain, secure) {
    var curCookie = name + "=" + escape(value) +
                    ((expires) ? "; expires=" + expires.toGMTString() : "") +
                    ((path) ? "; path=" + path : "") +
                    ((domain) ? "; domain=" + domain : "") +
                    ((secure) ? "; secure" : "");
    document.cookie = curCookie;
}

function getCookie(name) {
    var dc = document.cookie;
    var prefix = name + "=";
    var begin = dc.indexOf("; " + prefix);
    if (begin == -1) {
        begin = dc.indexOf(prefix);
        if (begin != 0) return null;
    } else
        begin += 2;
    var end = document.cookie.indexOf(";", begin);
    if (end == -1)
        end = dc.length;
    return unescape(dc.substring(begin + prefix.length, end));
}

function deleteCookie(name, path, domain) {
    if (getCookie(name)) {
        document.cookie = name + "=" +
                          ((path) ? "; path=" + path : "") +
                          ((domain) ? "; domain=" + domain : "") +
                          "; expires=Thu, 01-Jan-70 00:00:01 GMT";
    }
}

var defaultEmptyOK = false;
var whitespace = " \t\n\r";
var digits = "0123456789";
var lowercaseLetters = "abcdefghijklmnopqrstuvwxyz";
var uppercaseLetters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
function isWhitespace(s) {
    var i;
    if (isEmpty(s)) return true;
    for (i = 0; i < s.length; i++)
    {   
        var c = s.charAt(i);
        if (whitespace.indexOf(c) == -1) return false;
    }
    return true;
}
function isEmail (s)
{   if (isEmpty(s)) 
       if (isEmail.arguments.length == 1) return defaultEmptyOK;
       else return (isEmail.arguments[1] == true);
    if (isWhitespace(s)) return false;
    var i = 1;
    var sLength = s.length;
    while ((i < sLength) && (s.charAt(i) != "@"))
    { i++
    }
    if ((i >= sLength) || (s.charAt(i) != "@")) return false;
    else i += 2;
    while ((i < sLength) && (s.charAt(i) != "."))
    { i++
    }
    if ((i >= sLength - 1) || (s.charAt(i) != ".")) return false;
    else return true;
}
function isEmpty(s)
{   return ((s == null) || (s.length == 0))
}
function isDigit (c)
{   return ((c >= "0") && (c <= "9"))
}
function isLetter (c)
{   return ( ((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")) )
}


// for formmail.php

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_validateForm() { //v4.0
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
    if (val) { nm=val.name; if ((val=val.value)!="") {
      if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
        if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
      } else if (test!='R') { num = parseFloat(val);
        if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
        if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
          min=test.substring(8,p); max=test.substring(p+1);
          if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
    } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }
  } if (errors) alert('The following error(s) occurred:\n'+errors);
  document.MM_returnValue = (errors == '');
}

// object visibility functions

function setVisible (targetId) {
	if (document.getElementById) {
		target = document.getElementById(targetId);
		if (target.style.visibility != "visible") {
			target.style.display = "block";
			target.style.visibility = "visible";
		}
	}
}

function setInvisible (targetId) {
	if (document.getElementById) {
		target = document.getElementById(targetId);
		if (target.style.visibility != "hidden") {
			target.style.display = "none";
			target.style.visibility = "hidden";
		}
	}
}

function toggleVisibility (targetId) {
	if (document.getElementById) {
		target = document.getElementById(targetId);
		if (target.style.visibility != "visible") {
			target.style.display = "block";
			target.style.visibility = "visible";
		} else {
			target.style.display = "none";
			target.style.visibility = "hidden";
		}
	}
}

// toggle visibility at the point of click

function clickX (e) {
	if (e.pageX)
		return e.pageX;
	else if (e.clientX)
	   return e.clientX + (document.documentElement.scrollLeft ?
	   			document.documentElement.scrollLeft :
	   			document.body.scrollLeft);
	return null;
}

function clickY (e) {
	if (e.pageY)
		return e.pageY;
	else if (e.clientY)
		return e.clientY + (document.documentElement.scrollTop ?
				document.documentElement.scrollTop :
				document.body.scrollTop);
	return null;
}

function toggleVisibilityEvent (e, targetId) {
	if (document.getElementById) {
		target = document.getElementById(targetId);
		if (target.style.visibility != "visible") {
			if (window.event) {
				target.style.top = window.event.screenY + "px";
				target.style.left = window.event.screenX + "px";
			}
			target.style.display = "block";
			target.style.visibility = "visible";
		} else {
			target.style.display = "none";
			target.style.visibility = "hidden";
		}
	}
	target.style.top = clickY(e) + "px";
	target.style.left = clickX(e) + "px";
}


// calculators

function showCalculator (calc) {
	setVisible(calc);
	var tmp = (calc == 'mrtgcalc') ? 'eqcalc' : 'mrtgcalc';
	setInvisible(tmp);
}

// this function returns a plain number from string, considering money formats
function getNumber(fld) {
	var str = fld.value;
	var tmp = '';
	
	if (fld.value.length == 0) {
		return null;
	}

	for (var i = 0; i < str.length; i++) {
		var ch = str.substring(i, i + 1);
		if (ch == '$' || ch == ',' || ((ch < '0' || ch > '9') && ch != '.')) {
			continue;
		}
		tmp += ch;
	}

	if (tmp == '') {
		return null;
	}
	
    var num = parseFloat(tmp)
	
	return num;
}

// this function converts an input value into a money format
function toMoney(input) {
    if (input.value != null && input.value.length != 0) {
		num = getNumber(input);
		if (num == null) {
			return;
		}

		str = num.toString();
		sig = str.split('.');

		tmp = '';
		len = sig[0].length;
		for (var i = len, j=1; i > 0; i--, j++) {
			var t = sig[0].substring(i, i - 1);
			tmp = t + tmp;
			if ((j % 3 == 0) && j != len) {
				tmp = ',' + tmp;
			}
		}

		if (sig.length > 1 && sig[1].length) {
			tmp += '.' + sig[1].substr(0,1);
			var t = sig[1].substr(1,1);
			if (t) {
				tmp += t;
			} else {
				tmp += '0';
			}
		}
		str = '$' + tmp;

		input.value = str;
	}
}

// this function checks if the input value is a number, considering money formats
function checkNumber(fld, min, max, message) {
    message = message + " field has invalid data: " + fld.value;
	
	num = getNumber(fld);
	if (num == null) {
		alert(message + " you must enter a value");
		return false;
	}
	
    if (num < min || max < num) {
        alert(message + " is not in the range [" + min + ".." + max + "]");
        return false;
    }

    return true;
}

function computeField(input) {
    if (input.value != null && input.value.length != 0)
        input.value = "" + eval(input.value);
    // computeForm(input.form);
}

function MortgageCalc(form) {
	var option = null;
	for (var i=0; i<form.option.length; i++) {
		if (form.option[i].checked == true) {
			option = form.option[i].value;
			break;
		}
	}
	
	if (option == null) { return; }

    if (!checkNumber(form.principal, 100, 10000000, "Mortgage Amount") ||
        !checkNumber(form.interest, .001, 99, "Interest Rate")) {
        form.payment.value = "Error";
        form.payment2.value = "Error";

        return;
    }

   	var irate = getNumber(form.interest);
    if (irate > 1.0) {
        irate /= 100;
	}

   	var principal = getNumber(form.principal);
   	var payment = 0;

	if (option == 'interest') {

	    payment = (principal * irate) / 12;
	    form.payment.value = payment;
   
    } else if (option == '15year' || option == '30year') {
    
    	irate /= 12;
    	
		payments = parseInt(option) * 12;
		
		var p = 1.0;
		for (var i=0; i < payments; i++)
			p = p * (1 + irate);
				
		payment = (principal * p * irate) / (p - 1);
	    form.payment.value = payment;
    }

    toMoney(form.payment);
    
   	val = getNumber(form.taxes);
   	if (val != null)
    	payment += (val / 12);
        
   	val = getNumber(form.insurance);
   	if (val != null)
    	payment += (val / 12);
        
   	val = getNumber(form.hoadues);
   	if (val != null)
    	payment += (val / 12);

	form.payment2.value = payment;
	toMoney(form.payment2);
}

function EquityCalc(form) {
    if (!checkNumber(form.mvalprop, 10000, 10000000, "Market Value of Property") ||
        !checkNumber(form.mtgpayoff1, 0, 1000000, "1st Mtg Payoff") ||
        !checkNumber(form.mtgpayoff2, 0, 1000000, "2nd Mtg Payoff") ||
        !checkNumber(form.backtaxes, 0, 1000000, "Back Taxes") ||
        !checkNumber(form.fundingneed, 1, 10000000, "Funding Requested")) {
        form.grosseqcalc.value = "Error";
        form.eqmvalperc.value = "Error";

        return;
    }

    var sum1 = getNumber(form.mtgpayoff1);
	sum1 += getNumber(form.mtgpayoff2);
	sum1 += getNumber(form.backtaxes);
	sum1 += getNumber(form.fundingneed);

	var i = getNumber(form.mvalprop);
	
	form.grosseqcalc.value = Math.round(i - sum1);
	
	form.eqmvalperc.value = Math.round((sum1 / i) * 100);
	
	if (document.getElementById) {
		el = document.getElementById('eqmvalperc');
		if (form.eqmvalperc.value <= 83) {
			el.style.color = "green";
		} else if (form.eqmvalperc.value > 84) {
			el.style.color = "red";
		}
	}

	form.eqmvalperc.value += '%';
	toMoney(form.grosseqcalc);
}


// property image gallery

function showPic (whichpic) {
	if (document.getElementById) {
		document.getElementById('placeholder').src = whichpic.href;
		return false;
	} else {
		return true;
	}
}

function getElementsByClassName(oElm, strTagName, strClassName){
	var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++){
		oElement = arrElements[i];
		if(oRegExp.test(oElement.className)){
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements)
}
