function getActualHeight() {
	if( window.innerHeight && window.scrollMaxY ) // Firefox 
	{
		pageWidth = window.innerWidth + window.scrollMaxX;
		pageHeight = window.innerHeight + window.scrollMaxY;
	}
	else if( document.body.scrollHeight > document.body.offsetHeight ) // all but Explorer Mac
	{
		pageWidth = document.body.scrollWidth;
		pageHeight = document.body.scrollHeight;
	}
	else // works in Explorer 6 Strict, Mozilla (not FF) and Safari
	{ 
		pageWidth = document.body.offsetWidth + document.body.offsetLeft; 
		pageHeight = document.body.offsetHeight + document.body.offsetTop; 
	}
	return pageHeight;
}

function getCookie(c_name) {
	if (document.cookie.length>0)
	{
		c_start=document.cookie.indexOf(c_name + "=")
		if (c_start!=-1)
		{ 
			c_start=c_start + c_name.length+1 
			c_end=document.cookie.indexOf(";",c_start)
			if (c_end==-1) c_end=document.cookie.length
			return unescape(document.cookie.substring(c_start,c_end));
		} 
	}
	return ""
}

function validURL(url) {
	var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/

	if (!url)
	{
		return false;
	}
	if (url.value.length == 0)
	{
		return true;
	}
	else if (regexp.test(url.value))
	{
		return true;
	}
	else if (regexp.test("http://" + url.value))
	{
		url.value = "http://" + url.value;
		return true;
	}
	alert("Invalid URL format");
	return false;
}

function errorHandler(req) {
	if (req.status == 401) // session timeout
	{
		alert("You browser is no longer logged in.\nPlease login again to continue.");
		if (!context || context == undefined)
		{
			return;
		}
		var	refer = context + "/members/homeTab.jsp";
		if (parent)
		{
			refer = parent.getLastPage();
		}
		if (opener)
		{
			opener.window.location = context + "/login.jsp?referer=" + refer;
			opener.focus();
			setTimeout(5000,"self.close()");
		}
		else
		{
			window.location = context + "/login.jsp?referer=" + refer;
		}
	}
	else if (req.status == 408)
	{
		setTimeout(1000,"req.process()");
	}
	else
	{
		alert("Error: " + req.status + " " + req.text);
		if (opener)
		{
			setTimeout(5000,"self.close()");
		}
	}
}

function setField(name,respXML) {
	var elem = document.getElementById(name);
	if (!elem)
	{
		return false;
	}
	var xml = respXML.getElementsByTagName(name);
	
	if (elem.tagName == "INPUT" ||
	    elem.tagName == "TEXTAREA")
	{
		if (xml && xml.length > 0 && xml.item(0).firstChild)
		{
			if (elem.type.toUpperCase() == "CHECKBOX")
			{
				if (xml.item(0).firstChild.nodeValue == "true" ||
				    xml.item(0).firstChild.nodeValue > 0)
				{
					elem.checked = true;
				}
				else
				{
					elem.checked = false;
				}
				return true;
			}
			else if (elem.type.toUpperCase() == "RADIO")
			{
				var radios = document.getElementsByName(name);
				for (var i = 0; i < radios.length; i++)
				{
					if (xml.item(0).firstChild.nodeValue == radios.item(i).value)
					{
						radios.item(i).checked = true;
					}
					else
					{
						radios.item(i).checked = false;
					}
				}
			}
			else
			{
				elem.value = xml.item(0).firstChild.nodeValue;
				return true;
			}
		}
		else
		{
			if (elem.type.toUpperCase() == "CHECKBOX")
			{
				elem.checked = false;
			}
			else
			{
				elem.value = "";
			}
		}
	}
	else if (elem.tagName == "SELECT")
	{
		if (xml && xml.length > 0)
		{
			var tmp = xml.item(0).firstChild.nodeValue;
			for (var i = 0; i < elem.options.length; i++)
			{
				if (elem.options[i].value == tmp)
				{
					elem.options[i].selected = true;
				}
				else
				{
					elem.options[i].selected = false;
				}
			}
		}
	}
	else // if (elem.innerHTML)
	{
		if (xml && xml.length > 0 && xml.item(0).firstChild)
		{
			var tmp = xml.item(0).firstChild.nodeValue;

			while (tmp.indexOf("\n") >= 0)
			{
				tmp = tmp.replace("\n","<br>");
			}
			elem.innerHTML = tmp;
			return true;
		}
		else
		{
			elem.innerHTML = "";
		}
	}
	return false;
}

function getSurveyForm(responseXML) {

	var xml = responseXML.getElementsByTagName('surveyQuestion');
	var text = "";
	if (xml)
	{
		text += "<table cellspacing=10>";
		
		for (var i = 0; i < xml.length; i++)
		{
			var	id = xml.item(i).getAttribute('id');
			text +=  "<tr class=question><td>" + (i+1) + ".</td><td colspan=9 style='background:white'>" + xml.item(i).getElementsByTagName('text').item(0).firstChild.nodeValue + "</td></tr>";
			text += "<tr class=answer>";
			text += "<td><input type=hidden name='question" + (i+1) + "' value='" + id + "'></td>";
			text += "<td align=right>" + xml.item(i).getElementsByTagName('unfavorable').item(0).firstChild.nodeValue + "</td>";
			text += "<td align=center style='background:#CCF'><input type=radio name='answer" + (i+1) + "' value='1'></td>";
			text += "<td align=center style='background:#EEE'><input type=radio name='answer" + (i+1) + "' value='2'></td>";
			text += "<td align=center style='background:#AAF'><input type=radio name='answer" + (i+1) + "' value='3'></td>";
			text += "<td align=center style='background:#EEE'><input type=radio name='answer" + (i+1) + "' value='4'></td>";
			text += "<td align=center style='background:#CCF'><input type=radio name='answer" + (i+1) + "' value='5'></td>";
			text += "<td align=left>" + xml.item(i).getElementsByTagName('favorable').item(0).firstChild.nodeValue + "</td>";
			text += "<td align=center style='background:#EEE'><input type=radio name='answer" + (i+1) + "' value='0'></td><td align=left>N/A</td>";
			text += "</tr>";
		}
		text += "</table>";
	}
	return text;
}

function isDefined(variable) {
	return (!(!( variable||false )));
}

var origClass;

function highlight(elem) {
	origClass = elem.className;
	elem.className = "highlightRow";
}

function unhighlight(elem) {
	elem.className = origClass;
}

/**
 * DHTML date validation script. Courtesy of SmartWebby.com (http://www.smartwebby.com/dhtml/)
 */
// Declaring valid date character, minimum year and maximum year

var dtCh= "/";
var minYear=1900;
var maxYear=2100;

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) 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++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

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 DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}

function isDate(dtStr,label){
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strMonth=dtStr.substring(0,pos1)
	var strDay=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	if (pos1==-1 || pos2==-1){
		alert(label + ": The date format should be : mm/dd/yyyy")
		return false
	}
	if (strMonth.length<1 || month<1 || month>12){
		alert(label + ": Please enter a valid month")
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		alert(label + ": Please enter a valid day")
		return false
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		alert(label + ": Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		alert(label + ": Please enter a valid date")
		return false
	}
return true
}

function formatPhone(elem)
{
     var theCount = 0;
     var theString = elem.value;
     var newString = "";
     var myString = theString;
     var theLen = myString.length;
     for ( var i = 0 ; i < theLen ; i++ )
     {
     // Character codes for ints 1 - 9 are 48 - 57
          if ( (myString.charCodeAt(i) >= 48 ) && (myString.charCodeAt(i) <= 57) )
          newString = newString + myString.charAt(i);   
     }
// Now the validation to determine that the remaining string is 9 characters.
     if (newString.length == 10 )
     {
// Now the string has been stripped of other chars it can be reformatted to ###-###-#### 
          var newLen = newString.length;
          var newPhone = "";
          for ( var i = 0 ; i < newLen ; i++ )
          {
               if ( i == 2 || i == 5 )
               {
                    newPhone = newPhone + newString.charAt(i) + "-";
               }
	       else
	       {
                    newPhone = newPhone + newString.charAt(i);
               }
          }
          elem.value = newPhone;
          return true;
     }else{
          alert("The phone number you entered "+newString+" does not contian the correct number of digits");
          elem.focus();
          return false;
     }
}

function getAgentDisplay(req)
{
	var text = "";
	var xml = req.responseXML.getElementsByTagName('agentLogoId');
	if (xml.length > 0)
	{
		if (xml.item(0).firstChild.nodeValue > 0)
		{
			text += "<img border=0 src='" + context + "/servlet/image?id=" + xml.item(0).firstChild.nodeValue + "'><br>";
		}
	}
	xml = req.responseXML.getElementsByTagName('userPhotoId');
	var id  = 0;
	if (xml.length > 0)
	{
		id = xml.item(0).firstChild.nodeValue;
		text += "<img border=1 src='" + context + "/servlet/image?id=" + id + "'><br>";
	}
	xml = req.responseXML.getElementsByTagName('agentName');
	if (xml.length > 0)
	{
		text += "<b>" + xml.item(0).firstChild.nodeValue + "</b><br>";
	}
	xml = req.responseXML.getElementsByTagName('agentCompanyName');
	if (xml.length > 0)
	{
		text += "<b>" + xml.item(0).firstChild.nodeValue + "</b><br>";
	}
	xml = req.responseXML.getElementsByTagName('agentPhone');
	if (xml.length > 0)
	{
		text += "<b>" + xml.item(0).firstChild.nodeValue + "</b><br>";
	}
	xml = req.responseXML.getElementsByTagName('agentEmail');
	if (xml.length > 0)
	{
		var em = xml.item(0).firstChild.nodeValue;
		text += "<a href='mailto:" + em + "'>" + em + "</a><br>";
	}
	xml = req.responseXML.getElementsByTagName('agentContact');
	if (xml.length > 0)
	{
		var tmp = xml.item(0).firstChild.nodeValue;
		while (tmp.indexOf("\n") >= 0)
		{
			tmp = tmp.replace("\n","<br>");
		}
		if (tmp.length < 4 || tmp.substring(tmp.length-4,tmp.length) != "<br>")
		{
			tmp += "<br>";
		}
		text += tmp;
	}
	xml = req.responseXML.getElementsByTagName('agentWebSite');
	if (xml.length > 0)
	{
		text += "<a target=_ href='" + xml.item(0).firstChild.nodeValue + "'>Visit My Website</a><br>";
	}
	return text;
}

function sendNetworkInvite(to) {

	openWait();

        var req = new AjaxRequest();
        req.onError = errorHandler;
        req.url = context + "/servlet/lookup?action=sendInvite&userId=" + to;
        req.onSuccess=function()
        {
                if (req.responseXML)
                {
			var xml = req.responseXML.getElementsByTagName("error");
			if (xml.length > 0)
			{
				xml = req.responseXML.getElementsByTagName("reason");
				alert("Inviation failed: " + xml.item(0).firstChild.nodeValue);
			}
			else
			{
				alert("Invitation sent");
			}
                }
                else
                {
                        alert(req.responseText);
                }
		closeWait();
        }
        req.process();
	return false;
}

function menuMouseOver(elem) {
        if (elem.className == "navitem")
        {
                elem.className = "snavitem";
        }
}

function menuMouseOut(elem) {
        if (elem.className == "snavitem")
        {
                elem.className = "navitem";
        }
}

function getListingTable(req) {

	var id = 0;
	var text = "<table width='100%' cellpadding='0' cellspacing='0'>";
	var users = req.responseXML.getElementsByTagName("listing");
	for (var i = 0; i < users.length; i++)
	{
		id = users.item(i).getAttribute('id');

		if (i > 0)
		{
			text += "<tr><td colspan=3><hr noshade size=1></td></tr>";
		}

		var promos = users.item(i).getElementsByTagName("promo");
		if (promos.length > 0)
		{
			text += "<tr><td align='center' valign='middle' rowspan='" + (promos.length+1) + "'>";
		}
		else
		{
			text += "<tr><td align='center' valign='middle'>";
		}
		var	abbr = null;
		xml = users.item(i).getElementsByTagName("abbr");
		if (xml.length > 0)
		{
			abbr = xml.item(0).firstChild.nodeValue;
		}
		if (abbr != null)
		{
			text += "<a onClick=\"return viewListing('" + context + "','" + abbr + "');\" href='" + abbr + "'>";
		}
		xml = users.item(i).getElementsByTagName("imageId");
		if (xml.length > 0)
		{
			text += "<div style='height:75px;'><img border=1 src='" + context + "/servlet/image?type=listingPhoto&mh=75&id=" + xml.item(0).firstChild.nodeValue + "'></div>";
		}
		if (abbr != null)
		{
			text += "</a>";
		}
		text += "</td>";
		if (promos.length > 0)
		{
			for (var j = 0; j < promos.length; j++)
			{
				var ptype;
				xml = promos.item(j).getElementsByTagName("type");
				if (xml.length > 0)
				{
					ptype = xml.item(0).firstChild.nodeValue;
				}

				if (j > 0)
				{
					text += "<tr>";
				}
				text += "<td colspan='2' align='center' style='background:#FFA;font-size:10px;color:#CC0000;'>";
				xml = promos.item(j).getElementsByTagName("typeDescription");
				if (xml.length > 0)
				{
					text += xml.item(0).firstChild.nodeValue;
				}
				xml = promos.item(j).getElementsByTagName("headline");
				if (xml.length > 0)
				{
					text += " - <b>" + xml.item(0).firstChild.nodeValue + "</b>";
				}
				xml = promos.item(j).getElementsByTagName("eventTime");
				if (xml.length > 0)
				{
					text += " - " + xml.item(0).firstChild.nodeValue;
				}
				text += "</td></tr>";
			}
			text += "<tr>";
		}
		text += "<td align='center' valign='middle' style='font-size:10px;'>";
		xml = users.item(i).getElementsByTagName("price");
		if (xml.length > 0)
		{
			text += "<b>" + xml.item(0).firstChild.nodeValue + "</b><br>";
		}
		xml = users.item(i).getElementsByTagName("bedrooms");
		if (xml.length > 0)
		{
			text += xml.item(0).firstChild.nodeValue + " beds ";
		}
		xml = users.item(i).getElementsByTagName("baths");
		if (xml.length > 0)
		{
			text += xml.item(0).firstChild.nodeValue + " baths ";
		}
		text += "<br>";
		if (abbr != null)
		{
			text += "<a onClick=\"return viewListing('" + context + "','" + abbr + "');\" href='" + abbr + "'>";
		}
		xml = users.item(i).getElementsByTagName("address1");
		if (xml.length > 0)
		{
			text += xml.item(0).firstChild.nodeValue;
		}
		if (abbr != null)
		{
			text += "</a>";
		}
		text += "<br>";
		xml = users.item(i).getElementsByTagName("city");
		if (xml.length > 0)
		{
			text += xml.item(0).firstChild.nodeValue + ", ";
		}
		xml = users.item(i).getElementsByTagName("state");
		if (xml.length > 0)
		{
			text += xml.item(0).firstChild.nodeValue;
		}
		text += "<br>";
		text += "</td><td align='center' valign='middle' style='font-size:10px;'>";
		xml = users.item(i).getElementsByTagName("agentName");
		var	name = "";
		if (xml.length > 0)
		{
			name = xml.item(0).firstChild.nodeValue;
			text += "<b>" + name + "</b><br>";
		}
		xml = users.item(i).getElementsByTagName("agentCompanyName");
		if (xml.length > 0)
		{
			text += xml.item(0).firstChild.nodeValue + "<br>";
		}
		xml = users.item(i).getElementsByTagName("agentPhone");
		if (xml.length > 0)
		{
			text += xml.item(0).firstChild.nodeValue + "<br>";
		}
		xml = users.item(i).getElementsByTagName("agentEmail");
		if (xml.length > 0)
		{
			var tmp = xml.item(0).firstChild.nodeValue;
			text += "<a href='mailto:" + tmp + "'>" + tmp + "</a><br>";
		}
		xml = users.item(i).getElementsByTagName("agentAbbr");
		if (xml.length > 0)
		{
			var tmp = xml.item(0).firstChild.nodeValue;
			text += "<a onClick=\"openAgentPage('" + tmp + "');return false;\" href='" + tmp + "'>View Agent Page</a>";
		}
		text += "</td></tr>";
	}
	if (users.length == 0)
	{
		text += "<tr><td colspan=3>No listings.</td></tr>";
	}
	text += "</table>";
	return text;
}
