$(document).ready(function()
	{
		$('input.date').datePicker();
		initAdvertiseForm();
		initRegisterForm();
		$('html').addClass($.browser.name+'_'+$.browser.versionNumber);
	}
);
function initAdvertiseForm()
{
	if($('#advertiseForm select[name=type]').length) {
		$('#advertiseForm select[name=type]').change(function()
			{
				if($(this).val().indexOf('-lettings') != -1) {
					$('#advertiseForm .rental-setting').show();
					$('#advertiseForm .sale-setting').hide();
				} else {
					$('#advertiseForm .rental-setting').hide();
					$('#advertiseForm .sale-setting').show();
				}
			}
		);
		if($('#advertiseForm select[name=type]').val().indexOf('-lettings') != -1) {
			$('#advertiseForm .rental-setting').show();
			$('#advertiseForm .sale-setting').hide();
		} else {
			$('#advertiseForm .rental-setting').hide();
			$('#advertiseForm .sale-setting').show();
		}
	}
}
function initRegisterForm()
{
	if($('form#userForm select[name=type]').length) {
		$('form#userForm select[name=type]').change(function()
			{
				var value = $('form#userForm select[name=type]').val();
				if(value == 'estate') {
					$('form#userForm .type_estate').show();
					$('form#userForm .type_private').hide();
				} else if(value == 'private') {
					$('form#userForm .type_estate').hide();
					$('form#userForm .type_private').show();
				} else {
					$('form#userForm .type_estate').show();
					$('form#userForm .type_private').show();
				}
				if(value != 'estate' && ($('form#userForm :input[name=buying]:checked').val() == 1 || $('form#userForm :input[name=renting]:checked').val() == 1)) {
					$('form#userForm .propertyRequirements').show();
				} else {
					$('form#userForm .propertyRequirements').hide();
				}
			}
		);
		$('form#userForm :input[name=buying], form#userForm :input[name=renting]').change(function()
			{
				if($('form#userForm select[name=type]').val() != 'esate' && ($('form#userForm :input[name=buying]:checked').val() == 1 || $('form#userForm :input[name=renting]:checked').val() == 1)) {
					$('form#userForm .propertyRequirements').show();
				} else {
					$('form#userForm .propertyRequirements').hide();
				}
			}		
		);
		$('form#userForm select[name=type]').change();
	}
}
/**
* Search form setup function
**/
function initSearchForm(fields) {
	if(typeof fields != 'object') {
		return;
	}
	if(typeof document.formFields != 'object') {
		document.formFields = {};
	}
	for (var field in fields) {
		document.formFields[field] = fields[field];
		var fieldObj = document.getElementById(field);
		if(fieldObj) {
			fieldObj.onfocus=function() {
				if(this.value == document.formFields[this.id]) {
					this.value = '';
				}
			}
			fieldObj.onblur=function() {
				if(this.value == '') {
					this.value = document.formFields[this.id];
				}
			}
		}
	}
}
/**
* Captcha image update.
**/
function newCaptchaImage() {
	if(document.getElementById) {
		var tries = document.getElementById('captchaTries');
		if(tries.innerHTML > 0) {
			var image = document.getElementById('captchaImage');
			image.src = image.src.substring(0,image.src.lastIndexOf('captcha')+8)+randomString(32)+image.src.substring(image.src.lastIndexOf('captcha')+41)+'/';
			tries.innerHTML -= 1;
			if(tries.innerHTML < 0) {
				document.getElementById('captchaText').innerHTML = 'You have reloaded the security image too many times, please wait and try again later.';
			}
		} else {
			document.getElementById('captchaText').innerHTML = 'You have reloaded the security image too many times, please wait and try again later.';
		}
	} else {
		displayError('A new security message could not be fetched. Please submit the form or reload the page, to try another image.');
	}
}
/**
* Image switcher.
**/
function changePhoto(url)
{
	var photo = document.getElementById('largePhoto');
	if(photo) {
		photo.src = url;
	}
	return false;
}

/**
* Insert additional photo
**/
function insertAdditionalPhoto()
{
	var additionalPhoto = document.getElementById('additionalPhoto');
	if(additionalPhoto) {
		var tr = document.createElement('tr');
		var titleTD = document.createElement('td');
		var strong = document.createElement('strong');
		strong.innerHTML = 'Upload Photo';
		titleTD.appendChild(strong);
		tr.appendChild(titleTD);
		var inputTD = document.createElement('td');
		var input = document.createElement('input');
		input.type = 'file';
		input.name = 'photos[]';
		input.className = 'formText2';
		inputTD.appendChild(input);
		tr.appendChild(inputTD);
		insertBefore(additionalPhoto, tr);
		return true;
	}
	return false;
}
/**
* Property save property function, performs ajax call.
**/
function saveProperty(url, propertyID)
{
	if(url && propertyID) {
		var result = doPost(url, {'ajax' : 1, 'propertyID' : propertyID});
		if(result.toLowerCase().trim() == 'true') {
			displayMessage('Property saved successfully.');
			return true;
		} else {
			displayError(result);
			return true;
		}
	}
	return false;
}
/**
* News subscription function, peforms ajax call.
**/
function subscribe(url)
{
	if(url) {
		var form = document.getElementById('subscriptionForm');
		if(form) {
			var email = form.email.value;
			if(email) {
				var result = doPost(url, {'ajax' : 1, 'email' : email});
				if(result && result.toLowerCase().trim() == 'true') {
					var parent = form.parentNode;
					parent.removeChild(form);
					var span = document.createElement('span');
					span.innerHTML = 'Your subscription has been added to our system, thank you.';
					parent.appendChild(span);
					return true;
				} else {
					var errorTD = document.getElementById('subscriptionError');
					if(errorTD) {
						errorTD.innerHTML = result;
						errorTD.style.display = 'block';
						return true;
					}
				}
			} else {
				var errorTD = document.getElementById('subscriptionError');
				if(errorTD) {
					errorTD.innerHTML = 'Please enter a email address.';
					return true;
				}
			}
		}
	}
	return false;
}
/**
* General functions.
**/
function randomString(string_length) {
	var chars = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz';
	var randomstring = '';
	for (var i=0; i<string_length; i++) {
		var rnum = Math.floor(Math.random() * chars.length);
		randomstring += chars.substring(rnum,rnum+1);
	}
	return randomstring;
}
function clearMessage(id)
{
	var message = document.getElementById(id);
	if(message) {
		var parent = message.parentNode;
		parent.removeChild(message);
		if(!parent.hasChildren) {
			parent.parentNode.removeChild(parent);
		}
	}
}
function displayMessage(message)
{
	var messageBox = document.getElementById('messageBox');
	if(!messageBox) {
		var titleBox = document.getElementById('titleBox');
		if(!titleBox) {
			alert(message);
			return;
		}
		messageBox = document.createElement('p');
		messageBox.className ='messageBox';
		messageBox.id ='messageBox';
		insertBefore(titleBox, messageBox);
	}
	var span = document.createElement('span');
	span.id ='message_'+document.messageCount;
	span.innerHTML = message + '<br />';
	document.messageCount++;
	messageBox.appendChild(span);
	setTimeout('clearMessage("'+span.id+'")', document.messageExpire);
}

function displayError(error)
{
	var errorBox = document.getElementById('errorBox');
	if(!errorBox) {
		var messageBox = document.getElementById('messageBox');
		if(messageBox) {
			errorBox = document.createElement('p');
			errorBox.className ='errorBox';
			errorBox.id ='errorBox';
			insertBefore(messageBox, errorBox);
		} else {
			var titleBox = document.getElementById('titleBox');
			if(!titleBox) {
				alert(error);
				return;
			}
			errorBox = document.createElement('p');
			errorBox.className ='errorBox';
			errorBox.id ='errorBox';
			insertBefore(titleBox, errorBox);
		}
	}
	var span = document.createElement('span');
	span.id ='error_'+document.errorCount;
	span.innerHTML = error + '<br />';
	document.errorCount++;
	errorBox.appendChild(span);
	setTimeout('clearMessage("'+span.id+'")', document.messageExpire);
}

function insertBefore(referenceNode, node)
{
	referenceNode.parentNode.insertBefore(node, referenceNode);
}

function insertAfter(referenceNode, node)
{
	var parent = referenceNode.parentNode;
	if(referenceNode.nextSibling) {
		parent.insertBefore(node, referenceNode.nextSibling);
	} else {
		parent.appendChild(node);
	}
}
function clone(myObj)
{
	if(typeof(myObj) != 'object') {
		return myObj;
	}
	if(myObj == null) {
		return myObj;
	}

	var myNewObj = new Object();

	for(var i in myObj) {
		myNewObj[i] = clone(myObj[i]);
	}
	return myNewObj;
}
/**
* Ajax functions
**/
function doGet(url, plainText)
{
	var result = false;
	var xhr = createXHR();
	if(xhr) {
		xhr.onreadystatechange  = function()
		{ 
			if(xhr.readyState  == 4) {
				if(xhr.status  == 200) {
					if(plainText || plainText == null) {
						result = xhr.responseText;
					} else {
						result = xhr.responseXML;
					}
				} else {
					alert('HTTP Error: ' + xhr.status);
				}
			}
		}
		xhr.open('GET', url, false);
		xhr.send(null);
	}
	return result;
}

function doPost(url, post, plainText)
{
	var result = false;
	var xhr = createXHR();
	if(xhr) {
		if(typeof post == 'object') {
			post = buildQuery(post);
		}
		xhr.onreadystatechange  = function()
		{
			if(xhr.readyState  == 4) {
				if(xhr.status  == 200) {
					if(plainText || plainText == null) {
						result = xhr.responseText;
					} else {
						result = xhr.responseXML;
					}
				} else {
					alert('HTTP Error: ' + xhr.status);
				}
			}
		}
		xhr.open('POST', url, false);
		xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xhr.setRequestHeader("Content-length", post.length);
		xhr.send(post);
	}
	return result;
}

function createXHR()
{
	var request = false;
	try {
		request = new ActiveXObject('Msxml2.XMLHTTP');
	} catch (e) {
		try {
			request = new ActiveXObject('Microsoft.XMLHTTP');
		} catch (e) {
			try {
				request = new XMLHttpRequest();
			} catch (e) {
				request = false;
			}
		}
	}
	return request;
}

function buildQuery(query)
{
	var tmpQuery = '';
	for (var i in query) {
		if(tmpQuery) {
			tmpQuery += '&';
		}
		tmpQuery += encodeURI(i) + '=' + encodeURI(query[i]);
	}
	return tmpQuery;
}
/**
* String functions.
**/
String.prototype.trim = function() {
    return this.replace( /^\s+|\s+$/, '' );
}
