/* updated 20-01-2010 */

var appRoot = "/hotel/";

$(document).ready(function(){
  setUpPageFilter();
  setUpSearchPanel();
  setUpReviewSortPanel();
  setUpMapLinks();
  setColourBoxReviews();
  disableDateAutocompletes();
});


function setColourBoxReviews(){
	
	if($(".thickbox").colorbox){
		var cbwidth="785px";
		var	cbheight="910px";
		$(".thickbox").colorbox({width:cbwidth, height:cbheight, iframe:true});
	}
}


function setUpMapLinks(){
	$("div.map").show();
	if($("a.map").colorbox){
		$('a.map').colorbox({width:720, height:520, iframe:true});
	}
}

function setUpPageFilter(){
//	 $.historyInit(pageload, "jquery_history.html");
	var filterDropdowns=document.getElementsByName("sort");
	for (i=0; i<filterDropdowns.length; i++) { 
		filterDropdowns[i].onchange = function(){
			sortResults(this);
			setOtherDropDowns(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 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 setUpSearchPanel(){
	var hotelSearchPanels = $(".hotelSearch");
	var hasSuburbs=false;
	for (var i=0; i<hotelSearchPanels.length; i++) { 
		var searchPanel = hotelSearchPanels[i];
		if(i==0){
			var selects = searchPanel.getElementsByTagName("SELECT");
			for (var j=0; j<selects.length; j++) { 
				if(selects[j].name=="suburb"){
					hasSuburbs=true;
				}
			}
		}
		setSearchPanelSelects(searchPanel, hasSuburbs);
	}
}

function setSearchPanelSelects(searchPanel, hasSuburbs){
	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=="accomtype"){
			selects[i].onchange = function(){
				setOtherDropDowns(this);
			}
		}
		else if(selects[i].name=="suburb"){
			selects[i].onchange = function(){
				setOtherDropDowns(this);
			}
		}
		else if(selects[i].name=="city"){
			if(hasSuburbs){
				selects[i].onchange = function(){
					populateSuburbs(this);
				}
			}
			else{
				selects[i].onchange = function(){
					setOtherDropDowns(this);
				}
			}
		}
	}
}

function sortReviews(source){
	var sortField;
	if(source.name == "sort_market"){
		//sort field = last sort
		sortField=getSortField();
	}
	else{
		sortField=source.value;
	}
	getSortedResults(sortField);
	
}
function sortResults(source){
	var selIdx=source.selectedIndex;
	var sortField=source.options[selIdx].value;
	getSortedResults(sortField);
}
function getSortedResults(sortField){
	setSortField(sortField);
	var params= buildAjaxHotelParams();
	params += getMarketIDSort();
	getResults("sort="+sortField+params, getAjaxUrl(), "innerResults");
	setPageNumber(1, "&sort="+sortField+params);
}


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 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 getAjaxUrl(){
	//for hotel reviews
	if(document.getElementById("cityHotelReviews")){
		return "hotelReviewByLocation";
	}
	else if(document.getElementById("hotelreviews")){
		return "hotelReviews";
	}
	//for hotel search
	return "hotelresults";
}

function buildAjaxHotelParams(){

	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=="city" ||fields[i].name=="suburb" || fields[i].name=="accomtype"
			|| fields[i].name=="hotelId"))
		{
			if(fields[i].value.length>0){
				params += "&"+fields[i].name+"="+fields[i].value;
			}
		}
	} 
	var resultsPerPage = getResultsPerPage();
	if(resultsPerPage.length>0){
		params += "&resultsPerPage="+resultsPerPage;
	}
	var marketId = getMarketId();
	if(marketId.length>0){
		params += "&marketId="+marketId;
	}
	return params;
}


function getCountry(){
	var fields = document.getElementsByTagName("select");
	for (i=0; i<fields.length; i++) { 
		if(fields[i].name=="country")
		{
			return fields[i].value;
		}
	} 
	
	
	 fields = document.getElementsByTagName("input");
		for (i=0; i<fields.length; i++) { 
			if(fields[i].name=="country")
			{
				return fields[i].value;
			}
	} 
	return "";
}
function getPageNumber(){
	var pageFields=document.getElementsByName("page");
	return pageFields[0].value;
}
function getTotalPages(){
	var pageFields=document.getElementsByName("totalPages");
	if(pageFields.length>0)
		return pageFields[0].value;
	return 1;
}
function getResultsPerPage(){
	var pageFields=document.getElementsByName("resultsPerPage");
	if(pageFields && pageFields.length > 0){
		return pageFields[0].value;
	}
	return "";
}
function getSortField(){
	var sortFields=document.getElementsByName("lastsort");
	if(sortFields.length > 0){
		var sortField=sortFields[0];
		return sortField.value;
	}
	return "";
}
function getMarketId(){
	var midFields=document.getElementsByName("marketId");
	if(midFields.length > 0){
		var midField=midFields[0];
		return midField.value;
	}
	return "";
}
function populateResults(response, element){
	var e=$("#"+element);
	
	e.html(response);
	if(typeof isIe6 != 'undefined' && isIe6){
		fixPngs(document.getElementById(element));
	}
	setUpMapLinks();
	setColourBoxReviews();
	// added 20-01-2010
$('.date-pick').datePicker();
}


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= buildAjaxHotelParams();
	var sortField = getSortField();
	if(sortField.length>0){
		params += "&sort="+sortField;
	}
	params += getMarketIDSort();
	
	getResults("page="+pageNum+params, getAjaxUrl(), "innerResults");

	setPageNumber(pageNum, params);
}


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;
		}
	}
/*	$("a.morepages").attr('title', 'more pages');
	$("a.lastpage").attr('title', 'last page');
	$("a.firstpage").attr('title', 'first page');
	$("a.lowerpages").attr('title', 'previous pages');
*/	
	
}
function setSortField(sortField){
	var sortFields=document.getElementsByName("lastsort");
	for (i=0; i<sortFields.length; i++) { 
		sortFields[i].value = sortField;
	} 

}
function setPageNumber(pageNum, params){
	var pageFields=document.getElementsByName("page");
	for (i=0; i<pageFields.length; i++) { 
		pageFields[i].value = pageNum;
	} 
	
	var totalPages = getTotalPages();
	if(totalPages > 1){
		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 populateCities(source){
	var selIdx=source.selectedIndex
//	alert("populateCities "+countryid);
	if(selIdx==0){
		disableDropDowns("city");	
	}else{
		var countryid=source.options[selIdx].value;
		jQuery.get(appRoot+'ajax/hotelLocations?country='+countryid, '',
			  function(data, textStatus) {
					populateDropDown("city", data);
				}
			);
		
	}
	setOtherDropDowns(source);
	disableDropDowns("suburb");	

}

function populateSuburbs(source){
	var selIdx=source.selectedIndex
	if(selIdx==0){
		disableDropDowns("suburb");	
	}else{
		var cityid=source.options[selIdx].value;
		var country = getCountry();
		jQuery.get(appRoot+'ajax/hotelLocations?country='+country+'&city='+cityid, '',
				  function(data, textStatus) {
						populateDropDown("suburb", data);
					}
				);
	}
	setOtherDropDowns(source);
}




function populateDropDown(dropdownName, html){
	var dropDowns=$("select[name="+dropdownName+"]");
	
	dropDowns.html(html);
	dropDowns.removeAttr('disabled');
}


function disableDropDowns(dropdownName){

	var dropDowns=$("select[name="+dropdownName+"]");

	dropDowns.html("<option>All "+dropdownName+"</option>");
	dropDowns.attr('disabled', 'disabled');

}


/*Finds identically named drop downs and sets to same selected index.
 * This ensures that top and bottom panels are synchronised
 * 
 * */
function setOtherDropDowns(source){

	var dropdowns = document.getElementsByName(source.name);
	for (i=0; i<dropdowns.length; i++) { 
		if(dropdowns[i] != source){
			dropdowns[i].selectedIndex = source.selectedIndex;
		}
	}
}


/*Finds identically named drop downs and sets to same selected index.
 * This ensures that top and bottom panels are synchronised
 * 
 * */
function setOtherCheckbox(source){

	var checkboxes = document.getElementsByName(source.name);
	for (i=0; i<checkboxes.length; i++) { 
		if(checkboxes[i] != source){
			checkboxes[i].checked = source.checked;
		}
	}
}

// fix date cache issue
function disableDateAutocompletes(){

$("input.dp-applied").attr('autocomplete', 'off');

}

