//Set backspace to being not ok by default
var backSpaceOk = false;

window.addEvent('domready', function() {
	//Check Browser
	checkBrowserCookie();

	// JavaScript Document	//PAGE VIEW NAVIGATION / SHOW+HIDE TABS
	if($('pageNav') != null){
		pageNavEls = $$('#pageNav a'); //$('pageNav').getElementsByTagName('a');
		for(i=0;i<pageNavEls.length;i++){
			if(pageNavEls[i].getAttribute('rel') != null && pageNavEls[i].getAttribute('rel').indexOf('[') != -1){
				pageNavEls[i].set('href','#');
				rel = pageNavEls[i].getAttribute('rel');
				rel = rel.split('[')[1].split(']').join('');
				pageNavEls[i].trgt = rel;
				pageNavEls[i].addEvent('click', function(e) {
					pageNavEls = $$('#pageNav a');
					for(i=0;i<pageNavEls.length;i++){
						pageNavEls[i].set('class','');
						tab = 'tab_' + pageNavEls[i].trgt;
						if($(tab) != null){
							if($(tab).getAttribute('class') == 'current'){
								$(tab).set('class', 'hidden');
								pageNavEls[i].set('class', '');
							}
							if(tab == 'tab_' + this.trgt){
								$(tab).set('class', 'current');
								this.set('class','current');
								if(this.trgt == 'location' && this.mapInit == null){
									this.mapInit = 1;
									gMapInitialize();
								}
							}
						}
					}
					return false;
				});
			}
		}
	}
	
	//Setup the search form (Visibility of sections + default values)
	if($('searchForm') != null){
		vSearchTypes = new Array('Location', 'Feature', 'SpecialRequirements', 'Themes', 'Activities', 'Sports');
		vSearchFormTypes = new Array('input', 'select');
		for(i=0;i<vSearchTypes.length;i++){
			if($('sf'+vSearchTypes[i]+'Link') != null){
				$('sf'+vSearchTypes[i]+'Link').addEvent('click', function(e){
					cname = this.get('html');
					target = this.id.split('Link').join('');
					if($(target).className.indexOf('hidden') != -1){
						$(target).removeClass('hidden');
						this.set('html', cname.replace('+', '-'));
					}else{
						$(target).addClass('hidden');
						checkBoxes = $$('#'+target+' input');
						for(i=0;i<checkBoxes.length;i++){
							//checkBoxes[i].checked = false;
							if($(checkBoxes[i].id+'_cc') != null){
								//$(checkBoxes[i].id+'_cc').className = 'customCheckBox';
							}
						}
						this.set('html', cname.replace('-', '+'));
					}
					return false;
				});
				checkBoxes = $$('#sf'+vSearchTypes[i]+' input');
				for(k=0;k<checkBoxes.length;k++){
					if( checkBoxes[k].type == 'checkbox' && checkBoxes[k].checked != false && $('sf'+vSearchTypes[i]).className.indexOf('hidden') != -1){
						$('sf'+vSearchTypes[i]).removeClass('hidden');
						$('sf'+vSearchTypes[i]+'Link').set('html', $('sf'+vSearchTypes[i]+'Link').get('html').replace('+', '-'));
					}
				}
			}
		}
		
		for(i=0;i<vSearchFormTypes.length;i++){
			formTypes = $$('#searchForm '+vSearchFormTypes[i]);
			for(j=0;j<formTypes.length;j++){
				if(formTypes[j].id != 'countrySearch'){
					formTypes[j].addEvent('change',function(){
						getResultNumber(this.form);
					});
				}else{
					formTypes[j].addEvent('change',function(){
						regionUpdate(this);
					});
				}
			}
		}
		
		$('searchByLocationLink').addEvent('click', function(){
			$('searchByLocationLink').addClass('current');
			
			$('searchByLocation').removeClass('hidden');
			$('searchByLocation').removeClass('hidden');
			
			$('searchByInterestLink').removeClass('current');
			$('searchByInterestLink').removeClass('current');
			
			$('searchByInterest').addClass('hidden');
			$('searchType').value = 1;
			if( $('interestSearch') != null ){
				$('interestSearch').selectedIndex = 0;
			}
			getResultNumber($('searchForm'));
		 });
		
		$('searchByInterestLink').addEvent('click', function(){
			$('searchByLocationLink').removeClass('current');
			$('searchByLocationLink').removeClass('current');
			
			$('searchByInterestLink').addClass('current');
			
			$('searchByInterest').removeClass('hidden');
			$('searchByInterest').removeClass('hidden');
			if( $('interestSearch') != null ){
				//$('searchByLocation').addClass('hidden');
				$('searchType').value = 2;
			}			
			getResultNumber($('searchForm'));
		});
		regionUpdate($('countrySearch'));
	}
	
	pageImgs = $$('#inner img');
	for(pi=0;pi<pageImgs.length;pi++){
		if(pageImgs[pi].src && pageImgs[pi].src.indexOf('button-') != -1){
			pageImgs[pi].addEvent('mouseenter', function(){
				this.src = this.src.split('.png').join('-ov.png');
			});
			pageImgs[pi].addEvent('mouseleave', function(){
				this.src = this.src.split('-ov.png').join('.png');
			});

		}
	}
	
	pageOkBS = $$('input','textarea');
	for(ps=0;ps<pageOkBS.length;ps++){
		pageOkBS[ps].addEvent('focus', function(e){
		   backSpaceOk = true
		});
		pageOkBS[ps].addEvent('blur', function(e){
			backSpaceOk = false;
		});
	}
	$('inner').addEvent('keydown', function(event) {
		return (backSpaceOk || event.key != 'backspace' ) ? true : false;
	});

	if( $('searchView') != null && parseInt($('searchView').value) > 0 ){
		this.mapInit = 1; 
		gMapInitialize();
	}

});

//Update the region dropdown on search form when country is changed.
function regionUpdate(srcObj){
	$('regionSearchStatus').removeClass('formStatusCross');
	$('regionSearchStatus').addClass('ajax-loading');
	var currentRegion = $('regionSearch').options[$('regionSearch').options.selectedIndex].value;
	var srcForm = srcObj.form;
	var req = new Request({ //.HTML
		url:'/index.php?class=property&action=activeregions&view=form.options&country_id=' + srcObj.options[srcObj.options.selectedIndex].value + '&tmpl=maincomponent',
		onSuccess: function(html) {
			$('regionSearch').set('html', html);
			$('regionSearch').disabled = false;
			$('regionSearchStatus').removeClass('ajax-loading');
			for(i=0;i<$('regionSearch').options.length;i++){
				if($('regionSearch').options[i].value == currentRegion){
					$('regionSearch').options.selectedIndex = i;
				}
			}
			getResultNumber(srcForm);
		},
		onFailure: function() {
			$('regionSearchStatus').removeClass('ajax-loading');
			$('regionSearchStatus').addClass('formStatusCross');
		}
	});
	req.send();
}

//Get the result number of the current search parameters and update search area
function getResultNumber(formObj){
	var log = $('searchNumberNumber').addClass('ajax-loading');
	formObj.set('send', {
		url:'/index.php?class=property&action=searchnumbers&view=ajax&tmpl=maincomponent',
		onComplete: function(response) { 
			log.removeClass('ajax-loading');
			$('searchNumberMatches').removeClass('hidden');
			matchtext = (parseInt(response) == 1) ? 'match' : 'matches';
			$('searchNumberMatches').set('html',matchtext);
			log.set('html', response);
		},
		onFailure : function(){
			log.removeClass('ajax-loading');
			$('searchNumberMatches').addClass('hidden');
			log.set('html', '');
		}
	});
	formObj.send();
}
//Hide object
function hideThis(obj){
	obj.addClass('hidden');
	return false;
}
//Show Object
function showThis(obj){
	obj.removeClass('hidden');
	return false;
}

//Switch visibility of object
function hideShowObj(obj){
	if( typeof(gMap) != 'undefined' ){
		if( gMapMarkers.length > 0){
			gMap.closeExtInfoWindow();
		}
	}
	if( obj.className.indexOf('hidden') != -1 ){
		obj.className.replace('hidden','');
		obj.removeClass('hidden');
	}else{
		obj.addClass('hidden');
	}
	return false;
}

//Submit the more results form
function listNavSubmit(num){
	$('listNavForm')['sort[start]'].value = num;
	$('listNavForm').submit();
}

//Submit the More results form via ajax
function listNavSubmitAjax(num){
	limit = parseInt($('listNavForm')['sort[limit]'].value)
	customLimit = ( parseInt($('listNavForm')['sort[customlimit]'].value) ) ? parseInt($('listNavForm')['sort[customlimit]'].value) : limit;
	$('listNavForm')['sort[start]'].value = parseInt(num) + customLimit;
	newLimit = parseInt(num) + customLimit + limit;
	setLastSearch('', newLimit );
	ajaxLoadHtml($('listNavForm'), $('ajaxListMore'+ num), '/index.php?class=property&action=display&view=search.results.ajax&tmpl=maincomponent', true, false);
}

//Update the more results form sorting parameters
function listNavOrder(obj, field, order){
	$('listNavForm')['sort[field]'].value = (field != '') ? field : $('listNavForm')['sort[field]'].value;
	$('listNavForm')['sort[direction]'].value = (order != '') ? order : $('listNavForm')['sort[direction]'].value;
	$('listNavForm')['sort[start]'].value = 0;
	orders = $$('#listNavForm a');
	for(i=0;i<orders.length;i++){
		orders[i].removeClass('current');
	}
	obj.addClass('current');
	$('listNavForm').submit();
	return false;
}

//Submit a form
function submitForm(obj){
	name = obj.name;
	value = obj.value;
	qs = updateQueryString(name,value);
	window.location.href = window.location.search.substring(0).split('?')[0] + '?' + qs;
	//obj.form.submit();
}

//Use ajax to set the current view of the search results (map / listing)
function setSearchView(view){
	var setView = new Request({
								url: '/index.php?class=property&action=setview&view='+parseInt(view)+'&tmpl=maincomponent',
								onSuccess: function(response){
									//DONE
								}
					});
	setView.send();
}

//Update a query string value
function updateQueryString(name,value){
	qSA = queryStringArray();
	qSA[name] = value;
	return queryStringBuild(qSA);
}

//Convert query string to named array
function queryStringArray() {
	queryString = window.location.search.substring(1);
	qSarray = new Object();
	if(queryString != ''){
		qSparts = queryString.split("&");

		for (i=0;i<qSparts.length;i++) {
			qSarray[qSparts[i].split("=")[0]] = qSparts[i].split("=")[1];
		}
	}
	return qSarray;
}

//Convert an named array into a query string
function queryStringBuild(qSarray){
	queryString = '';
	for(key in qSarray){
		queryString += key + '=' + qSarray[key] + '&';
	}
	return queryString.substr(0, queryString.length-1);
}

//Return the content between a given tag.
function tagContents(tag, resultXML){
	start = strpos(resultXML, ">", strpos(resultXML, "<"+tag+">",0), 0) + 1;
	return resultXML.substr(start, strpos(resultXML, "</"+tag+">",0) - start );
}

//Return position of a substring in a string
function strpos(haystack, needle, offset) {
    var i = (haystack+'').indexOf(needle, (offset || 0));
    return i === -1 ? false : i;
}

//Trim character from both ends of string 
function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}
//Trim character from left of string  
function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
//Trim character from right of string 
function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

//Show an error message (Default is missing fields)
function showMissingInfoError(message){
	if(!message){
		message= 'Please make sure all required fields are filled in correctly.';
	}
	if( $('errorBox') ){
		messageContainer = $$('#errorBox .errorMessage')[0];
		messageContainer.set('html', message);
		$('errorBox').removeClass('hidden');
	}
}

//Set a cookie for the site
function setCookie( name, value, expires, path, domain, secure ){
	var today = new Date();
	today.setTime( today.getTime() );
	expires = ( expires ) ? expires * 1000 * 60 * 60 * 24 : 1000 * 60 * 60 * 24;
	var expires_date = new Date( today.getTime() + (expires) );
	domain = (!document.domain) ? document.domain : domain;
	document.cookie = name + "=" +escape( value ) +
	( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) +
	( ( path ) ? ";path=" + path : "" ) +
	( ( domain ) ? ";domain=" + domain : "" ) +
	( ( secure ) ? ";secure" : "" );
}

function getCookie( check_name, path ) {
	var a_all_cookies = document.cookie.split( ';' );
	var a_temp_cookie = '';
	var cookie_name = '';
	var cookie_value = '';
	var b_cookie_found = false;
	for ( i = 0; i < a_all_cookies.length; i++ ){
		a_temp_cookie = a_all_cookies[i].split( '=' );
		cookie_name = a_temp_cookie[0].replace(/^\s+|\s+$/g, '');
		if ( cookie_name == check_name ){
			b_cookie_found = true;
			if ( a_temp_cookie.length > 1 ){
				cookie_value = unescape( a_temp_cookie[1].replace(/^\s+|\s+$/g, '') );
			}
			return cookie_value;
			break;
		}
		a_temp_cookie = null;
		cookie_name = '';
	}
	if ( !b_cookie_found ){
		return null;
	}
}
function deleteCookie( name, path, domain ) {
	if ( getCookie( name ) ) document.cookie = name + "=" +
	( ( path ) ? ";path=" + path : "") +
	( ( domain ) ? ";domain=" + domain : "" ) +
	";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}

//Check browser and set a cookie to prevent showing message again if an unsupported browser
function checkBrowserCookie(){
	browserCheck=getCookie('browserCheck');
	if (browserCheck!=null && browserCheck!=""){
	  //Return visitor, have been shown browser message
	}else{
		browserName = navigator.appName
		browserVersion = navigator.appVersion
		//alert(browserName + ' : '+browserVersion + ' : ' + navigator.userAgent);
		if( /Firefox[\/\s](\d+\.\d+)/.test(navigator.userAgent) ){
			browserVersion=new Number(RegExp.$1)
			showMessage = (browserVersion < 3) ? true : false;
		}
		if( /MSIE (\d+\.\d+);/.test(navigator.userAgent) ){
			browserVersion=new Number(RegExp.$1)
			showMessage = (browserVersion <= 7) ? true : false;
		}
		if (/Opera[\/\s](\d+\.\d+)/.test(navigator.userAgent)){
			browserVersion=new Number(RegExp.$1)
			showMessage = (browserVersion < 9) ? true : false;
		}
		if( /Safari[\/\s](\d+\.\d+)/.test(navigator.userAgent) ){
			browserVersion=new Number(RegExp.$1)
			showMessage = ( (browserVersion >= 3 && browserVersion < 100) || browserVersion > 450) ? false : true;
		}
		if(showMessage){
			showMissingInfoError("Please be aware that our website is optimised for modern browsers.\nShould you experience any difficulties, please update your browser to its latest version.");
		}
		browserCheck='acknowledged';
		setCookie('browserCheck',browserCheck,30, '/');
    }
}
function setLastSearch(value, limit){
	if(value && value != ''){
		lastSearch = value;
	}else{
		lastSearch = getCookie('lastSearch');
	}
	if(lastSearch!=null && lastSearch!=""){
		if(limit > 0){
			sD = lastSearch.split('&');
			lastSearch = '';
			for(si=0;si<sD.length;si++){
				kV = sD[si].split('=');
				if(kV[0] != ''){
					kval = (!kV[1] || kV[1] == '') ? '' : kV[1];
					lastSearch += (kV[0] != 'sort[limit]') ? kV[0]+'='+kval+'&' : 'sort[limit]='+limit+'&';
				}
			}
		}
		setCookie('lastSearch', lastSearch, 2, '/');
	}
}

function loadLastSearch(){
	lastSearch=getCookie('lastSearch');
	success = false;
	if (lastSearch!=null && lastSearch!=""){
		if(lastSearch.indexOf('&') != -1){
			sD = lastSearch.split('&');
			newForm = '<form name="restoreSearch" id="restoreSearch" action="/properties/" method="post">';
			for(si=0;si<sD.length;si++){
				kV = sD[si].split('=');
				if(kV[0] != ''){
					kval = (!kV[1] || kV[1] == '') ? '' : kV[1];
					newForm += '<input type="hidden" name="'+kV[0]+'" value="'+unescape(kval)+'" />';
				}
			}
			newForm += '</form>';
			//alert(newForm);
			$('errorBox').set('html',newForm);
			$('restoreSearch').submit();
			success = true;
		}
	}
	if(!success){
		document.location.href = '/properties/'; //history.go(-1);
	}
}
