// JavaScript Document

var oAjax;

function getAjaxObject()
{
	var oAjax = null;
	try { // Firefox
		oAjax = new XMLHttpRequest();
	} catch (e) { // IE
		try {
			oAjax = new ActiveXObject('Msxml2.XMLHTTP');
		} catch(e) {
			oAjax = new ActiveXObject('Microsoft.XMLHTTP');
		}
	}
	if (oAjax == null) {
		alert('Your browser is out of date and does not support AJAX. Please update to the newest version of Firefox, Safari, Opera, or Internet Explorer.');
		return false;
	}
	return oAjax;
}

String.prototype.trim = function()
{
	str = this.replace(/^\s+/, '');
	for (var i = str.length - 1; i >= 0; i--) {
		if (/\S/.test(str.charAt(i))) {
			str = str.substring(0, i + 1);
			break;
		}
	}
	return str;
}

document.getElementsByClassName = function(cl)
{
	var retnode = [];
	var myclass = new RegExp('\\b'+cl+'\\b');
	var elem = this.getElementsByTagName('*');
	for (var i = 0; i < elem.length; i++) {
		var classes = elem[i].className;
		if (myclass.test(classes))
			retnode.push(elem[i]);
	}
	return retnode;
};

var status;

function $()
{
	var elements = new Array();
	for (var i = 0; i < arguments.length; i++) {
		var element = arguments[i];
		if (typeof element == 'string')
			element = document.getElementById(element);
		if (arguments.length == 1)
			return element;
		elements.push(element);
	}
	return elements;
}

function forceNumericOnly(e, bAllowDecimal)
{
	var key;
	var keychar;
	
	if (window.event) {
		key = window.event.keyCode;
	} else if (e) {
		key = e.which;
	} else {
		return true;
	}
	keychar = String.fromCharCode(key);
	
	if (key == null || key == 0 || key == 8 || key == 9 || key == 13 || key == 27 || ("0123456789").indexOf(keychar) > -1) {
		return true;
	} else if (bAllowDecimal && keychar == '.') {
		return true;
	} else {
		return false;
	}
}

function checkPhoneNumber(s)
{
	var rePhoneNumber = /^\([1-9]\d{3}\)\s?\d{3}\-\d{4}$/;
	var rePhoneNumber2 = /^([1-9]\d{9})$/;
	var rePhoneNumber3 = /^([1-9])\d{2}\-\d{3}\-\d{4}$/;
	if (!rePhoneNumber.test(s) && !rePhoneNumber2.test(s) && !rePhoneNumber3.test(s)) {
		return false;
	}
	return true;
}

function checkEmail(s)
{
	var reEmail = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	if (!reEmail.test(s)) {
		return false;
	}
	return true;
}

function checkDate(s)
{
	var reDate = /^(\d{2})\/(\d{2})\/(\d{4})$/;
	if (!reDate.test(s)) {
		return false;
	} else {
		var iMonth = s.split('/')[0];
		var iDay = s.split('/')[1];
		var iYear = s.split('/')[2];
		var objDate = new Date(iYear, iMonth - 1, iDay);
		if ((objDate.getMonth() + 1 != iMonth) || (objDate.getDate() != iDay) || (objDate.getFullYear() != iYear)) {
			return false;
		}
	}
	return true;
}

function markError(sFieldName, sErrType)
{
	// sFieldName corresponds to sField in the validateAddTour function
	// sErrType is either "omit" (for errors of omission) or "invalid" (for errors of validity)
	$(sFieldName + '-err-' + sErrType).style['display'] = '';
	$(sFieldName + '-e').style['backgroundColor'] = '#fc9';
}

function validateLogin(oForm)
{
	var msg = '';
	if (oForm.txtUser.value.trim() == '') {
		// Email is blank
		msg += "\n - You did not supply your user ID.";
	}
	if (oForm.txtPass.value.trim() == '') {
		// Password is blank
		msg += "\n - You did not enter in your password.";
	}
	if (msg != '') {
		alert("There are one or more errors on your form:\n" + msg);
		return false;
	}
	return true;
}

function validateLoginNRDS(oForm)
{
	var msg = '';
	if (oForm.txtNRDS.value.trim() == '') {
		alert('You did not enter in your NRDS number. Please do so before submitting this form.');
		return false;
	} else if (oForm.txtNRDS.value.length < 9) {
		alert('Your NRDS number is not long enough. Enter in your 9-digit NRDS number.');
		oForm.txtNRDS.value = '';
		oForm.txtNRDS.focus();
		return false;
	}
	return true;
}

function validateRegister(oForm)
{
	var msg = '';
	if (oForm.txtUser.value.trim() == '') {
		msg += "\n - You must choose a user ID.";
	}
	if (oForm.txtPass.value.trim() == '') {
		msg += "\n - You must choose a password.";
	} else if (oForm.txtPass.value.trim() != oForm.txtPass2.value.trim()) {
		msg += "\n - Your passwords do not match. Please re-type your password both times to confirm.";
	}
	if (oForm.txtLastName.value.trim() == '') {
		msg += "\n - You must enter your last name.";
	}
	if (oForm.txtFirstName.value.trim() == '') {
		msg += "\n - You must enter your first name.";
	}
	if (oForm.txtCellPhone.value.trim() == '') {
		msg += "\n - You must enter in a cell phone number.";
	}
	if (msg != '') {
		alert("There are one or more errors on your form:\n" + msg);
		return false;
	}
	return true;
}

function validateAddTour()
{
	var aFields = new Array('address', 'list-price', 'prop-type', 'directions', 'cell-phone', 'last-name', 'first-name');
	// First, clear all error displays, which are (1) any tags of the class "error-msg" and (2) all <DD> tags, which have red BGs if error
	var aErrorMsgs = document.getElementsByClassName('error-msg');
	for (i = 0; i < aErrorMsgs.length; i++) {
		aErrorMsgs[i].style['display'] = 'none';
	}
	// Next, go through each aFields item, and validate each field
	var sValue;
	var bError = false;
	for (i = 0; i < aFields.length; i++) {
		sField = aFields[i];
		$(sField + '-e').style['backgroundColor'] = 'white';
		sValue = $(sField + '-e').value.trim();
		// Check for omission
		if (sValue == '') {
			bError = true;
			markError(sField, 'omit');
		} else {
			// Now check for validity
			switch (sField) {
				/* case 'list-price':
					// Must be between 1,000 and 1,000,000
					if (parseInt(sValue) < 1000 || parseInt(sValue) > 1000000) {
						markError(sField, 'invalid');
						bError = true;
					}
					break; */
				case 'cell-phone':
					// Must be (xxx) xxx-xxxx, with or without space
					if (!checkPhoneNumber(sValue)) {
						markError(sField, 'invalid');
						bError = true;
					}
					break;
			}
		}
	}
	if (bError) {
		window.scroll(0, 0);
		$('page_error').innerHTML = '<i>*** There are one or more errors with your form. Please read the error messages next to the invalid fields. ***</i>';
		$('page_error').style['display'] = '';
		return false;
	}
	return true;
}

function updateCalendar(sURL)
{
	oAjax = getAjaxObject();
	sURL = '_ajax_get_external_page.php?url=' + escape(sURL);
	oAjax.onreadystatechange = stateChangedUpdateCal;
	$('CalendarContents').innerHTML = '';
	oAjax.open('GET', sURL, true);
	oAjax.send(null);
}

function stateChangedUpdateCal()
{
	if (oAjax.readyState == 4) {
		sHTML = oAjax.responseText;
		sHTML = sHTML.replace(/\<a href="(.*?)"\>(.*?)\<\/a\>/gi, '<a href="updateCalendar(\'' + escape(RegExp.$1) + '\');">' + RegExp.$2 + '</a>');
		/*
		sHTML = sHTML.replace(/\<!DOCTYPE(.*?)\<\/HEAD\>/i, '');
		sHTML = sHTML.replace('</BODY></HTML>', '');
		*/
		$('CalendarContents').contentWindow.document.body.innerHTML = sHTML;
	}
}

function hideAddTourFields()
{
	$('member-info').style['display'] = 'none';
	$('tour-request-info').style['display'] = 'none';
	$('submit-button').style['display'] = 'none';
	$('not-in-db-msg').style['display'] = 'none';
}

function goToAffiliate(iAffiliateID)
{
	document.location.href = '/index.php?page=affiliates&category=' + iAffiliateID;
}

function printEmailLink(sUser, sDomain)
{
	document.write('<a href="mailto');
	document.write(':' + sUser + '@');
	document.write(sDomain + '" class=');
	document.write('"emailaddresses">');
	document.write(sUser + '@' + sDomain);
	document.write('</a>');
}

function urlDecode(sString)
{
   // Replace + with ' '
   // Replace %xx with equivalent character
   // Put [ERROR] in output if %xx is invalid.
   var HEXCHARS = "0123456789ABCDEFabcdef"; 
   var encoded = sString;
   var plaintext = "";
   var i = 0;
   while (i < encoded.length) {
       var ch = encoded.charAt(i);
	   if (ch == "+") {
	       plaintext += " ";
		   i++;
	   } else if (ch == "%") {
			if (i < (encoded.length-2) 
					&& HEXCHARS.indexOf(encoded.charAt(i+1)) != -1 
					&& HEXCHARS.indexOf(encoded.charAt(i+2)) != -1 ) {
				plaintext += unescape( encoded.substr(i,3) );
				i += 3;
			} else {
				//alert( 'Bad escape combination near ...' + encoded.substr(i) );
				plaintext += "%[ERROR]";
				i++;
			}
		} else {
		   plaintext += ch;
		   i++;
		}
	} // while
   return plaintext;
}

function mailLink(sEmailAddress)
{
	document.location.href = 'mailto:' + sEmailAddress;
}

function createBookmarkLink()
{
	title = 'Newport County Board of Realtors - Home Page';
	url = 'http://www.newportrealtor.com';
	if (window.sidebar) {
		// Mozilla Firefox Bookmark
		window.sidebar.addPanel(title, url, '');
	} else if (window.external) {
		// IE Favorite
		window.external.AddFavorite(url, title);
	} else if (window.opera && window.print) {
		// Opera Hotlist
		return true;
	}
}