//Simpele functie, maar is wel op meerdere plaatsen nodig denk ik.
function page_clear() {
	dojo.forEach(mainDiv.getChildren(), function(child){
		mainDiv.removeChild(child);
		child.destroy();
	});
}

function show_error(error_message, title) {
	if(!title) title = translate("Error");
	var dialog = new dijit.Dialog({title:title});
	dialog.setContent("<div align='center'>" + error_message + "<br><br><button type='submit' dojoType='dijit.form.Button' label='Ok'></button></div>");
	dialog.show();
	translate_labels();
}

function show_errors(errors) {
	var error = errors.join("<br><br>");
	show_error(error);
}

function xhr(input) {
	var out = false;
	var error = false;
	
	// Als we geen load-functie gedefiniëerd hebben, dan ga ik er vanuit dat we een syncronous call willen 
	// en zorg ik ervoor dat de response van de xhrPost-call teruggegeven wordt door de xhr functie
	if(!input.load) {
		input.sync = true;
		input.load = function(response, ioArgs) {
			out = response;
		}
	}
	
	if(!input.timeout) input.timeout = 10000;
	
	if(!input.error) {
	    input.error = function(response, ioArgs) {
	    	var myArgs = ioArgs.args;
	    	if(myArgs.sync == true) error = true;
			if(myArgs.count == 4 && myArgs.sync == true) {
		    	if(response.message == "timeout exceeded") {
					show_error(translate("Cannot connect to the server. please try again later."));
		    	} else {
		    		show_error(translate("An error has occured: " + response.message));
		    	}
			}
		}
	}

	if(!input.handleAs) {
		input.handleAs = "json-comment-filtered";
	}
		
	if(!input.content) input.content = {};
	
	// Standaard doen we een post. Als je toch bepaalde vars in de url wil stoppen, kan je ze in de get-array stoppen
	if(input.get) {
		var get = dojo.objectToQuery(input.get);
		delete(input.get);
		input.url += (input.url.indexOf("?") == -1 ? "?" : "&") + get;
	}
	
	var urlHalves = input.url.split('?');
	if(urlHalves[1]){
		var urlVars = urlHalves[1].split('&');
		for(i=0; i<=(urlVars.length); i++){
			if(urlVars[i]){
				var urlVarPair = urlVars[i].split('=');
				input.content[urlVarPair[0]] = urlVarPair[1];
			}
		}
	}
	
	input.preventCache = true;

	var content = {};
	for(i in input.content) {
		if(i.substring(0,2) != "__" && input.content[i] != undefined) {
			content[i] = input.content[i];
		}
	}
	
	//console.debug(input);
	
	delete(input.content);
	
	input.postData = dojo.toJson(content);
	for(i = 0; i<5; i++) {
		input.count = i;
		dojo.rawXhrPost(input);
		if(error) {
			error = false;
		} else {
			break;
		}
	}
	return out;
	
}

function rawxhr(input) {
	var out = false;
	var error = false;
	
	// Als we geen load-functie gedefinieerd hebben, dan ga ik er vanuit dat we een syncronous call willen 
	// en zorg ik ervoor dat de response van de xhrPost-call teruggegeven wordt door de xhr functie
	if(!input.load) {
		input.sync = true;
		input.load = function(response, ioArgs) {
			out = response;
		}
	}
	
	if(!input.timeout) input.timeout = 10000;
	
	if(!input.error) {
	    input.error = function(response, ioArgs) {
	    	var myArgs = ioArgs.args;
	    	if(myArgs.sync == true) error = true;
			if(myArgs.count == 4 && myArgs.sync == true) {
		    	if(response.message == "timeout exceeded") {
					show_error(translate("Cannot connect to the server. please try again later."));
		    	} else {
		    		show_error(translate("An error has occured: " + response.message));
		    	}
			}
		}
	}

	if(!input.handleAs) {
		input.handleAs = "json-comment-filtered";
	}
		
	/*
	if(!input.content) input.content = {};
	
	// Standaard doen we een post. Als je toch bepaalde vars in de url wil stoppen, kan je ze in de get-array stoppen
	if(input.get) {
		var get = dojo.objectToQuery(input.get);
		delete(input.get);
		input.url += (input.url.indexOf("?") == -1 ? "?" : "&") + get;
	}
	
	var urlHalves = input.url.split('?');
	if(urlHalves[1]){
		var urlVars = urlHalves[1].split('&');
		for(i=0; i<=(urlVars.length); i++){
			if(urlVars[i]){
				var urlVarPair = urlVars[i].split('=');
				input.content[urlVarPair[0]] = urlVarPair[1];
			}
		}
	}
	*/
	input.preventCache = true;

	/*var content = {};
	for(i in input.content) {
		if(i.substring(0,2) != "__" && input.content[i] != undefined) {
			content[i] = input.content[i];
		}
	}
	*/
	//console.debug(input);
	
	delete(input.content);
	
	input.postData = content;
	for(i = 0; i<5; i++) {
		input.count = i;
		dojo.rawXhrPost(input);
		if(error) {
			error = false;
		} else {
			break;
		}
	}
	return out;
	
}


function map_init(id) {
	if(window.frames[id + "_map"] && window.frames[id + "_map"].loaded) {
		dijit.byId(id).mapLayer = window.frames[id + "_map"];
		//dojo.connect(dijit.byId(id).mapLayer, "resize", dijit.byId(id).mapLayer.refresh());
	} else {
		setTimeout("map_init(\"" + id + "\")", 100);
	}
}

function map_do(object, func, params) { 
	mapArray.push({
		id:object.id,
		func:func,
		params:params
	}); 
}

function create_menu(params) {
	var menu = new spotmaster.menu(params);
	dojo.connect(menu, "startup", "translate_labels");
	dojo.connect(menu, "startup", "correctPNG");
		
	dojo.forEach(header.getChildren(), function(child){
		header.removeChild(child);
		child.destroy();
	});
	
	header.addChild(menu);
	return menu;
	
}

function show_menu(menu_structure, title) {

	if(!title) title= 'Menu';
	if(menu_dialog) menu_dialog.destroy();
	menu_dialog = new spotmaster.Dialog({title: title});

	var ctr = 0;
	var content = '<table border=0>';
	dojo.forEach(menu_structure, function(menu_item){
		ctr++; 
		if(dijit.byId('sm_'+ctr)) dijit.byId('sm_'+ctr).destroy();
		var has_right = true;
		if(menu_item.rights) {
			has_right = false;
			for(i in menu_item.rights) {
				for(j in menu_item.rights[i]) {
					if((session.user_rights[i] == menu_item.rights[i][j]) || (session.user_rights[i] && menu_item.rights[i][j] == "all")) has_right = true;
				}
			}
		}
		if(menu_item.hide) has_right = false;
		if(has_right) content += "<tr><td align='right' valign='middle'><div id='sm_"+ ctr +"'></div></td><td align='left' valign='middle'>&raquo; " + translate(menu_item.description) + "</td></tr>";
	});
	content += "</table>";
	menu_dialog.setContent(content);

	var ctr = 0;
	dojo.forEach(menu_structure, function(menu_item){
		ctr++;
		//if(dijit.byId('sm_'+ctr)) {
		if(document.getElementById('sm_'+ctr)) {
			if(menu_item['submenu']) {
				var mb = new dijit.form.Button({
					type: 'submit',
					label: translate(menu_item['name']),
					onClick: function() {show_menu(main_menu[menu_item['submenu']]);}
				}, 'sm_' + ctr);
			} else if(menu_item['target']) {
				var mb = new dijit.form.Button({
					type: 'submit',
					label: translate(menu_item['name']),
					onClick: function() {show_page(menu_item['target'], menu_item['params']);}
				}, 'sm_' + ctr);			
			} else if(menu_item['page']) {
				var mb = new dijit.form.Button({
					type: 'submit',
					label: translate(menu_item['name']),
					onClick: function() {window.open(menu_item['page']);}
				}, 'sm_' + ctr);			
			} else {
				var mb = new dijit.form.Button({
					type: 'submit',
					label: translate(menu_item['name']),
					onClick: menu_item['action']
				}, 'sm_' + ctr);
			}
		}
	});
	menu_dialog.show();	
	
}

function show_page(item, params) {

	if(document.getElementById("tablist_td")) document.getElementById("tablist_td").style.display='none';
	if(document.getElementById("submenu_tr")) document.getElementById("submenu_tr").style.display='none';
	
	var p = "";
	if(params) p = dojo.toJson(params);
		
	if(p) {
		setTimeout("show_page_do(\"" + item + "\", " + p + ")", 1);
	} else {
		setTimeout("show_page_do(\"" + item + "\")", 1);		
	}
	
}

function show_page_do(item, params) {
	
	dojo.forEach(tablist.getChildren(), function(child){
		tablist.removeChild(child);
		child.destroy();
	});

	back_items.push(menu_item);
	dojo.back.addToHistory(state);

	var p = "";
	if(params) p = dojo.toJson(params);
	
	if(document.getElementById("tablist_td")) document.getElementById("tablist_td").style.display='';

	menu_item = item;
	var name = "spotmaster." + item;
	var newTab = eval("new " + name + "(" + p + ");");

	current_page_id = newTab.id;
	
	dojo.connect(newTab, "startup", "translate_labels");
	dojo.connect(newTab, "startup", "correctPNG");
	tablist.addChild(newTab);
	
}

function back_to_homepage() {
	
	dojo.forEach(tablist.getChildren(), function(child){
		tablist.removeChild(child);
		child.destroy();
	});
	
	var name = 'spotmaster.home';
	if(dojo.exists(name)) {
		var newTab = eval("new " + name + "();");
		dojo.connect(newTab, "startup", "translate_labels");
		dojo.connect(newTab, "startup", "correctPNG");
		tablist.addChild(newTab);
		
		// menu deselecteren
		if(menu_item) {
			document.getElementById(menu_item).className = "submenu";
			document.getElementById(menu_item).oldClassName = "submenu";
		}
		
	} else {
		show_error(translate("Page can not be found"));
	}
	
}

function get_translations(language) {
		
	if(!language) language = dojo.cookie("country");
	if(!language) language = "nl";	
	
	translations = null;
	
	if(all_translations[language]) {
		translations = all_translations[language];
	}
	
	if(!translations) {
		language = language.substring(0,2);
		if(all_translations[language]) {
			translations = all_translations[language];
		}
	}	

	//Dit staat hier misschien niet op z'n plaats
	//maar zorgt er wel voor dat de loading-boodschap altijd mee vertaald wordt
	//loader._setMessage(translate("Loading..."));
	loader._setMessage("");

}

function translate(text) {
	//if(translations && translations[text]) {
	//return text;
	var found = false
	if(translations) {
		for(i in translations) {
			if(translations[i] && translations[i]['text'] == text) {
				if(translations[i]['translation']) {
					found = true;
					text = translations[i]['translation'];
				} 
				break;
			}
		}
	}
/*
	if(!found) {
		//console.debug(text);
		xhr({
			url: "translations.php?action=insert",
			content:{text:text},
			load:function(response, ioArgs){return response;}
		});
	}
*/
	return text;
}

function translate_labels() {
	dojo.forEach(dojo.query("label,button"), function(span) {
		// in span.translated hou ik bij of het item al vertaald is. Is het nog niet vertaald, dan vertalen we
		if(!span.translated) {
			if(span.id && dijit.byId(span.id).declaredClass == "dijit.form.Button") {
				dijit.byId(span.id).setLabel(translate(dijit.byId(span.id).label));
			} else {
				span.innerHTML = translate(span.innerHTML);
			}
			span.translated = true;
		}
	});
}

function json_vals(struct, key) {
	var out = new Array()
	for(i in struct) {
		out.push(translate(struct[i][key]));
	}
	return out;
}

function array_keys(list) {
	var out = new Array();
	for(i in list) {
		out.push(i);
	}
	return out;
}

function array_vals(list) {
	var out = new Array();
	for(i in list) {
		out.push(translate(list[i]));
	}
	return out;
}

function json_lookup(struct, ori_key, val, new_key) {
	for(i in struct) {
		if(struct[i][ori_key] == val) {
			return struct[i][new_key];
		}
	}
	return "";
}

function time_to_sec(date) {

	var time = date.substring(date.length-8,date.length);
	var t = time.split(":");
	return (t[0] * 3600) + (t[1] * 60) + parseInt(t[2]);
	
}

// Formatting functions
function short_date(date) {
	if(date == "?" || date == "..." || !date) return date;
	
	var dt = date.split(" ");
	if(dt[0] && dt[1]) {
		var d = dt[0].split("-");
		var t = dt[1].split(":");
		if(d && t) {
			return d[2] + "-" + d[1] + " " + t[0] + ":" + t[1];		
		} else {
			return date;
		}
	} else {
		return date;
	}
}

function short_time(date) {
	if(date == "?" || date == "..." || !date) return date;
	
	var dt = date.split(" ");
	if(dt[0] && dt[1]) {
		var d = dt[0].split("-");
		var t = dt[1].split(":");
		if(d && t) {
			return t[0] + ":" + t[1];		
		} else {
			return date;
		}
	} else {
		return date;
	}
}


function long_time(date) {
	if(date == "?" || date == "..." || !date) return date;
	
	var dt = date.split(" ");
	if(dt[0] && dt[1]) {
		var d = dt[0].split("-");
		var t = dt[1].split(":");
		if(d && t) {
			return t[0] + ":" + t[1] + ":" + t[2];		
		} else {
			return date;
		}
	} else {
		return date;
	}
}
function long_date(date) {
	if(date == "?" || date == "...") return date;
	
	var dt = date.split(" ");
	var d = dt[0].split("-");
	if(dt[1]) {
		return d[2] + "-" + d[1] + "-"+ d[0] + " " + dt[1];
	} else {
		return d[2] + "-" + d[1] + "-"+ d[0];
	}
}

//van date-object naar yyyy-mm-dd
function string_from_date(timestamp) {
	if(timestamp == "?" || timestamp == "...") return timestamp;
	//return dojo.date.locale.format(timestamp, {datePattern:'yyyy-MM-dd', timePattern:''}).substring(0,10);
	var y = timestamp.getYear();
	var m = timestamp.getMonth() + 1;
	var d = timestamp.getDate();
	if(y<1900) y += 1900;
	if(m<10) m = '0'+m;
	if(d<10) d = '0'+d;
	return y + "-" + m + "-" + d;
}

//van yyyy-mm-dd of yyyy-mm-dd hh:mm:ss naar date-object
function date_from_string(string_date) {
	var dt = string_date.split(" ");
	var ad = dt[0].split("-");
	if(dt[1]) {
		at = dt[1].split(":");
		return new Date(ad[0], ad[1]-1, ad[2], at[0], at[1], at[2]);
	} else {
		return new Date(ad[0], ad[1]-1, ad[2]);
	}
}

//van yyyy-mm-dd naar dd-mm-yyyy of omgekeerd
function date_flip(date) {
	var dt = date.split("-");
	if(!dt[0] || !dt[1] || !dt[2]) return date;
	return dt[2] + "-" + dt[1] + "-" + dt[0];
}

function date_only(timestamp) {
	if(timestamp == "?" || timestamp == "...") return timestamp;	
	date = dojo.date.locale.format(timestamp, {selector:'dateOnly', formatLength:'short'}).split(" ");
	return date[0];
}

function seconds_to_timestamp(seconds) {	
	if(seconds == "?" || seconds == "...") return seconds;
	if(isNaN(seconds)) return seconds;
	
	var out;
	var neg;
	
	var a = seconds;
	if(a<0) {
		neg = true;
		a = Math.abs(a);
	}
	var s = a % 60;
	s = s + "s";
	out = s;
	
	a = Math.floor(a / 60);
	var m = a % 60;
	m = m + "m";
	if(m != "0m") out = m + s;
	
	a = Math.floor(a / 60);
	var h = a % 60;
	h = h + "h";
	if(h != "0h") out = h + m + s;
	
	a = Math.floor(a / 24);
	var d = a + "d";
	if(d != "0d") out = d + h + m + s;
	
	if(neg) {
		out = "-" + out;
	}
	
	return out;
}

function seconds_to_timestamp_short(seconds) {	
	if(seconds == "?" || seconds == "...") return seconds;
	if(isNaN(seconds)) return seconds;
	
	var out;
	var neg;
	
	var a = seconds;
	if(a<0) {
		neg = true;
		a = Math.abs(a);
	}
	var s = a % 60;
	s = s + "s";
	out = s;
	
	a = Math.floor(a / 60);
	var m = a % 60;
	m = m + "m";
	if(m != "0m") out = m;
	
	a = Math.floor(a / 60);
	var h = a % 60;
	h = h + "h";
	if(h != "0h") out = h;
	
	a = Math.floor(a / 24);
	var d = a + "d";
	if(d != "0d") out = d;
	
	if(neg) {
		out = "-" + out;
	}
	
	return out;
}


function seconds_to_timestamp_medium(seconds) {	
	if(seconds == "?" || seconds == "...") return seconds;
	if(isNaN(seconds)) return seconds;
	
	var out;
	var neg;
	
	var a = seconds;
	if(a<0) {
		neg = true;
		a = Math.abs(a);
	}
	var s = a % 60;
	s = s + "s";
	out = s;
	
	a = Math.floor(a / 60);
	var m = a % 60;
	m = m + "m";
	if(m != "0m") out = m + s;
	
	a = Math.floor(a / 60);
	var h = a % 60;
	h = h + "h";
	if(h != "0h") out = h + m;
	
	a = Math.floor(a / 24);
	var d = a + "d";
	if(d != "0d") out = d + h;
	
	if(neg) {
		out = "-" + out;
	}
	
	return out;
}


function km(distance) {
	if(distance == "?" || distance == "...") return distance;
	return Math.round(distance*100)/100 + "km";
}

function m(distance) {
	if(distance == "?" || distance == "...") return distance;
	return nbsp(distance) + "m";
}

function direction(dir) {
	if(dir == "?" || dir == "...") return dir;
	var dirs = ['N', 'NE', 'E', 'SE', 'S', 'SW', 'W', 'NW', 'N'];
	var mydir = Math.round(dir / 360 * 8);
	return Math.round(dir) + dirs[mydir];
}

function speed(speed) {
	if(speed == "?" || speed == "...") return speed;
	if(speed === null || speed === "") return "&nbsp;";
	if(!speed) speed = 0;
	return speed + "km/h";
}

function nbsp(input) {
	if(!input) input = "&nbsp;";
	return input;
}

function ucfirst( str ) {
    // original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    var f = str.charAt(0).toUpperCase();
    return f + str.substr(1, str.length-1);
}


function getURLVar(urlVarName) {
//divide the URL in half at the '?'
	var urlHalves = String(document.location).split('?');
	var urlVarValue = '';
	if(urlHalves[1]){
		//load all the name/value pairs into an array
		var urlVars = urlHalves[1].split('&');
		//loop over the list, and find the specified url variable
		for(i=0; i<=(urlVars.length); i++){
			if(urlVars[i]){
				//load the name/value pair into an array
				var urlVarPair = urlVars[i].split('=');
				if (urlVarPair[0] && urlVarPair[0] == urlVarName) {
					//I found a variable that matches, load it's value into the return variable
					urlVarValue = urlVarPair[1];
				}
			}
		}
	}
	return urlVarValue;
}

function get_country() {
	
	var language = dojo.cookie("language");
	if(!language) language = "nl";		
	var country = language.substring(language.length-2,language.length);
	country = country.toUpperCase();
	return country;
	
}
