// JavaScript Document

var currentsubmenu = 0;
var currentMap = false;

function listLangMenu(action){
	langMenu = document.getElementById('lang_menu');
	if(langMenu)
		if(langMenu.style.display == 'block')
			langMenu.style.display = 'none';
		else
			langMenu.style.display = 'block';
	if(action=='hide')
		langMenu.style.display = 'none';
}

function addDocClick(func) {
	var oldDocClick = document.onclick;
	if(typeof oldDocClick !== "function") 
		document.onclick = func;
	else {
		document.onclick = function () {
			oldDocClick();
			func();
		}
	}
}

function addWinOnLoad(func) {
	var oldWinOnLoad = window.onload;
	if(typeof oldWinOnLoad !== "function") 
		window.onload = func;
	else {
		window.onload = function () {
			oldWinOnLoad();
			func();
		}
	}
}

function hideMenuOnOuterClick () {
	langMenu = document.getElementById('lang_menu');
	
	if(!langMenu)
		return;
	
	listLangMenu('hide');
}

function pinMenu () {
	pinMenu = document.getElementById('pin_button');
	if (pinMenu.className.indexOf('unpin') != -1)
		pinMenu.className = 'icon pin_icon';
	else
		pinMenu.className = 'icon unpin_icon';
}


function getSubMenu ( id )
{
	if(currentsubmenu == id)
		id=0;
		
	var submenu	= document.getElementById('submenu_'+id);

	if(!submenu)
		return false;
	
	document.getElementById('submenu_'+currentsubmenu).className = 'submenu invisible';
	try{ document.getElementById('menu_item_'+currentsubmenu).className = '';}catch(e){}
	
	currentsubmenu = id;
	className = 'visible';

	if(currentsubmenu == 0)
		className = 'collapsed';
	
	document.getElementById('submenu_'+currentsubmenu).className = 'submenu '+className;
	try{ document.getElementById('menu_item_'+currentsubmenu).className = 'current_page'; }catch(e){}

	return false; 
}

function showListingPreview(id)
{
	listingTarget = document.getElementById("property_element_"+id);
	if(!listingTarget)
		return false;
	try{
		if(listingTarget.style.display !='none')
			listingTarget.style.display = 'none';
		else
			listingTarget.style.display = '';
	} catch(e){};
}

var currentLocation = 'all';

function searchSwitchLocation(val)
{
	oldLocation = document.getElementById('location-'+currentLocation);
	sourceSelect = document.getElementById("location-"+val);
	
	if(!oldLocation || !sourceSelect)	
		return;
	
	oldLocation.name = 'location-'+currentLocation;
	oldLocation.style.display = 'none';
	
	currentLocation = val;
	sourceSelect.name = 'location';
	sourceSelect.style.display = '';
}


/// some datepicker calendar functions

var current_date_picker = Array();
current_date_picker['m'] = new Date().getMonth();
current_date_picker['y'] = new Date().getFullYear();
var current_calendar = 'none';
var current_body = 'none';
var current_input = 'none';

var monthsList = Array("January","February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December");
var daysList = Array("S", "M", "T", "W", "T", "F", "S");

function getDaysInMonth(iMonth, iYear)
{
	return 32 - new Date(iYear, iMonth, 32).getDate();
}


function generateWeekdays(month, year, tInput, datesListString)
{
	var startMonth = new Date();
	startMonth.setFullYear(year, month, 1);
	
	var daysInCurrentMonth = getDaysInMonth(startMonth.getMonth(),startMonth.getFullYear());
	var wroteWeeks = 0;
	
	var computedCalendarContent = '<tr class="weekdays">';
	
	// if it is to add date into something on click 
	var addonclickcode = true;
	if(!document.getElementById(tInput))
		addonclickcode = false;
	
	
	for(i=0; i<daysList.length; i++) // create headers for weekdays
		computedCalendarContent += "<td>"+daysList[i]+"</td>";
	
	computedCalendarContent += "</tr><tr>";
	
	if(startMonth.getDay()>0)
		for(i=0; i<startMonth.getDay(); i++)
			computedCalendarContent += "<td class='no_day'>&nbsp;</td>";
	else
		wroteWeeks = -1;
	
	for(i=1; i<=daysInCurrentMonth; i++)
	{
		if((startMonth.getDay()+i-1)%7==0)
		{
			computedCalendarContent += "</tr><tr>";
			wroteWeeks ++;
		}
		// onclick attribute
		onclickA = '';
		
		cMonth =startMonth.getMonth()+1;
		if(cMonth<10)
			cMonth = "0"+cMonth;
		
		cDay =i;
		if(cDay<10)
			cDay = "0"+cDay;

		
		if(addonclickcode)
			onclickA = " onclick='document.getElementById(\""+tInput+"\").value=\""+ startMonth.getFullYear() +"-"+ cMonth +"-"+ cDay +"\"; hcc(); '";
			
		// booked day
		var booked_day = '';
		var dateToBeCompared = "("+(startMonth.getMonth()+1)+"-"+i+"-"+startMonth.getFullYear()+")";
		
		if(!datesListString)
			datesListString = '';
		
		if(datesListString != datesListString.replace(dateToBeCompared,""))
			booked_day = ' class="booked_day"';
		
		computedCalendarContent += "<td"+onclickA+booked_day+">"+i+"</td>";
	}
	
	
	if((startMonth.getDay()+daysInCurrentMonth-1)%7>0)
		for(i=0; i<6-((startMonth.getDay()+daysInCurrentMonth-1)%7); i++)
			computedCalendarContent += "<td class='no_day'>&nbsp;</td>";
	
	if(wroteWeeks<5)
	{
		computedCalendarContent += "</tr><tr>";
		for(i=0; i<7; i++)
			computedCalendarContent += "<td class='no_day'>&nbsp;</td>";
	}
	
	computedCalendarContent += "</tr>";
	return computedCalendarContent;
}

function generateCalendar(tCalendar, tInput, hide)
{
	tCalendar = document.getElementById(tCalendar);
	tBody = document.getElementById(tCalendar.id+'_tbody');
	
	if(!(tCalendar || !tBody))
		return;

	if(current_calendar != 'none' && current_calendar != tCalendar.id)
		document.getElementById(current_calendar).style.display = 'none';

	if(hide && tCalendar.style.display != 'none')
	{
		tCalendar.style.display = 'none';
		current_calendar = 'none';
		current_body = 'none';
		current_input = 'none';
		return;
	}

	tCalendar.style.display = 'block';
	current_calendar = tCalendar.id;
	current_body = tBody.id;
	current_input = tInput;

	tBody.innerHTML = generateWeekdays(current_date_picker['m'], current_date_picker['y'], current_input);
	
	var startMonth = new Date();
	startMonth.setFullYear(current_date_picker['y'], current_date_picker['m'], 1);
	
	tHead = document.getElementById(tCalendar.id+'_th');
	if(tHead)
		tHead.innerHTML = monthsList[startMonth.getMonth()]+' '+startMonth.getFullYear();

}

function hcc(){ //short for hide current calendar
	generateCalendar(current_calendar, current_input, true);
}

function calendarNextMonth()
{
	current_date_picker['m']++;
	generateCalendar(current_calendar, current_input, false);
}

function calendarPrevMonth()
{
	current_date_picker['m']--;
	generateCalendar(current_calendar, current_input, false);
}


function getDisponibilityCalendarNext(id, datesListString, direction)
{
	var workingCalendar = document.getElementById(id);
	if(!workingCalendar) return; 
	
	if(datesListString && !workingCalendar.datesListString)
		workingCalendar.datesListString = datesListString;
	
	if(!workingCalendar.currentYear){
		workingCalendar.currentYear = new Date().getFullYear();
		workingCalendar.currentMonth =  new Date().getMonth();
	}
	
	if(direction != 'prev')
		workingCalendar.currentMonth ++;
	else
		workingCalendar.currentMonth --;
	
	var startMonth = new Date();
	startMonth.setFullYear(workingCalendar.currentYear, workingCalendar.currentMonth, 1);

	workingCalendarInnerHTML = '<table border="0" cellpadding="0" cellspacing="1" class="calendar_table">';
	workingCalendarInnerHTML += '<thead><tr><th colspan="7"> ' + monthsList[startMonth.getMonth()]+' '+startMonth.getFullYear();  + ' </th> </tr></thead> ';
    workingCalendarInnerHTML += '<tbody>' + generateWeekdays(workingCalendar.currentMonth,workingCalendar.currentYear,false, workingCalendar.datesListString) + '</tbody>';
	workingCalendarInnerHTML += '</table>'

	workingCalendar.innerHTML = workingCalendarInnerHTML;
}

function getDisponibilityCalendarPrev(id, datesListString)
{
	getDisponibilityCalendarNext(id, datesListString, 'prev');
}



// IMAGE SLIDESHOW

var slideShowTimeout = -1;
var smallControllers = new Array();
var containerDivGlobal = false;
var currentImage = false;

function slideShowStart(containerDiv, startImage)
{
	target = document.getElementById(containerDiv);
	if(!target) return;
	
	containerDivGlobal = containerDiv;
	
	try{document.getElementById('property_information').style.display = 'none'; }catch(e){}
	try{clearTimeout(slideShowTimeout);}catch(e){}
	
	target.style.display = 'block';

	document.getElementById('gallery_main_picture').src = startImage;
	
	smallControllers = target.getElementsByTagName('h3')//.getElementsByTagName['a'];
	smallControllers = smallControllers[0].getElementsByTagName('a');
	
	for(i = 0; i<smallControllers.length; i++)
		if(startImage == smallControllers[i].title)
		{
			smallControllers[i].className = 'title_small_nav_selected';
			currentImage = i;
		}
		else
			if(smallControllers[i].className == 'title_small_nav_selected')
				smallControllers[i].className = 'title_small_nav';
		
	if(currentImage == 1){
		smallControllers[0].className = 'title_next_button_disabled';
		smallControllers[0].onclick = '';
	}
	else{
		smallControllers[0].className = 'title_next_button';
		smallControllers[0].onclick = function(){slideShowStart(containerDivGlobal, smallControllers[currentImage-1].title);}
	}

	if(currentImage == smallControllers.length-2){
		smallControllers[smallControllers.length-1].className = 'title_prev_button_disabled';
		smallControllers[smallControllers.length-1].onclick = '';
	}
	else{
		smallControllers[smallControllers.length-1].className = 'title_prev_button';
		smallControllers[smallControllers.length-1].onclick = function(){slideShowStart(containerDivGlobal, smallControllers[currentImage+1].title);}
	}
	
	if(smallControllers[0].className != 'title_next_button_disabled')
		slideShowTimeout = setTimeout(smallControllers[0].onclick, 3000);
	else
		slideShowTimeout = setTimeout('slideShowStart("'+containerDiv+'", "'+smallControllers[smallControllers.length-2].title+'"); ',3000)
		
}
function slideShowEnd(containerDiv, dont_destroy)
{
	clearTimeout(slideShowTimeout);
	
	if(dont_destroy)
		return;
	
	target = document.getElementById(containerDiv);
		if(!target) return;
	target.style.display = 'none';
	
	try{document.getElementById('property_information').style.display = 'block'; }catch(e){}
	
}
	

function hideUnhide(target)
{
	target = document.getElementById(target);
	if(!target) return;
	
	if(target.style.display!='block')
		target.style.display = 'block';
	else
		target.style.display = 'none';
}


function expandMap()
{
	map = document.getElementById('properties_map');
	mapencl = document.getElementById('right_panel_container');
	if(!map || !mapencl) return; 
	
	condition = map.style.width != '696px';
	
	if(condition)
	{
		map.style.width = '696px';
		mapencl.style.width = '696px'
		mapencl.style.cssFloat = 'none';
		mapencl.style.clear = 'both';
		mapencl.style.marginBottom = '10px';
		document.getElementById('properties_search_results').style.width = '698px';
	}
	else
	{
		map.style.width = ''
		mapencl.style.width = ''
		mapencl.style.cssFloat = '';
		mapencl.style.clear = '';
		mapencl.style.marginBottom = '';
		document.getElementById('properties_search_results').style.width = '418px';
	}
	try{google.maps.event.trigger(currentMap, 'resize');}catch(e){}
}

var currentQuickNav = -1;

function showQuickNav(fid)
{
	target = document.getElementById('quicknav_content_' + fid);
	if(!target) 
		return;
	
	try{ document.getElementById('quicknav_content_'+currentQuickNav).style.display = 'none'; }catch(e){} // hide current
	target.style.display = 'block';
	
	currentQuickNav = fid;
}


function loadXMLDoc(url, target, callback)
{
	target = document.getElementById(target);
	if(!target) return;
	
	if (window.XMLHttpRequest)
		xmlhttp=new XMLHttpRequest();
	else
		xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	
	xmlhttp.open("GET",url,false);
	xmlhttp.send(null);
	target.innerHTML=xmlhttp.responseText;
	if(typeof(callback) =='function')
		callback();
}

function property_hit(id, siteurl)
{
	
	if(!document.getElementById('number_of_misses')){
		nM = 'number_of_misses_'+id;
		nH = 'number_of_hits_'+id;
	}
	else{
		nM = 'number_of_misses';
		nH = 'number_of_hits';
	}
	
	loadXMLDoc(siteurl + '_hitmiss.php?id='+id+'&set_hit=1',nH);
	loadXMLDoc(siteurl + '_hitmiss.php?id='+id+'&get_miss=1',nM);
}

function property_miss(id, siteurl)
{

	if(!document.getElementById('number_of_misses')){
		nM = 'number_of_misses_'+id;
		nH = 'number_of_hits_'+id;
	}
	else{
		nM = 'number_of_misses';
		nH = 'number_of_hits';
	}
		
	loadXMLDoc(siteurl + '_hitmiss.php?id='+id+'&set_miss=1',nM);
	loadXMLDoc(siteurl + '_hitmiss.php?id='+id+'&get_hit=1',nH);
}



// currency conversion

function IsNumeric(sText){
	var ValidChars = "0123456789.";
	var IsNumber=true;
	var Char;
	
	for (i = 0; i < sText.length && IsNumber == true; i++) 
	{ 
	  Char = sText.charAt(i); 
	  if (ValidChars.indexOf(Char) == -1) 
		 IsNumber = false;
	}
	return IsNumber;
}


function convertCurrency(value, unit1, unit2, src, target)
{
	value = document.getElementById(value);
	unit1 = document.getElementById(unit1);
	unit2 = document.getElementById(unit2);
	
	src = document.getElementById(src);
	target = document.getElementById(target);
	
	if(!value || !unit1 || !unit2 || !IsNumeric(value.value) || !src || !target) return;
	currencyConversionSource = value.value + " " + unit1.options[unit1.selectedIndex].text;
	currencyConversionResult = " = " + (Math.round(value.value * unit1.value / unit2.value * 100 ) / 100) + " " + unit2.options[unit2.selectedIndex].text;
	
	src.innerHTML = currencyConversionSource;
	target.innerHTML = currencyConversionResult;
}


// image fading

var nextImage = 1;
var imageWidth = 291;
var imageHeight = 467;
var imageTimeout = 4500;


function setOpacity(el, opacity) {

	//  Which opacity method does this browser support?

	opacity /= 100;

	el.style.opacity = opacity;
	el.style.MozOpacity = opacity;
	el.style.filter = "alpha(opacity=" + (opacity*100) + ")";

}

function fadeImage(el, currentOpacity) {

	currentOpacity += 5;

	if (currentOpacity > 100) {
		setOpacity(el, 100);
		var prevEl = el.previousSibling ? el.previousSibling : el.parentNode.lastChild;
		prevEl.style.visibility = 'hidden';
		el.style.zIndex = 1;
		window.setTimeout(startFading, imageTimeout);
	}
	else {
		setOpacity(el, currentOpacity);
		window.setTimeout(function() { fadeImage(el, currentOpacity); }, 100);
	}

}


function startFading() {
	var el = document.getElementById('fading_image_container').childNodes[nextImage];

	el.style.visibility = 'visible';
	el.style.zIndex = 2;
	setOpacity(el, 0);
	fadeImage(el,0);

	nextImage = (nextImage < images.length-1) ? nextImage + 1 : 0;
}


function startFader() {
	var el = document.getElementById('fading_image_container');
	if(!el) return;
	
	while (el.firstChild) { el.removeChild(el.firstChild); }

	// el.style.width = imageWidth + 'px';
	el.style.height = imageHeight + 'px';

	for(var i=0; i<images.length; i++) {
		var t = document.createElement('IMG');
		t.setAttribute('src',images[i]);
		t.setAttribute('width',imageWidth);
		t.setAttribute('height',imageHeight);
		t.style.position = 'absolute';
		t.style.visibility = 'hidden';
		t.style.left = '-10px';
		el.appendChild(t);
	}

	el.firstChild.style.visibility = 'visible';

	window.setTimeout(startFading, imageTimeout);
}


// GOOGLE MAPS

function map_initialize(lat, long, zoomLevel, type) {
	var mapContainer = document.getElementById("properties_map");
	if(!mapContainer) return;
	
	switch (type){
		case 't': type = google.maps.MapTypeId.TERRAIN; break;
		case 'm': type = google.maps.MapTypeId.ROADMAP; break;
		default: type = google.maps.MapTypeId.HYBRID; break;
	}
	
    var myOptions = {
      zoom: zoomLevel,
      center: new google.maps.LatLng(parseFloat(lat),parseFloat(long)),
      mapTypeControl: true,
      mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
      navigationControl: true,
      navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL},
      mapTypeId: type
    }
    return new google.maps.Map(mapContainer, myOptions);
}


// add property functions
var currentSelects = [];
currentSelects['p_city'] = 0;
currentSelects['p_location'] = 0;

function prop_changeSelect(id, selectPrefix){
	var oldSelect = document.getElementById(selectPrefix);
	var newSelect = document.getElementById(selectPrefix + '-' + id);
	if(!oldSelect || !newSelect) return;
	oldSelect.name = selectPrefix +'-'+ currentSelects[selectPrefix];
	oldSelect.id = selectPrefix +'-'+ currentSelects[selectPrefix];
	oldSelect.style.display = 'none';
	
	newSelect.name = selectPrefix;
	newSelect.id = selectPrefix;
	newSelect.style.display = 'inline';
	currentSelects[selectPrefix] = id;
	
	if(selectPrefix == 'p_city')
		prop_changeSelect(newSelect.options[0].value,'p_location');
}


function updateCategorySelector(SITE_URL){
	var target = document.getElementById('category_selector');
	if(!target) return;
	
	var url = SITE_URL + "_customresponse.php?p=c|";
	if(document.getElementById('for_sale').checked) url += '1'; else url +='0';
	if(document.getElementById('for_rent').checked) url += '1'; else url +='0';
	url += "|" + document.getElementById('category').value;
	
	loadXMLDoc(url, target.id);	
	updateParamsSelector(SITE_URL);
}

function updateParamsSelector(SITE_URL){
	
	var target = document.getElementById('params_selector');
	if(!target) return;
	
	
	
	var url = SITE_URL + "_customresponse.php?p=p|";
	if(document.getElementById('for_sale').checked) url += '1'; else url +='0';
	if(document.getElementById('for_rent').checked) url += '1'; else url +='0';
	url += "|" + document.getElementById('type').value;
	url += "|" + document.getElementById('city').value;
	url += "|" + document.getElementById('location-'+document.getElementById('city').value).value;
	
	loadXMLDoc(url, target.id, function(){ currentLocation='all'; searchSwitchLocation(document.getElementById('city').value); });	
}


function updateUnitSelector(SITE_URL,p1)
{
	var target = document.getElementById('unit_selector');
	var sf = document.getElementById('size_from');
	var st = document.getElementById('size_to');
	
	if(!target || !st || !sf) return;
	
	var url = SITE_URL + "_customresponse.php?p=u|"+p1;
	
	url += "|" + sf.value;
	url += "|" + st.value;
	
	loadXMLDoc(url, target.id);	
}

addDocClick(hideMenuOnOuterClick);
addWinOnLoad(startFader);
// addWinOnLoad(function () { document.getElementById('pin_button').onclick = pinMenu });