


/* GENERAL PAGE FUNCTIONS */
var Page = {
	// removes the dotted boxes around a hyperlink or certain form elements when clicked in Firefox
	remove_focus : function(){
		$("a").each(function(i,n){
			$(n).bind("focus", function(){if(this.blur)this.blur();});
		});
		$("input").each(function(i,n){
			if(n.type == "image" || n.type == "radio" || n.type == "submit")
				$(n).bind("focus", function(){if(this.blur)this.blur();});
		});
	}
};

/* THIS RULES, THIS ENABLES ROLLOVER IMAGES JUST BY SPECIFYING A CLASSNAME */
var Rollover = {
	init : function(){
		$("li.rollover a").each(function(i,el){
			if($(el.parentNode).attr("class").indexOf(site_section) == -1){
				$(el).bind("mouseover", function(){Rollover.execute(el,'on')});
				$(el).bind("mouseout", function(){Rollover.execute(el,'off')});
			}else{
			//	Rollover.execute(el,'on')
			}
		});
	},
	
	execute : function(el,state){
		var li = el.parentNode;
		var cl = li.className;
		nav_section = cl.substring(cl.indexOf(" ")+1, cl.substring(cl.indexOf(" ")+1).indexOf(" ")+cl.indexOf(" ")+1);
		if(state=="on"){
			li.style.backgroundImage = "url('/_images/nav_"+nav_section+"_on.gif')";
		}else{
			li.style.backgroundImage = "url('/_images/nav_"+nav_section+".gif')";
		}
	}
};

/* HOMEPAGE FUNCTIONS */
var Homepage = {
	section_images : new Array(),
	current_image : 0,
	rotate : null,
	timeout : 5000,
	debat_container : null,
	debat_header : null,
	debat_text : null,
	leftside : 0,
	scroll_timeout : null,
	scroll_speed : 10,
	text_clone : null,
	
	
	init : function(timeout){
		if($("#homepage").length > 0){
			if(arguments.length > 0) this.timeout = timeout;
			this.rotate = setTimeout("Homepage.rotate_image()", this.timeout);
			this.init_marquee();
		}
	},
	
	rotate_image : function(){
		var section_image_container = $("#section_image")[0];
		if(this.current_image < this.section_images.length-1){
			this.current_image++;
		}else{
			this.current_image = 0;
		}
		section_image_container.style.backgroundImage = "url('"+this.section_images[this.current_image].src+"')";
		this.rotate = setTimeout("Homepage.rotate_image()", this.timeout);
	},
	
	init_marquee : function(){
		if($("#debat").length > 0){
			this.debat_container = $("#debat");
			this.debat_header = $("h3", this.debat_container);
			this.debat_text = $("span", this.debat_header);
            // Prevents large text from scrolling.
			//if(this.debat_text[0].offsetWidth - this.debat_container[0].offsetWidth > 0 || true){
				this.text_clone = this.debat_text.clone();
				this.debat_text.after(this.text_clone);
				this.scroll_marquee();
			//}
		}
	},
	
	scroll_marquee : function(){
		if(this.debat_header[0].offsetLeft != 0){
			this.leftside = this.debat_header[0].offsetLeft - this.debat_container[0].offsetLeft;
		}else{
			this.leftside = this.debat_header[0].style.marginLeft;
			if(this.leftside == "") this.leftside = "0";
			if(this.leftside.indexOf("px") != -1) this.leftside = this.leftside.substring(0, this.leftside.indexOf("px"));
			this.leftside = parseInt(this.leftside);
		}
		if(this.leftside < -this.debat_text[0].offsetWidth){
			this.debat_header.css("margin-left", "0px");
		}else{
			this.debat_header.css("margin-left", (this.leftside-2)+"px");
		}
		Homepage.scroll_timeout = setTimeout("Homepage.scroll_marquee()", Homepage.scroll_speed);
	}

}

var Dossier = {
	click_image : null,
	click_image_open : null,
	transcript_open : false,
	
	init : function(){
		if($("#dossier").length > 0){
			Dossier.click_image = document.createElement("img");
			Dossier.click_image.src = "/_images/arrow_right_black_s.gif";
			$(Dossier.click_image).attr("alt","uitklappen van uitgeschreven tekst");
			$(Dossier.click_image).attr("title","uitklappen van uitgeschreven tekst");
			Dossier.click_image_open = document.createElement("img");
			Dossier.click_image_open.src = "/_images/arrow_down_black_s.gif";
			$(Dossier.click_image_open).attr("alt","inklappen van uitgeschreven tekst");
			$(Dossier.click_image_open).attr("title","inklappen van uitgeschreven tekst");
			OmniTab.init();
			Dossier.init_transcript();
		}
	},

	init_transcript : function(){
		$("#dossier .transcript").each(function(i,t){
			transcript_bar = $(".transcript_bar", t);
			transcript_content = $(".transcript_content", t);
			$(".transcript_bar_clickzone", transcript_bar).append(Dossier.click_image);
			$(".transcript_bar_clickzone", transcript_bar).bind("click", function(){Dossier.toggle_transcript(t.id);});
		});
	},

	toggle_transcript : function(transcript_id){
		if(Dossier.transcript_open){
			Dossier.transcript_open=false
			$("#"+transcript_id + " .transcript_bar_clickzone img").replaceWith(Dossier.click_image);
		}else{
			Dossier.transcript_open=true;
			$("#"+transcript_id + " .transcript_bar_clickzone img").replaceWith(Dossier.click_image_open);
		}
		content = $("#"+transcript_id + " .transcript_content").toggleClass("jsnodisplay");
	}
	
};

/* OMNI TABS - reworked for jQuery*/
var OmniTab = {
	tabsContainer : null, tabSets : new Array(), subtabSets : new Array(), currentTabIndex : new Array(), currentSubtabIndex : new Array(), selectFirstTab : false,
	
	// initalize event listeners
	init : function(){
		$(".tabcontainer").each(function(i,t){
			OmniTab.currentSubtabIndex[t.id] = new Array();
			OmniTab.selectFirstTab = t.className.indexOf("noneselected")==-1;
			OmniTab.tabsContainer = $(".tabs", t)[0];
			OmniTab.tabSets[t.id] = (OmniTab.tabsContainer.tagName=="UL"? $("li", OmniTab.tabsContainer) : $("td", OmniTab.tabsContainer));
			if(OmniTab.selectFirstTab){
				if($("#"+t.id+OmniTab.currentTabIndex[t.id]).length==0) OmniTab.currentTabIndex[t.id] = 1;
				while($("#" + t.id+OmniTab.currentTabIndex[t.id]).length==0 && OmniTab.currentTabIndex[t.id] < 10){
					OmniTab.currentTabIndex[t.id]++;
				}
			}else{OmniTab.currentTabIndex[t.id] = -1;}
			OmniTab.show(OmniTab.tabSets[t.id], OmniTab.currentTabIndex[t.id], t.id);
			OmniTab.tabSets[t.id].each(function(i,n){
				$(n).bind('mouseover', function(){OmniTab.mouseOver(n, t.id);}); 
				$(n).bind('mouseout', function(){OmniTab.mouseOut(n, t.id);}); 
				$(n).bind('click', function(){OmniTab.mouseClick(OmniTab.tabSets[t.id], n, t.id);return false;});
			});
			/* Once the info table has been initialized, show the table by removing the jshidden class. (defined in jsonly.css)
			This class will only hide the table from view if Javascript is enabled on the client, therefore behaving unobtrusively when JS is not supported. */
			OmniTab.initSubtabs(t.id);
			$(t).removeClass('jshidden');
		});
	},

	initSubtabs : function(container_id){
		if($(container_id) != null){
			OmniTab.subtabSets[container_id] = new Array();
			$(".tabcontent", $("#"+container_id)[0]).each(function(i,t){
				var subtabContainer = $(".tabssub", t)[0];
				if(subtabContainer != undefined){
					tabIndex = t.id.substr(t.id.indexOf(container_id)+container_id.length);
					OmniTab.subtabSets[container_id][t.id] = $("a", subtabContainer);
					if(OmniTab.currentSubtabIndex[container_id][tabIndex] == undefined || $(container_id+OmniTab.currentSubtabIndex[container_id][tabIndex]) == null) OmniTab.currentSubtabIndex[container_id][tabIndex] = OmniTab.getTabIndex(OmniTab.subtabSets[container_id][t.id][0], container_id);
					OmniTab.subtabSets[container_id][t.id].each(function(i,s){
						$(s).bind('click', function(){OmniTab.mouseClick(OmniTab.subtabSets[container_id][t.id], s, container_id);return false;});		
					});
					OmniTab.show(OmniTab.subtabSets[container_id][t.id], OmniTab.currentSubtabIndex[container_id][tabIndex], container_id);
				}
			});
		}
	},
	
	mouseOver : function(el, tabsetId){
		index = this.getTabIndex(el, tabsetId);
		if(index != this.currentTabIndex[tabsetId]){
			el.className = OmniTab.get_tab_type(el) + "_on tabon";
		}
	},
	
	mouseOut : function(el, tabsetId){
		index = this.getTabIndex(el, tabsetId);
		if(index != this.currentTabIndex[tabsetId]){
			el.className = OmniTab.get_tab_type(el);
		}
	},
	
	mouseClick : function(tabSet, el, tabsetId){
		this.showContent(tabSet, this.getTabIndex(el, tabsetId), tabsetId);
	},
	
	show : function(tabSet, currentTabIndex, tabsetId){
		tabSet.each(function(i,n){
			var contentDiv = $("#" + tabsetId + OmniTab.getTabIndex(n, tabsetId))[0];
			if(contentDiv != null){
				if(OmniTab.getTabIndex(n, tabsetId) == currentTabIndex){
					$(contentDiv).removeClass('hidden');
					n.className = OmniTab.get_tab_type(n) + "_on tabon";
				}else{
					$(contentDiv).addClass('hidden');
					n.className = OmniTab.get_tab_type(n);
				}
			}
		});
	},
	
	get_tab_type : function(el){
		if(el.className.indexOf("_") != -1){
			return el.className.substring(0, el.className.indexOf("_"));
		}else{
			return el.className;
		}
	},

	showContent : function(tabSet, currentTabIndex, tabsetId){
		tabSet[0].tagName == "LI" ?  tab = "Tab" : tab = "Subtab";
		eval("this.current" + tab + "Index[tabsetId] = currentTabIndex;");
		this.show(tabSet, currentTabIndex, tabsetId);
	},
	
	getTabIndex : function(el, tabsetId){
		a = (el.tagName == "TD" || el.tagName == "LI" ?  $("a", el)[0] : el);
		return a.href.substr(a.href.indexOf('#' + tabsetId)+(tabsetId.length+1));
	}
};


/* COOKIE HANDLING CLASS */
var Cookie = {
	
	create : function(name, value){
		if(arguments.length > 2){
			var days = arguments[2];
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else var expires = "";
		document.cookie = name+"="+value+expires+"; path=/";
	},

	read : function(name){
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++){
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return null;
	},

	erase : function(name){
		this.create(name,"",-1);
	}
};


var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;	
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{string: navigator.vendor,subString: "Apple",identity: "Safari"},
		{prop: window.opera,identity: "Opera"},
		{string: navigator.vendor,subString: "KDE",identity: "Konqueror"},
		{string: navigator.userAgent,subString: "Firefox",identity: "Firefox"},
		{string: navigator.vendor,subString: "Camino",identity: "Camino"},
		{/* for newer Netscapes (6+) */ string: navigator.userAgent,subString: "Netscape",identity: "Netscape"},
		{string: navigator.userAgent,subString: "MSIE",identity: "Explorer",versionSearch: "MSIE"},
		{string: navigator.userAgent,subString: "Gecko",identity: "Mozilla",versionSearch: "rv"},
		{ /* for older Netscapes (4-) */ string: navigator.userAgent,subString: "Mozilla",identity: "Netscape",versionSearch: "Mozilla"}
	],
	dataOS: [
		{string: navigator.platform,subString: "Win",identity: "Windows"},
		{string: navigator.platform,subString: "Mac",identity: "Mac"},
		{string: navigator.platform,subString: "Linux",identity: "Linux"}
	],
	supported: function(){
	/* 	this statement must be kept up to date as the browser requirements change. At the moment, supported browsers are:
		Internet Explorer 5.5 and newer (Windows), Firefox 1 and newer (Mac & Windows), Safari all versions (Mac & Windows)
	*/
		return 	(this.OS == "Windows" && this.browser == "Explorer" && parseFloat(this.version) >= 5.5) ||
				(this.browser == "Firefox" && parseInt(this.version) >= 1) ||
				(this.browser == "Safari")
	}
};

/****** FORM VALIDATION ******/
var Formpage = {
    blacklist: [],
    table: [],
	form_fields: new Array(),
	form: new Array(),
	re_url:	  /^(http(s?)\:\/\/|~\/|\/)?([\w]+:\w+@)?([a-zA-Z]{1}([\w\-]+\.)+([\w]{2,5}))(:[\d]{1,5})?((\/?\w+\/)+|\/?)(\w+\.[\w]{3,4})?((\?\w+=\w+)?(&\w+=\w+)*)?$/i,
	re_username: /^[^ ]{4,}$/i,
	re_password: /^[^ ]{4,}$/i,
	re_email: /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i,
	re_date: /^(?:(31)(\\D)(0?[13578]|1[02])\\2|(29|30)(\\D)(0?[13-9]|1[0-2])\\5|(0?[1-9]|1\\d|2[0-8])(\\D)(0?[1-9]|1[0-2])\\8)((?:1[6-9]|[2-9]\\d)?\\d{2})$|^(29)(\\D)(0?2)\\12((?:1[6-9]|[2-9]\\d)?(?:0[48]|[2468][048]|[13579][26])|(?:16|[2468][048]|[3579][26])00)$/i,
	re_numeric: /^[0-9\,\.]*$/i,
	re_numeric_nl: /^[0-9\,\.]*[A-Za-z]{0,3}$/i,
	re_postcode_nl: /^[0-9]{4}[ ]?[A-Za-z]{2}$/i,
	re_phonenumber: /^[0-9\(\)\+ ]{10,}$/i,
	errs:		0,
	err_messages: new Array(),
	first_error: null,
	
	init: function(){
		var forms = $("form.validate");
		if(forms.length > 0){
			forms.each(function(i,f){
				var oldSubmit = $(".submit", f)[0];
				var submitDiv = oldSubmit.parentNode;
				$(oldSubmit).remove();
				var newSubmit = $(document.createElement("input"));
				newSubmit.attr("type", "button");
				newSubmit.attr("value", "verstuur");
				newSubmit.addClass("submit button")
				newSubmit.bind("click", function(){Formpage.send(f.getAttribute("id"), $(f).attr("action"));});
				submitDiv.appendChild(newSubmit[0]);
			
				Formpage.form[f.getAttribute("id")] = $("#" + f.getAttribute("id"))[0];
			});
			this.get_error_messages();			
            this.initTable();
		}
	},
	
	get_error_messages: function(){
		this.err_messages['too_short'] = "#field# moet minstens #minlength# tekens lang zijn."; //"#field# moet minstens #minlength# tekens lang zijn.";
		this.err_messages['too_long'] = "#field# mag maximaal #maxlength# tekens lang zijn.";" //#field# mag maximaal #maxlength# tekens lang zijn.";
		this.err_messages['field_required'] = "Jij heb geen #field# ingevuld."; //"Jij heb geen #field# ingevuld.";
		this.err_messages['username_invalid'] = "Jij hebt geen geldige gebruikersnaam ingevuld. Deze moet minimaal 4 tekens lang zijn, en mag geen spaties bevatten."; //"Jij hebt geen geldige gebruikersnaam ingevuld. Deze moet minimaal 4 tekens lang zijn, en mag geen spaties bevatten.";
		this.err_messages['password_invalid'] = "Jij hebt geen geldige wachtwoord ingevuld. Deze moet minimaal 4 tekens lang zijn, en mag geen spaties bevatten.";" //Jij hebt geen geldige wachtwoord ingevuld. Deze moet minimaal 4 tekens lang zijn, en mag geen spaties bevatten.";
		this.err_messages['email_invalid'] = "Jij hebt geen geldige email adres ingevuld."; //"Jij hebt geen geldige email adres ingevuld.";
		this.err_messages['email_missing'] = "Jij hebt geen email adres ingevuld"; //"Jij hebt geen email adres ingevuld";
		this.err_messages['not_selected'] = "Jij hebt geen keuze gemaakt."; //"Jij hebt geen keuze gemaakt.";
		this.err_messages['too_few_selected'] = "Jij hebt te weinig keuzes aangegeven. Jij moet minimaal #amount# keuze#plural# aangeven."; //"Jij hebt te weinig keuzes aangegeven. Jij moet minimaal #amount# keuze#plural# aangeven.";
		this.err_messages['too_many_selected'] = "Jij hebt te veel keuzes aangegeven. Jij mag maximaal #amount# keuze#plural# aangeven."; //"Jij hebt te veel keuzes aangegeven. Jij mag maximaal #amount# keuze#plural# aangeven.";
		this.err_messages['numeric_invalid'] = "#field# moet een getal zijn."; //"#field# moet een getal zijn.";
		this.err_messages['number_nl_invalid'] = "Jij heb geen geldige huisnummer ingevuld."; 
		this.err_messages['postcode_nl_invalid'] = "Jij heb geen geldige postcode ingevuld."; //"Jij heb geen geldige postcode ingevuld.";
		this.err_messages['phonenumber_invalid'] = "Jij heb geen geldige telefoonnummer ingevuld."; //"Jij heb geen geldige telefoonnummer ingevuld.";
	},
	
	send: function(form_id, action){
		if(this.validate(form_id)){
			$("#"+form_id)[0].submit();	
		}
	},
		
	validate: function(form_id){
		// example of the javascript array to be generated on the form page by the application
		// Formpage.form_fields["myFormId"][Formpage.form_fields.length] = {name: "firstname", label: 'First Name', type: 'text', data_type: 'text', min_occurs: 1, max_occurs: 1};
		this.errs = 0;
		$(this.form_fields[form_id]).each(function(i,n){
			n["has_error"] = false;
			el = Formpage.form[form_id].elements[n.name];
			switch(n.type.toLowerCase()){
				case 'text':
				case 'password':
					Formpage.toggle_error(n, el, (n.min_occurs > 0 && el.value == ""), Formpage.err_messages['field_required'].replace("#field#", n.label));
					if(el.value != ""){
						if(n.min_length != undefined) Formpage.toggle_error(n, el, (el.value.length < n.min_length), Formpage.err_messages['too_short'].replace("#field#", n.label).replace("#minlength#", n.min_length));
						if(n.max_length != undefined) Formpage.toggle_error(n, el, (el.value.length > n.max_length), Formpage.err_messages['too_long'].replace("#field#", n.label).replace("#maxlength#", n.max_length));
						switch(n.data_type.toLowerCase()){
							case 'username':
								Formpage.toggle_error(n, el, !Formpage.re_username.test(el.value), Formpage.err_messages['username_invalid'].replace("#field#", n.label));					
								break;
							case 'password':
								Formpage.toggle_error(n, el, !Formpage.re_password.test(el.value), Formpage.err_messages['password_invalid'].replace("#field#", n.label));					
								break;
							case 'email':
								Formpage.toggle_error(n, el, !Formpage.re_email.test(el.value), Formpage.err_messages['email_invalid'].replace("#field#", n.label));					
								break;
							case 'number':
								Formpage.toggle_error(n, el, !Formpage.re_numeric.test(el.value), Formpage.err_messages['numeric_invalid'].replace("#field#", n.label));					
							case 'number_nl':
								Formpage.toggle_error(n, el, !Formpage.re_numeric_nl.test(el.value), Formpage.err_messages['number_nl_invalid'].replace("#field#", n.label));					
								break;
							case 'postcode_nl':
								Formpage.toggle_error(n, el, !Formpage.re_postcode_nl.test(el.value), Formpage.err_messages['postcode_nl_invalid'].replace("#field#", n.label));					
								break;
							case 'phonenumber':
								Formpage.toggle_error(n, el, !Formpage.re_phonenumber.test(el.value), Formpage.err_messages['phonenumber_invalid'].replace("#field#", n.label));					
								break;
						}
					}
				break;
				case 'radio':
					checked = false;
					$(el).each(function(i,x){ if(x.checked){ checked = true; return false;}});
					Formpage.toggle_error(n, el[0], (n.min_occurs > 0 && !checked), Formpage.err_messages['not_selected'].replace("#field#", n.label));
				break;
				case 'checkbox':
					checked = 0;
					if(el[0]==undefined) el = new Array(el);
					$(el).each(function(i,x){;if(x.checked)checked++;});
					Formpage.toggle_error(n, el[0], (n.min_occurs > checked), Formpage.err_messages['too_few_selected'].replace("#field#", n.label).replace("#amount#", n.min_occurs).replace("#plural#", n.min_occurs==1?"":"s"));
					if(n.min_occurs <= checked)
					Formpage.toggle_error(n, el[0], (n.max_occurs < checked), Formpage.err_messages['too_many_selected'].replace("#field#", n.label).replace("#amount#", n.max_occurs).replace("#plural#", n.max_occurs==1?"":"s"));		
				break;
				case 'select':
					selected = 0;
					$(el.childNodes).each(function(i,x){ if(x.selected && x.value != '') selected++;});
					Formpage.toggle_error(n, el, (n.min_occurs > selected), Formpage.err_messages['too_few_selected'].replace("#field#", n.label).replace("#amount#", n.min_occurs).replace("#plural#", n.min_occurs==1?"":"s"));
					if(n.min_occurs <= selected)
					Formpage.toggle_error(n, el, (n.max_occurs < selected), Formpage.err_messages['too_many_selected'].replace("#field#", n.label).replace("#amount#", n.max_occurs).replace("#plural#", n.max_occurs==1?"":"s"))
				break;
				case 'textarea':
                    Formpage.toggle_error(n, el, !Formpage.isClean(el.value), "Jouw reactie bevat slecht taalgebruik." );
                    break;
			}
		});
		if(this.errs > 0)document.documentElement.scrollTop = 200;
		return (this.errs==0);
	},
	
	get_container_row: function(el){
		while((el = el.parentNode) != null){
			if(el.className.indexOf("formrow") != -1) break;
		}
		if(el.className.indexOf("formrow") != -1) return el; else return null;
	}, 
	
	toggle_error: function(item, el, has_error, msg){
		if(item["has_error"] != true){
			row = Formpage.get_container_row(el);
			if(row != null){
				error_cell = $($(".errordiv", row)[0]);
				error_cell.html("");
				if(has_error){
					if(error_cell.html().indexOf(msg) < 0){
						error_cell.append("<div>" + msg + "</div>");
					}
					if(this.errs==0)this.first_error = row;
					this.errs++;
					item["has_error"] = true;
				}else{
					error_cell.html("");
				}
			}
		}
	},

    isClean: function(input){
        var tokens = input.split(/\W+/);
        for(var i=0; i < tokens.length; i++)
            if(!Formpage.clean(tokens[i]))
                return false;
        return true;
    },

    clean: function(input){
        var crc = Formpage.computeCRC(input);
        for(var i=0; i < Formpage.table.length;  i++)
            if(crc == Formpage.blacklist[i])
                return false;
        return true;
    },

    computeCRC: function(input){
        var crc = 0xffffffff;
        for(var i=0; i < input.length; i++)
            crc = (crc >>> 8) ^ Formpage.table[input.charCodeAt(i) ^ crc & 0xff];
        return (~crc).toString(16);
    },

    initTable: function(){
        var poly = 0xedb88320;
        var crc = 0;
        for(var i=0; i < 256; i++){
            crc = i;
            for(var j=0; j < 8; j++)
                if((crc & 1) == 1)
                    crc = (crc >>> 1) ^ poly;
                else
                    crc >>>=1;
            Formpage.table[i] = crc;
        }
    }

}

/* GENERAL INIT FUNCTION */
function init(){
	Page.remove_focus();
	Formpage.init();
	Rollover.init();
	Dossier.init();
	Homepage.init(5000);
}

function init_post(){
}

BrowserDetect.init();

if(BrowserDetect.supported()){
	/* fire init function when DOM is loaded */
	$(document).ready(init);
	/* only call init_post function if something must be initialized *after* images are loaded */
	window.onload = init_post;
}