var map;
var markers = Array();
var doRevert = false;
var xmlhttp;

function init() {
	chRooms('bot');
	map = new google.maps.Map2(document.getElementById("mapholder"));
	map.addControl(new GSmallMapControl());
	map.addControl(new GMapTypeControl());
	map.setCenter(new GLatLng(0,0));
	realinit();
}

function realinit() {

	var bounds = new GLatLngBounds();
	for (var i in markers) {
		var marker = markers[i];
		if (marker.lat != 0 || marker.lon != 0) {
			addMarker(i, marker.lat, marker.lon, marker.type, marker.name);
			bounds.extend(new GLatLng(marker.lat, marker.lon));
		}
	}
	map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds)-1);
	map.enableContinuousZoom();
	//map.enableScrollWheelZoom();
	map.savePosition();

}

function newGMapsinit(lat,lon) {
	chRooms('bot');

    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("mapholder"),
        myOptions);

	map.addControl(new google.maps.SmallMapControl());
	map.addControl(new google.maps.TypeControl());
	map.setCenter(new google.maps.LatLng(0,0));
	var bounds = new google.maps.LatLngBounds();
	for (var i in markers) {
		var marker = markers[i];
		if (marker.lat != 0 || marker.lon != 0) {
			addMarker(i, marker.lat, marker.lon, marker.type, marker.name);
			bounds.extend(new google.maps.LatLng(marker.lat, marker.lon));
		}
	}
	map.setCenter(bounds.getCenter(), map.getBoundsZoomLevel(bounds)-1);
	map.enableContinuousZoom();
	//map.enableScrollWheelZoom();
	map.savePosition();
}

function unhoverResort() {
	doRevert=true;
	setTimeout('realunhoverResort()', 1000);
}

function realunhoverResort() {
	if (doRevert) {
		map.returnToSavedPosition();
	}
}

function hoverResort(id) {
	doRevert=false;
	var marker = markers[parseInt(id)];
	if (!marker) return;
	if (marker.lat!=0 || marker.lon!=0) {
		if (marker.type == "country") map.setZoom(5);
		else if (marker.type == "area") map.setZoom(6);
		else map.setZoom(13);
		/*map.panTo(new GLatLng(marker.lat, marker.lon));*/
		openMarker(id);
	}
}

function getIcon(type) {
	icon = new GIcon();
	icon.image = "img/hol_map/" + type + ".png";
	icon.iconSize = new GSize(32, 32);
	icon.iconAnchor = new GPoint(16, 16);
	icon.infoWindowAnchor = new GPoint(16,16);
	//icon.shadow = "images/" + images[1] + ".png";
	//icon.shadowSize = new GSize(32, 32);
	return icon;
}

function addMarker(id,lat,lon,type,text) {
	//draggable: true,
	var thismarker = new GMarker(new GLatLng(parseFloat(lat),parseFloat(lon)), {title: text, icon: getIcon(type)} );
	GEvent.addListener(thismarker, 'click', function() { openMarker(id); });
	//GEvent.addListener(thismarker, "dragend", function() { markerDragged(id, thismarker); });
	map.addOverlay(thismarker);
}

function openMarker(id) {
	map.openInfoWindowHtml(new GLatLng(markers[id].lat, markers[id].lon), '<div class="left bold r_fli_time">'+markers[id].name+'</div>' );
}

function Marker(name, type, lat, lon, dbid) {
	this.name = name;
	this.type = type;
	this.lat = lat;
	this.lon = lon;
	this.dbid = dbid;
}

function loadOffers() {
	var deppoint = document.getElementById('deppoint').options[document.getElementById('deppoint').selectedIndex].value;
	var resortid = document.getElementById('resortid').value;
	var date = document.getElementById('date').value;
	var rating = document.getElementById('rating').value;
	var board = document.getElementById('board').value;
	xmlhttp=null;
	if (window.XMLHttpRequest) {// code for all new browsers
		xmlhttp=new XMLHttpRequest();
	} else if (window.ActiveXObject) {// code for IE5 and IE6
		xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
	} if (xmlhttp!=null) {
		xmlhttp.onreadystatechange=newOffers;
		xmlhttp.open("GET","destination.php?a=getoffers&resort="+resortid+"&deppoint="+deppoint+"&date="+date+"&rating="+rating+"&board="+board,true);
		xmlhttp.send(null);
		document.getElementById('holoffersoverlay').style.display='block';
	} else {
		alert("Your browser does not support XMLHTTP.");
	}
}

function newOffers() {
	if (xmlhttp.readyState==4) {// 4 = "loaded"
		if (xmlhttp.status==200) {// 200 = OK
			document.getElementById('holoffersoverlay').style.display='none';
			document.getElementById('holoffers').innerHTML = xmlhttp.responseText;
		}
	}
	map.checkResize();
}

function selD(t) {
	document.getElementById('date').value=t;
	loadOffers();
}

function clearReqs() {
	document.getElementById('deppoint').selectedIndex=0;
	if(document.getElementById('rating')){
	  document.getElementById('rating').selectedIndex=0;}
	if(document.getElementById('board')){
	  document.getElementById('board').selectedIndex=0;}
	selD(0);
	loadOffers();
}
function chOther() {
	hideSB();
	loadOffers();
}
function chRooms(prefix) {
  if(!document.getElementById(prefix+'numrooms')) return;
	var n = document.getElementById(prefix+'numrooms');
	var r = n.options[n.selectedIndex].value;

	document.getElementById('topnumrooms').selectedIndex = n.selectedIndex;
	document.getElementById('botnumrooms').selectedIndex = n.selectedIndex;
	for(var i=1; i<=3; i++) {
		if (i<=r) d='block'; else d='none';
		document.getElementById('toproom'+i).style.display = d;
		document.getElementById('botroom'+i).style.display = d;
	}
}
function chSelect(prefix,id) {
	var n = document.getElementById(prefix+id);
	document.getElementById('top'+id).selectedIndex = n.selectedIndex;
	document.getElementById('bot'+id).selectedIndex = n.selectedIndex;
}
function chText(prefix,id) {
	var n = document.getElementById(prefix+id);
	document.getElementById('top'+id).value = n.value;
	document.getElementById('bot'+id).value = n.value;
}
function chDepPont() {
	var d = document.getElementById('deppoint').options[document.getElementById('deppoint').selectedIndex];
	//if (d.value.length==3) document.getElementById('iatafrom').value = d.text+" ("+d.value+")";
	loadOffers();
}
function SB(from,to,day,mon,nts) {
	for(i=0;i<document.getElementById('topiatafrom').length;i++) { 
		if(document.getElementById('topiatafrom').options[i].text == from) {
			document.getElementById('topiatafrom').selectedIndex = i;
			document.getElementById('botiatafrom').selectedIndex = i;
		}
	}
	if (document.getElementById('deppoint').selectedIndex == 0) {
		document.getElementById('depwarn').style.display='block';
	} else {
		document.getElementById('depwarn').style.display='none';
	}
	document.getElementById('topiatato').value = to;
	document.getElementById('botiatato').value = to;
	document.getElementById('topdepday').selectedIndex = day-1;
	document.getElementById('botdepday').selectedIndex = day-1;
	var m = document.getElementById('topdepmonth');
	for(var i=0;i<m.options.length;i++) if (m.options[i].value==mon) m.selectedIndex = i;
	var m = document.getElementById('botdepmonth');
	for(var i=0;i<m.options.length;i++) if (m.options[i].value==mon) m.selectedIndex = i;
	if(document.getElementById('topnumnights')){
	  document.getElementById('topnumnights').value = nts;}
	if(document.getElementById('botnumnights')){
	  document.getElementById('botnumnights').value = nts;}

	showSB();
}

function showSB() {
	document.getElementById('holoffers').style.display='none';
	document.getElementById('searchform').style.display='block';
}
function hideSB() {
	document.getElementById('holoffers').style.display='block';
	document.getElementById('searchform').style.display='none';
}

var airportOptions = {
	script: 'ajax.php?a=iatalookup&b=a&',
	varname: 'input',
	minchars: 3,
	cache: false,
	timeout: 4000,
	json: true
};

var resortOptions = {
	script: 'ajax.php?a=iatalookup&b=h&showairportcodes=1&',
	varname: 'input',
	minchars: 3,
	cache: false,
	timeout: 4000,
	json: true
};
	
function instantiateAutoSuggest() {
	var asFrom = new AutoSuggest('topiatafrom', airportOptions);
	var asFrom = new AutoSuggest('botiatafrom', airportOptions);
	var asTo = new AutoSuggest('topiatato', resortOptions);
	var asTo = new AutoSuggest('botiatato', resortOptions);
}
