var chk;

/**
* Toggles all checkboxes within a form (f) with the same name (n) to a certain state (state)
* Can disbale the checkbox after change and/or trigger an onChange event
*/
function selectAll(f,n, disableChanged, triggerOnChange) {
	chk = !(chk);
	for (i = 0; i < f.elements.length; i++) {
			//alert(f.elements[i].name);
		if( f.elements[i].type == 'checkbox' && (f.elements[i].name == n || f.elements[i].id == n) ) {
			if(disableChanged && f.elements[i].checked != chk) {
				f.elements[i].disabled = true;
			}
			f.elements[i].checked = chk;
			if(triggerOnChange){
				f.elements[i].onchange();
			}
		}
	}
}

/**
* Sets all checkboxes within a form (f) with the same name (n) to a certain state (state)
* Can disbale the checkbox after change and/or trigger an onChange event
*/
function setCheckBoxAll(f,n, state, disableChanged, triggerOnChange) {
	if(!state){
		state =  false;
	}
	for (i = 0; i < f.elements.length; i++) {
			//alert(f.elements[i].name);
		if( f.elements[i].type == 'checkbox' && (f.elements[i].name == n || f.elements[i].id == n) ) {
			if(disableChanged && f.elements[i].checked != chk) {
				f.elements[i].disabled = true;
			}
			f.elements[i].checked = state;
			if(triggerOnChange){
				f.elements[i].onchange();
			}
		}
	}
}

function blink(element, repeatAmount) {
	
	if(repeatAmount === undefined) {
		var repeatAmount = 3;
	}
	
	jQuery("#"+element).cyclicFade({
	    repeat: repeatAmount,
	    params: [
	        {fadeout:100, stayout:300, opout:0, fadein:100, stayin:300, opin:1}
	    ]
	});
}


/*function blink(element){
	window['temp_x_' + element] = 1;
	window['temp_y_' + element] = 1;
	ticToc(element);
}*/

function ticToc(element){
	blink_x = window['temp_x_' + element];
	blink_y = window['temp_y_' + element];
	if(blink_x==1){
		blink_x=0;
		blink_y++;
		document.getElementById(element).style.visibility = 'hidden';
	} else {
		blink_x=1;
		blink_y++;
		document.getElementById(element).style.visibility = 'visible';
	}
	if (blink_y < 5) {
		setTimeout('ticToc(\''+element+'\')', 250);
	}
	window['temp_x_' + element] = blink_x;
	window['temp_y_' + element] = blink_y;
}

function unselectAll(f,n, disableChanged) {
	chk = true;	//so selectAll will set chk to false
	selectAll(f,n,disableChanged);
}

function setAll(f,n,v) {
	for (i = 0; i < f.elements.length; i++) {
		if(f.elements[i].name.substr(0,n.length) == n ) {
			f.elements[i].value = v;
		} 
	}
}

function toggleCheckboxByName(name){
	if(document.getElementsByName(name)[0].checked && document.getElementsByName(name)[0].disabled == false){
		document.getElementsByName(name)[0].checked = false;
		document.getElementsByName(name)[0].onchange();
		return true;
	} else if (document.getElementsByName(name)[0].disabled == false) {
		document.getElementsByName(name)[0].checked = true;
		document.getElementsByName(name)[0].onchange();
		return true;
	}
	return false;
}

function switchClass(element, standard, alternative){
	if(document.getElementById(element).className == standard){
		document.getElementById(element).className = alternative;
	} else {
		document.getElementById(element).className = standard;
	}
}

/* 
	Switches the class for a range of elements, named element+start > element+end
*/
function switchClassAll(element, start, end, standard, alternative){
	for(var i=start; i < end; i++){
		switchClass(element+i, standard, alternative);
	}
}

function toggleAll(v) {
	var hidden = document.getElementById(v+'-hid');
	if(hidden) {
		while(hidden) {
			hidden.style.display = '';
			hidden.id = v+'-vis';
			var hidden = document.getElementById(v+'-hid');
		}
	} else {
		var visible = document.getElementById(v+'-vis');
		while(visible) {
			visible.style.display = 'none';
			visible.id = v+'-hid';
			var visible = document.getElementById(v+'-vis');
		}
	}
}
	
function showAll(v) {
	var hidden = document.getElementById(v+'-hid');
	if(hidden) {
		while(hidden) {
			hidden.style.display = '';
			hidden.id = v+'-vis';
			var hidden = document.getElementById(v+'-hid');
		}
	} 
}	

function hideAll(v) {
	var visible = document.getElementById(v+'-vis');
	if(visible) {
		while(visible) {
			visible.style.display = 'none';
			visible.id = v+'-hid';
			var visible = document.getElementById(v+'-vis');
		}
	}
}		

function toggleBox(szDivID, iState) // 1 visible, 0 hidden
{
    if(document.layers)	   //NN4+
    {
       document.layers[szDivID].visibility = iState ? "show" : "hide";
    }
    else if(document.getElementById)	  //gecko(NN6) + IE 5+
    {
        var obj = document.getElementById(szDivID);
        obj.style.visibility = iState ? "visible" : "hidden";
    }
    else if(document.all)	// IE 4
    {
        document.all[szDivID].style.visibility = iState ? "visible" : "hidden";
    }
}

//switches the visibility of a div item, regardless of its current state
function blocking(nr)
{
	if (document.layers)
	{
		current = (document.layers[nr].display == 'none') ? '' : 'none';
		document.layers[nr].display = current;
	}
	else if (document.all)
	{
		current = (document.all[nr].style.display == 'none') ? '' : 'none';
		document.all[nr].style.display = current;
	}
	else if (document.getElementById)
	{
		vista = (document.getElementById(nr).style.display == 'none') ? '' : 'none';
		document.getElementById(nr).style.display = vista;
	}
}

/**
 * Blocking's a series of elements, numbered at the end of the name
 * e.g. blockingSeries('foo', 2, 4) blocks: 'foo2', 'foo3', 'foo4'
 * @param name name of the element
 * @param start start number to be blocking
 * @param end final number to be blocking
 */
function blockingSeries(name, start, end){
	for(i=0; i <= (end - start); i++){
		blocking(name + (start + i));
	}
}

function noop(){
	//void
}

function addRow(table){
	
	//controleren of alles is ingevuld
	
	tableref = document.getElementById(table);
	var selectBoxes = tableref.getElementsByTagName('select');
	var selectBoxesCount = selectBoxes.length;
	
	var newRow = true;
	for(var i=0;i<selectBoxesCount;i++){
		if(selectBoxes[i].value == 0){
			newRow = false;
		}
	}

	if(newRow){
		var length = document.getElementById(table).rows.length;

		var row = document.getElementById(table).insertRow(length);

		var cellCount = document.getElementById(table).rows[document.getElementById(table).rows.length-2].cells.length;
		
		var cell;
		var oldname;
		
		for(var i=cellCount-1;i>=0;i--){
			cell = row.insertCell(0);
			cell.innerHTML = document.getElementById(table).rows[document.getElementById(table).rows.length-2].cells[i].innerHTML;
			oldname = cell.getElementsByTagName('select')[0].name;
			oldname = oldname.substr(0,oldname.indexOf('['));
			cell.getElementsByTagName('select')[0].name = oldname + '[' + document.getElementById('nextcounter').value + ']';
		}
				
		document.getElementById('nextcounter').value = (parseInt(document.getElementById('nextcounter').value)+1);
	}
}

//submits a from by the enter key
function submitenter(myfield,e){
	if (isEnterKeyPress(e))
	   {
	   myfield.form.submit();
	   return false;
	   }
	else
	   return true;
}

function isEnterKeyPress(e) {
	var keycode;
	if (window.event) keycode = window.event.keyCode;
	else if (e) keycode = e.which;
	else return false;
	
	if (keycode == 13)
	   {
	   return true;
	   }
	else
	   return false;
}

//converts all values in a form into a string (good for GET values)
function convertFormValuesIntoString(aForm){
	var str = '';
	var addAmp = false;
	var elem = document.forms[aForm].elements;

	for(var i = 0; i < elem.length; i++){
		if(elem[i].multiple == true) {
			for(var j = 0; j < elem[i].options.length; j++){
				if(elem[i].options[j].selected == true) {
					if(addAmp == true) {
						str += "&";
					}
					str += elem[i].name + "["+j+"]=" + elem[i].options[j].value;
					addAmp = true;
				}
			}
		} else {
			if(typeof(CKEDITOR) != "undefined" && CKEDITOR.instances[elem[i].name]) {
				elem[i].value = CKEDITOR.instances[elem[i].name].getData();
			}
			
			if(addAmp == true){
				str += "&";
			}
			if(elem[i].type == 'checkbox' ){
				if(elem[i].checked == true){
					str += elem[i].name + "=";
					str += elem[i].value;
					addAmp = true;
				} else {
					addAmp = false;
				}
			} else if (elem[i].type == 'radio'){ //please note: all radiobutton elements of teh same set must have the same name
				var radioValue = null
				if (elem[i].checked) {
					radioValue = elem[i].value;
					str += elem[i].name + "=";
					str += radioValue;
					addAmp = true;
				} else{
					addAmp = false;
				}
			} else if (elem[i].type != 'checkbox') {
				str += elem[i].name + "=";
				str += encodeURIComponent(elem[i].value);
				addAmp = true;
			}
		}
	}
	
	return str;
}


/*
reads the value of a radio button (set must have the same name)
Example:
    <p><input type=radio name="songs" value="A">A</p>
    <p><input type=radio name="songs" value="B">B</p>
    <p><input type=radio name="songs" value="C">C</p>
    <input type=button value="Show Selected" onClick="alert(getRadioValue(this.form.songs))">
*/
function getRadioValue(radioObject){
	var value = null
	for (var i=0; i<radioObject.length; i++) {
		if (radioObject[i].checked) {
			value = radioObject[i].value;
			break;
		}
	}
	return value;
}

// set the radio button with the given value as being checked
// do nothing if there are no radio buttons
// if the given value does not exist, all the radio buttons
// are reset to unchecked
function setRadioValueChecked(radioObj, newValue) {
	if(!radioObj)
		return;
	var radioLength = radioObj.length;
	if(radioLength == undefined) {
		radioObj.checked = (radioObj.value == newValue.toString());
		return;
	}
	for(var i = 0; i < radioLength; i++) {
		radioObj[i].checked = false;
		if(radioObj[i].value == newValue.toString()) {
			radioObj[i].checked = true;
		}
	}
}

//converts linebreaks into html <br/> tags
function linebreakToBr(string){
	return string.replace(/\n/gi, '<br/>');
}


//checks if a checkbox is checked
function checkCheckbox(checkbox){
	return checkbox.checked && !checkbox.disabled;
}

//checks if at least one of the checkboxes with a name containing checkboxName is checked
function someChecked(checkboxName){
	result = false;
	
	inputelements = document.getElementsByTagName('input');
	
	for(i=0;i<inputelements.length && !result;i++){
		if(inputelements[i].type == 'checkbox' && inputelements[i].name.indexOf(checkboxName) >= 0 && checkCheckbox(inputelements[i])){
			result = true;
		}
	}
	
	return result;
}

/**
 * Adds text to a text/textarea element
 */
function addtext(name, element) {
	var currentTime	= new Date();
	var month		= currentTime.getMonth() + 1;
	var day			= currentTime.getDate();
	var year		= currentTime.getFullYear();
	var dateNameTag	= "[" + day + "/" + month + "/" + year + " - " + name + "] \n\n";
	
	document.getElementById(element).value =  dateNameTag + document.getElementById(element).value;

}

/**
 * Adds text to a fckeditor element
 */
function ck_prefixDateNameTag(name, element) {
	var currentTime	= new Date();
	var month		= currentTime.getMonth() + 1;
	var day			= currentTime.getDate();
	var year		= currentTime.getFullYear();
	var dateNameTag	= "[" + day + "/" + month + "/" + year + " - " + name + "]&nbsp;\n\n";
	
	ck_insertText(dateNameTag, element);
}

 /**
  * Adds text to a ckeditor element
  * Default will prefix, if atCurrentPosition == true, then insert at current position of pointer in text
  *
  */
 function ck_insertText(text, element, atCurrentPosition) {
	if(atCurrentPosition == true) {
		CKEDITOR.instances[element].insertHtml(text);
	} else {
		CKEDITOR.instances[element].setData(text + CKEDITOR.instances[element].getData());
	}
	CKEDITOR.instances[element].focus();
 }

  /**
   * Replaces text of a ckeditor element
   *
   */
  function ck_setText(text, element) {
 	CKEDITOR.instances[element].setData(text);
  }  
  
function increaseOne(element){
	if(document.getElementById(element).value == ''){
		document.getElementById(element).value = 0;
	}
	document.getElementById(element).value = parseInt(document.getElementById(element).value) +1;
}

function decreaseOne(element){
	if(document.getElementById(element).value == ''){
		document.getElementById(element).value = 0;
	}
	document.getElementById(element).value = parseInt(document.getElementById(element).value) -1;
	if(document.getElementById(element).value < 0){
		document.getElementById(element).value = 0;
	}
}

/**
 * Sets the cursor position of a text/textarea element
 */
function setCursor(elementId, pos){
	document.getElementById(elementId).focus();
	document.getElementById(elementId).setSelectionRange(pos, pos)
}

function function_exists( function_name ) {
    // Return TRUE if the given function has been defined
    // 
    // +    discuss at: http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_function_exists/
    // +       version: 809.522
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Steve Clay
    // +   improved by: Legaev Andrey
    // *     example 1: function_exists('isFinite');
    // *     returns 1: true


    if (typeof function_name == 'string'){
        return (typeof window[function_name] == 'function');
    } else{
        return (function_name instanceof Function);
    }
}

function googleAnalyticsEvent(category, action, label, value) {
	if(label && value) {
		_gaq.push(['_trackEvent', category, action, label, value]);
	} else if(label) {
		_gaq.push(['_trackEvent', category, action, label]);
	} else if(value) {
		_gaq.push(['_trackEvent', category, action, '', value]);
	} else {
		_gaq.push(['_trackEvent', category, action]);
	}
}

function mktime () {
    // Get UNIX timestamp for a date  
    // 
    // version: 909.322
    // discuss at: http://phpjs.org/functions/mktime
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: baris ozdil
    // +      input by: gabriel paderni
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: FGFEmperor
    // +      input by: Yannoo
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: jakes
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Marc Palau
    // +   improved by: Brett Zamir (http://brett-zamir.me)
    // +      input by: 3D-GRAF
    // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
    // *     example 1: mktime(14, 10, 2, 2, 1, 2008);
    // *     returns 1: 1201871402
    // *     example 2: mktime(0, 0, 0, 0, 1, 2008);
    // *     returns 2: 1196463600
    // *     example 3: make = mktime();
    // *     example 3: td = new Date();
    // *     example 3: real = Math.floor(td.getTime()/1000);
    // *     example 3: diff = (real - make);
    // *     results 3: diff < 5
    // *     example 4: mktime(0, 0, 0, 13, 1, 1997)
    // *     returns 4: 883609200
    // *     example 5: mktime(0, 0, 0, 1, 1, 1998)
    // *     returns 5: 883609200
    // *     example 6: mktime(0, 0, 0, 1, 1, 98)
    // *     returns 6: 883609200
    var no=0, i = 0, ma=0, mb=0, d = new Date(), dn = new Date(), argv = arguments, argc = argv.length;

    var dateManip = {
        0: function (tt){ return d.setHours(tt); },
        1: function (tt){ return d.setMinutes(tt); },
        2: function (tt){ var set = d.setSeconds(tt); mb = d.getDate() - dn.getDate(); d.setDate(1); return set;},
        3: function (tt){ var set = d.setMonth(parseInt(tt, 10)-1); ma = d.getFullYear() - dn.getFullYear(); return set;},
        4: function (tt){ return d.setDate(tt+mb);},
        5: function (tt){
            if (tt >= 0 && tt <= 69) {
                tt += 2000;
            }
            else if (tt >= 70 && tt <= 100) {
                tt += 1900;
            }
            return d.setFullYear(tt+ma);
        }
        // 7th argument (for DST) is deprecated
    };

    for (i = 0; i < argc; i++){
        no = parseInt(argv[i]*1, 10);
        if (isNaN(no)) {
            return false;
        } else {
            // arg is number, let's manipulate date object
            if (!dateManip[i](no)){
                // failed
                return false;
            }
        }
    }
    for (i = argc; i < 6; i++) {
        switch (i) {
            case 0:
                no = dn.getHours();
                break;
            case 1:
                no = dn.getMinutes();
                break;
            case 2:
                no = dn.getSeconds();
                break;
            case 3:
                no = dn.getMonth()+1;
                break;
            case 4:
                no = dn.getDate();
                break;
            case 5:
                no = dn.getFullYear();
                break;
        }
        dateManip[i](no);
    }

    return Math.floor(d.getTime()/1000);
}

function postVar(name, value) {
	var form = '<form method="POST" name="dummyPostVarForm"><input type="hidden" name="'+name+'" value="'+value+'"</form>';
	document.body.innerHTML = form;
	document.dummyPostVarForm.submit();
}

/*
 * Hides an unhides elements, element with the inputted id's or classes
 * */
function jQueryHideUnhide(element) {
    
    if(jQuery(element).length > 0) {
    
          if(jQuery(element).is(":visible")) { 
                jQuery(element).hide();
          } else {
                jQuery(element).show();
          }
          
    } else if(jQuery("#"+element).length > 0) { 
          
          if(jQuery("#"+element).is(":visible")) {
                jQuery("#"+element).hide();
          } else {
                jQuery("#"+element).show();
          }
          
    } else if(jQuery("."+element).length > 0) { 
          
          jQuery("."+element).each(function() { 
                if(jQuery(this).is(":visible")) {
                     jQuery(this).hide();
                } else {
                     jQuery(this).show();
                }
          });
          
    }
}

//onderstaande 2 punten zorgen ervoor dat swf header relaxter werkt in IE

// When the page loads:
window.onload = function(){
  if (document.getElementsByTagName) {
    // Get all the tags of type object in the page.
      var objs = document.getElementsByTagName("object");
      for (i=0; i<objs.length; i++) {
        // Get the HTML content of each object tag
        // and replace it with itself.
        objs[i].outerHTML = objs[i].outerHTML;
      }
   }
}

// When the page unloads:
window.onunload = function() {
  if (document.getElementsByTagName) {
    //Get all the tags of type object in the page.
    var objs = document.getElementsByTagName("object");
    for (i=0; i<objs.length; i++) {
      // Clear out the HTML content of each object tag
      // to prevent an IE memory leak issue.
      objs[i].outerHTML = "";
    }
  }
}

