var arStaticLink = ["#","javascript:"];
var arSelfTarget = ["_self","_parent","_top"];

var supressAjax = false;

function useAjax() {
	var bUse = true;
	if (sniffer.isSafari() || !bUseAjax) {
		bUse = false;
	}
	return bUse;
}

function linkNotAjaxable(lnk) {
	for (var i=0;i<arStaticLink.length;i++) {
		if (lnk.indexOf(arStaticLink[i]) > -1) return true;
	}
	return false;
}

function linkHasSpecifiedTarget(trgt) {
	for (var i=0;i<arSelfTarget.length;i++) {
		if (trgt == undefined || trgt == "" || trgt.indexOf(arSelfTarget[i]) > -1) return false;
	}
	return true;
}

function linkIsMailLink(lnk) {
	return (lnk.substr(0,7) == 'mailto:');
}

function doMailLink(lnk) {
	var lnk = lnk.replace('[at]','@');
	lnk = lnk.replace(/\[dot\]/g,'.');
	return lnk;
}

function readyForAjax()
{
	for(var id=0; id<arguments.length; id++) 
	{
		var menu = _get(arguments[id]);
		if (!menu) return;
		var list = menu.getElementsByTagName('A');
	
		for (i=0;i<list.length;i++)
		{
			if ( !useAjax() || linkNotAjaxable(list[i].href) || linkHasSpecifiedTarget(list[i].target) ){
				// do nuttin'			
			} else if ( list[i].href.match(/\.wmv$/i) ) {
				// do nothing > wmv movie!
			} else if (linkIsMailLink( list[i].href )) {
				// replace safeguard for email-links
				list[i].href = doMailLink(list[i].href);
				list[i].innerHTML =  doMailLink(list[i].innerHTML);
			} else if ( noLocalDomain(list[i].href) ) { 
				// externe link
				list[i].target = '_blank';
			} else  {
				// parse link as ajax
				if (!supressAjax) list[i].href = "javascript:parseAjax('"+list[i].href+"');";
				// else: do nothing! (disables ajax parsing for default internal links)
			}
		}
	}
}

function parseAjax(url)
{
	// get querystring arguments:
	var qs = "";
	try
	{
		var qs   = url.split("?")[1];
	}
	catch(e) {}
	goData(qs);
}

// get data via ajax
function getDataForPage(qs) {
	qs = (qs == null) ? '' : qs;
	var rs = fillArrayFromXml("/ajax/getXml.cfm?" + qs);
	if (rs && (rs.length > 0)) {
		curtainsForWindows(false);
		fillFullContent(rs[0]);
		pushStats(qs);

	} else {
		//alert('no results');
		window.status='no results';
	}
}

// get search data via ajax
function getSearchData(searchString,rp) {
	searchString = (searchString == null) ? '' : searchString;
	rp = (rp == null) ? 1 : rp;
	var rs = fillArrayFromXml("/ajax/search.cfm?searchString=" + searchString + '&rp=' + rp);
	if (rs && (rs.length > 0)) {
		curtainsForWindows(false);
		setSearchResult(rs[0]);
	} else {
		alert('no results');
	}
}

// get contactForm via ajax
function getContactForm() {	
	var qs = qstring == null ? 'page=joh' : qstring;
	var rs = fillArrayFromXml("/ajax/getContactForm.cfm?" + qs);
	if (rs && (rs.length > 0)) {
		fillContactForm(rs[0]);
	} else {
		//alert('no results');
		window.status='no results';
	}
}

// submit Form via ajax
function submitForm(form) {
	if (typeof(form) != 'object') form = _get(form);
	if (!form) return;
	var obj = fillObjectFromXml("/ajax/getForm.cfm",'post', form);
	curtainsForWindows(false);
	if (obj) {
		formReturned(form,obj);
	} else {
		//alert('no results');
		window.status='no results';
	}
	return false;
}

// does the form have file-fields ?
function formHasFile(form) {	
	if (typeof(form) != 'object') form = _get(form);
	for (var i=0; i < form.elements.length; i++) {
		if (form.elements[i].type == 'file') {
			return true;
		}
	}
	return false;
}

// returning link or deeplink ? get data via ajax
function checkForDeeplink() {
	var startURI = window.location.href;
	var ajaxVars = startURI.split("#")[1];
//	if (ajaxVars && (ajaxVars.indexOf('page=') != -1)) {
	if (ajaxVars && (ajaxVars.length > 0))  {
		parseAjax('index.cfm?' + ajaxVars);
	}
	return true;
}

function noLocalDomain( href ) {
	href = href.substr(0,4) == 'www.' ? href : 'www.' + href;
	for(var i=0;i<arDomains.length;i++) {
		if (href.indexOf(arDomains[i].replace(/(http:\/\/)?(www\.)?/i,''))> -1) {
			return false;
			break;
		}
	}
	return true;
}

function addToQueryString(sVar,val) {
	var arQS = qstring.split('&');
	var found = false;
	for (var i=0;i<arQS.length;i++) {
		if (arQS[i].substr(0,sVar.length) == sVar) {
			arQS[i] = sVar + "=" + val;
			found=true;
			break;
		}
	}
	if (!found) arQS[arQS.length] = sVar + "=" + val;
	return arQS.join('&');
}

// do ajax functions via timeout for the cool effect or redirect if necessary/wanted
function goSearch(frm)
{
	curtainsForWindows();
	if (useAjax()) {
		setTimeout("getSearchData('"+frm.quickSearchInput.value+"')", 10);
		return false;
	} else {
		var newQS = addToQueryString('searchstring',frm.quickSearchInput.value);
		document.location.href = 'index.cfm?' + newQS;
	}
}
function goSearchPage(searchString,rp) 
{
	curtainsForWindows();
	if (useAjax()) {
		setTimeout("getSearchData('"+searchString+"',"+ rp +")", 10);
	} else {
		var newQS = addToQueryString('rp',rp);
		document.location.href = 'index.cfm?' + newQS;
	}
}
function goContactForm()
{	
	if(useAjax()) {
		setTimeout("getContactForm()", 10);
	} else {
		var newQS = addToQueryString('showContact',true);
		document.location.href = 'index.cfm?' + newQS;
	}
}
function goSubmitForm(form)
{
	curtainsForWindows();
	// note : when form has a file-input, we cannot (yet) use ajax
	if (useAjax() && !formHasFile(form)) { 
		setTimeout("submitForm('"+form.id+"')", 10);
		return false;
	} else {
		return true;
	}
}
function goData(qs) {
	curtainsForWindows();
	if(useAjax() ) {
		scroll(0,0);
		if (!(qs && qs.length)) qs = 'page=';
		dhtmlHistory.add(qs,qs);
		setTimeout("getDataForPage('"+qs+"')", 10);
		return false;
	} else {
		document.location.href = 'index.cfm?' + qs;
	}
}

function pushStats(uri)
// tries to push GA stats
{
	try {
		var pageTracker = _gat._getTracker("UA-1405323-1");
		pageTracker._trackPageview(uri);
		var pageTracker = _gat._getTracker("UA-1405323-6");
		pageTracker._trackPageview(uri);
	} 
	catch(err) {}
}

var dbm = 0;
function handleErrors(msg, errUrl, line) 
{
	curtainsForWindows(false);
	if (dbm == 1) alert('fout in regel '+line+'\n'+msg+'\n'+errUrl);
}
window.onerror = handleErrors;

