/**
* @author Leonard Eshuis
* @author Matthijs Wensveen
* @version 1.1
*/

function stop(e) {
	if (!e) e = window.event;
	(e.stopPropagation) ? e.stopPropagation() : e.cancelBubble = true;
	(e.preventDefault) ? e.preventDefault() : e.returnValue = false;
	return false;
}

function prevDef(e) {
	if (!e) e = window.event;
	(e.preventDefault) ? e.preventDefault() : e.returnValue = false;
	return false;
}

function switchJsIdent(state) {
	if (state == "load") {
		$("body")
			.removeClass("noJs")
			.addClass("readyJs");
	}
	if (state == "ready") {
		$("body")
			.removeClass("noJs")
			.removeClass("readyJs")
			.addClass("activeJs");
	}
}

$(document).ready(function() {

	var sitewide_timeout = null;

	var submenu_timeout = null;
	var graceTimer = null;

	switchJsIdent("ready");

	function connect_Menu() {
		// MAIN MENU (submenu)

		//set selected class on the 1st level, clear selected and selected_l2 classes
		$("#submenu>ul>li>a").mouseover(function(e) {
			clearTimeout(graceTimer);
			clearTimeout(submenu_timeout);

			var targ = $(this).parent();
			graceTimer = setTimeout(function() {
				$("#submenu .selected").removeClass("selected");
				$("#submenu .selected_l2").removeClass("selected_l2");
				targ.addClass("selected");
			}, 200);
		});

		$("#submenu>ul>li>ul>li>a").mouseover(function(e) {
			clearTimeout(graceTimer);
			clearTimeout(submenu_timeout);

			$("#submenu .selected_l2").removeClass("selected_l2");
			$(this).parent().addClass("selected_l2");
		});

		// restore menu on mouseout
		$("#submenu").mouseout(function(e) {
			clearTimeout(graceTimer);
			clearTimeout(submenu_timeout);

			submenu_timeout = setTimeout(function() {
				$("#submenu .selected").removeClass("selected");
				$("#submenu .selected_l2").removeClass("selected_l2");

				$("#submenu .active:eq(0)").addClass("selected");
				//$("#submenu .active:eq(1)").addClass("selected_l2");
			}, 200);
		});

		$("#submenu").mouseover(function(e) {
			clearTimeout(submenu_timeout);
		});

		// GLOBAL NAVIGATION (sitewide)

		$("#sidewide>li>a").mouseover(function(e) {
			$("#sidewide .open").removeClass("open");
			$(this).parent().addClass("open");
		});

		$("#sidewide").mouseout(function(e) {
			sitewide_timeout = setTimeout('$("#sidewide .open").removeClass("open");', 350)
		});

		$("#sidewide").mouseover(function(e) {
			clearTimeout(sitewide_timeout);
		});

	}

	function connect_JobListing() {

		$("#jobsearch").parent().next().remove();

		$("#jobsearch dt").click(function(e) {
			prevDef(e);
			if ($(this).hasClass("open")) {
				$("#jobsearch .open").removeClass("open").next().slideUp(350);
				return false;
			}

			$("#jobsearch .open").removeClass("open").next().slideUp(350);
			$(this).addClass("open").next().slideDown(300);

		})

	}

	function connect_jobListingFilter() {

		jQuery.each($("#jobsearch .description"), function() {
			var len = 500;
			var p = $(this);
			if (p) {

				var allhtml = p.html();
				var trunc = allhtml.split("<A ")[0];
				var link = allhtml.split("<A ")[1];

				if (trunc.length == allhtml.length) {
					trunc = allhtml.split("<a ")[0];
					link = allhtml.split("<a ")[1];
				}

				if (trunc.length > len) {
					trunc = trunc.substring(0, len);
					trunc = trunc.replace(/\w+$/, '');
					trunc += "...<br/><br/><a " + link;
					p.html(trunc);
				}
			}

		});

		jQuery.each($("#jobsearchfilter .filter"), function() {
			var anyoneChosen = $(this).find("input:checked");
			if (anyoneChosen.length == 0) {
				$(this).find("table").hide();
			}
		});

		$(".filter h4", "#jobsearchfilter").click(function(e) {
			$(this).next().slideToggle(300)
		});

		$("td label", "#jobsearchfilter").click(function(e) {
			prevDef(e);
		});

		$("td", "#jobsearchfilter").click(function(e) {
			$(this).toggleClass("chosen")
			if ($(this).hasClass("chosen")) {
				$(this).find(">input").attr("checked", "true")
			} else {
				$(this).find(">input").removeAttr("checked")
			}
		});
	}

	function activate_thissite() {
		$("#sidewide>li>a[href^=/]").parent().addClass("thissite");
	};

	function preset() {

		$("[shape]").removeAttr("shape");
		$("[lang]").removeAttr("lang");
		$(".module [style]").not(".cufon[style]").removeAttr("style");
		$("[class=MsoNormal]").removeClass("MsoNormal");
		$("[class=syntax]").removeClass("syntax");
		$("[class=syntaxChar]").removeClass("syntaxChar");
		$("[class=CodeChar]").removeClass("CodeChar");

		$("#submenu .active:eq(0)").addClass("selected");
		//$("#submenu .active:eq(1)").addClass("selected_l2");

		$("[disabled]").addClass("disabled");

		$("#sidewide>li>ul").parent().addClass("hasChildren");
		$("#submenu>ul>li>ul>li>ul").parent().addClass("hasChildren");

		$("#sidewide ul").hide();

		if ($("#jobsearchfilter").length > 0) {
			$("input:checked", ".filter").parent().addClass("chosen")
		}

		jQuery.each($(".validator"), function() {
			if ($(this).html() == "*") {
				$(this).addClass("required");
			};
		})
	}

	activate_thissite();
	preset();
	connect_Menu();
	connect_JobListing();
	connect_jobListingFilter();
});

function pt_debug(message) {
	if (console != 'undefined') {
		console.log(message);
	}
}
