var tabNames = new Array();
var currPage = 1;
var sortFunc = "";
var areaMapOpen = false;
var numRooms;
var areaMapInfoWindow = false;

function showTab(name) {
	var fbox = document.getElementById('filterbox');
	for (var tabName in tabNames) {
		var tab = document.getElementById('tab_'+tabNames[tabName]);
		var box = document.getElementById(tabNames[tabName]);
		if (name == tabNames[tabName]) {
			if (tab.className == 'filtertab') {
				tab.className = 'filtertabOpen';
				box.style.display = 'block';
				fbox.style.display = 'none';
			} else {
				tab.className = 'filtertab';
				box.style.display = 'none';
				fbox.style.display = 'block';
			}
		} else {
			tab.className = 'filtertab';
			box.style.display = 'none';
		}
	}
	if (name == "") {
		fbox.style.display = 'block';
	}
}

function selectOption(hotelcode, roomid, currroom) {
	var hotel = hotels[hotelcode];
	var rooms = hotel.rooms
	var newPrice = 0;
	var newOrigPrice = rooms[roomid].origprice;
	for (var roomnum=1;roomnum<=numRooms;roomnum++) {
		var currPrice=0;
		for (var i in rooms) {
			var priceRadio = document.getElementById('radiobox-'+hotel.id+'-'+i+'-'+roomnum);
			if (priceRadio && priceRadio.checked) {
				currPrice = parseFloat(rooms[i].price);
			}
		}
		for (var i in rooms) {
			var diff = currPrice - rooms[i].price;
			var priceRadio = document.getElementById('radiobox-'+hotel.id+'-'+i+'-'+roomnum);
			if (priceRadio && priceRadio.checked) {
				newPrice += parseFloat(rooms[i].price);
			}
			var priceBox = document.getElementById('option-'+hotel.id+'-'+i+'-'+roomnum);
			if (priceBox && roomnum==currroom) {
				if (i == roomid) {
					priceBox.className = 'left r_fli_time hotel_option';
					// priceBox.innerHTML = '<img src=\'img/icons/tick.png\' /> Selected';
					priceBox.innerHTML = '<img src=\'img/icons/tick.png\' /> '+trjs_selected;
				} else {
					priceBox.className = 'left hotel_option';
					// if (diff == 0) priceBox.innerHTML = 'Same Price';
					if (diff == 0) priceBox.innerHTML = trjs_samePrice;
					// if (diff > 0) priceBox.innerHTML = currPre+diff.toFixed(2)+currPost+' cheaper';
					if (diff > 0) priceBox.innerHTML = currPre+diff.toFixed(2)+currPost+' '+trjs_cheaper;
					// 	if (diff < 0) priceBox.innerHTML = currPre+(0-diff).toFixed(2)+currPost+' extra';
					if (diff < 0) priceBox.innerHTML = currPre+(0-diff).toFixed(2)+currPost+' '+trjs_more;
				}
			}
		}
	}
	var discounted = document.getElementById('discounted-'+hotel.id);
	if (discounted) {
		newDiscPrice = parseFloat(newOrigPrice)+parseFloat(hotel.cheapest)*numRooms;
		discounted.innerHTML = currPre+newDiscPrice.toFixed(2)+currPost;
	}

	var totalPrice = document.getElementById('totalcost-'+hotel.id);
	newPrice = parseFloat(newPrice)+parseFloat(hotel.cheapest)*numRooms;
	newPrice = newPrice;
	totalPrice.innerHTML = currPre+newPrice.toFixed(2)+currPost;
	dynamicSelectOption(hotel, newPrice);
}

function getHotelTab(hotelcode, tabnum, hotelid) {
	var opening=true;
	for(var i=1;i<=5;i++) {
		var tab = document.getElementById('tab_'+i+'_'+hotelcode);
		if (!tab) continue;
		if (i==tabnum) {
			if (tab.className == 'trow_tab') {
				tab.className = 'trow_tabopen';
			} else {
				tab.className = 'trow_tab';
				opening=false;
			}
		} else {
			tab.className = 'trow_tab';
		}
	}
	for(var i=0;i<=5;i++) {
		var win = document.getElementById('tabwin_'+i+'_'+hotelcode);
		if (i==tabnum) {
			agent.call("","ajaxGetHotelData","dataFetched",hotelcode,tabnum,hotelid);
			win.style.display = (opening?'block':'none');
		} else {
			win.style.display = 'none';
		}
	}
	if (!opening) {
		document.getElementById('tabwin_0_'+hotelcode).style.display='block';
	}
}

function openAreaMap() {
	if (areaMapOpen) return;

	var latlng = new google.maps.LatLng(-34.397, 150.644);
	var myOptions = {
		zoom: 8,
		center: latlng,
		mapTypeId: google.maps.MapTypeId.ROADMAP
	};
	var map = new google.maps.Map(document.getElementById("area-map"), myOptions);


	/*var map = new google.maps.Map2(document.getElementById("area-map"));
	map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());*/

/*	var totalLat = 0;
	var totalLon = 0;
	var countHotels = 0;
	for (var i in hotels) {
		var hotel = hotels[i];
		if (hotel.lat != 0 || hotel.lon != 0) {
			totalLat += hotel.lat;
			totalLon += hotel.lon;
			countHotels++;
		}
	}
	var midLat = totalLat / countHotels;
	var midLon = totalLon / countHotels;
	map.setCenter(new GLatLng(parseFloat(midLat), parseFloat(midLon)), 10);*/

	var bounds = new google.maps.LatLngBounds();
	for (var i in hotels) {
		var hotel = hotels[i];
		if (hotel.lat != 0 || hotel.lon != 0) {
			bounds.extend(new google.maps.LatLng(hotel.lat, hotel.lon));
		}
	}
	map.setZoom(10);
	map.fitBounds(bounds);

	var marker = false;
	for (var i in hotels) {
		var hotel=hotels[i];
		if (hotel.lat != 0 || hotel.lon != 0) {
			createMarker(map, hotel);
		}
	}

	areaMapOpen = true;
}

function specHot(hash) {
	if (document.getElementById('filt_spec').value == hash) return;
	document.getElementById('filt_spec').value = hash;
	getPage();
}

function openInfoWindow (map, hotel) {
	var text = "<div style='text-align:left;'>";
	if (hotel.image) text += "<img style='float:left;margin-right:5px;' src=\""+hotel.image+"\" />";
	text += "<span style='font-size:1.1em;'><a href=\"javascript:void(0);\" onclick=\"specHot('"+hotel.id+"');\">"+hotel.name+"</a></span><br />";
	text += "<b>Our Rating:</b> ";
	for (var i=1;i<=hotel.rating;i++) text += "<img src='img/icons/star.png' />";
	text += "<br />";
	text += hotel.location;
	text += "<div class=\"r_fli_time\">from <span class=\"bigger\">£"+hotel.cheapest+"</div>";
	text += "</div>";

	areaMapInfoWindow.setContent(text);
	areaMapInfoWindow.setPosition(new google.maps.LatLng(hotel.lat, hotel.lon));
	areaMapInfoWindow.open(map);
	specHot(hotel.id);
}

function createMarker(map, hotel) {

	areaMapInfoWindow = new google.maps.InfoWindow({ content: '' });

	var marker = new google.maps.Marker({
		position: new google.maps.LatLng(hotel.lat, hotel.lon),
		map: map,
		title: 'Hotel'
	});

	google.maps.event.addListener(marker, 'click', function() { openInfoWindow(map, hotel); } );
	return marker;
}


function dataFetched(text) {
	hotelcode = text[0];
	tabnum = text[1];
	text = text[2];
//	alert('tabwin_'+tabnum+'_'+hotelcode);
	if (!document.getElementById('tabwin_'+tabnum+'_'+hotelcode)) return;
	document.getElementById('tabwin_'+tabnum+'_'+hotelcode).innerHTML = text;

	/* Initialise the GMap */
	if (tabnum == 3) {
		var lat = document.getElementById(hotelcode+"-lat").value;
		var lon = document.getElementById(hotelcode+"-lon").value;
		var txt = document.getElementById(hotelcode+"-txt").value;
		var latlng = new google.maps.LatLng(lat, lon);
		var myOptions = {
			zoom: 8,
			center: latlng,
			mapTypeId: google.maps.MapTypeId.ROADMAP
		};
		var map = new google.maps.Map(document.getElementById(hotelcode+"-map"), myOptions);
		map.setZoom(13);
		if (txt.value != "") {
			var marker = new google.maps.Marker({
				position: latlng,
				map: map,
				title: 'Hotel'
			});

			var infowindow = new google.maps.InfoWindow({
				content: txt
			});
			google.maps.event.addListener(marker, 'click', function() { infowindow.open(map,marker); } );
		}
	}
}

function showPartHotel() {
	if (document.getElementById('parthotel').checked == true) {
		var tags = document.getElementsByName('hoteldates');
		for (var i in tags) {
			tags[i].style.display='';
		}
		document.getElementById('hotelinD').selectedIndex = document.getElementById('outboundDay').selectedIndex;
		document.getElementById('hotelinM').selectedIndex = document.getElementById('outboundMonth').selectedIndex;
		document.getElementById('hoteloutD').selectedIndex = document.getElementById('returnDay').selectedIndex;
		document.getElementById('hoteloutM').selectedIndex = document.getElementById('returnMonth').selectedIndex;
	} else {
		var tags = document.getElementsByName('hoteldates');
		for (var i in tags) {
			tags[i].style.display='none';
		}
	}
}

function updateRoomCount() {
	var r = document.getElementById('numRooms');
	var c = r.options[r.selectedIndex].value;
	for(var i=1; i<=3; i++) {
		document.getElementById('room'+i).style.display = (i<=c) ? '' : 'none' ;
	}
}

function gotoEnd() {
	currPage = maxPages;
	gotoPage(0);
}

function gotoStart() {
	currPage = 1;
	gotoPage(0);
}

function changePage(mod) {
	currPage += mod;
	var ele = document.getElementById('currpagetop');
	// ele.innerHTML = "Page "+currPage+" of "+(maxPages);
	ele.innerHTML = trjs_page+" "+currPage+" "+trjs_of+" "+(maxPages);
	ele.style.visibility = 'visible';
	var ele = document.getElementById('currpagebot');
	// // ele.innerHTML = "Page "+currPage+" of "+(maxPages);
	ele.innerHTML = trjs_page+" "+currPage+" "+trjs_of+" "+(maxPages);
	ele.style.visibility = 'visible';

	eles = document.getElementsByName('gotostart');
	if (currPage > 1) {
		for (i=0;i<eles.length;i++) {
			eles[i].style.visibility = 'visible';
		}
	} else {
		for (i=0;i<eles.length;i++) {
			eles[i].style.visibility = 'hidden';
		}
	}
	eles = document.getElementsByName('back2');
	if (currPage-2 > 0) {
		for (i=0;i<eles.length;i++) {
			eles[i].innerHTML = currPage-2;
			eles[i].style.visibility = 'visible';
		}
	} else {
		for (i=0;i<eles.length;i++) {
			eles[i].style.visibility = 'hidden';
		}
	}
	eles = document.getElementsByName('back1');
	if (currPage-1 > 0) {
		for (i=0;i<eles.length;i++) {
			eles[i].innerHTML = currPage-1;
			eles[i].style.visibility = 'visible';
		}
	} else {
		for (i=0;i<eles.length;i++) {
			eles[i].style.visibility = 'hidden';
		}
	}

	eles = document.getElementsByName('previous');
	if (currPage-1 > 0) {
		for (i=0;i<eles.length;i++) { eles[i].style.visibility = 'visible'; }
	} else {
		for (i=0;i<eles.length;i++) { eles[i].style.visibility = 'hidden'; }
	}

	eles = document.getElementsByName('forward1');
	if (currPage < maxPages) {
		for (i=0;i<eles.length;i++) {
			eles[i].innerHTML = currPage+1;
			eles[i].style.visibility = 'visible';
		}
	} else {
		for (i=0;i<eles.length;i++) {
			eles[i].style.visibility = 'hidden';
		}
	}

	eles = document.getElementsByName('next');
	if (currPage < maxPages) {
		for (i=0;i<eles.length;i++) { eles[i].style.visibility = 'visible'; }
	} else {
		for (i=0;i<eles.length;i++) { eles[i].style.visibility = 'hidden'; }
	}

	eles = document.getElementsByName('forward2');
	if (currPage+1 < maxPages) {
		for (i=0;i<eles.length;i++) {
			eles[i].innerHTML = currPage+2;
			eles[i].style.visibility = 'visible';
		}
	} else {
		for (i=0;i<eles.length;i++) {
			eles[i].style.visibility = 'hidden';
		}
	}
	eles = document.getElementsByName('gotoend');
	if (currPage < maxPages) {
		for (i=0;i<eles.length;i++) {
			eles[i].style.visibility = 'visible';
		}
	} else {
		for (i=0;i<eles.length;i++) {
			eles[i].style.visibility = 'hidden';
		}
	}
}

function gotoPage(mod) {
	changePage(mod);
	getPage();
}

function removeNameFilter() {
	document.getElementById('hotelnameinput').value = '';
	document.getElementById('removenamefilterbutton').style.display = 'none';
	doFilters();
}

function getPage() {
	filterStar = new Array();
	filterLocation = new Array();
	filterBoard = new Array();
	filterSpec = document.getElementById('filt_spec').value;
	filterSupp = new Array();
	filterTag = new Array();

	if (document.getElementById('hotelnameinput').value != "") {
		document.getElementById('removenamefilterbutton').style.display = '';
	}
	
	var i=0;
	var j=0;
	while(i>=0) {
		ele=document.getElementById('filt_star_'+i);
		if (!ele) { i=-1; continue; }
		if (ele.checked) filterStar[j++] = ele.value;
		i++;
	}

	var i=0;
	var j=0;
	while(i>=0) {
		ele=document.getElementById('filt_loca_'+i);
		if (!ele) { i=-1; continue; }
		if (ele.options[ele.selectedIndex].value) filterLocation[j++] = ele.options[ele.selectedIndex].value;
		i++;
	}

	var i=0;
	var j=0;
	while(i>=0) {
		ele=document.getElementById('filt_supp_'+i);
		if (!ele) { i=-1; continue; }
		if (ele.options[ele.selectedIndex].value) filterSupp[j++] = ele.options[ele.selectedIndex].value;
		i++;
	}

	var i=0;
	var j=0;
	while(i>=0) {
		ele=document.getElementById('filt_boar_'+i);
		if (!ele) { i=-1; continue; }
		if (ele.checked) filterBoard[j++] = ele.value;
		i++;
	}

	var i=0;
	var j=0;
	while(i>=0) {
		ele=document.getElementById('filt_tag_'+i);
		if (!ele) { i=-1; continue; }
		if (ele.checked) filterTag[j++] = ele.value;
		i++;
	}

	hideBoardCode('RO');
	hideBoardCode('SC');
	hideBoardCode('BB');
	hideBoardCode('HB');
	hideBoardCode('FB');
	hideBoardCode('AI');
	
	document.getElementById('pagecontent').style.display = 'none';
	document.getElementById('loadingpage').style.display = 'block';

	var ele = document.getElementById('sortFunc');
	if (ele.options[ele.selectedIndex].value) sortFunc = ele.options[ele.selectedIndex].value;

	agent.call('','getHotelPage','pageRetreived',requestID,currPage,perPage,sortFunc,filterStar,filterLocation,filterSupp,filterBoard,document.getElementById('hotelnameinput').value,filterSpec,filterTag);
}

function doFilters() {
//	showTab("");
	currPage = 1;
	getPage();
}

function pageRetreived(text) {
	if (document.getElementById('area-map')) { openAreaMap(); }

	var hotelCount = parseInt(text.substring(0,6));
	maxPages = Math.ceil(hotelCount / perPage);
	changePage(0);
	document.getElementById('pagecontent').innerHTML = text.substring(6);
	document.getElementById('loadingpage').style.display = 'none';
	document.getElementById('pagecontent').style.display = 'block';
	document.getElementById('numHotelsTop').innerHTML = hotelCount;
	//document.getElementById('numHotelsBot').innerHTML = hotelCount;
	if (hotelCount != 1) {
		// document.getElementById('hotelPluralTop').innerHTML = 'Hotels';
		document.getElementById('hotelPluralTop').innerHTML = trjs_hotels;
		// document.getElementById('hotelPluralBot').innerHTML = 'Hotels';
		//document.getElementById('hotelPluralBot').innerHTML = trjs_hotels;
	} else {
		// document.getElementById('hotelPluralTop').innerHTML = 'Hotel';
		document.getElementById('hotelPluralTop').innerHTML = trjs_hotel;
		// document.getElementById('hotelPluralBot').innerHTML = 'Hotel';
		//document.getElementById('hotelPluralBot').innerHTML = trjs_hotel;
	}
}

function Hotel(id, location, rating, name, cheapest, lat, lon, imageurl) {
	this.id = id;
	this.location = location;
	this.rating = rating;
	this.name = name;
	this.cheapest = cheapest;
	this.rooms = new Array();
	this.lat = lat;
	this.lon = lon;
	this.image = imageurl;
}

function Room(price, origprice, board) {
	this.price = price;
	this.origprice = origprice;
	this.board = board;
}

function unSpecifyHotel() {
	document.getElementById('filt_spec').value = '';
//	showTab("");
	currPage = 1;
	getPage();
}

function showBoardCode(clicked, code) {
	var ele = document.getElementById('hotel_boarddesc_'+code);
	pos = findPos(clicked);
	basepos = findPos(ele.parentNode);
	ele.style.position = 'absolute';
	ele.style.left = (pos[0]-basepos[0]-50)+'px';
	ele.style.top = (pos[1]-basepos[1]+120)+'px';
	ele.style.display = 'block';
}

function hideBoardCode(code) {
	var ele = document.getElementById('hotel_boarddesc_'+code);
	ele.style.display = 'none';
}

function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

function showPicture(hotelcode, id) {
	var ele = document.getElementById(hotelcode+'-fullimg');
	var ajax = document.getElementById(hotelcode+'-ajax');
	ele.style.display = "none";
	ajax.style.display = "block";
	ele.innerHTML = '<img style="border:1px solid #999;" src="hotelimg.php?size=full&id='+id+'" onload="makeVisible(\''+hotelcode+'\');" />';
}

function makeVisible(element) {
	var ele2 = document.getElementById(element+'-fullimg');
	var ajax2 = document.getElementById(element+'-ajax');
	ajax2.style.display = "none";
	ele2.style.display = "block";
}

function thumbVisible(element) {
	var ajax3 = document.getElementById(element+'-ajax');
	var ele3 = document.getElementById(element+'-img');
	var img3 = document.getElementById(element);
	ajax3.style.display='none';
	img3.style.border='1px solid #999';
	img3.style.display='inline';
	ele3.style.display='inline';
}

function showReSearch() {
	document.getElementById('researchform').style.display = 'block';
}

function sortBy(func) {
	sortFunc = func;
	getPage();
}

function sortBySelect() {
	getPage();
}

var hotels = new Array();