// Version: 16-Jul-2009 
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";
	}
}
// Dit is niet meer nodig i.v.m. filtering vanuit PHP


// 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

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){
	elements = new Array();
	all = el(parent).getElementsByTagName(tag);
	for (var e = 0; e < all.length; e++)
		if (all[e].className.indexOf(className) >= 0)
			elements[elements.length] = all[e];
	return elements;
}*/

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];
				}
				elements = subElementsByClassName(parent.childNodes[e], className, tag, elements);
			}
		}
	}
	return elements;
}

var loading_image = '<img src="system/images/loading.gif" alt="" style="padding-left: 10px; padding-right: 10px; width: 16px; height: 16px;"/>';

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, id){
	AJAX.get(url+"_text&id="+id, AJAX.replaceContent, {'id': 'delete_confirmation_text'});
	el('delete_confirmation_link').href = url+"&id="+id;
	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;
	}

	update_numbers(parent_obj);

	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'
		});
	}
}

// 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 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'});
	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);
}

var dynamicSize = new Array();
function adjustSizes()
{
	for(i = 0; i < dynamicSize.length; i++){
		//alert(dynamicSize[i]['id']);
		//parentWidth = el(dynamicSize[i]['id']).parentNode.clientWidth;
		//alert(parentWidth);
		parentWidth = getWindowWidth();
		el(dynamicSize[i]['id']).style.width = (parentWidth - dynamicSize[i]['subtract_width']) + "px";
	}
}
function addDynamicBlock(id, subtract_width){
	dynamicSize[dynamicSize.length] = {'id': id, 'subtract_width': subtract_width};
}


function getWindowWidth() {
  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;
}

// zorg ervoor dat falsh 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);
}
