function set_cookie(cookie_name, value) {

	var today = new Date();
	today.setTime( today.getTime() );

	var expires_date = new Date( today.getTime() + (1000 * 60 * 60) );

	document.cookie = cookie_name + '=' + value + ';expires=' + expires_date.toGMTString() + ';path=' + escape('/');

}

function get_cookie(cookie_name) {

	var results = document.cookie.match ( cookie_name + '=(.*?)(;|$)' );

	if (results) {
	
		return (unescape(results[1]));

	} else {

		return null;

	}

}

function delete_cookie(cookie_name) {

	document.cookie = cookie_name += '=;expires=Thu, 01-Jan-1970 00:00:01 GMT;path=' + escape('/');

}

var totalHeight;

function correctHeight() {

	contentObj = 'content';

	totalHeight  = document.getElementById('header').offsetHeight + document.getElementById(contentObj).offsetHeight + document.getElementById('footer').offsetHeight + document.getElementById('header').style.paddingTop + document.getElementById(contentObj).style.paddingTop + document.getElementById('footer').style.paddingTop + document.getElementById('header').style.paddingBottom + document.getElementById(contentObj).style.paddingBottom + document.getElementById('footer').style.paddingBottom;

	if (totalHeight > document.body.offsetHeight) {

		document.getElementById('container').style.height = totalHeight;
		document.body.style.height = 'auto';

	} else {

		document.body.style.height = '100%';

	}

}

function prepare_menu() {

	htmlTempArray = document.getElementById('nav').getElementsByTagName('a');

	for (var i = 0; i < htmlTempArray.length; i++) {

		if (htmlTempArray[i].getAttribute('onclick') == null) {

			li  = htmlTempArray[i].parentNode;
			ul  = li.parentNode;
			li2 = ul.parentNode;

			if (li2.getElementsByTagName('a')[0].getAttribute('onclick') != null) {

				htmlTempArray[i].onclick = function() {

					set_cookie('prepare_menu', 'true');
					set_cookie('lastOpen', lastOpen);
					set_cookie('lastParent', lastParent);

					return true;

				}

			}

		} 

	}

}

function mouseover_iefix() {

	htmlTempArray = document.getElementById('nav').getElementsByTagName('a');

	for (var i = 0; i < htmlTempArray.length; i++) {
	
		htmlTempArray[i].onmouseover = function() {

			this.style.backgroundColor = '#e5e599';		

		}

		htmlTempArray[i].onmouseout = function() {

			this.style.backgroundColor = '#666600';		

		}

	}

}

var lastOpen;
var lastParent;

function toggleSubmenu(id, parent) {

	var submenu = 'submenu' + id;

	if (lastOpen != null && lastOpen != id) {

		if (lastOpen != parent) {

			document.getElementById('submenu' + lastOpen).style.display = 'none';

		}
		
		document.getElementById(submenu).style.display  = 'block';
		lastOpen = id;

	} else if (lastOpen != null && lastOpen == id) {
	
		document.getElementById(submenu).style.display = 'none';
		lastOpen = null;

	} else {

		document.getElementById(submenu).style.display = 'block';
		lastOpen = id;

	}

	if (navigator.userAgent.indexOf('MSIE 6') > 0) {

		document.getElementById('middle').className = 'resize';

	}

	menuHeight = document.getElementById('header').offsetHeight + document.getElementById('nav').offsetHeight + document.getElementById('footer').offsetHeight + document.getElementById('header').style.paddingTop + document.getElementById('nav').style.paddingTop + document.getElementById('footer').style.paddingTop + document.getElementById('header').style.paddingBottom + document.getElementById('nav').style.paddingBottom + document.getElementById('footer').style.paddingBottom;

	if (navigator.userAgent.indexOf('Firefox/2') != -1 && parseInt(menuHeight) + 31 > document.body.offsetHeight) {

		enlargeHeight = 37;

	} else {

		enlargeHeight = 31;

	}

	if (menuHeight > document.body.offsetHeight || (navigator.userAgent.indexOf('Firefox/2') != -1 && parseInt(menuHeight) + 31 > document.body.offsetHeight)) {

		document.getElementById('container').style.height = (enlargeHeight + parseInt(menuHeight)) + 'px';

	} else {

		document.getElementById('container').style.height = '100%';

	}

	lastParent = parent;
	
}

function bookmark(title, url) {

	if (window.sidebar) {

		window.sidebar.addPanel(title, url, '');

	}

	else if (window.external) {

		window.external.AddFavorite(url, title);

	}

	else if (window.opera && window.print) {

		var bookmark_element = document.createElement('a');
		bookmark_element.setAttribute('rel', 'sidebar');
		bookmark_element.setAttribute('href', url);
		bookmark_element.setAttribute('title', title);
		bookmark_element.click();

	}

}

function rot13(input) {
	
	var coding = 'ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMabcdefghijklmnopqrstuvwxyzabcdefghijklm';
	
	for (var text = '', i = 0; i < input.length; i++) {
		
		character = input.charAt(i);
		position  = coding.indexOf(character);

		if (position > -1) {
			
			character = coding.charAt(position + 13);
			
		}
		
		text += character;
		
	}
	
	return text;
	
}

function deRot(link) {
	
	if (link.href.indexOf('mailto:') != 0) {
		
		link.href = rot13(link.href);
		
	}
	
}

function prepFormFields() {

	var htmlElements = Array('select', 'input', 'textarea');
	var htmlTempArray;
	var strTemp;
	
	for (var i = 0; i < htmlElements.length; i++) {

		htmlTempArray = document.getElementsByTagName(htmlElements[i]);

		for (var j = 0; j < htmlTempArray.length; j++) {

			if (navigator.userAgent.indexOf('MSIE 6') > 0) {

				if (htmlTempArray[j].getAttribute('type') == 'submit') {

					htmlTempArray[j].style.marginLeft = '62px';

				}

			}

			htmlTempArray[j].onfocus = function() {

				strTemp = this.className;
	
				if (strTemp != "radio" && this.getAttribute("name") != "id") {

					this.className = "activeElement";

				} else if (strTemp == "radio") {

					name  = this.getAttribute("name");
					label = getLabelForId(name);

					label.className = "success";

				}

			}

			htmlTempArray[j].onblur = function() {

				this.className = strTemp;

			}

			htmlTempArray[j].onkeyup = function() {

				if (strTemp == "required") {

					if (isNotEmpty(this)) {

						name  = this.getAttribute("name");
						label = getLabelForId(name);

						label.className = "success";

					} else {

						name  = this.getAttribute("name");
						label = getLabelForId(name);

						label.className = "failure";

					}

				}
				
				if (strTemp == "email") {

					if (mailCheck(this.value)) {

						name  = this.getAttribute("name");
						label = getLabelForId(name);

						label.className = "success";

					} else {

						name  = this.getAttribute("name");
						label = getLabelForId(name);

						label.className = "failure";

					}

				}

			}

		}

	}

}

function getLabelForId(id) {

	var label, labels = document.getElementsByTagName('label');
	
	for (var i = 0; (label = labels[i]); i++) {
	
		if (label.htmlFor == id) {

			return label;

		}
	
	}

	return false;

}


function isNotEmpty(elem) {

	var str = elem.value;
	
	if (str.length == 0) {

		return false;

	} else {
		
		return true;

	}

}

function mailCheck(elem) {

	var email = elem;

	var emailRegxp = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)*\.\w{2,8}$/;

	if (emailRegxp.test(email) != true) {

		return false;

	} else {

		return true;

	}

}
 
function validate(form) {

	var attrVal, attrReg, attrEq, attrFail, strTemp, formfield, name, label, radio_checked, invalid;

	for (var i = 0; i < form.length; i++) {

		attrVal   = form[i].className;
		
		switch (attrVal) {

			case 'required' :

			if (!isNotEmpty(form[i])) {

				formfield = document.getElementById('input_' + i);

				name      = formfield.getAttribute('name');
				label     = getLabelForId(name);

				label.className = "failure";

				if (!invalid) {

					document.getElementById('form_message').style.display  = 'none';
					document.getElementById('form_error').style.display    = 'block';
					document.getElementById('form_error').style.color      = '#FF0000';
					document.getElementById('form_error').style.fontWeight = 'bold';

					invalid = true;

				}

			} else {

				formfield = document.getElementById('input_' + i);
				name      = formfield.getAttribute('name');
				label     = getLabelForId(name);

				label.className = "success";

				if (!invalid) {

					invalid = false;

				}

			}

			break;
			
			case 'email' :

			if (!mailCheck(form[i].value)) {

				formfield = document.getElementById('input_' + i);
				name      = formfield.getAttribute('name');
				label     = getLabelForId(name);

				label.className = "failure";

				if (!invalid) {

					document.getElementById('form_message').style.display = 'none';
					document.getElementById('form_error').style.display   = 'block';
					document.getElementById('form_error').style.color     = '#FF0000';
					document.getElementById('form_error').style.fontWeight = 'bold';

					invalid = true;

				}

			} else {

				formfield = document.getElementById('input_' + i);
				name      = formfield.getAttribute('name');
				label     = getLabelForId(name);

				label.className = "success";

				if (!invalid) {

					invalid = false;

				}

			}

			break;

			case 'radio' :

			formfield = document.getElementById('input_' + i);
			name      = formfield.getAttribute('name');
			label     = getLabelForId(name);

			for (k = 0; k < document.forms[0].elements[name].length; k++) {

				if (document.forms[0].elements[name][k].checked) {

					radio_checked = true;

				}

			}

			if (!radio_checked) {

				label.className = "failure";

				document.getElementById('form_message').style.display = 'none';
				document.getElementById('form_error').style.display   = 'block';
				document.getElementById('form_error').style.color     = '#FF0000';
				document.getElementById('form_error').style.fontWeight = 'bold';

				invalid = true;
	
			} else {

				label.className = "success";

				if (!invalid) {

					invalid = false;

				}

			}

			radio_checked = null;
			
			break;

		}
   
	}

	if (!invalid) {

		return true;		

	} else {

		return false;
		
	}

}

function loadMap() {

	if (GBrowserIsCompatible() && document.getElementById('routeplanner_content')) {

		var content = document.getElementById('routeplanner_content').innerHTML;

		var map = new GMap2(document.getElementById('map'));
		map.addControl(new GSmallMapControl());
		map.setCenter(new GLatLng(51.56740055097896, 5.135293006896973), 13);
		
		var marker = new GMarker(new GLatLng(51.5674, 5.1352));
		map.addOverlay(marker);

		GEvent.addListener(marker, 'click', function() {

			map.openInfoWindowHtml(new GLatLng(51.5674, 5.1352), content);


		})

		map.openInfoWindowHtml(map.getCenter(), content);

	}

}

window.onload = function() {

	correctHeight();
	prepare_menu();

	//if (navigator.userAgent.indexOf('MSIE 6') > 0) {
	//
	//	mouseover_iefix();
	//
	//}

	if (get_cookie('prepare_menu') == 'true') {

		open_cookie   = get_cookie('lastOpen');
		parent_cookie = get_cookie('lastParent');

		if (parent_cookie != 'undefined') {

			toggleSubmenu(parent_cookie);

		}

		toggleSubmenu(open_cookie, parent_cookie);

		delete_cookie('prepare_menu');
		delete_cookie('lastOpen');
		delete_cookie('lastParent');

	}

	prepFormFields();
	loadMap();

}

window.onunload = function() {

	GUnload();

}
