var appRoot = "/hotel/";

//create an ajaxmanager named cacheQueue 

$.manageAjax.create('paginationQueue', {queue: 'clear', maxRequests: 1, preventDoubbleRequests: true, cacheResponse: true});

$(document).ready(function(){
  setUpPageFilter();
  setUpSearchPanel();
  synchSearchPanel();
  setUpReviewSortPanel();
  setUpSpecialsSort();
  setColourBoxReviews();
});


function setUpSpecialsSort(){

	var sortLinks = $("a.sortSpecials")
		for (i=0; i<sortLinks.length; i++) { 
			sortLinks[i].onclick=sortSpecials;
		
		}
		
} 

function setUpPageFilter(){
		var filterDropdowns=document.getElementsByName("sort");
		for (i=0; i<filterDropdowns.length; i++) { 
			filterDropdowns[i].onchange = function(){
				sortResults(this);
			}
		}
		
		var pageFunction =document.getElementById("pageFunction");
		if(pageFunction){
		var pageLinks = pageFunction.getElementsByTagName("a");
			for (i=0; i<pageLinks.length; i++) { 
				pageLinks[i].onclick = function(){
					paginateResults(this);
					return false;
				}
			}
		}
		
	} 


function setColourBoxReviews(){

	
	if(typeof $(".tourMap").colorbox != 'undefined'){
		$(".tourMap").colorbox();
	}
	if($(".thickbox").colorbox){
		var cbwidth="785px";
		var	cbheight="890px";
		$(".thickbox").colorbox({width:cbwidth, height:cbheight, iframe:true});
	}
	
	var reviewLinks = $(".thickbox");
	for (var i=0; i<reviewLinks.length; i++) { 
		var href=reviewLinks[i].href;
		href=href.replace("tour-reviews.jsp", "tour-review-popup.jsp");
		reviewLinks[i].href=href;
	}

	if($("a[rel='ttslides']").colorbox){
		$("a[rel='ttslides']").colorbox();
	}
	if($("a.ttvideos").colorbox){
		$("a.ttvideos").colorbox({width:"675px", height:"485px", iframe:true});
	}

}


function setUpSearchPanel(){
	var searchPanels = $("#tntSearch");
	for (var i=0; i<searchPanels.length; i++) { 
		var searchPanel = searchPanels[i];
		setSearchPanelSelects(searchPanel);
	}
}


function synchSearchPanel(){
	
	var regionParam=gup("region");
	var regionSelects = $("select[name=region]");
	var countrySelects = $("select[name=country]");
	
	if(regionSelects.length>0){
		var regionSelect=regionSelects[0];
		
		if(regionSelect.selectedIndex > 0){
			var regionid=regionSelect.options[regionSelect.selectedIndex].value;
			if(regionParam != regionid){
				populateCountries(regionSelect);
			}
			
		}
	}
	
	var countryParam=gup("country");
	var selectedCountry;
	var countrySelect;
	if(countrySelects.length>0){
		countrySelect=countrySelects[0];
		if(countrySelect.selectedIndex > 0){
			selectedCountry = countrySelect.options[countrySelect.selectedIndex].value;
			if(countryParam != selectedCountry){
				populateCities(countrySelect);
			}		
		}
	}	

}

function selectDropDown(value, dropdown){

	for(i=0;i<dropdown.length;i++)
	{
		if(dropdown.options[i].value==value)
		{
			dropdown.selectedIndex=i
		}

	}

	
}
function setSearchPanelSelects(searchPanel){
	var selects = searchPanel.getElementsByTagName("SELECT");
		
	for (i=0; i<selects.length; i++) { 
		if(selects[i].name=="country"){
			selects[i].onchange = function(){
				populateCities(this);
			}
		}
		else if(selects[i].name=="region"){
			selects[i].onchange = function(){
				populateCountries(this);
			}
					
		}

	}
	
	
	
}


function setUpReviewSortPanel(){

	var sortForms = document.getElementsByName("sortForm");
		for (i=0; i<sortForms.length; i++) { 
			var sortLinks = sortForms[i].getElementsByTagName("input");
			for (ii=0; ii<sortLinks.length; ii++) { 
				var sortlink=sortLinks[ii];
				if(sortlink.name=="sort_market"){
					sortlink.onclick = function(){
						sortReviews(this);
					}
				}
				else if(sortlink.name=="sort"){
				sortLinks[ii].onclick = function(){
					sortReviews(this);
					return false;
					}
				}
			}
		}
		
} 


function sortReviews(source){
	var sortField;
	if(source.name == "sort_market"){
		//sort field = last sort
		sortField=getSortField();
	}
	else{
		sortField=source.value;
	}
	getSortedResults(sortField);
	
}

function populateCountries(source){
		var selIdx=source.selectedIndex
		var regionid=source.options[selIdx].value;
		jQuery.get(appRoot+'ajax/ttCountryLocations?region='+regionid, '',
			  function(data, textStatus) {
					populateDropDown("country", data);
				}
			);
		
	disableDropDowns("city");	

}

function populateCities(source){
	var selIdx=source.selectedIndex;
	if(selIdx==0){
		disableDropDowns("city");	
	}else{
		var selectedid=source.options[selIdx].value;
		var fieldname=source.name;
		jQuery.get(appRoot+'ajax/ttCityLocations?'+fieldname+'='+selectedid, '',
			  function(data, textStatus) {
					populateDropDown("city", data);
				}
			);
		
	}

}


// new getResults method 23032010
function getResults(params, url, element, queueRequest){

	if (element == 'innerResults') {
		$('#' + element).css('clear', 'both');
		$('#' + element).html('<div style="text-align:center"><img src="http://www.statravel.co.uk/static/uk_division_web_live/assets/img/loading_spinner.gif" style="margin-top:30px" /></div>');
	}

	ajaxParams = {
		type: "GET",
		url: appRoot+"ajax/"+url,
		data: params,
		error: function() {
			alert("getResults: server did not respond correctly");
		},
		success: function(response) {
			populateResults(response, element);
		}
	};

	if (queueRequest) {
		$.manageAjax.add('paginationQueue', ajaxParams);
	}

	else {
		jQuery.ajax(ajaxParams);
	}
}

// end of getResults

/*

function getResults(params, url, element){
	jQuery.ajax({
		   type: "GET",
		   url: appRoot+"ajax/"+url,
		   data: params,
		   error: function() {
				alert("getResults: server did not respond correctly");
			},
		   success: function(response) {
				populateResults(response, element);
			}
	});
	
}

*/

function sortResults(source){
		var selIdx=source.selectedIndex;
		var sortField=source.options[selIdx].value;
		getSortedResults(sortField);
}

function sortSpecials(){
		var a = this.href.split("?");
		var params=a[1];
		getResults(params, "ttSpecials", "innerResults", true);
	return false;
}

function getSortedResults(sortField){
		setSortField(sortField);
		var params= buildAjaxTourParams();
		params += getMarketIDSort();
		getResults("sort="+sortField+params, getAjaxUrl(), "innerResults", true);
		setPageNumber(1, "&sort="+sortField+params);
}


function setPageNumber(pageNum, params){
	var pageFields=document.getElementsByName("page");
	for (i=0; i<pageFields.length; i++) { 
		pageFields[i].value = pageNum;
	} 
	
	var totalPages = getTotalPages();

	jQuery.ajax({
		   type: "GET",
		   url: appRoot+"hotelpagination",
		   data: "page="+pageNum+"&totalPages="+totalPages+params,
		   error: function() {
				alert("setPageNumber: server did not respond correctly");
			},
		   success: function(response) {
				updatePagination(response);
			}
	});
	
}


function updatePagination(response){
	var paginationTop = document.getElementById("pageFunction");
	if(paginationTop){
		paginationULTop = paginationTop.getElementsByTagName("ul");
		if(paginationULTop[0]){
			paginationULTop[0].innerHTML=response;
		}
	}
	
	var paginationBottom = document.getElementById("pageFunctionBottom");
	if(paginationBottom){
		var paginationULBottom = paginationBottom.getElementsByTagName("ul");
		if(paginationULBottom[0]){
			paginationULBottom[0].innerHTML=response;
		}
	}
}

function getAjaxUrl(){
	if(document.getElementById("tourreviews")){
		return "ttReviews";
	}
	return "ttSearch";
}

function buildAjaxTourParams(){

	var params = "";
	
	var locationForms = document.getElementsByName("sortForm");
	var locationForm=locationForms[0];
	
	var fields = locationForm.getElementsByTagName("input");
	for (i=0; i<fields.length; i++) { 
		if(fields[i].value.length>0 && (fields[i].name=="country" ||fields[i].name=="citystr" ||fields[i].name=="type" || fields[i].name=="duration"
			|| fields[i].name=="tourId" || fields[i].name=="provider" || fields[i].name=="budget" || fields[i].name=="region" || fields[i].name=="resultsPerPage" || fields[i].name=="marketId"))
		{
			if(fields[i].value.length>0){
				params += "&"+fields[i].name+"="+fields[i].value;
			}
		}
	} 
	
	return params;
}


function setSortField(sortField){
	var sortFields=document.getElementsByName("lastsort");
	for (i=0; i<sortFields.length; i++) { 
		sortFields[i].value = sortField;
	} 

}

function getMarketIDSort(){
	
	
	var sortCheckboxes=document.getElementsByName("sort_market");
	if(sortCheckboxes.length > 0){
		var sortCheckbox=sortCheckboxes[0];
		if(sortCheckbox.checked){
			return "&sort_market="+sortCheckbox.value;
		}
	}
	return "";

	
}

function getPageNumber(){
	var pageFields=document.getElementsByName("page");
	return pageFields[0].value;
}
function getTotalPages(){
	var pageFields=document.getElementsByName("totalPages");
	return pageFields[0].value;
}
function getResultsPerPage(){
	var pageFields=document.getElementsByName("resultsPerPage");
	if(pageFields && pageFields.length > 0){
		return pageFields[0].value;
	}
	return "";
}



function getCountry(){
	var fields = document.getElementsByTagName("select");
	for (i=0; i<fields.length; i++) { 
		if(fields[i].name=="country")
		{
			return fields[i].value;
		}
	} 
	return "";
}

function getSortField(){
	var sortFields=document.getElementsByName("lastsort");
	if(sortFields.length > 0){
		var sortField=sortFields[0];
		return sortField.value;
	}
	return "";
}

function populateResults(response, element){
	var e=$("#"+element);
	e.html(response);
	if(typeof isIe6 != 'undefined' && isIe6){
		fixPngs(document.getElementById(element));
	}
}


function paginateResults(pageLink){
	var pageNum;
	if(pageLink.className.indexOf("morepages")>-1
			|| pageLink.className.indexOf("lowerpages")>-1){
		var classes = pageLink.className.split(" ");
		pageNum=classes[1];
	}
	else if(pageLink.className == "lastpage"){
		pageNum=getTotalPages();
	}
	else if(pageLink.className == "firstpage"){
		pageNum=1;
	}
	else{
	 pageNum = pageLink.innerHTML;
	}
	var params= buildAjaxTourParams();
	var sortField = getSortField();
	if(sortField.length>0){
		params += "&sort="+sortField;
	}
	params += getMarketIDSort();
	getResults("page="+pageNum+params, getAjaxUrl(), "innerResults", true);
	setPageNumber(pageNum, params);
}


function populateDropDown(dropdownName, html){
	var dropDowns=$("select[name="+dropdownName+"]");
	
	dropDowns.html(html);
	dropDowns.removeAttr('disabled');
}


function disableDropDowns(dropdownName){

	var dropDowns=$("select[name="+dropdownName+"]");

	var alloption = dropdownName+"s";
	if(dropdownName=="city"){
		alloption="cities"
	}
	else if(dropdownName=="country"){
		alloption="countries"
	}
	
	dropDowns.html("<option>All "+alloption+"</option>");
	dropDowns.attr('disabled', 'disabled');

}


function gup( name )
{
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if( results == null )
    return "";
  else
    return results[1];
}

