var TAGS_WITH_CONTEXT_MENU=['a','input','textarea','button','img'];

function getMsg(msgCode)
{
 var msg="";
 if(msgHash[msgCode])
 {
  msg=msgHash[msgCode];
 }
 else
 {
  msg=msgCode;
 };
 return msg;
};
function clearElement(element)
{
 if(element)
 {
  while (element.childNodes[0]) {
    element.removeChild(element.childNodes[0]);
  };
 };
};
function addToMyFavourites(propertyId)
{
	var form=$("form");
	form.attr("method","post");
	form.attr("action","/customer/my-favourites/add/"+propertyId+"/");
	$("body").append(form);
	
	form[0].submit();
};
function removeFromMyFavourites(propertyId)
{
	var form=$("form");
	form.attr("method","post");
	form.attr("action","/customer/my-favourites/remove/"+propertyId+"/");
	$("body").append(form);
	
	form[0].submit();
};
function requestFormSendMessage()
{
	var name="";
	var email="";
	var telephone="";
	var comments="";
	var nodeRequestFormName=document.getElementById("requestFormName");
	if(nodeRequestFormName)
		name=nodeRequestFormName.value;

	var nodeRequestFormEmail=document.getElementById("requestFormEmail");
	if(nodeRequestFormEmail)
		email=nodeRequestFormEmail.value;

	var nodeRequestFormTelephone=document.getElementById("requestFormTelephone");
	if(nodeRequestFormTelephone)
		telephone=nodeRequestFormTelephone.value;

	var nodeRequestFormComments=document.getElementById("requestFormComments");
	if(nodeRequestFormComments)
		comments=nodeRequestFormComments.value;

	msgArr=Array();
	if(name.length==0)
		msgArr[msgArr.length]=getMsg("err_blank_name");

	var matches=email.match("^\\s*\\S+\\@\\S+\\s*$");
	if(matches==null)
		msgArr[msgArr.length]=getMsg("err_email_format");

	if(telephone.length==0)
		msgArr[msgArr.length]=getMsg("err_blank_telephone");

	if(msgArr.length>0){
		var str="";
		for(var i=0;i<msgArr.length;i++){
			str+=msgArr[i];
			if(i<msgArr.length-1)
				str+="\n";
		};
		alert(str);
	}else{
		$.ajax({
			type: 'POST',
			url: '/json/message/',
			data: {
				name:name,
				email:email,
				telephone:telephone,
				comments:comments
			},
			success: function(data, textStatus, jqXHR) {
				alert(getMsg("requestSendMessageOnSuccess"));
			},
			error: function(jqXHR, textStatus, errorThrown) {
				var obj = jQuery.parseJSON(jqXHR.responseText);
				alert(getMsg(obj.faultstring));
			},
			dataType: "json",
			contentType: "application/x-www-form-urlencoded; charset=UTF-8"
		});
	};
};
//------------listeners------------------
function mainMenuOnMousOver(elem)
{
 elem.className="selected";
};
function mainMenuOnMousOut(elem)
{
 elem.className="";
};
function mainMenuOnClick(elem)
{
 for(var i=0;i<elem.parentNode.childNodes.length;i++)
 {
  if(elem.parentNode.childNodes[i].nodeName.toLowerCase()=="ul")
  {
   var nodeUl=elem.parentNode.childNodes[i];
   if(nodeUl.style.display==""||nodeUl.style.display=="none") nodeUl.style.display="block";
   else nodeUl.style.display="none";
  };
 };
};
function showBigImage(node,imgSrc)
{
 var nodePropertyBigImage=document.getElementById("propertyBigImage");
 if(nodePropertyBigImage)
 {
  clearElement(nodePropertyBigImage);
  //var imgSrc=node.getAttribute("bigImage");
  if(imgSrc)
  {
   var title=node.getAttribute("alt");
   var nodeImg=document.createElement("img");
   nodeImg.setAttribute("src",imgSrc);
   nodeImg.setAttribute("alt",title);
   nodePropertyBigImage.appendChild(nodeImg);
   var nodeBr=document.createElement("br");
   nodePropertyBigImage.appendChild(nodeBr);
   var textNode=document.createTextNode(title);
   nodePropertyBigImage.appendChild(textNode);
  };
 };
};
function searchByReferenceNumber()
{
 var nodeInput=document.getElementById("referenceNumberInput");
 if(nodeInput)
 {
  var matches=(""+nodeInput.value).match("^\\d+$");
  if(matches!=null) location.href="/property/"+nodeInput.value+"/";
 };
};
function clearReferenceNumberField(interObj)
{
 if(!interObj.modified||interObj.modified=="false")
 {
  if(!interObj.titleText) interObj.titleText=interObj.value;
  interObj.value="";
  interObj.modified=true;
 };
};
function referenceNumberFieldOnBlur(interObj)
{
 if(interObj.value.length==0&&interObj.titleText)
 {
  interObj.value=interObj.titleText;
  interObj.modified=false;
 };
};
function getWmid()
{
	var wmid=null;
	var cookieArr=document.cookie.split(';');
	for(var i=0,n=cookieArr.length;i<n&&wmid==null;i++)
	{
		var pair=cookieArr[i].split('=');
		if(pair.length == 2 && pair[0] == 'wmid'){
			var tempWmid=parseInt(pair[1],10);
			if(!isNaN(tempWmid))
				wmid=tempWmid;
		};
	};
	return wmid;
};
function addWmidToMailLinks(wmid)
{
	if(wmid)
	{
		var links=document.getElementsByTagName('a');
		for(var i=0,n=links.length;i<n;i++)
		{
			var nodeA=links[i];
			var href=nodeA.getAttribute('href');
			if(href && href.substr(0,7)=='mailto:')
			{
				var strArr=href.substr(7).split('?');
				if(strArr.length==1)
				{
					var email=strArr[0];
					nodeA.setAttribute('href','mailto:'+email+'?subject='+encodeURIComponent('wmid:'+wmid));
				};
			};
		};
	};
};

//***************************************************************************************************************************************************************

$(
	function()
	{
		/*
		 * Making some areas unselectable.
		 */
		var unsel=$('.unsel');
		unsel.mousedown
		(
				function(event){
					event.preventDefault();
				}
		);
		
		$("body").bind
		(
			'contextmenu',
			function(event){
				var target=$(event.target);
				var selector=TAGS_WITH_CONTEXT_MENU.join(",");
				
				if(!target.is(selector) && target.closest(selector).length == 0){
					event.preventDefault();
					alert(locale['function_disabled']);
				}
			}
		);

		//correct e-mail from obfuscated form
		var nodeMa=document.getElementById("ma");
		if(nodeMa)
		{
			var str="";
			var href=nodeMa.getAttribute("href");
			if(href)
			{
				str=href.substring(19);
				nodeMa.setAttribute("href","mailto:"+str);
			};
			if(nodeMa.childNodes.length==1&&nodeMa.firstChild.nodeType==3)
			{
				nodeMa.firstChild.nodeValue=str;
			};
		};
		createCounters();

		$("#requestFormArrivalDate").datepicker({
			dateFormat:'dd/mm/yy',
			showOtherMonths: true,
			selectOtherMonths: true,
			changeMonth: true,
			changeYear: true
		});
		$("#requestFormDepartureDate").datepicker({
			dateFormat:'dd/mm/yy',
			showOtherMonths: true,
			selectOtherMonths: true,
			changeMonth: true,
			changeYear: true
		});

		//add webmaster id to mailto: links
		var wmid=getWmid();
		if(wmid)
			addWmidToMailLinks(wmid);

		createSearchForm();
	}
);

var msgHash=
{
"err_wrong_request":"Неверный запрос.",
"err_wrong_request_format":"Неверный формат запроса.",
"err_wrong_property_id":"Неверный идентификатор недвижимости.",
"err_db":"Ошибка базы данных.",
"err_blank_name":"Имя не введено",
"err_email_format":"Неверный формат e-mail",
"err_blank_telephone":"Номер телефона не введен",
"err_wrong_arrival_date_format":"Неверный формат даты приезда",
"err_wrong_departure_date_format":"Неверный формат даты отъезда",
"err_wrong_number_of_guests_format":"Неверный формат количества гостей",
"requestSendOnError":"Запрос недвижимости не был отправлен из-за ошибки.",
"requestSendMessageOnError":"Сообщение не было отправлено из-за ошибки.",
"err_send_mail":"Письмо не было отправлено.",
"err_parse":"Неверный отклик сервера.",
"requestSendOnSuccess":"Запрос недвижимости был успешно отправлен.",
"requestSendMessageOnSuccess":"Сообщение было успешно отправлено.",
"err_wrong_book_period":"Дата отъезда раньше даты приезда",
"err":"Ошибка"
};
function requestFormSend()
{
	var saleRent="";
	var propertyId="";
	var name="";
	var email="";
	var telephone="";
	var numberOfGuests="";
	var comments="";

	msgArr=Array();

	var nodeRequestFormSaleRent=document.getElementById("requestFormSaleRent");
	if(nodeRequestFormSaleRent)
		saleRent=nodeRequestFormSaleRent.value;
	
	if(saleRent!="SALE" && saleRent!="SHORT_RENT" && saleRent!="LONG_RENT")
		msgArr[msgArr.length]=getMsg("err");

	var nodeRequestFormPropertyId=document.getElementById("requestFormPropertyId");
	if(nodeRequestFormPropertyId)
		propertyId=nodeRequestFormPropertyId.value;
 
	var nodeRequestFormName=document.getElementById("requestFormName");
	if(nodeRequestFormName)
		name=nodeRequestFormName.value;

	var nodeRequestFormEmail=document.getElementById("requestFormEmail");
	if(nodeRequestFormEmail)
		email=nodeRequestFormEmail.value;

	var nodeRequestFormTelephone=document.getElementById("requestFormTelephone");
	if(nodeRequestFormTelephone)
		telephone=nodeRequestFormTelephone.value;

	var nodeRequestFormComments=document.getElementById("requestFormComments");
	if(nodeRequestFormComments)
		comments=nodeRequestFormComments.value;

	if(name.length==0)
		msgArr[msgArr.length]=getMsg("err_blank_name");

	var matches=email.match("^\\s*\\S+\\@\\S+\\s*$");
	if(matches==null)
		msgArr[msgArr.length]=getMsg("err_email_format");

	if(telephone.length==0)
		msgArr[msgArr.length]=getMsg("err_blank_telephone");

	var arrivalDate=null;
	var departureDate=null;
	if(saleRent=="SHORT_RENT" || saleRent=="LONG_RENT"){
		var arrivalDateObj=checkDate($("#requestFormArrivalDate").val());
		if(arrivalDateObj)
			arrivalDate=arrivalDateObj.getFullYear()+"-"+(arrivalDateObj.getMonth()+1)+"-"+arrivalDateObj.getDate();
		else
			msgArr[msgArr.length]=getMsg("err_wrong_arrival_date_format");

		var departureDateObj=checkDate($("#requestFormDepartureDate").val());
		if(departureDateObj)
			departureDate=departureDateObj.getFullYear()+"-"+(departureDateObj.getMonth()+1)+"-"+departureDateObj.getDate();
		else
			msgArr[msgArr.length]=getMsg("err_wrong_departure_date_format");
  
		numberOfGuests=$("#requestFormNumberOfGuests").val();
		matches=numberOfGuests.match("^\\s*\\d+\\s*$");
		if(matches==null)
			msgArr[msgArr.length]=getMsg("err_wrong_number_of_guests_format");
	};

	if(msgArr.length>0){
		var str="";
		for(var i=0;i<msgArr.length;i++){
			str+=msgArr[i]+".";
			if(i<msgArr.length-1)
				str+="\n";
		};
		alert(str);
	}else{
		parameters={
				saleRent:saleRent,
				propertyId:propertyId,
				name:name,
				email:email,
				telephone:telephone,
				comments:comments
		};
		var url=null;
		if(saleRent=='SHORT_RENT' || saleRent=='LONG_RENT'){
			parameters['arrivalDate']=arrivalDate;
			parameters['departureDate']=departureDate;
			parameters['numberOfGuests']=numberOfGuests;
		
			url='/json/booking-for-renting/';
		}else{
			url='/json/booking-for-buying/';
		};

		$.ajax({
			type: 'POST',
			url: url,
			data: parameters,
			success: function(data, textStatus, jqXHR) {
			    alert(getMsg("requestSendOnSuccess"));
			},
			error: function(jqXHR, textStatus, errorThrown) {
				var obj = jQuery.parseJSON(jqXHR.responseText);
				alert(getMsg(obj.faultstring));
			},
			dataType: "json",
			contentType: "application/x-www-form-urlencoded; charset=UTF-8"
		});
	};
};

function createCounters()
{
  var counter0Container=document.getElementById("counter0");
  if(counter0Container)
  {
    var nodeA=document.createElement("a");
    nodeA.setAttribute("href","http://www.liveinternet.ru/click");
    var nodeImg=document.createElement("img");
    nodeImg.setAttribute("src","http://counter.yadro.ru/hit?t21.18;r"+
	escape(document.referrer)+
	  (
	  (typeof(screen)=="undefined")?"":";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth?
screen.colorDepth:screen.pixelDepth)
	  )+";u"+escape(document.URL)+";"+Math.random());
    nodeImg.setAttribute("alt","");
    nodeImg.setAttribute("title","LiveInternet: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня");
    nodeA.appendChild(nodeImg);
    counter0Container.appendChild(nodeA);
  };
  var counter2Container=document.getElementById("counter2");
  if(counter2Container)
  {
    d=document;
    var a='';
    a+=';r='+escape(top.document.referrer);
    js=12;
    try
    {
	s=screen;
	a+=';s='+s.width+'*'+s.height;
	a+=';d='+(s.colorDepth?s.colorDepth:s.pixelDepth);
    }
    catch(e)
    {
	js=11;
    };
    try
    {
	a+=';j='+navigator.javaEnabled();
    }
    catch(e)
    {
	js=10;
    };
    nodeA=document.createElement("a");
    nodeA.setAttribute("href","http://top.mail.ru/jump?from=1398011");
    nodeImg=document.createElement("img");
    nodeImg.setAttribute("src","http://d4.c5.b5.a1.top.list.ru/counter?id=1398011;t=55;js="+js+a+";rand="+Math.random());
    nodeImg.setAttribute("alt","Рейтинг@Mail.ru");
    nodeA.appendChild(nodeImg);
    counter2Container.appendChild(nodeA);
  };
  var counter3Container=document.getElementById("counter3");
  if(counter3Container)
  {
    hotlog_js="1.2";
    hotlog_r=""+Math.random()+"&s=498264&im=116&r="+escape(document.referrer)+"&pg="+escape(window.location.href);
    document.cookie="hotlog=1; path=/"; hotlog_r+="&c="+(document.cookie?"Y":"N");
    try
    {
	hotlog_r+="&wh="+screen.width+'x'+screen.height+"&px="+
		(((navigator.appName.substring(0,3)=="Mic"))?screen.colorDepth:screen.pixelDepth);
    }
    catch(e)
    {
	hotlog_js="1.1";
    };
    try
    {
	hotlog_r+="&j="+(navigator.javaEnabled()?"Y":"N")
    }
    catch(e)
    {
	hotlog_js="1.0";
    };
    hotlog_r+="&js="+hotlog_js;
    nodeA=document.createElement("a");
    nodeA.setAttribute("href","http://click.hotlog.ru/?498264");
    nodeImg=document.createElement("img");
    nodeImg.setAttribute("src","http://hit25.hotlog.ru/cgi-bin/hotlog/count?"+hotlog_r+"&");
    nodeImg.setAttribute("alt","HotLog");
    nodeA.appendChild(nodeImg);
    counter3Container.appendChild(nodeA);
  };
};
function createSearchForm()
{
	var elemForm=$('#searchForm');
	
	if(elemForm.length == 1){
		var elemSaleRent=elemForm.find('select[name=saleRent]');
	
		elemSaleRent.change
		(
			function()
			{
				var elemForm=$('#searchForm');
	
				var saleRent=elemForm.find('select[name=saleRent]').val();
	
				var elemPropertyTypeRent=elemForm.find('select[name=propertyTypeRent]');
				if(saleRent=='SHORT_RENT' || saleRent=='LONG_RENT')
					elemPropertyTypeRent.removeClass("hidden");
				else
					elemPropertyTypeRent.addClass("hidden");
	
				var elemPropertyTypeSale=elemForm.find('select[name=propertyTypeSale]');
				if(saleRent=='SALE')
					elemPropertyTypeSale.removeClass("hidden");
				else
					elemPropertyTypeSale.addClass("hidden");
			}
		);
		elemSaleRent.removeAttr('disabled');
	
		
		var elemLocation=elemForm.find('select[name=locationDir]');
		elemLocation.change
		(
			function(event)
			{
				var target=$(event.target);
				var targetValue=target.val();
				var elemForm=$('#searchForm');
				var areaArr=elemForm.find('select[name^=area_]');
				areaArr.each(
					function(k,area){
						var elemArea=$(area);
						if(elemArea.attr("name") == "area_"+targetValue)
							elemArea.removeClass("hidden");
						else
							elemArea.addClass("hidden");
					}
				);
			}
		);
		elemLocation.removeAttr('disabled');
		
		var elemSubmit=elemForm.find('input[name=searchForm]');
		elemSubmit.click
		(
			searchFormSubmit
		);
	};
};
function searchFormSubmit()
{
	try
	{
		var elemForm=$('#searchForm');

		if(elemForm.length == 1){
			var saleRent=elemForm.find('select[name="saleRent"]').val();
	
			var path='/search/';
			var nodePropertyType=null;
			switch(saleRent)
			{
				case 'SALE':
					path+='sale/';
					nodePropertyType=elemForm.find('select[name="propertyTypeSale"]').val();
					break;
				case 'SHORT_RENT':
					path+='rent/';
					nodePropertyType=elemForm.find('select[name="propertyTypeRent"]').val();
					break;
				case 'LONG_RENT':
					path+='longtermrent/';
					nodePropertyType=elemForm.find('select[name="propertyTypeRent"]').val();
					break;
				default:
					throw new Error(locale['fillInInterestedIn']);
			};
	
			switch(parseInt(nodePropertyType,10))
			{
				case 1://villa
					path+='type/villa/';
					break;
				case 2://apartment
					path+='type/apartment/';
					break;
				case 3://maisonette
					path+='type/maisonette/';
					break;
				case 4://townhouse
					path+='type/townhouse/';
					break;
				case 5://bungalow
					path+='type/bungalow/';
					break;
				case 6://semi_detached_house
					path+='type/semidetachedhouse/';
					break;
				case 7://detached_house
					path+='type/detachedhouse/';
					break;
				case 8://detached_villa
					path+='type/detachedvilla/';
					break;
			};
	
			var nodeBedrooms=elemForm.find('select[name="bedrooms"]').val();
			if(nodeBedrooms > 0)
				path+='bedrooms/'+nodeBedrooms+'/';
	
			var nodeBathrooms=elemForm.find('select[name="bathrooms"]').val();
			if(nodeBathrooms > 0)
				path+='bathrooms/'+nodeBathrooms+'/';
	
			if(saleRent=='SHORT_RENT' || saleRent=='LONG_RENT')
			{
				var nodeSleepsmax=elemForm.find('select[name="sleepsMax"]').val();
				if(nodeSleepsmax > 0)
					path+='sleepsmax/'+nodeSleepsmax+'/';
			};
	
			var locationDir=elemForm.find('select[name="locationDir"]').val();
			if(locationDir)
			{
				path+='location/'+locationDir+'/';
				
				var areaUrlpart=elemForm.find('select[name=area_'+locationDir+']').val();
				if(areaUrlpart)
					path+='area/'+areaUrlpart+'/';
			};
		
			location.href=path;
		};
	}
	catch(e)
	{
		alert(e);
	};

	return false;
};

/**
 * Returns Date instance if dateStr is correct date in dd/MM/yyyy format.
 * Returns null otherwise.
 * @param dateStr
 * @returns
 */
function checkDate(dateStr){
	var date=null;
	
	try{
		var matches=/^(\d{1,2})\/(\d{1,2})\/(\d{4})$/.exec(dateStr);
		if(matches == null || matches.length != 4)
			throw new Error("Wrong date format.");
		
		var day=parseInt(matches[1],10);
		var month=parseInt(matches[2],10);
		var year=parseInt(matches[3],10);
		
		var tmp=new Date(year,month-1,day,0,0,0,0);
		
		if(tmp.getFullYear() != year || tmp.getMonth()+1 != month || tmp.getDate() != day)
			throw new Error("Wrong date.");
		
		date=tmp;
	}catch(e){
	}
	
	return date;
};

//***************************************************************************************************************************************************************

locale={};
locale['saleRent']='Меня интересует';
locale['fillInInterestedIn']='Заполните поле "'+locale['saleRent']+'"!';

locale['function_disabled']='Function disabled!';
