var mapservice;
var locale = null;
var jtk = new JoookToolkit();

function adminGeocode(){
	var address = document.getElementById("street_address").getElementsByTagName("div")[0].innerHTML + ", " + document.getElementById("post_office").getElementsByTagName("div")[0].innerHTML;
	var geocoder = new GClientGeocoder();
	
	alert(address);
	
	geocoder.getLocations(address, fillGeocodeSlot);
}

function fillGeocodeSlot(response){
	if (!response || response.Status.code != 200){
		alert("Can't geocode!");
	}
	else{
		place = response.Placemark[0];
		document.getElementById("geocode").getElementsByTagName("div")[0].innerHTML = "lat : " + place.Point.coordinates[1] + ", lng : " + place.Point.coordinates[0];
	}
}




function initMap(useDI){
	if(document.getElementById('geocode').innerHTML != ''){		
		var hotelCoords = eval("({" + document.getElementById('geocode').innerHTML + "})");
		var hotelPoint = new GLatLng(hotelCoords.lat, hotelCoords.lng);
		
		mapservice = new MapService('mapView');
		if(locale == null){
			locale = "fi_FI";
		}
		mapservice.setLocale(locale);
		mapservice.init();
		mapservice.showControls();
		
		
		if(useDI == true){
			var address = document.getElementById("street_address").innerHTML + ", " + document.getElementById("post_office").innerHTML;
			mapservice.getDirections(document.getElementById("diFrom").value, address, "directions");
		}
		else{
			mapservice.gotoPos(hotelPoint, true);
		}
		mapservice.mapObject.setZoom(15);
	}
}


function mapView(geoCode, emtId, showDIQuery){
	var position = findPos(document.getElementById("maplinks"));
	document.getElementById(emtId).style.left = (position[0] - 180) + "px";
	document.getElementById(emtId).style.top = (position[0] - 300) + "px";
	document.getElementById(emtId).style.display = "block";
	
	if(showDIQuery == true){
		document.getElementById(emtId).getElementsByTagName("form")[0].style.display = "block";
	}
	
	initMap(false);
}

function updateDI(){
	if(document.getElementById("diFrom").value != ''){
		document.getElementById("diTo").value = document.getElementById("street_address").innerHTML + ", " + document.getElementById("post_office").innerHTML;
		document.getElementById("diHotel").value = document.getElementById("content_head").innerHTML;
		return true;
	}
	else{
		return false;	
	}
}

function closeMap(emtId){
	document.getElementById(emtId).style.display = "none";
}

var dirObj = {};

function printMap(){
	var inputValue = document.getElementById("diFrom").value;
	var address = document.getElementById("street_address").innerHTML + ", " + document.getElementById("post_office").innerHTML;
	
	dirObj = {
		from:	urlEncode(inputValue),
		to:		urlEncode(address),
		hotel:	urlEncode(document.getElementById("content_head").innerHTML),
		locale:	mapservice.locale
	}
	
	var geocoder = new GClientGeocoder();
	
	geocoder.getLocations(inputValue, openPrintMap);
	//var newWin = window.open("/stc/cumulus/jsp/maps.jsp?from=" + urlEncode(inputValue) + "&to=" + urlEncode(address) + "&hotel=" + urlEncode(document.getElementById("content_head").innerHTML) + "&locale=" + mapservice.locale);
}

function openPrintMap(response){
	if (!response || response.Status.code != 200){
		alert("Can't geocode!");
	}
	else{
		var place = response.Placemark[0];
		if(place.Point)
			var newWin = window.open("/stc/cumulus/jsp/maps.jsp?from=" + dirObj.from + "&to=" + dirObj.to + "&hotel=" + dirObj.hotel + "&locale=" + dirObj.locale + "&coords=" + place.Point.coordinates[1] + "," + place.Point.coordinates[0]);
		else
			alert(getGeocoderError(dirObj.locale));
	}
}


function getGeocoderError(locale){
	var errors = {
		fi_FI: "Antamaasi osoitetta ei löydy.",
		en_GB: "Address could not be found.",
		defaultValue: this.en_GB
	}
	
	if(typeof(errors[locale]) == 'string')
		return errors[locale];
	else
		return errors["defaultValue"];
}










// URL encode strings
function urlEncode(clearString) {
/*  var output = '';
  var x = 0;
  clearString = clearString.toString();
  var regex = /(^[a-zA-Z0-9_.]*)/;
  while (x < clearString.length) {
    var match = regex.exec(clearString.substr(x));
    if (match != null && match.length > 1 && match[1] != '') {
    	output += match[1];
      x += match[1].length;
    } else {
      if (clearString[x] == ' ')
        output += '+';
      else {
        var charCode = clearString.charCodeAt(x);
        var hexVal = charCode.toString(16);
        output += '%' + ( hexVal.length < 2 ? '0' : '' ) + hexVal.toUpperCase();
      }
      x++;
    }
  }
  return output; */
  return encodeURI(clearString);
}

// Find element position
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];
}









// Preselect current hotel city from dropdown

function preselectCity(){
	if(document.getElementById("post_office") != null && document.getElementById("post_office") != 'undefined'){
		var currentCity = document.getElementById("post_office").innerHTML;
		var opts = document.getElementById("cName").getElementsByTagName("option");
	
		for(var i = 0; i < opts.length; i++){
			if(currentCity.toLowerCase().indexOf(opts[i].value.toLowerCase()) > -1){
				opts[i].selected = true;
				break;
			}
		}
	}
}











// Deprecated calendar classes and functions


/*
	Class to handle date bindings in calendars
	(Sort of deprecated since the datepicker handles datebindings all by itself)
*/

function DateBinding(startDateId, startMonthId, endDateId, endMonthId){
	this.startDateEmt = document.getElementById(startDateId);
	this.startMonthEmt = document.getElementById(startMonthId);
	this.endDateEmt = document.getElementById(endDateId);
	this.endMonthEmt = document.getElementById(endMonthId);
	
	this.updateBound = function(){
		var startDate = parseInt(this.startDateEmt.options[this.startDateEmt.selectedIndex].value);
		var combinedStartMonth = this.startMonthEmt.options[this.startMonthEmt.selectedIndex].value;
		var startMonthParts = combinedStartMonth.split("-");
		var startYear = parseInt(startMonthParts[0]);
		var startMonth = (startMonthParts[1].charAt(0) != '0') ? parseInt(startMonthParts[1]) : parseInt(startMonthParts[1].charAt(1));
	
		var startDateObj = new Date();
		startDateObj.setFullYear(startYear);
		startDateObj.setMonth(startMonth - 1);
		startDateObj.setDate(startDate);
		
		var endDateObj = new Date();
		endDateObj.setFullYear(startDateObj.getFullYear());
		endDateObj.setMonth(startDateObj.getMonth());
		endDateObj.setDate(startDateObj.getDate() + 1);
		
		var optionEmts = this.endDateEmt.getElementsByTagName("option");
		for(var i = 0; i < optionEmts.length; i++){
			if(optionEmts[i].value == endDateObj.getDate()){
				optionEmts[i].selected = true;
			}
			else{
				optionEmts[i].selected = false;
			}
		}
		
		optionEmts = this.endMonthEmt.getElementsByTagName("option");
		for(var i = 0; i < optionEmts.length; i++){
			if(optionEmts[i].value == (endDateObj.getFullYear() + "-" + (endDateObj.getMonth() + 1))){
				optionEmts[i].selected = true;
			}
			else{
				optionEmts[i].selected = false;
			}
		}
		
		document.getElementById("helperEndDate").value = endDateObj.getDate() + "/" + (endDateObj.getFullYear() + "-" + (endDateObj.getMonth() + 1));
	}
}





/*
	Functions to parse dates from helper fields
	(Deprecated by the datepicker multicalendar support.)
*/

function parseHelperDates(){
	parseStartHelperDate();
	parseEndHelperDate();
}


function parseStartHelperDate(){
	var startDateParts = document.getElementById("helperStartDate").value.split("/");	
	var startDateEmt = document.getElementById("choosestart_day");
	var startMonthEmt = document.getElementById("choosestart_month");
	
	var optionEmts = startDateEmt.getElementsByTagName("option");
	for(var i = 0; i < optionEmts.length; i++){
		if(optionEmts[i].value == startDateParts[0]){
			optionEmts[i].selected = true;
		}
		else{
			optionEmts[i].selected = false;
		}
	}
	
	optionEmts = startMonthEmt.getElementsByTagName("option");
	for(var i = 0; i < optionEmts.length; i++){
		if(optionEmts[i].value == startDateParts[1]){
			optionEmts[i].selected = true;
		}
		else{
			optionEmts[i].selected = false;
		}
	}
	
	
	dateBinding.updateBound();
}


function parseEndHelperDate(){
	var startDateParts = document.getElementById("helperEndDate").value.split("/");	
	var startDateEmt = document.getElementById("chooseend_day");
	var startMonthEmt = document.getElementById("chooseend_month");
	
	var optionEmts = startDateEmt.getElementsByTagName("option");
	for(var i = 0; i < optionEmts.length; i++){
		if(optionEmts[i].value == startDateParts[0]){
			optionEmts[i].selected = true;
		}
		else{
			optionEmts[i].selected = false;
		}
	}
	
	optionEmts = startMonthEmt.getElementsByTagName("option");
	for(var i = 0; i < optionEmts.length; i++){
		if(optionEmts[i].value == startDateParts[1]){
			optionEmts[i].selected = true;
		}
		else{
			optionEmts[i].selected = false;
		}
	}
}



function checkInstantOffers(){
	var wrapper = document.getElementById("instantoffer_list");
	var children = wrapper.childNodes;
	var found = false;
	
	for(var i = 0; i < children.length; i++){
		if(children[i].className.indexOf("instantoffer_list") > -1){
			found = true;
			break;
		}
	}
	
	if(!found){
		document.getElementById("instantoffer_list").style.display = "none";
		document.getElementById("cond_content").style.display = "block";
	}
	else{
		document.getElementById("cond_content").style.display = "none";
		document.getElementById("instantoffer_list").style.display = "block";
	}
}

function showLayer(layerId, clickSrc, optObj){
	var tweakCoords = {x: 0, y: 0};
	if(optObj && typeof(optObj) != 'undefined'){
		tweakCoords = {x: optObj.relX, y: optObj.relY};
	}

	var srcPos = jtk.getPosition(clickSrc);
	var layerPos = {x: srcPos.left + tweakCoords.x, y: srcPos.top + tweakCoords.y};
	var layer = new Layer(layerId, clickSrc);
	layer.setOrigin(layerPos.x, layerPos.y);
	
	if(typeof(optObj.onShow) == 'function'){
		layer.onBeforeShow = optObj.onShow;
	}
	if(typeof(optObj.onHide) == 'function'){
		layer.onHide = optObj.onHide;
	}
	
	layer.show();
}

var gpsoptions={relX: -25, relY: -230};











/*
	Revised onfocus and onblur handlers
*/

function handleOnFocus(emt, defaultValue, className){
	if(emt.value.replace(/\s/g, "") == defaultValue.replace(/\s/g, "")){
		emt.value = "";
		if(typeof(className) == 'string')
			emt.className = className;
	}
}

function handleOnBlur(emt, defaultValue, className){
	if(emt.value.replace(/\s/g, "") == ""){
		emt.value = defaultValue;
		if(typeof(className) == 'string')
			emt.className = className;
	}
}
