///////////////////////////
// DEFINIEREN VARIABELEN //
///////////////////////////

var begin_submit_flag = false;

var disabled_elements = new Array;

// submit-timeout is de timer die bijhoudt wanneer de pagina gerefreshed moet worden
var submit_timeout;

// countdown-timer zorgt ervoor dat de teller in de rechter bovenhoek elke seconde aangepast wordt
var countdown_timer;
// remaining_time is het aantal resterende seconden voor het vernieuwen van de pagina
var remaining_time;

// De standaard refresh-tijd
var default_refresh = 60;

var page_loaded = false;

// De rubberBand
var top = 0;
var left = 0;
var bottom = 0;
var right = 0;

var map_top = 0;
var map_left = 0;
var map_bottom = 0;
var map_right = 0;

function disable_elements() {

	disabled_elements.length = 0;

	if (document.forms.length > 0) {
		var f = document.forms;
		for (i = 0; i < f.length; i++) {
			var e = f[i].elements;
			for (j = 0; j < e.length; j++) {
				if(!e[j].disabled && e[j].id) {
					disabled_elements.push(e[j].id);
					e[j].disabled = true;
				}
			}
		}
	}
}

function enable_elements() {

	for (i = 0; i < disabled_elements.length; i++) {
		if(document.getElementById(disabled_elements[i])) {
			document.getElementById(disabled_elements[i]).disabled = false;
		}
	}
}


function elem_focus() {

	var bFound = false;

	// for each form
	for (f=0; f < document.forms.length; f++) {
		// for each element in each form
		for(i=0; i < document.forms[f].length; i++) {
			// if it's not a hidden element
			if (document.forms[f][i].type != "hidden") {
				// and it's not disabled
				if (document.forms[f][i].disabled != true) {
					// set the focus to it
					document.forms[f][i].focus();
					if (document.forms[f][i].type == "text") {
						document.forms[f][i].select();
					}
					var bFound = true;
				}
			}
			// if found in this element, stop looking
			if (bFound == true) break;
		}
		// if found in this form, stop looking
		if (bFound == true) break;
	}
}

// aftellen alvorens de pagina te vernieuwen
function countdown(){

	if(remaining_time > 5 && blink_timer) {
		clearTimeout(blink_timer);
		blink_timer = null;
	}

	if(document.getElementById("counter_div")) {
		document.getElementById("counter_div").innerHTML = "<span id='auto_update_timer'>Auto update: " + remaining_time + "s</span> <img src='images/Global/MenuBlokje.gif' style='padding-left:5px;padding-right:2px;'><a href='#' onClick='update_on_off();' style='color:#383838;text-decoration:none;'>Stop</a>";
		if(remaining_time == 5) {
			clearTimeout(blink_timer);
			blink_timer = null;
			blink("auto_update_timer",5);
		}
	}
	if(remaining_time) {
		remaining_time--;
		countdown_timer = setTimeout("countdown()",1000);
	} else {
		countdown_timer = null;
	}

}

function update_on_off() {

	if(submit_timeout) {

		update_off();

	} else {

		update_on();

	}

}

function update_on() {

		clearTimeout(countdown_timer);
		countdown_timer = null;

		if(refresh) {
			remaining_time = refresh;
		} else {
			remaining_time = default_refresh;
		}
		countdown();

		if(refresh) {
			var refresh_ms = refresh * 1000;
		} else {
			var refresh_ms = default_refresh * 1000;
		}

		clearTimeout(submit_timeout);
		submit_timeout = setTimeout('begin_submit()', refresh_ms);

}

function update_off() {

		clearTimeout(submit_timeout);
		submit_timeout = null;

		clearTimeout(countdown_timer);
		countdown_timer = null;

		clearTimeout(blink_timer);
		blink_timer = null;

		if(document.getElementById("counter_div")) {
			//document.getElementById("counter_div").innerHTML = "<span id='auto_update_timer'>Auto update: Off</span> <img src='images/Global/MenuBlokje.gif' style='padding-left:5px;padding-right:2px;'><a href='#' onClick='update_on_off();' style='color:#383838;text-decoration:none;'>Start</a>";
			document.getElementById("counter_div").innerHTML = "<span id='auto_update_timer'><img src='images/Global/MenuBlokje.gif' style='padding-left:5px;padding-right:2px;'><a href='#' onClick='update_on_off();' style='color:#383838;text-decoration:none;'>Start auto update</a></span> ";
		}

		var thisElement = document.getElementById("counter_div");
		thisElement.className="visible";

}

function startRubber (evt) {

	if(!document.getElementById("current_boundingbox").value) {
		return false;
	}

	get_map_position();

	process_click();

	if (document.all) {
		var r = document.all.rubberBand;
		r.style.width = 0;
		r.style.height = 0;
		r.style.pixelLeft = event.x;
		r.style.pixelTop  = event.y;
		left = event.x - map_left;
		top = event.y - map_top;
		r.style.visibility = 'visible';
	} else if (document.getElementById) {
		var r = document.getElementById('rubberBand');
		r.style.width = 0;
		r.style.height = 0;
		r.style.left = evt.clientX + 'px';
		r.style.top = evt.clientY + 'px';
		left = evt.clientX - map_left;
		top = evt.clientY - map_top;
		r.style.visibility = 'visible';
	} else if (document.layers) {
		var r = document.rubberBand;
		r.clip.width = 0;
		r.clip.height = 0;
		r.left = evt.x;
		r.top = evt.y;
		left = evt.x - map_left;
		top = evt.y - map_top;
		r.visibility = 'show';
	}

	addEvent('mousemove',moveRubber, document.getElementById("map_div"));
	addEvent('mousemove',moveRubber, document.getElementById("rubberBand"));

 }

function moveRubber (evt) {

	if (document.all) {

		var r = document.all.rubberBand;

		if((event.x - r.style.pixelLeft) > 0) {
			r.style.width = event.x - r.style.pixelLeft;
		} else {
			r.style.width = 1;
		}

		if((parseInt(r.style.pixelLeft) + parseInt(r.style.width)) > (map_right)) {
			var real_right = parseInt(r.style.pixelLeft) + parseInt(r.style.width);
			var width_diff = real_right - map_right;
			r.style.width = parseInt(r.style.width) - width_diff;
		}

		if((event.y - r.style.pixelTop) > 0) {
			r.style.height = event.y - r.style.pixelTop;
		} else {
			r.style.height = 1;
		}

		if((parseInt(r.style.pixelTop) + parseInt(r.style.height)) > (map_bottom)) {
			var real_bottom = parseInt(r.style.pixelTop) + parseInt(r.style.height);
			var height_diff = real_bottom - map_bottom;
			r.style.height = parseInt(r.style.height) - height_diff;
		}

	} else if (document.getElementById) {

		var r = document.getElementById('rubberBand');

		if((evt.clientX - parseInt(r.style.left)) > 0) {
			r.style.width = (evt.clientX - parseInt(r.style.left)) + 'px';
		} else {
			r.style.width = '1px';
		}

		// DEBUG: In firefox gaat dit goed als ik een afwijking van 4 pixels meegeef. Vraag me niet waarom...
		if((parseInt(r.style.left) + parseInt(r.style.width)) > (map_right - 4)) {
			var real_right = parseInt(r.style.left) + parseInt(r.style.width);
			var width_diff = real_right - map_right + 4;
			r.style.width = (parseInt(r.style.width) - width_diff) + 'px';
		}


		if((evt.clientY - parseInt(r.style.top)) > 0) {
			r.style.height = (evt.clientY - parseInt(r.style.top)) + 'px';
		} else {
			r.style.height = '1px';
		}

		// DEBUG: In firefox gaat dit goed als ik een afwijking van 4 pixels meegeef. Vraag me niet waarom...
		if((parseInt(r.style.top) + parseInt(r.style.height)) > (map_bottom - 4)) {
			var real_bottom = parseInt(r.style.top) + parseInt(r.style.height);
			var height_diff = real_bottom - map_bottom + 4;
			r.style.height = (parseInt(r.style.height) - height_diff) + 'px';
		}

	} else if (document.layers) {
		var r = document.rubberBand;
		r.clip.width = evt.x - r.left;
		r.clip.height = evt.y - r.top;
		r.document.open();
		r.document.write('<TABLE WIDTH="' + r.clip.width + '" HEIGHT="' + r.clip.height + '"BORDER="1"><TR><TD><\/TD><\/TR><\/TABLE>');
		r.document.close();
	}

}

function stopRubber (evt) {

	if(top && left) {

		if (document.all) {
			var r = document.all.rubberBand;
			right = event.x - map_left;
			bottom = event.y - map_top;
			r.style.visibility = 'hidden';
		} else if (document.getElementById) {
			var r = document.getElementById('rubberBand');
			right = evt.clientX - map_left;
			bottom = evt.clientY - map_top;
			r.style.visibility = 'hidden';
		} else if (document.layers) {
			var r = document.rubberBand;
			right = evt.x - map_left;
			bottom = evt.y - map_top;
			r.visibility = 'hidden';
		}

		width= right - left;
		height = bottom - top;

		//alert(left + " " + top + " " + right + " " + bottom + " " + width + " " + height);

		if(width>10 && height>10) {
			document.getElementById("new_boundingbox").value = left + "_" + top + "_" + right + "_" + bottom;
			//document.geogeo.submit();
			begin_submit();
		}

		removeEvent('mousemove',moveRubber, document.getElementById("map_div"));
		removeEvent('mousemove',moveRubber, document.getElementById("rubberBand"));
		top = 0;
		left = 0;
		bottom = 0;
		right = 0;
	}

}

function cancelRubber (evt) {

	if (document.all) {
		var r = document.all.rubberBand;
		r.style.width = 0;
		r.style.height = 0;
		r.style.pixelLeft = 0;
		r.style.pixelTop  = 0;
		r.style.visibility = 'hidden';
	} else if (document.getElementById) {
		var r = document.getElementById('rubberBand');
		r.style.width = 0;
		r.style.height = 0;
		r.style.left = 0;
		r.style.top = 0;
		r.style.visibility = 'hidden';
	} else if (document.layers) {
		var r = document.rubberBand;
		r.clip.width = 0;
		r.clip.height = 0;
		r.left = 0;
		r.top = 0;
		r.visibility = 'hidden';
	}

	removeEvent('mousemove',moveRubber, document.getElementById("map_div"));

}

function addEvent(type, handler, e) {

	if(e.attachEvent) {
		e.attachEvent('on' + type, handler);
	} else {
		e.addEventListener(type, handler, false);
	}

}

function removeEvent(type, handler, e) {

	if(e.detachEvent) {
		e.detachEvent('on' + type, handler);
	} else {
		e.removeEventListener(type, handler, false);
	}

}

function get_map_position() {

	var border = 1;

	if(document.getElementById('map_div')) {
		map_top = getAbsoluteTop('map_div') + border;
		map_left = getAbsoluteLeft('map_div') + border;
		map_right = map_left + document.getElementById('map_div').offsetWidth - (border * 2);
		map_bottom = map_top + document.getElementById('map_div').offsetHeight - (border * 2);

	}
}

function getAbsoluteLeft(objectId) {
	// Get an object left position from the upper left viewport corner
	// Tested with relative and nested objects
	o = document.getElementById(objectId)
	oLeft = o.offsetLeft            // Get left position from the parent object
	while(o.offsetParent!=null) {   // Parse the parent hierarchy up to the document element
		oParent = o.offsetParent    // Get parent object reference
		oLeft += oParent.offsetLeft // Add parent left position
		o = oParent
	}
	// Return left postion
	return oLeft
}

function getAbsoluteTop(objectId) {
	// Get an object top position from the upper left viewport corner
	// Tested with relative and nested objects
	o = document.getElementById(objectId)
	oTop = o.offsetTop            // Get top position from the parent object
	while(o.offsetParent!=null) { // Parse the parent hierarchy up to the document element
		oParent = o.offsetParent  // Get parent object reference
		oTop += oParent.offsetTop // Add parent top position
		o = oParent
	}
	// Return top position
	return oTop
}

function resize_page() {

	var myWidth = 0, myHeight = 0;
	if( typeof( window.innerWidth ) == 'number' ) {
    	//Non-IE
		myWidth = window.innerWidth;
		myHeight = window.innerHeight;
	} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
		//IE 6+ in 'standards compliant mode'
		myWidth = document.documentElement.clientWidth;
		myHeight = document.documentElement.clientHeight;
	} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
		//IE 4 compatible
		myWidth = document.body.clientWidth;
		myHeight = document.body.clientHeight;
	}

	var mapHeight = 0;

	if(document.getElementById("map_area")) {
		mapHeight = document.getElementById("map_area").offsetHeight;
	}

	if(document.getElementById("main_part")) {
		var mainHeight = myHeight - document.getElementById("rounded_bottom").offsetHeight - document.getElementById("works_with").offsetHeight;
		if(mainHeight < mapHeight) {
			mainHeight = mapHeight;
		}
		document.getElementById("main_part").style.height = mainHeight + "px";
		if(document.getElementById("dialog_table")) {
			mainHeight = mainHeight - document.getElementById("header").offsetHeight - document.getElementById("footer_margin").offsetHeight;
			document.getElementById("dialog_table").style.height = mainHeight + "px";
		}
	}

	if(document.getElementById("list_td")) {
		var thisHeight = myHeight - document.getElementById("header").offsetHeight - document.getElementById("footer_margin").offsetHeight - document.getElementById("rounded_bottom").offsetHeight - document.getElementById("works_with").offsetHeight;
		if(thisHeight < mapHeight) {
			thisHeight = mapHeight;
		}

		document.getElementById("list").style.height = thisHeight + "px";

		if(document.getElementById("list_table") && document.getElementById("list")) {
			if(!page_loaded) {
				document.getElementById("list_table").style.width = document.getElementById("list").scrollWidth + "px";
				page_loaded = true;
			}
			document.getElementById("list_table").style.width = document.getElementById("list").scrollWidth + "px";
		}

	}
}

function set_list_width() {

	if(document.getElementById("list_table") && document.getElementById("list")) {
		// DEBUG: eens uitzoeken of dit te vermijden is...
		document.getElementById("list_table").style.width = document.getElementById("list").offsetWidth + "px";
		document.getElementById("list_table").style.width = document.getElementById("list").scrollWidth + "px";
	}

}

function set_action(page, fields) {

	var form_action = page;

	if(fields) {

		var fieldList = fields.split(",");

		for(var f in fieldList) {
			if(f == 0) {
				form_action += "?";
			} else {
				form_action += "&";
			}
			if(document.getElementById(fieldList[f])) {
				form_action += fieldList[f] + "=" + encodeURIComponent(document.getElementById(fieldList[f]).value);
				//form_action += fieldList[f] + "=" + document.getElementById(fieldList[f]).value;
			} else {
				if(arg_details[fieldList[f]]) {
					form_action += fieldList[f] + "=" + encodeURIComponent(arg_details[fieldList[f]]);
					//form_action += fieldList[f] + "=" + arg_details[fieldList[f]];
				//} else {
					//form_action += fieldList[f] + "=";
				}
			}
		}
	}

	document.geogeo.action = form_action;

	return true;

}

function show_updating() {

	if(document.getElementById("top_right")) {

		if(submit_timeout) {
			update_off();
		}

		document.getElementById("top_right").innerHTML = "<span id='updating_please_wait'><b>Updating</b>. Please wait.</span>";

		clearTimeout(blink_timer);
		blink_timer = null;

		blink("updating_please_wait", "x");
	}

}

function begin_submit() {

	if(begin_submit_flag) {
		return false;
	}

	begin_submit_flag = true;

	document.geogeo.target = "";

	show_updating();

	if(args) {
		set_action(page, args);
	}

	if(countdown_timer) {
		clearTimeout(countdown_timer);
		countdown_timer = null;
	}

	document.geogeo.submit();

	begin_submit_flag = false;
	return false;

}

function begin_report_submit() {

	if(begin_submit_flag) {
		return false;
	}

	begin_submit_flag = true;

	document.geogeo.target = "";

	if(document.getElementById("top_right")) {

		var top_right_content = document.getElementById("top_right").innerHTML;

		document.getElementById("top_right").innerHTML = "Please wait.";

		//top_right_content = addSlashes(top_right_content);
		
		var pw_timer = setTimeout('set_top_right("'+top_right_content+'")', 5000);

	}

	if(document.getElementById("report_type")) {
		if(document.getElementById("report_type").value == "html" || document.getElementById("report_type").value == "csv" || document.getElementById("report_type").value == "html_simple") {
			document.geogeo.target = "_blank";
		} else {
			document.geogeo.target = "";
		}
	} else {
		document.geogeo.target = "_blank";
	}

	document.geogeo.submit();

	begin_submit_flag = false;

	return false;

}

function set_top_right(content) {

	if(document.getElementById("top_right")) {
		document.getElementById("top_right").innerHTML = content;
	}

}

var toggle=0;
var blink_timer = null;

function blink (tag, number) {
	if(number>=0 || number=="x") {
		var thisElement = document.getElementById(tag);
		if(toggle == 0) {
			if(number!="x") {
				number=number-1;
			}
			toggle=1;
			thisElement.className="invisible";
			blink_timer = setTimeout('blink("'+tag+'", "'+number+'")', 200);
		} else {
			toggle=0;
			thisElement.className="visible";
			blink_timer = setTimeout('blink("'+tag+'", "'+number+'")', 800);
		}
	}
}

function changeCursor() {
	if(document.getElementById("current_boundingbox").value) {
		document.body.style.cursor = "crosshair";
	}
}

function resetCursor() {
	document.body.style.cursor = "default";
}

function add_update_reset() {

	document.onclick = process_click;
	if (document.captureEvents) document.captureEvents(Event.CLICK);

}

function process_click() {

	var min_secs = 10;

	if(remaining_time && remaining_time < min_secs) {
		remaining_time = min_secs;

		clearTimeout(submit_timeout);
		submit_timeout = setTimeout('begin_submit()', remaining_time * 1000);

	}

	return true;

}

function change_args(arg_list) {

	args = arg_list;

}

function show_options(name) {

	document.getElementById(name + "_show").style.display = "none";
	document.getElementById(name + "_hide").style.display = "";

}

function hide_options(name) {

	document.getElementById(name + "_show").style.display = "";
	document.getElementById(name + "_hide").style.display = "none";

}

function radio_select(radio, radiovalue) {
	
	var id=1;
	while(id<10) {
		thisRadio = document.getElementById(radio+id);
		if(thisRadio) {
			if(thisRadio.value == radiovalue) {
				thisRadio.checked = true;
			}
			id++;		
		} else {
			break;
		}
	}

}

function addslashes(str) {
	str=str.replace(/\'/g,'\\\'');
	str=str.replace(/\"/g,'\\"');
	str=str.replace(/\\/g,'\\\\');
	str=str.replace(/\0/g,'\\0');
	return str;
}
