var score = new Array();

function emptyOnFocus(id, default_value){
	if (id.value == default_value)
		id.value = "";
}	

function externalLinks() {
	if (!document.getElementsByTagName) return;
	var anchors = document.getElementsByTagName("a");
	for (var i=0; i<anchors.length; i++) {
		var anchor = anchors[i];
		if (anchor.getAttribute("href") &&
		anchor.getAttribute("rel") == "external")
		anchor.target = "_blank";
	}
}

// Event handler 2 oct 2008
function addEvent(obj, eventType, fn, useCapture)
{
    if (obj.addEventListener) {
        obj.addEventListener(eventType, fn, useCapture);
        return true;
    } else {
        if (obj.attachEvent) {
            var r = obj.attachEvent("on"+eventType, fn);
            return r;
        }
    }
}

addEvent(window, 'load', externalLinks);

// Coen 18 aug 2008
function get_cookie(Name) {
	var search = Name + "="
	var returnvalue = "";

	if (document.cookie.length > 0) {
		offset = document.cookie.indexOf(search)
		// if cookie exists
		if (offset != -1) {
			offset += search.length
			// set index of beginning of value
			end = document.cookie.indexOf(";", offset);
			// set index of end of cookie value
			if (end == -1) end = document.cookie.length;
			returnvalue = unescape(document.cookie.substring(offset, end))
		}
	}
	return returnvalue;
}
// END Coen 18 aug 2008

/**
 * HTTP_REFERER browserfix
 * Simuleer een get request
 * Hierdoor wordt HTTP_REFERER
 * geset in $_SERVER
 */
function goTo(url) {
	var a = document.createElement('a');

	if(!a.click) {
		//chrome fix
		window.location = url;
		return;
	} else {
		//firefox fix
		window.location.href = url;
		return;
	}
	
	//IE fix en andere browsers
	a.setAttribute("href", url);
	a.style.display = "none";
	document.body.appendChild(a);
	a.click();
}

function trim(value) {
  value = value.replace(/^\s+/,'');
  value = value.replace(/\s+$/,'');
  return value;
}

function el(id)
{
	return document.getElementById(id);
}

function enterSubmit(e, form)
{
	var e=window.event || e;
	if(e.keyCode == 13){
		//form.onsubmit = returnTrue;
		submit_form(form);
		return false;
	}
	return true;
}

// include another file might even be an url
function include(filename)
{
	var head = document.getElementsByTagName('head')[0];

	script = document.createElement('script');
	script.src = filename;
	script.type = 'text/javascript';
	
	head.appendChild(script);
	return;
}

function getElementsByClassName(parent, className, tag){
	return subElementsByClassName(parent, className, tag, new Array());
}

function subElementsByClassName(parent, className, tag, elements){
	if(parent != null){
		for (var e = 0; e < parent.childNodes.length; e++){
			if(parent.childNodes[e].nodeName=='#text') continue;
			if (parent.childNodes[e].className != null){
				if(parent.childNodes[e].className.indexOf(className) >= 0){
					elements[elements.length] = parent.childNodes[e];
				}else{
					elements = subElementsByClassName(parent.childNodes[e], className, tag, elements);
				}
			}
		}
	}else{
		alert('parent not found');
	}
	return elements;
}

function element_visible(element, stop_at_class){
	if(element != null){
		if(element.style!=null && element.style.display=='none'){
			return false;
		}else{
			if(!$(element.parentNode).hasClass(stop_at_class)){
				return element_visible(element.parentNode, stop_at_class);
			}else{
				return true;
			}
		}
	}else{
		return true;
	}
}

//var loading_image = '<img src="' + static_root + images_folder + '/loading.gif" alt="" style="padding: 3px;"/>';

function in_array(stringToSearch, arrayToSearch) {
	for (s = 0; s < arrayToSearch.length; s++) {
		thisEntry = arrayToSearch[s].toString();
		if (thisEntry == stringToSearch) {
			return true;
		}
	}
	return false;
}

function confirm_delete_simple(url, message){
	el('delete_confirmation_text').innerHTML = message;
	el('delete_confirmation_link').href = url;
	el('delete_confirmation').style.display = 'block';
}

function confirm_delete(url){
	AJAX.get(url.replace(/(a=[a-z_]+)/, '$1_text'), AJAX.replaceContent, {'id': 'delete_confirmation_text'});
	el('delete_confirmation_link').href = url;
	el('delete_confirmation').style.display = 'block';
}

function cancel_delete(){
	el('delete_confirmation').style.display = 'none';
}

function debug_output(text){
	el('vd_info').innerHTML = text;
}


function echo(message)
{
	if (document.getElementById("javascript_output_box") == null)
	{
		var messageContainer = document.createElement('div');
		var messageCss = 'width: 200px; height: 50px; position: static; color:black; background-color: white;';
		messageContainer.style.cssText = messageCss;
		messageContainer.id = "javascript_output_box";
		document.getElementsByTagName("body")[0].appendChild(messageContainer);
	}
	if (message == "clear")
	{
		document.getElementById("javascript_output_box").innerHTML = "";
	}
	else
	{
		time = new Date();
		document.getElementById("javascript_output_box").innerHTML += ("["+time.getHours()+ ":"+time.getMinutes()+":"+time.getSeconds()+"]"+message+"<br>---------------------------------------<br>");
	}
}

function print_r( array, return_val ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Michael White (http://crestidg.com)
    // *     example 1: print_r(1, true);
    // *     returns 1: 1

    var output = "", pad_char = " ", pad_val = 4;

    var formatArray = function (obj, cur_depth, pad_val, pad_char) {
        if(cur_depth > 0)
            cur_depth++;

        var base_pad = repeat_char(pad_val*cur_depth, pad_char);
        var thick_pad = repeat_char(pad_val*(cur_depth+1), pad_char);
        var str = "";

        if(obj instanceof Array) {
            str += "Array\n" + base_pad + "(\n";
            for(var key in obj) {
                if(obj[key] instanceof Array) {
                    str += thick_pad + "["+key+"] => "+formatArray(obj[key], cur_depth+1, pad_val, pad_char);
                } else {
                    str += thick_pad + "["+key+"] => " + obj[key] + "\n";
                }
            }
            str += base_pad + ")\n";
        } else {
            str = obj.toString();
        };

        return str;
    };

    var repeat_char = function (len, pad_char) {
        var str = "";
        for(var i=0; i < len; i++) {str += pad_char;};
        return str;
    };
    output = formatArray(array, 0, pad_val, pad_char);

    if(return_val !== true) {
        document.write("<pre>" + output + "</pre>");
        return true;
    } else {
        return output;
    }
}

function startDrag(obj) {
	parent_obj = obj.parentNode;
	while ( typeof(parent_obj) == 'undefined' || typeof(parent_obj.className) == 'undefined' || parent_obj.className.indexOf('container') == -1){
		parent_obj = parent_obj.parentNode;
	}
	Sortable.create(parent_obj.id, {dropOnEmpty:true,constraint:false,tag:"div",treeTag:"div"});
}


function stopDrag(obj, url) {
	parent_obj = obj.parentNode;
	while (parent_obj.className != 'undefined' && parent_obj.className.indexOf('container') == -1){
		parent_obj = parent_obj.parentNode;
	}
	
	if(url !=''){
		id_obj = obj.parentNode;
		move_id = '';
		while(move_id==''){
			r = getElementsByClassName(id_obj, "move_id", "input");
			if(r.length > 0){
				move_id = r[0].value;
			}
			id_obj = id_obj.parentNode;
		}

		var items = parent_obj.childNodes;
		var result = "";


		previous_id = '';move_after_id = '';
		for(var i=0; i<(items.length/* && move_after_id == ''*/); i++) {
			r = getElementsByClassName(items[i], "move_id", "input");
			if (r.length > 0) {
				if(r[0].value==move_id) move_after_id = previous_id;
				previous_id = r[0].value;
			}
		}
		var url = url+'&move_id='+move_id+'&move_after_id='+move_after_id;
		new Ajax.Request(url, {
			method: 'get'
		});
	}
	
	var element_grid = document.getElementById('element_grid'); 
	var divs = element_grid.getElementsByTagName('div');
	for(var i=0;i<divs.length;i++) {
		var div = divs[i];
		if(div.className == 'mover') {
		}
	}
}

// deze functie voegt een selectionStart en een selectionEnd toe aan de textarea
// Dit is dus alleen voor IE aangezien mozilla dit standaard heeft. Na het gebruiken
// van deze functie kan er dus hetzelfde met de textarea omgegaan worden voor IE en
// mozilla.
function getStartEnd(id)
{
	if(typeof document.selection != 'undefined'){
		var input = el(id);
		input.focus();
		var range = document.selection.createRange();
		stored_range = range.duplicate();
		stored_range.moveToElementText(input);
		stored_range.setEndPoint( 'EndToEnd', range );
		input.selectionStart = stored_range.text.length - range.text.length;
		input.selectionEnd = input.selectionStart + range.text.length;
	}
}

// noGetSE: Bij het selecteren van een link heb je een speciaal geval
// daar wordt de start en eindpositie vantevoren opgeslagen omdat je ze anders kwijt
// bent. Die roepen deze functie dus aan met true als laatste argument, dan wordt niet
// nog een keer de start en de eindplaats bepaald.
function insertAtCursor(id, BeginTag, EndTag, noGetSE) {
	var input = el(id);
	input.focus();

	if(typeof noGetSE == "undefined"){
		getStartEnd(id);
	}

	var start = input.selectionStart;
	var end = input.selectionEnd;
	var insText = input.value.substring(start, end);

	input.value = input.value.substr(0, start) + BeginTag + insText + EndTag + input.value.substr(end);
	/* Aanpassen van cursorpositie */
	var pos;
	if (insText.length == 0) {
		pos = start + BeginTag.length;
	} else {
		pos = start + BeginTag.length + insText.length + EndTag.length;
	}
	input.selectionStart = pos;
	input.selectionEnd = pos;
}


function showEl(id){
	el(id).style.display = "block";
}

function showEl2(id){
	el(id).style.display = "inline";
}

function hideEl(id){
	el(id).style.display = "none";
}


function toggleEl(id){
	el(id).style.display = (el(id).style.display=='none' ? 'block' : 'none');
}


function base64Decode( data ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Tyler Akins (http://rumkin.com)
    // +   improved by: Thunder.m
    // +      input by: Aman Gupta
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // -    depends on: utf8_decode
    // *     example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA==');
    // *     returns 1: 'Kevin van Zonneveld'

    // mozilla has this native
    // - but breaks in 2.0.0.12!
    //if (typeof window['btoa'] == 'function') {
    //    return btoa(data);
    //}

    var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var o1, o2, o3, h1, h2, h3, h4, bits, i = ac = 0, dec = "", tmp_arr = [];

    do {  // unpack four hexets into three octets using index points in b64
        h1 = b64.indexOf(data.charAt(i++));
        h2 = b64.indexOf(data.charAt(i++));
        h3 = b64.indexOf(data.charAt(i++));
        h4 = b64.indexOf(data.charAt(i++));

        bits = h1<<18 | h2<<12 | h3<<6 | h4;

        o1 = bits>>16 & 0xff;
        o2 = bits>>8 & 0xff;
        o3 = bits & 0xff;

        if (h3 == 64) {
            tmp_arr[ac++] = String.fromCharCode(o1);
        } else if (h4 == 64) {
            tmp_arr[ac++] = String.fromCharCode(o1, o2);
        } else {
            tmp_arr[ac++] = String.fromCharCode(o1, o2, o3);
        }
    } while (i < data.length);

    dec = tmp_arr.join('');
    //dec = utf8_decode(dec);

    return dec;
}

// {{{ base64_encode
function base64Encode( data ) {
    // Encodes data with MIME base64
    //
    // +    discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_base64_encode/
    // +       version: 809.522
    // +   original by: Tyler Akins (http://rumkin.com)
    // +   improved by: Bayron Guevara
    // +   improved by: Thunder.m
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // -    depends on: utf8_encode
    // *     example 1: base64_encode('Kevin van Zonneveld');
    // *     returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA=='

    // mozilla has this native
    // - but breaks in 2.0.0.12!
    //if (typeof window['atob'] == 'function') {
    //    return atob(data);
    //}

    var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var o1, o2, o3, h1, h2, h3, h4, bits, i = ac = 0, enc="", tmp_arr = [];
    data = utf8_encode(data);

    do { // pack three octets into four hexets
        o1 = data.charCodeAt(i++);
        o2 = data.charCodeAt(i++);
        o3 = data.charCodeAt(i++);

        bits = o1<<16 | o2<<8 | o3;

        h1 = bits>>18 & 0x3f;
        h2 = bits>>12 & 0x3f;
        h3 = bits>>6 & 0x3f;
        h4 = bits & 0x3f;

        // use hexets to index into b64, and append result to encoded string
        tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
    } while (i < data.length);

    enc = tmp_arr.join('');

    switch( data.length % 3 ){
        case 1:
            enc = enc.slice(0, -2) + '==';
        break;
        case 2:
            enc = enc.slice(0, -1) + '=';
        break;
    }

    return enc;
}// }}}

// {{{ utf8_encode
function utf8_encode ( string ) {
    // Encodes an ISO-8859-1 string to UTF-8
    //
    // +    discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_utf8_encode/
    // +       version: 811.1414
    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: sowberry
    // +    tweaked by: Jack
    // +   bugfixed by: Onno Marsman
    // +   improved by: Yves Sucaet
    // +   bugfixed by: Onno Marsman
    // *     example 1: utf8_encode('Kevin van Zonneveld');
    // *     returns 1: 'Kevin van Zonneveld'

    string = (string+'').replace(/\r\n/g, "\n").replace(/\r/g, "\n");

    var utftext = "";
    var start, end;
    var stringl = 0;

    start = end = 0;
    stringl = string.length;
    for (var n = 0; n < stringl; n++) {
        var c1 = string.charCodeAt(n);
        var enc = null;

        if (c1 < 128) {
            end++;
        } else if((c1 > 127) && (c1 < 2048)) {
            enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128);
        } else {
            enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128);
        }
        if (enc != null) {
            if (end > start) {
                utftext += string.substring(start, end);
            }
            utftext += enc;
            start = end = n+1;
        }
    }

    if (end > start) {
        utftext += string.substring(start, string.length);
    }

    return utftext;
}// }}}


function popup(url){
	if (el('popup') == undefined){
		var body = document.getElementsByTagName("body")[0];
		var tmp = document.createElement("div");
		tmp.innerHTML = "<div id=\"popup\" style=\"display:none\"></div>";
		body.appendChild(tmp.childNodes[0]);
	} else {
		el('popup').innerHTML = "";
	}
	AJAX.get(url, AJAX.replaceContent, {'id':'popup'});
	scrollToElement(el('popup'));
	el('popup').style.display = 'block';
}

function popupClose(){
	el('popup').style.display = 'none';
}

function getType(obj) {
	var type = typeof obj;
	if (type == 'object') {
		if (obj.getDate) return 'Date';
		if (obj.split) return 'String';
		return obj;
	}
	return type;
}

function newWindow(url) {
	var newWindow = window.open(url, '_blank');
	newWindow.focus();
	return false;
}

/**
 * Laad een stylesheet tijdens runtime
 *
 * @since	Fri Apr 11 10:25:50 CEST 2008
 * @author	Jamie
 */
function loadStyleSheet(link)
{
	stylesheet = document.createElement("link");
	stylesheet.setAttribute("rel", "stylesheet");
	stylesheet.setAttribute("type", "text/css");
	stylesheet.setAttribute("href", link);
	document.getElementsByTagName("head")[0].appendChild(stylesheet);
}

function getWindowWidth() {
	return $(window).width();
	var myWidth = 0;
	if( typeof( window.innerWidth ) == 'number' ) {
		//Non-IE
		myWidth = window.innerWidth;
	} else if( document.documentElement && ( document.documentElement.clientWidth ) ) {
		//IE 6+ in 'standards compliant mode'
		myWidth = document.documentElement.clientWidth;
	} else if( document.body && ( document.body.clientWidth ) ) {
		//IE 4 compatible
		myWidth = document.body.clientWidth;
	}
	return myWidth;
}

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

function getScrollXY() {
  var scrOfX = 0, scrOfY = 0;
  if( typeof( window.pageYOffset ) == 'number' ) {
    //Netscape compliant
    scrOfY = window.pageYOffset;
    scrOfX = window.pageXOffset;
  } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
    //DOM compliant
    scrOfY = document.body.scrollTop;
    scrOfX = document.body.scrollLeft;
  } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
    //IE6 standards compliant mode
    scrOfY = document.documentElement.scrollTop;
    scrOfX = document.documentElement.scrollLeft;
  }
  return [ scrOfX, scrOfY ];
}

// zorg ervoor dat flash objecten op de achtergrond komen
function displayFlashObjects(show) {
	objects = document.getElementsByTagName('object');
	for (var e = 0; e < objects.length; e++){
		objects[e].style.display = show ? '' : 'none';
	}
}


function scrollToElement(element){
	var selectedPosX = 0;
	var selectedPosY = 0;

	while(element != null){
		selectedPosX += element.offsetLeft;
		selectedPosY += element.offsetTop;
		element = element.offsetParent;
	}
	                    		      
	window.scrollTo(selectedPosX,selectedPosY);
}

function execJS(html){
	script_div = document.createElement("div");
	script_div.innerHTML = "<div>TEST</div>"+html;
	// voer javascripts uit in de opgehaalde html
	var scripts = script_div.getElementsByTagName("script");
	var head = document.getElementsByTagName("head")[0];
	for(var i=0;i<scripts.length;i++)
	{
		var script = document.createElement("script");
		script.type="text/javascript";
		// inline javascript
		if (scripts[i].text != '') {
			script.text=scripts[i].text;
		// externe javascript
		} else if (scripts[i].src != '') {
			script.src=scripts[i].src;
		}
		head.appendChild(script);
	}
}

function addCSS(url){
	url_found = false;
	$('link').each(
		function(index) {
			if((this.href).indexOf(url) > -1) url_found = true;
		} 
	);
	
	if(url_found == false) $('head').append('<link href="' + url + '" rel="stylesheet" media="screen" type="text/css" />');
}

function addJS(url){
	url_found = false;
	$('script').each(
		function(index) {
			if((this.src).indexOf(url) > -1) url_found = true;
		} 
	);
	
	if(url_found == false) $('head').append('<script type="text/javascript" src="' + url + '"></script>');
}

function get_width(element){
	width = Math.round(element.style.width.replace('px',''));
	if(width > 0){
		return width;
	}else{
		return element.offsetWidth;
	}
}

function get_height(element){
	height = Math.round(element.style.height.replace('px',''));
	if(height > 0){
		return height;
	}else{
		return element.offsetHeight;
	}
}

function trim(value) {
  value = value.replace(/^\s+/,'');
  value = value.replace(/\s+$/,'');
  return value;
}

window.onerror=system_error_handler;

function system_error_handler(desc,page,line,chr){
	if(AJAX != null){
		desc = base64Encode(desc);
		page = base64Encode(page);
		request = base64Encode(window.location.href);
		// voeg error toe aan system-log
		url = '/?m=system&a=javascript_error&page='+page+'&line='+line+'&desc='+desc+'&request='+request;
		if(chr != null) url = url + '&chr='+chr;
		
		AJAX.get(url, function(){}, {});
	}
	// verder normale foutverwerking
 	return false;
}

function isset(variable_name)
{
	try
	{
	if (typeof(eval(variable_name)) != 'undefined')
	if (eval(variable_name) != null)
	return true;
	} catch(e) { }
	
	return false;
}

function fix_flash_objects(){
	// FireFox
	$("object").attr("wmode", "opaque");

	var embedTag;
	$("object").each(function(i) {
		embedTag = $(this).attr("outerHTML");
		if ((embedTag != null) && (embedTag.length > 0)) {
			embedTag = embedTag.replace(/embed /gi, "embed wmode=\"opaque\" ");
			$(this).attr("outerHTML", embedTag);
		}
		// This "else" was added
		else {
			$(this).wrap("<div></div>");
		}
	});
}

function vd_translate(text){
	return AJAX.getSynch('/?m=language&a=translate&text='+base64Encode(text), function(){}, Array());
}

function enterKey(event){
	var key=event.keyCode || event.which;
	return key==13;
}

function place_in_viewport(page_x, page_y, obj, margin_x, margin_y){
	var docrightedge=$(document).scrollLeft()+$(window).width() - 20;
	var docbottomedge=$(document).scrollTop()+$(window).height() - 20;
	var x=page_x + 14;
	var y=page_y - 14;

	x=(x+get_width(obj) > docrightedge) ? x-get_width(obj) : x; //if not enough horizontal room to the ridge of the cursor
	y=(y+get_height(obj) > docbottomedge) ? y-get_height(obj) : y;
	
	if(y < 0) y = 0;
	if(x < 0) x = 0;
	
	x = x + margin_x;
	y = y + margin_y;

	$(obj).css({left:x, top: y});
}

function urlToArray(url) {
  var request = {};
  var pairs = url.substring(url.indexOf('?') + 1).split('&');
  for (var i = 0; i < pairs.length; i++) {
    var pair = pairs[i].split('=');
    request[pair[0]] = pair[1];
  }
  return request;
}
