/*
 * Copyright (c) 2008 NextGenCreation.
 * All rights reserved.
 * 
 * You may not copy or reproduce any part of this file.
 */

String.prototype.trim = function()
{
	var str = this.replace(new RegExp("^[ \t\r\n]*", "gi"), "");
	return str.replace(new RegExp("[ \t\r\n]*$", "gi"), "");
}

String.prototype.convertToNode = function()
{
	var div = document.createElement("div");
	div.innerHTML = this;
	return div.firstChild;
}

var addEvent = function(obj, eventName, func)
{
	if(obj.attachEvent)
		obj.attachEvent("on"+eventName, func);
	else
		obj.addEventListener(eventName, func, false);
}

var removeEvent = function(obj, eventName, func)
{
	if(obj.detachEvent)
		obj.detachEvent("on"+eventName, func);
	else
		obj.removeEventListener(eventName, func, false);
}

function addData(data, name, value)
{
	if(value == "") return data;
	if(data != "") data += "&";
	data += name+"="+encodeURIComponent(value);
	return data;
}

function sendData(page, data, func)
{
	var xhr_object = null; 
 
	if(window.XMLHttpRequest) // Firefox 
		xhr_object = new XMLHttpRequest(); 
	else if(window.ActiveXObject) // Internet Explorer 
		xhr_object = new ActiveXObject("Microsoft.XMLHTTP"); 
	else
		return;
		

	xhr_object.open("POST", page, true);

	if(func) xhr_object.onreadystatechange = function()
	{ 
		if(xhr_object.readyState == 4)
		{ 
			func(xhr_object.responseText);
		}
	};
	
	xhr_object.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
	xhr_object.send(data);
}

function getValue(id)
{
	if(document.getElementById(id) == null)
	{
		var o = document.getElementsByName(id);
		for(var i=0; i<o.length; i++)
		{
			if(o[i].checked) return o[i].value.trim();
		}
		return "";
	}
	return document.getElementById(id).value.trim();
}

function toggleOptions()
{
	var o = document.getElementById("more_options");
	var p = document.getElementById("less_options");
	if(o.style.display != "block")
	{
		o.style.display = "block";
		p.style.display = "none";
	}
	else
	{
		o.style.display = "none";
		p.style.display = "block";
	}
}

document.getElementById("more_options").style.display = "none";
document.getElementById("more_options").getElementsByTagName("a")[0].style.display = "inline";
document.getElementById("less_options").style.display = "block";

function NumericField(id)
{
	var o = document.getElementById(id);
	addEvent(o, "keyup", function()
	{
		o.value = assertReg("[^0-9]", o.value);
	});
	
}

function assertReg(reg, value)
{
	return value.replace(new RegExp(reg, "gi"), "");
}

var ferror;
function fieldError(id)
{
	if(document.getElementById("error_msg"))
	{
		fieldUnError(id);
		setTimeout(function(){fieldError(id);}, 250);
		return;
	}
		
	ferror = document.getElementById(id);
	ferror.style.backgroundColor = "#fba";
	ferror.style.border = "solid 1px #c00";
	ferror.style.padding = "1px";
	ferror.focus();
	
	var span = document.createElement("span");
	span.id = "error_msg";
	span.style.color = "#c00";
	span.innerHTML = error[id];
	
	ferror.parentNode.appendChild(span);
	
	
	setTimeout(function()
	{
		addEvent(ferror, "keyup", fieldUnError);
	}, 500);
}

function fieldUnError(id)
{
	ferror.parentNode.removeChild(document.getElementById("error_msg"));
	ferror.removeAttribute("style");
	removeEvent(ferror, "keyup", fieldUnError);
}

NumericField("tel");
NumericField("mobile");
NumericField("zipcode");
NumericField("min_field");
NumericField("max_field");
NumericField("min_inhabitable");
NumericField("max_inhabitable");
NumericField("budget");

function sendMail(e)
{
	if(e.preventDefault) e.preventDefault();
	else e.returnValue = false;
	
	var err = document.getElementById("send_error");
	if(err) err.parentNode.removeChild(err);
	
	var reg = new RegExp("^[a-z0-9][-a-z0-9_\.]*@[-a-z0-9_]+\.[a-z]{2,4}" ,"gi");
	
	var name	= getValue("name");
	if (name.length == 0) { fieldError("name"); return; }
	var forname	= getValue("forname");
	if (forname.length == 0) { fieldError("forname"); return; }
	var mail	= getValue("mail");
	if (mail.length != 0 && !reg.test(mail)) { fieldError("mail"); return; }

	var data = "";
	var arr = ["lang", "name", "forname", "adress", "zipcode", "tel", "mobile", "mail",
	"country", "region", "type_of_property", "min_field", "max_field", "min_inhabitable",
	"max_inhabitable", "number_of_rooms", "budget", "message"];
	
	for(var i=0; i<arr.length; i++)
	{
		data = addData(data, arr[i], getValue(arr[i]));
	}
	
	for(var i=1; i<=4; i++)
	{
		var o = null;
		for(var j=0; (o = document.getElementById("options"+i+j)) != null; j++)
		{
			if(o.checked)
			data = addData(data, "options"+i+j, o.value);
		}
	}
	
	document.getElementById("send").disabled = "disabled";
	
	sendData("../functions/sendsearch.php5", data, sended);
}

function sended(ret)
{
	document.getElementById("send").removeAttribute("disabled");
	var form = document.getElementById("search");
	var chk = "<p class=\"succes\">";
	if(ret.substr(0, chk.length) == chk)
	{
		form.parentNode.replaceChild(ret.convertToNode(), form);
	}
	else
	{
		var err = ret.convertToNode();
		err.id = "send_error";
		form.parentNode.insertBefore(err, form);
	}
}

addEvent(document.getElementById("search"), "submit", sendMail);

