var jtk = new JoookToolkit();

function evenColumns(){
	if(typeof(homepage) == 'undefined' || !homepage){
		var subnavi = jtk.select("#subnavi")[0];
		var content = jtk.select("#content_wrapper")[0];
		
		var subnaviDimensions = jtk.getDimensions(subnavi);
		var contentDimensions = jtk.getDimensions(content);
		
		if(subnaviDimensions.height < (contentDimensions.height - 14)){
			subnavi.style.height = (contentDimensions.height - 14) + "px";
		}
		else if((subnaviDimensions.height - 14) > contentDimensions.height){
			content.style.height = (subnaviDimensions.height - 14) + "px";
		}
	}
}

function toggleLoginWin(clickSrc){
	var win = jtk.select("#login_wrapper")[0];
	if(win.style.display == 'none' || win.style.display == ''){
		var pos = jtk.getPosition(clickSrc);
		win.style.left = (pos.left + 19) + "px";
		win.style.top = (pos.top + 32) + "px";
		win.style.display = "block";
	}
	else{
		win.style.display = "none";
	}
}


/*
	Matkahuolto query URL schema:
	http://lahti.matkahuolto.info/#from(poi*Harjuviidantie L, Nastola)to(poi*Ilveskatu, Lahti)date(20091215)time(1615)timetype(departure)
	...where variable timetype must be "departure" or "arrival".
*/

var Matkahuolto = {
	stopIds: {start: "stopSearch_start", end: "stopSearch_end"},
	timeIds: {hours: "stopSearch_hours", minutes: "stopSearch_minutes"},
	dateIds: {date: "stopSearch_date", month: "stopSearch_month", year: "stopSearch_year"},
	optParams: {filter: "routefilter"},
	urlTemplate: "http://lahti.matkahuolto.info/#from(%%FROM%%)to(%%TO%%)date(%%DATE%%)time(%%TIME%%)timetype(%%TIMETYPE%%)includelines((%%FILTER%%))",
	
	buildQuery: function(){
		if(document.getElementById(this.stopIds.start).selectedIndex > 0 && document.getElementById(this.stopIds.end).selectedIndex > 0){
			var url = this.setValuesToTemplate(this.buildParameters());
			window.open(url);
		}
		else{
			alert("Valitse lähtö- ja määräpysäkki.");
		}
	},
	
	buildParameters: function(){
		var that = this;
		var queryParams = new Array();
		queryParams.push({name: "FROM", value: (that.getValue(that.stopIds.start) != '') ? that.getValue(that.stopIds.start) : null});
		queryParams.push({name: "TO", value: (that.getValue(that.stopIds.end) != '') ? that.getValue(that.stopIds.end) : null});
		queryParams.push({name: "DATE", value: that.formatDate(that.getValue(that.dateIds.date), that.getValue(that.dateIds.month), that.getValue(that.dateIds.year))});
		queryParams.push({name: "TIME", value: that.formatTime(that.getValue(that.timeIds.hours), that.getValue(that.timeIds.minutes))});
		queryParams.push({name: "TIMETYPE", value: (typeof(that.timetype) == "string") ? that.timetype : "departure"});
		queryParams.push({name: "FILTER", value: (that.getValue(that.optParams.filter) != '') ? that.getValue(that.optParams.filter) : null});
		
		return queryParams;
	},
	
	setValuesToTemplate: function(params){
		var str = this.urlTemplate;
		for(var i = 0; i < params.length; i++)
			str = (params[i] && params[i] != null) ? str.replace("%%" + params[i].name + "%%", params[i].value) : str;
		return str;
	},
	
	numToStr: function(num, len){
		var testLen = (typeof(len) != 'undefined') ? len : 2;
		var numStr = ("" + num).replace(/\s/g, "");
		
		while(numStr.length < testLen)
			numStr = "0" + numStr;
		
		return numStr;
	},
	
	formatDate: function(date, month, year){
		return "20" + this.numToStr(year) + "" + this.numToStr(month) + "" + this.numToStr(date); 
	},
	
	formatTime: function(hours, minutes){
		return this.numToStr(hours) + "" + this.numToStr(minutes);
	},
	
	getValue: function(id){
		var emt = document.getElementById(id);
		var value = "";
		if(emt.tagName.toLowerCase() == "select")
			value = emt.options[emt.selectedIndex].value;
		else if(emt.tagName.toLowerCase() == "input" && (emt.type == "text" || emt.type == "hidden"))
			value = emt.value
		
		return value;
	}
}



var Mapper = {
	currentMarkers: new Array(),
	hasSearch: true,
	
	loadRoute: function(routeName, hasSearch){
		Mapper.hasSearch = hasSearch;
		jQuery.getJSON("/stc/liikenne/jsp/loadRoute.jsp?name=" + routeName, Mapper.handleLoadedRoute);
	},
	
	// Create route from JSON
	handleLoadedRoute: function(json){
		if(json.waypoints.length > 0 && json.markers.length > 0){
			var startIcon = new GIcon(G_DEFAULT_ICON);
			startIcon.image = "/stc/liikenne/rev_b/images/markers/start.png";
			startIcon.shadow = "/stc/liikenne/rev_b/images/markers/shadow.png";
			startIcon.iconSize = new GSize(19, 35);
			startIcon.shadowSize = new GSize(19, 35);
			startIcon.iconAnchor = new GPoint(1, 35);
			startIcon.imageMap = [0,0,
								  19,0,
								  19,10,
								  2,35,
								  0,35];
			startIcon.transparent = "/stc/liikenne/rev_b/images/markers/transparent.png";
			
			var finishIcon = new GIcon(startIcon);
			finishIcon.image = "/stc/liikenne/rev_b/images/markers/finish.png";
			
			var defaultIcon = new GIcon(startIcon);
			defaultIcon.image = "/stc/liikenne/rev_b/images/markers/default.png";
			
			
			MapUtil.zoom = 13;
			MapUtil.init(new GLatLng(json.markers[0].lat, json.markers[0].lng));
			MapUtil.buildPolylineFromArray(json.waypoints, "#52b600", 3, .7, {},true);
			for(var i = 0; i < json.markers.length; i++){
				var icon = defaultIcon;
				if(i == 0)
					icon = startIcon;
				if(i == json.markers.length - 1)
					icon = finishIcon;
				
				var marker = json.markers[i];
				var markerObj = MapUtil.currentRoute.addBindableMarker(new GLatLng(marker.lat, marker.lng), {icon: icon});
				var nickname = (typeof(marker.nickname) != "undefined") ? marker.nickname : "";
				var type = (typeof(marker.type) != "undefined") ? marker.type : "poi";
				
				var html = marker.name + "<br /><br />";
				if(Mapper.hasSearch){
					html += "<a href=\"#\" onclick=\"StopLists.selectFromByValue('" + type + "*" + nickname + "'); return false;\" class=\"map_linkFrom\">Aseta lähtöpysäkiksi</a><br />";
					html += "<a href=\"#\" onclick=\"StopLists.selectToByValue('" + type + "*" + nickname + "'); return false;\" class=\"map_linkTo\">Aseta määräpysäkiksi</a>";
				}
				markerObj.bindInfoWindowHtml(html);
				
				marker.obj = markerObj;
				Mapper.currentMarkers.push(marker);
				MapUtil.currentRoute.updateInfo(MapUtil.currentRoute.markers.length - 1, {name: marker.name, nickname: nickname, style: marker.style, type: type});
			}
	
			MapUtil.gmapsObj.setUIToDefault();
			if(Mapper.hasSearch)
				StopLists.addStops(json.markers);
		}
	}
}

var StopLists = {
	listIds: {from: "stopSearch_start", to: "stopSearch_end"},
	addStops: function(markers){
		var from = document.getElementById(this.listIds.from);
		var to = document.getElementById(this.listIds.to);
		
		for(var i = 0; i < markers.length; i++){
			this.addOption(markers[i].name, markers[i].type + "*" + markers[i].nickname, from);
			this.addOption(markers[i].name, markers[i].type + "*" + markers[i].nickname, to);
		}
	},
	
	addOption: function(name, value, list){
		var optEmt = document.createElement("option");
		var text = document.createTextNode(name);
		optEmt.value = value;
		optEmt.appendChild(text);
		list.appendChild(optEmt);
	},
	
	selectByValue: function(selEmt, value){
		for(var i = 0; i < selEmt.options.length; i++){
			if(selEmt.options[i].value == "" + value)
				selEmt.options[i].selected = true;
			else
				selEmt.options[i].selected = false;
		}
	},
	
	selectFromByValue: function(value){
		this.selectByValue(document.getElementById(this.listIds.from), value);
	},
	
	selectToByValue: function(value){
		this.selectByValue(document.getElementById(this.listIds.to), value);
	}
}

function initRouteView(routeName, hasSearch){
	var name = routeName.replace(/\s/g, "");
	if(name != ''){
		MapUtil.emtId = "routeMap";
		Mapper.loadRoute(name, hasSearch);
		if(hasSearch)
			makeCalendars();
	}
}

var datepicker1;

function makeCalendars(){
	var months = ['Tammikuu','Helmikuu','Maaliskuu','Huhtikuu','Toukokuu','Kesäkuu','Heinäkuu','Elokuu','Syyskuu','Lokakuu','Marraskuu','Joulukuu'];
	
	datepicker1 = new Calendar({stopSearch_year: {stopSearch_date: 'd', stopSearch_month: 'm', stopSearch_yearHelper: 'Y'}}, {direction: .1, months: months, tweak: {x: -80, y: -30}, onHideStart: function(){
		document.getElementById('stopSearch_year').value = document.getElementById('stopSearch_yearHelper').value.substring(2);
	}});
}