var timer1;
var timer2;

var activeNiv1='';
var activeNiv2='';

var baseDelay1=250;
var extendedDelay1=2000;

var delayNiv1=baseDelay1;
var delayNiv2=500;

var niv2locked=false;
var delayNiv2Locked=1000;

/* opent een hoofdmenu */
function displayMenuNiv1(m) {
	delayNiv1=baseDelay1;
	if (timer1) {
		window.clearTimeout(timer1);
	}

	if (activeNiv1 && activeNiv1!=m) {
		hideMenuNiv1(activeNiv1);
	}
	m.className='niv0Active';

	//Activeer tab
	var tabImg=m.getElementsByTagName("IMG");
	tabImg[0].src=tabImg[0].src.replace("_n.gif","_a.gif");

	activeNiv1=m;
}

/* verbergt een hoofdmenu direct */
function hideMenuNiv1(m) {
	m.className='niv0';

	//Activeer tab
	var tabImg=m.getElementsByTagName("IMG");
	tabImg[0].src=tabImg[0].src.replace("_a.gif","_n.gif");
}

/* verbergt een open hoofdmenu met een vertraging van delayNiv1 milliseconden */
function delayedHideMenuNiv1(m) {
	timer1=window.setTimeout(function() {
			hideMenuNiv1(m);
		},delayNiv1
	);
}


/**
 * Opent een submenu
 */
function displayMenuNiv2(sm) {
	/* */
	if (!niv2locked) {
		if (activeNiv2 && activeNiv2!=sm) {
			//Als er een actief submenu is, heb je kans dat het menu onder je muis wegschuift, om dit tegen te gaan de verberg-delay opschroeven
			delayNiv1=extendedDelay1;
			hideMenuNiv2(activeNiv2);
		}

		$(sm).slideDown(400);

		niv2locked=true;
		window.setTimeout(function() {
			niv2locked=false;
		},delayNiv2Locked);

/*
		Effect.BlindDown($(sm), {
			duration: 0.4,
			beforeStart: function() {
				niv2locked=true;
				window.setTimeout(function() {
					niv2locked=false;
				},delayNiv2Locked);
			}
		});
*/



		activeNiv2=sm;
	} else {
		/* als het submenu gelockt is zetten we een nieuwe timer aan */
		timer2=window.setTimeout(function() {
				displayMenuNiv2(sm);
			},delayNiv2
		);
	}
}

/* klapt een open submenu dicht */
function hideMenuNiv2(sm) {
	$(sm).slideUp(300);

	//Effect.BlindUp($(sm), { duration: 0.3 });
}

/* zoekt uit of een menu-item (niv1) een submenu heeft (niv2) en zo ja start een timer op het niv2-menu open te klappen */
function delayedShowSub(m) {
	if (timer2) {
		window.clearTimeout(timer2);
	}

	var subMenu=$(m).next().get(0);
	if (subMenu!=undefined) {
		if (subMenu.nodeName=="DIV") {
			timer2=window.setTimeout(function() {
					displayMenuNiv2(subMenu);
				},delayNiv2
			);
		}
	}
}

function cancelSub() {
	if (timer2) {
		window.clearTimeout(timer2);
	}
}

/* opent kennistest in een nieuw window */
function openKennistest(url) {
	window.open(url,'kennistest','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width=450,height=350');
}

function laadMeerArtikelen(tab,s,v) {
	var url='/laad_artikel.php?t='+tab+'&s='+s+'&v='+v;
	new Ajax.Request(url, {
		method: 'get',
		onSuccess: function(serverReply) {
			$('#allesOver'+tab).html(serverReply.responseText);
		},
		onFailure: function(serverReply) {
			alert("De opgevraagde artikelen zijn momenteel niet beschikbaar.");
		}
	});
}

function laadMeerArtikelenAllesVoor(tab,s,d) {
	var url='/laad_artikel.php?t='+tab+'&s='+s+'&d='+d;
	new Ajax.Request(url, {
		method: 'get',
		onSuccess: function(serverReply) {
			$('#allesOver'+tab).html(serverReply.responseText);
		},
		onFailure: function(serverReply) {
			alert("De opgevraagde artikelen zijn momenteel niet beschikbaar.");
		}
	});
}

function isValidEmail(email) {
	return validateValue(email,getPatternByName("email"));
}

//Pass a value and a regular expression pattern
function validateValue(fv,pattern) {
  var re = new RegExp(pattern);
  return re.test(fv);
}

function getPatternByName(patternName) {
  switch (patternName) {
    case "06nummer":
			return "^06(\\s|-|\\s-\\s)?[0-9]{8}$";
      break;
    case "empty_or_email":
      return "^$|^[0-9a-zA-Z][-_0-9a-zA-Z.]*@[-_0-9a-zA-Z.]+[.][a-zA-Z]+$";
      break;
  	case "empty_or_url":
      return "^$|^http://.{2,}";
      break;
  	case "empty_or_time":
      return "^$|^00:00$|^[012][0-9]:[0-9][0-9]$";
      break;
  	case "empty_or_date":
      return "^$|^0000-00-00$|^[12][0-9]{3}[-][01]?[0-9]-[0-3]?[0-9]$";
      break;
  	case "empty_or_float":
      return "^$|[+-]?[0-9]+([.][0-9]+)?$";
      break;
  	case "notempty":
      return "^.";
      break;
    case "email":
      return "^[0-9a-zA-Z][-_0-9a-zA-Z.]*@[-_0-9a-zA-Z.]+[.][a-zA-Z]+$";
      break;
  	case "pagename":
      return "^[_a-z0-9]{1,50}$";
      break;
  	case "username":
      return "^[_a-z0-9]{1,50}$";
      break;
  	case "pass":
      return "^[a-zA-Z0-9 ]{3,20}$";
      break;
   	//dd-mm-yyyy
   	case "nldate":
      return "^[0-3]?[0-9][-][01]?[0-9][-][12][0-9]{3}$";
      break;
   	//yyyy-mm-dd
   	case "date":
      return "^[12][0-9]{3}[-][01]?[0-9]-[0-3]?[0-9]$";
      break;
  	case "integer":
      return "^[-]?[0-9]+$";
      break;
  	case "posinteger":
      return "^[0-9]+$";
      break;
  	case "float":
      return "^[+-]?[0-9]+([.][0-9]+)?$";
      break;
  	case "nlfloat":
      return "^[+-]?[0-9]+([,][0-9]+)?$";
      break;
		case "url":
      return "^http://.{2,}";
      break;
  	default:
   		alert("Unknown validator added to a form element: '" + patternName+"'");
	}
}


function zoeken() {
	//Afhankelijk van de gekozen subsite submit-pagina aanpassen
	var f=$('#searchForm');
	var ss=$('#subsite').val();

	if (ss==1) {
		f.attr("action",zoekURL);
	} else if (ss==99) {
		f.attr("action",zoekMediaURL);
	} else {
		f.attr("action",zoekGerubriceerdURL);
	}
	f.submit();
}

function popup(url) {
  window.open(url,'jellinek_popup_w700_h600','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,width=700,height=600');
  return false;
}


function debugObj(obj) {
	attrs="";
	vals="";
	for( var attr in obj ) {
		if (attrs) { attrs+=", "; }
		attrs+=attr;
		if (typeof obj[attr] == "object") {
			var nestedAttrs="";
			for(var attr2 in obj[attr] ) {
				if (nestedAttrs) { nestedAttrs+=", "; }
				nestedAttrs+=attr2;
			}
			vals+='\n'+attr+': {'+nestedAttrs+'}';
		} else {
			vals+='\n'+attr+': '+obj[attr];
		}
	}

	return attrs + "\n----------------------------------------------------------------\n"+vals;
}

function debug(obj) {
	var s=debugObj(obj);
	alert(s);
}

function extractForm(formID) {
	var $f=$('#formbuilder_form');
	var fv=$f.serializeObject();

	var formElements=new Array();
	$f.find('table tr').each(function() {
		$tr=$(this);
		var label=$tr.find('td:first').html();
		if (label!="" && label!="&nbsp;") {
			var $elemsInTD=$tr.find('td:last input,select,textarea');
			if ($elemsInTD.size() == 1) {
				var item=$tr.find('td:last input,select,textarea').get(0).name;
				if (fv[item]) {
					formElements[formElements.length]={ name: item,value: fv[item] };
				} else {
					formElements[formElements.length]= { name: item,value: "-" };
				}
			} else if ($elemsInTD.size() > 1) {
				var fld=$tr.find('td:last').attr("fieldname");

				var found=false;
				var v="<ul>";
				for (var i=0;i<$elemsInTD.size();i++) {
					if ($elemsInTD.get(i).checked) {
						if (v!="") {
							v+="<li>"+ $elemsInTD.get(i).value +"</li>";
							found=true;
						}
					}
				}
				v+="</ul>";
				if (!found) {
					v=" - ";
				}
				formElements[formElements.length]={ name: fld,value: v };
			}
		}
	});

	return formElements;
}


/*!
 * jQuery serializeObject - v0.2 - 1/20/2010
 * http://benalman.com/projects/jquery-misc-plugins/
 *
 * Copyright (c) 2010 "Cowboy" Ben Alman
 * Dual licensed under the MIT and GPL licenses.
 * http://benalman.com/about/license/
 */

// Whereas .serializeArray() serializes a form into an array, .serializeObject()
// serializes a form into an (arguably more useful) object.

(function($,undefined){
  '$:nomunge'; // Used by YUI compressor.

  $.fn.serializeObject = function(){
    var obj = {};

    $.each( this.serializeArray(), function(i,o){
      var n = o.name,
        v = o.value;

        obj[n] = obj[n] === undefined ? v
          : $.isArray( obj[n] ) ? obj[n].concat( v )
          : [ obj[n], v ];
    });

    return obj;
  };

})(jQuery);

