
myAddEventLister(window, 'load', setSelectedTab);

var bForecastRunning = false;

function setSelectedTab() {
	var tabActualElement = document.getElementById('tabActual');
	if(tabActualElement.className == 'selected') {
		showActualTrafficSituation();
	} else {
		showForecast();
	}

}

function sendForm() {
	window.setTimeout('refreshMap(null)', 200);
	return false;
}

function myAddEventLister(obj, eventType, functionName) {

	if (obj.addEventListener) {
	  obj.addEventListener('load', functionName, false);
	} else if (obj.attachEvent) {
	  var r = obj.attachEvent('on' + eventType ,functionName);
	} else {
	  obj['on'+eventType] = functionName;  
	}
}

function showActualTrafficSituation() {
	//change tab
	getElementByName("showActualSituation").value = "true";
	hideElement("tabForecastContent");
	getElementById("tabActual").className = "selected";
	getElementById("tabForecast").className = null;
	
	// set date and time to now
	setSelectedDate(new Date());
	setTimeOptions(false);
	var time = getElementByName("time");
	time.selectedIndex = 0;
	// activate checkboxes
	getElementByName("poiTrafficInfo").checked = true;
	getElementByName("poiTrafficSituation").checked = true;
	getElementByName("poiRoadwork").checked = true;
	// activate page refresh
	if (!isExternalContent) {
		setPageRefreshTimeout();
	}
	
	
}

function showForecast() {
	//change tab
	getElementByName("showActualSituation").value = "false";
	showElement("tabForecastContent");
	getElementById("tabActual").className = null;
	getElementById("tabForecast").className = "selected";
	// deactivate page refresh
	clearPageRefreshTimeout();
}

function changeImportantCity() {
	getElementByName("changeBBox").value = "true";
	refreshMap(null);
}

function addImportantCity() {
	expandTr("trImportantCityName");
}

function getSelectedDate() {
	var date = getElementByName("date").value;
	var dateValues = date.split(".");
	var day = parseInt(dateValues[0], 10);
	var month = parseInt(dateValues[1], 10);
	var year = parseInt(dateValues[2]);
	return new Date(year, month-1, day);
}

function getSelectedDateTime() {
	var date = getElementByName("date").value;
	var dateValues = date.split(".");
	var day = parseInt(dateValues[0], 10);
	var month = parseInt(dateValues[1], 10);
	var year = parseInt(dateValues[2], 10);
	var time = getElementByName("time").value;
	var times = time.split(":");
	return new Date(year, month-1, day, times[0], times[1]);
}

function setSelectedDate(selectedDate) {
	displayDay = selectedDate.getDate();
	if(displayDay < 10) {
		displayDay = "0" + displayDay;
	}
	displayMonth = selectedDate.getMonth() + 1;
	if(displayMonth < 10) {
		displayMonth = "0" + displayMonth;
	}
	displayYear = selectedDate.getFullYear();
	getElementByName("date").value = displayDay + "." + displayMonth + "." + displayYear;
}

function setSelectedDateTime(selectedDate) {
	setSelectedDate(selectedDate);
	displayHour = selectedDate.getHours();
	if(displayHour < 10) {
		displayHour = "0" + displayHour;
	}
	displayMinute = selectedDate.getMinutes();
	if(displayMinute < 10) {
		displayMinute = "0" + displayMinute;
	}
	getElementByName("time").value = displayHour + ":" + displayMinute;
}

function dateValueChanged() {
	var dateObject = getElementByName("date");
	var values = dateObject.value.split(".");
	if(values.length != 3) {
		return;
	}
	for(i=0; i<values.length; i++) {
		if(values[i] < 10 && values[i].length == 1) {
			values[i] = "0" + values[i];
		}
	}
	dateObject.value = values[0] + "." + values[1] + "." + values[2];
	setTimeOptions(true);
	// update state of "-" button
	updateForecastButtonMinus();
}

function updateForecastButtonMinus() {
	var selectedDate = getSelectedDateTime();
	var today = new Date();
	var time = getElementByName("time");
	var minusLink = getElementById("forecast_minus_link");
	var minusImg = getElementById("forecast_minus_img");
	if(selectedDate.getDate() == today.getDate() && selectedDate.getMonth() == today.getMonth() && selectedDate.getYear() == today.getYear() && time.selectedIndex == 0) {
		//minus link
		minusLink.onclick = null;
		//minus img
		var oldSrc = minusImg.src;
		if(oldSrc.search(/off/) != -1) {
			minusImg.src = oldSrc.replace(/off/, "inactive");
		}
		if(oldSrc.search(/on/) != -1) {
			minusImg.src = oldSrc.replace(/on/, "inactive");
		}
	} else {
		//minus link
		minusLink.onclick = function(){forecastMinus();};
		//minus img
		var oldSrc = minusImg.src;
		if(oldSrc.search(/inactive/) != -1) {
			minusImg.src = oldSrc.replace(/inactive/, "off");
			minusImg.onmouseover = function(){mouseOver(this);};
			minusImg.onmouseout = function(){mouseOut(this);};
		}
	}
}

function updateForecastButtons(isActive) {
	var startLink = getElementById("forecast_start_link");
	var startImg = getElementById("forecast_start_img");
	var stopLink = getElementById("forecast_stop_link");
	var stopImg = getElementById("forecast_stop_img");
	if(isActive) {
		//start link
		startLink.onclick = null;
		//start img
		var oldSrc = startImg.src;
		if(oldSrc.search(/off/) != -1) {
			startImg.src = oldSrc.replace(/off/, "inactive");
		}
		if(oldSrc.search(/on/) != -1) {
			startImg.src = oldSrc.replace(/on/, "inactive");
		}
		//stop link
		stopLink.onclick = function(){forecastStop();};
		//stop img
		var oldSrc = stopImg.src;
		if(oldSrc.search(/inactive/) != -1) {
			stopImg.src = oldSrc.replace(/inactive/, "off");
			stopImg.onmouseover = function(){mouseOver(this);};
			stopImg.onmouseout = function(){mouseOut(this);};
		}
	} else {
		//stop link
		stopLink.onclick = null;
		//stop img
		var oldSrc = stopImg.src;
		if(oldSrc.search(/off/) != -1) {
			stopImg.src = oldSrc.replace(/off/, "inactive");
		}
		if(oldSrc.search(/on/) != -1) {
			stopImg.src = oldSrc.replace(/on/, "inactive");
		}
		//start link
		startLink.onclick = function(){forecastStart();};
		//start img
		var oldSrc = startImg.src;
		if(oldSrc.search(/inactive/) != -1) {
			startImg.src = oldSrc.replace(/inactive/, "off");
			startImg.onmouseover = function(){mouseOver(this);};
			startImg.onmouseout = function(){mouseOut(this);};
		}
	}
}

function checkTimeDifference(timeToCompare, allowedDiff) {
	// timeToCompare and allowedDiff in ms
	selectedDate = getSelectedDateTime().getTime();
	return (selectedDate - timeToCompare < allowedDiff);	
}

function setTimeOptions(adaptTimeIndex) {

	var selectedDate = getSelectedDate();
	var today = new Date();
	
	var time = getElementByName("time");
	var oldTimeValue = time.value;
	time.length = 0;
	var index = 0;
	
	var hour = 0;
	var minute = 0;
	var hourSep = 0;
	
	if(selectedDate.getDate() == today.getDate() && selectedDate.getMonth() == today.getMonth() && selectedDate.getYear() == today.getYear()) {
		hour = today.getHours();
		minute = today.getMinutes();
		displayMinute = minute;
   		if(minute < 10) {
			displayMinute = "0"+minute;
		}
		displayHour = hour;
   		if(hour < 10) {
			displayHour = "0"+hour;
		}
		time.options[index] = new Option(displayHour + ":" + displayMinute, displayHour + ":" + displayMinute);
		index++;
		hourSep = hour + 5;
	}
	
	var h = hour;
   	for(h; h <= 23 ; h++) {
		if(h < hourSep) {
			var m=0;
			for(m; m<46; m+=15) {
	   			if(h != hour || m > minute) {
					displayMinute = m;
					if(m == 0) {
						displayMinute = "00";
		    		}
		    		displayHour = h;
		    		if(h < 10) {
			    		displayHour = "0"+h;
			    	}
			    	time.options[index] = new Option(displayHour + ":" + displayMinute, displayHour + ":" + displayMinute);
		    		index++;
	    		}
		    }
		}
		else {
			displayHour = h;
		    if(h < 10) {
				displayHour = "0"+h;
			}
			time.options[index] = new Option(displayHour + ":00", displayHour + ":00");
			index++;
		}
	}
	
	//select old time by hour
	if(adaptTimeIndex) {
		var oldTimeValueHours = oldTimeValue.substring(0,2);
		var oldTimeValueMinutes = oldTimeValue.substring(3,5);
//		var buffer = oldTimeValueHours + ":" + oldTimeValueMinutes + "\n";
//		buffer += "len: " + time.length;
		for(i=0; i<time.length; i++) {
//			buffer += "\n" + i + "text2: " +  time.options[i].text;
			var hours = time.options[i].text.substring(0,2);
			var minutes = time.options[i].text.substring(3,5);
			if(oldTimeValueHours == hours) {
				if(oldTimeValueMinutes >= 30) {
					time.selectedIndex = (i+1);
				}
				else {
					time.selectedIndex = i;
				}
//				buffer += i + " index: " + time.selectedIndex;
				break;
			}
		}
	}
	else {
		time.selectedIndex = 0;
	}
}

function timeUp() {
	var timeSelect = getElementByName("time");
	if(timeSelect.selectedIndex < (timeSelect.length-1)) {
		timeSelect.selectedIndex++;
	}
	else {
		dateUp();
	}
}

function dateUp() {
	var selectedDate = getSelectedDate();
	
	//add 1 day = 24*60*60*1000 ms
	var time = selectedDate.getTime();
	time += (24*60*60*1000);
	selectedDate.setTime(time);
	
	//set new date
	setSelectedDate(selectedDate);
	
	//change time options
	setTimeOptions(false);
}

function timeDown() {
	var timeSelect = getElementByName("time");
	if(timeSelect.selectedIndex > 0) {
		timeSelect.selectedIndex--;
	}
	else {
		dateDown();
		//set index of time options to the last element
		timeSelect.selectedIndex = timeSelect.length-1;
	}
}

function dateDown() {
	var selectedDate = getSelectedDate();
	
	//subtract 1 day = 24*60*60*1000 ms
	var time = selectedDate.getTime();
	time -= (24*60*60*1000);
	selectedDate.setTime(time);
	
	//set new date
	setSelectedDate(selectedDate);
	
	//change time options
	setTimeOptions(true);
}

function fullScreenCheckDate() {
	var selectedDate = getSelectedDateTime();
	var today = new Date();
	if(selectedDate.getTime() < today.getTime()) {
		setSelectedDateTime(today);
	}
}

function calendarChangeAction() {
	refreshMap(null);
}


// forecast

function forecastPlus() {
	timeUp();
	updateForecastButtonMinus();
	refreshMap(null);
}

function forecastMinus() {
	timeDown();
	updateForecastButtonMinus();
	refreshMap(null);
}

function forecastStart() {
	timeUp();
	forecastStartTime = getSelectedDateTime().getTime();
	updateForecastButtonMinus();
	updateForecastButtons(true);
	refreshMap("invokeAfterFSendForecast");
	bForecastRunning = true;
}

function forecastStop(show) {
	bForecastRunning = false;
	window.clearTimeout(forecastTimeout);
	updateForecastButtons(false);
}

function forecastRefresh() {
	diff = 48 * 60 * 60 * 1000;
	if(checkTimeDifference(forecastStartTime, diff)) {
		timeUp();
		refreshMap("invokeAfterFSendForecast");
	} else {
		forecastStop();
	}
}

function invokeAfterFSendForecast() {
	if (bForecastRunning) {
	  forecastTimeout = window.setTimeout("forecastRefresh()", 5000);
	}
	invokeAfterFSend();
}

// page refresh

function refreshPage() {
	setSelectedDate(new Date());
	setTimeOptions(false);
	refreshMap(null);
}

function setPageRefreshTimeoutFullScreen() {
	pageRefreshTimeout = window.setTimeout("refreshMap()", 600000);
}

function isExternalContent() {
	if (document.location.href.indexOf("externalKey") < 0) {
		return false;
	}
	else {
		return true;
	}
	
}