// ============================================================
// tweakables
// ============================================================

// doe SEF url-rewriting op shopfilters?
// bijv. "/shop/index.php?option=com_includer&view=includer&Itemid=53&shopPage=list&shopFilters=special:1" wordt "/shop/products/list/53/special:1/"
var shopURLsMakeSEF = 1;	// 1 | 0

// deze wordt op 1 gezet bij een body.onload
var docLoaded = 0;

// vimeo videos
var videoSources = new Array();

// ============================================================
// catch event
// document.onmousedown = function (mouseEvent) {
// document.onmousedown = handleEvent;
// ============================================================

function handleEvent(mEvent) {
	if (!mEvent) {
		var e = window.event.srcElement;	// Internet Explorer
	} else if (mEvent.srcElement) {
		var e = mEvent.srcElement;	// Internet Explorer
	} else if (mEvent.target) {
		var e = mEvent.target;		// Netscape and Firefox
	}

	return e;
	//alert(e.nodeName);
}


var curMenuOpen = 0;

// elke klik op een element wordt via deze functie verwerkt
function shopMouseDown(objSrc) {

	// check of element waarop geklikt is niet het huidige openstaande uitklapmenu is...
	var objParent = objSrc;
	while (objParent.id != ('dimBg') && objParent.nodeName != 'HTML') {
		objParent = objParent.parentNode;
	}

}

// elke mouseover op een element wordt via deze functie verwerkt
function shopMouseOver(objSrc) {
	focusOnInput = 0;

	//top.document.title = objSrc.nodeName + ', id=' + objSrc.id;

	if (curMenuOpen) {

		// check of element waarop geklikt is niet het huidige openstaande uitklapmenu is...
		var objParent = objSrc;
		while (!objParent.id.match(/^(shopNavMenu|shopDiv)/) && objParent.nodeName != 'HTML') {
			objParent = objParent.parentNode;
		}

		if (objParent.id.match(/^(shopNavMenu|shopDiv)/)) {
			//top.document.title = 'menu!';
			return;
		}

		//top.document.title = objSrc.nodeName + ', id=' + objSrc.id;

		// verberg uitklapmenu
		el('shopDiv'+curMenuOpen).style.backgroundColor = 'transparent';
		el('shopNavMenu'+curMenuOpen).style.visibility = 'hidden';
		el('shopLink'+curMenuOpen).style.borderBottomWidth = '0px';
		curMenuOpen = 0;
	}

}

// onclick, bijv. <a href='javascript://' onclick="navButClick(this, 303, 'right')">
function navButClick(objSrc, catId, hAlign) {
	var objDiv = objSrc.parentNode;

	//var divPos = new Array(obj_curleft(objDiv), obj_curtop(objDiv));
	var divPos = new Array(objDiv.offsetLeft, objDiv.offsetTop);

	//objDiv.style.backgroundColor = '#2A2A2A';


	var menuLeftPos = (hAlign == 'left') ? divPos[0] : (divPos[0] + objDiv.offsetWidth - el('shopNavMenu'+catId).offsetWidth);
	var menuTopPos = divPos[1]+objDiv.offsetHeight;

	// IE7 fix:
	if (is_ie) {
		//alert('objDiv = ' + objDiv.className);
		menuLeftPos = obj_curleft(objDiv) - obj_curleft(el('shopMaster'));
		if (hAlign == 'right') {
			menuLeftPos = menuLeftPos + objDiv.offsetWidth - el('shopNavMenu'+catId).offsetWidth;
		}

		menuTopPos = obj_curtop(objDiv) - obj_curtop(el('shopHeader')) + objDiv.offsetHeight;
	}

	el('shopNavMenu'+catId).style.left = menuLeftPos + 'px';
	el('shopNavMenu'+catId).style.top  = menuTopPos + 'px';
	el('shopNavMenu'+catId).style.visibility = 'visible';
	el('shopLink'+catId).style.borderBottomWidth = '2px';

	curMenuOpen = catId;
}

// onmouseover, bijv. <a href='javascript://' onmouseover="navButHover(this, 303, 'right')">
function navButHover(objSrc, catId, hAlign) {

	// verberg het oude menu
	if (curMenuOpen && curMenuOpen != catId) {

		// verberg uitklapmenu
		el('shopDiv'+curMenuOpen).style.backgroundColor = 'transparent';
		el('shopNavMenu'+curMenuOpen).style.visibility = 'hidden';
		el('shopLink'+curMenuOpen).style.borderBottomWidth = '0px';
		curMenuOpen = 0;
	}

	// toon het nieuwe menu
	navButClick(objSrc, catId, hAlign);
}


function el(el) {
	return document.getElementById(el);
}

// ---------------------------------------------

//document.onmousedown = function(event) {
//	if (isDimmed) {
//		shopMouseDown(
//			handleEvent(event)
//		);
//	}
//}

//document.onmouseover = function(event) {
//	if (navEventMode == 'hover' && !focusOnInput) {
//		shopMouseOver(
//			handleEvent(event)
//		);
//	}
//}

// ---------------------------------------------

function filterMenuItemClick(fieldName, fieldValue) {
	// declareer wat variabelen
	var formName 	= 'formFilters';
	var formSearch 	= 'formFilters'; //'formSearch';
	var groupNames 	= new Array();
	var ignoreFields= new Array('search', 'page');

	// kopieer value van de door-user-aangeklikte menu-item naar het corresponderende input-field
	document.forms[formName].elements[fieldName].value = fieldValue;

	// begin de URL-string die we straks aanroepen om de results te refreshen, met het search-veld
	//var strURL = 'search:' + document.forms[formSearch].elements['search'].value.replace(/[\:\;]/g, '') + ';';

	// JS 30-jun-10: stuur geen search-field door met filter-opdracht
	var strURL = '';

	// loop door input-fields en groepeer deze op basis van de veld-prefix
	for (var i=0; i < document.forms[formName].elements.length; i++) {
		var objElement = document.forms[formName].elements[i];

		// skip dit field indien deze opgenomen is in de array ignoreFields
		if (in_array(objElement.name, ignoreFields)) continue;

		// inputfield-name is bijv. "categories_color", filter de groupname "categories" hieruit
		var groupName = objElement.name.replace(/^([^_]+)_(.+)$/i, '$1');

		// indien deze group-variabele nog niet is gezet, doe dat dan nu
		if (eval('typeof('+groupName+')') == 'undefined') {
			eval("var "+groupName+" = ''");
			groupNames[groupNames.length] = groupName;
		}

		// voeg waarde van huidige inputfield toe aan group-string
		eval(groupName+" += '" + objElement.value + ",'");

	}

	// loop door de hierboven verzamelde group-strings
	for(var i=0; i<groupNames.length; i++) {
		var groupString = eval(groupNames[i]).replace(/^\,+|\,+$/g,'');	// vraag kommagescheiden string op en trim komma's van uiteinden af
		eval("strURL += '"+groupNames[i]+':'+groupString+";';");		// voeg kommagescheiden string toe aan URL-string
	}

//alert(strURL);
//return;

	// haal URL van zoekpagina, gedefinieerd in formSearch.page
	strURL = document.forms[formSearch].elements['page'].value.replace('%shopFilters%', escape(strURL)) + '&ct='+ctime();

	// voer de URL uit
	//alert(strURL);
	location.href = URLMakeSEF(strURL);
}

// -------------------------------------------------

function filterGoSearch() {
	var formSearch 	= 'formFilters';

	// begin de URL-string die we straks aanroepen om de results te refreshen, met het search-veld
	var strURL = 'search:' + document.forms[formSearch].elements['search'].value.replace(/[\:\;\/]/g, '') + ';';

	// haal URL van zoekpagina, gedefinieerd in formSearch.page
	strURL = document.forms[formSearch].elements['page'].value.replace('%shopFilters%', escape(strURL)) + '&ct='+ctime();

//alert(baseHref + URLMakeSEF(strURL));
//alert( URLMakeSEF(strURL) );
//return;

	location.href = URLMakeSEF(strURL);
}


// ---------------------------------------------------

// was:   /shop/index.php?option=com_includer&view=includer&Itemid=53&shopPage=list&shopOffset=0&shopRPP=10&shopFilters=special:1
// wordt: /shop/products/list/53/0/10/special:1/

function URLMakeSEF(url) {
	if (shopURLsMakeSEF && url.match(/^(index\.php\?)/)) {

		var getvars = url.replace(/^(index\.php\?)(.+)$/, '$2').split('&');

		var strShopPage = strItemid = strShopFilters = strShopOffset = strShopRPP = '';

		for (var i=0; i<getvars.length; i++) {
			getvars[i] = getvars[i].split('=', 2);

			if (getvars[i][0] == 'shopPage') strShopPage = getvars[i][1] + '/';
			if (getvars[i][0] == 'Itemid') strItemid = getvars[i][1] + '/';
			if (getvars[i][0] == 'shopOffset') strShopOffset = getvars[i][1] + '/';
			if (getvars[i][0] == 'shopRPP') strShopRPP = getvars[i][1] + '/';
			if (getvars[i][0] == 'shopFilters') strShopFilters = getvars[i][1] + '/';
		}

		// vb: products/list/53/0/10/special:1/
		url = baseHref + 'products/' + strShopPage + strItemid + strShopOffset + strShopRPP + strShopFilters;

		//alert(url);
	}
	return url;
}

// -----------------------------------------------------------------------

var tidUpdateBack, lockUpdateBack = 0;
var backIsClear = 0;
var docSW = 0, docSH = 0;
var backImage = '';
var articleId = 0;
var categoryId = 0;
var isFrontpage = 0;

function updateBack(mode, opts) {
	// JS 24-jan-11: hack om bg-loader uit te zetten
	//return;

	if (mode == 'onresize') {

		// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		// onresize: doe over 0.5 seconde de feitelijke resize
		// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

		// maak background-image tijdelijk blanco
		if (!backIsClear) {
			el('theBody').style.backgroundImage = 'none';
			backIsClear = 1;
		}

		// bij een onresize: trigger over een halve seconde het laden van een nieuwe background-image
		// indien binnen die halve seconde een nieuwe resize wordt gedaan, wordt het laden van die background-image opnieuw met een halve seconde uitgesteld
		clearTimeout(tidUpdateBack);
		tidUpdateBack = setTimeout("updateBack('resize', '"+opts+"')", 500);
		//top.document.title = 'onresize triggered...';
		return;

	} else if (mode == 'resize') {

		// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		// trigger de feitelijke resize
		// >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

		// indien momenteel al een nieuwe background-image wordt ingeladen, stel deze dan uit
		if (lockUpdateBack) {
			clearTimeout(tidUpdateBack);
			tidUpdateBack = setTimeout("updateBack('resize', '"+opts+"')", 500);
			return;
		}

		// laadt een nieuwe background-image in
		lockUpdateBack = 1;
		setDocsize(0);
		reposBlocks(0);
		//alert('current location = ' + location.href);
		//getBase();
		if (0 && backImage.length > 0) {
			hide.location.href = getBase() + '../shop_back.php'
				+ '?w='    + DBW
				+ '&h='    + DBH
				+ '&i='    + escape(backImage)
				+ '&id='   + articleId
				+ '&catid='+ categoryId
				+ '&front='+ isFrontpage
				+ '&opts=' + opts
				+ '&ct='   + ctime();
		}
	}

	return;

}

function reposBlocks(mode) {

	if (mode == 1) setDocsize(0);

	// positioneer shopLeftNav, shopContent en shopRightNav

	var objNav = el('shopLeftNav');
	var objCnt = el('shopContent');
	var objSid = el('shopRightNav');

	// JS 21-oct-10: krijg fixed position niet werkend met herpositioneren, dan maar absolute positioned
	if (is_ie) {
		objNav.style.position = 'absolute';
		objSid.style.position = 'absolute';
	}

	// marges tussen de 3 blokken
	var objMargins = 48;

	// totale breedte van nav+content+sidebar en 2 marges ertussen: 192 + 48 + 512 + 48 + 192 = 992 pixels breed
	var totalWidth = objNav.offsetWidth + objMargins + objCnt.offsetWidth + objMargins + objSid.offsetWidth;

	var scrollBarWidth = 16;
	var pLeft = Math.round((DBW - totalWidth - scrollBarWidth)/2);

	var leftOffsetNav = 0;
	var leftOffsetCnt = leftOffsetNav + objNav.offsetWidth + objMargins;
	var leftOffsetSid = leftOffsetCnt + objCnt.offsetWidth + objMargins;

	objNav.style.left = Math.max(leftOffsetNav, pLeft + leftOffsetNav) + 'px';
	objCnt.style.left = Math.max(leftOffsetCnt, pLeft + leftOffsetCnt) + 'px';
	objSid.style.left = Math.max(leftOffsetSid, pLeft + leftOffsetSid) + 'px';

//objNav.style.position = 'absolute';
//objNav.style.left = '0px';
//objNav.style.top = '0px';

	objNav.style.visibility = 'visible';
	objCnt.style.visibility = 'visible';
	objSid.style.visibility = 'visible';

	// indien in dim-modus (er wordt momenteel video afgespeeld), herschaal dan de black bg en herpositioneer de videoplayer
	if (isDimmed) {
		var objBg = el('dimBg');
		var objFg = el('dimFg');
		var objPlayer = el('vpContainer');
		var objCaption = el('vpCaption');

		// maak de dim-bg eerst minimaal zodat de document-size correct gemeten kan worden
		objBg.style.width = '0px';
		objBg.style.height = '0px';

		// herschaal de dim-bg op tot volledige afmetingen van document
		var docSize = getDocScrollSize();
		objBg.style.width = docSize[0] + 'px';
		objBg.style.height = docSize[1] + 'px';

		// bereken positie van videoplayer
		var sXY = getScrollPosition();
		pXY = new Array(
			Math.round((DBW - videoSize[0]) / 2 + sXY[0]),
			Math.round((DBH - videoSize[1] - 20) / 2 + sXY[1])
		);

		// her-positioneer thingie
		if (fadeInFg) {
			objFg.style.left 		= pXY[0] + 'px';
			objFg.style.top  		= pXY[1] + 'px';
		}

		// her-positioneer player en caption
		objPlayer.style.left 		= pXY[0] + 'px';
		objPlayer.style.top  		= pXY[1] + 'px';
		objCaption.style.left 		= pXY[0] + 'px';
		objCaption.style.top  		= (pXY[1] + videoSize[1]) + 'px';
	}
}

// -----------------------------------------------------------------------

function getBase() {
	var baseTag = document.getElementsByTagName("base");
	if (baseTag.length>0) {
		return baseTag[0].href;
	} else {
		return '';
	}

	//for(var i=0; i<baseTag.length; i++) {
	//	var baseId = baseTag[i].id;
	//	var baseHref = baseTag[i].href;
	//	return baseHref;
	//	alert("ID = "+ baseId +"\nhref = "+ baseHref);
	//}
}

// -----------------------------------------------------------------------

// onload
addEvent2(window, 'load', function() {
	docLoaded = 1;
	if (doLoadBack) {
		updateBack('resize', '');
	} else {
		reposBlocks(1);
	}

	// laadt iframes
	if (videoSources.length) {
		for(var i=0; i<videoSources.length; i++) {
			setTimeout("vsrc"+i+".location.href='"+videoSources[i]+"'", 200);
		}
	}

});

// onresize
addEvent2(window, 'resize', function() {
	updateBack('onresize', 'flushlist');
});

// ?
function hoverEvent(eventIdRegexp, mode) {
	var objs = getElementsByRegExpId(eventIdRegexp, document, 'DIV');
	//alert(objs.length);
	if (objs.length) {
		for(var i=0; i<objs.length; i++) {
			if (mode == 'over') {
				objs[i].style.color = objs[i].style.backgroundColor;
				objs[i].style.backgroundColor = colmix(objs[i].style.color, '#000000', 0.25);
			} else if (mode == 'out') {
				objs[i].style.backgroundColor = objs[i].style.color;
				objs[i].style.color = '#fff';
			}
		}
	}
}

// --------------------------------------------------------------

function checkLoginFields(objForm) {
	if (objForm.username.value.length == 0) {
		alert('Enter your username in order to login.');
		objForm.username.focus();
		return false;

	} else if (objForm.passwd.value.length == 0) {
		alert('Enter your password in order to login.');
		objForm.passwd.focus();
		return false;

	} else {
		return true;
	}
}

// --------------------------------------------------------------

var dimTid, dimIdx = 0;
var dimSteps = new Array(5, 20, 50, 80, 100, 100);
var dimFactor = 0.7;	// 0.7
var isDimmed = 0;
var pXY;
var fadeInFg = true;
var customCaption = false;

function playVimeo(videoId, arrCaption) {
	// indien op ipad / iphone gekeken wordt, redirect dan naar vimeo universal player (laat de href zijn werk doen dmv een return true)
	if (is_iphone || is_ipad) return true;

	// we gaan dimmen
	isDimmed = 1;

	// wat voor caption plaatsen we onder vimeo player? indien false, dan worden type en titel van project gepakt. zie vimeo_player_loaded()
	customCaption = arrCaption;

	// dit element maakt het scherm donker:
	var objBg = el('dimBg');
	var objFg = el('dimFg');

	// herschaal de dim-bg op tot volledige afmetingen van document
	var docSize = getDocScrollSize();
	objBg.style.width = docSize[0] + 'px';
	objBg.style.height = docSize[1] + 'px';

	// bereken hoe groot de video mag worden
	// JS 30-may-11: de 1280x720 optie uitgezet, maximale grootte is nu 1024x576
	if (0 && DBW > 1280+20) {
		videoSize = new Array(1280, 720);
	} else if (DBW > 1024+20) {
		videoSize = new Array(1024, 576);
	} else if (DBW > 800+20) {
		videoSize = new Array(800, 450);
	} else {
		videoSize = new Array(640, 360);
	}

	// bereken positie van videoplayer
	var sXY = getScrollPosition();
	pXY = new Array(
		Math.round((DBW - videoSize[0]) / 2 + sXY[0]),
		Math.round((DBH - videoSize[1] - 20) / 2 + sXY[1])
	);

	// plaats videoplayer wit-vlak
	if (fadeInFg) {
		zetOpacity(objFg, 0);
		objFg.style.width 		= videoSize[0] + 'px';
		objFg.style.height 		= videoSize[1] + 'px';
		objFg.style.left 		= pXY[0] + 'px';
		objFg.style.top  		= pXY[1] + 'px';
		objFg.style.visibility 	= 'visible';
	}

	// toon dim-bg
	zetOpacity(objBg, 0);
	objBg.style.visibility = 'visible';

	// fade in
	clearInterval(dimTid);
	dimTid = setInterval("dimCanvas(1, '"+videoId+"')", 40);
	return false;
}


function closeVimeo(mode) {
	// voortijdig afbreken (user klikt op 'close')
	if (mode == 'abort') stopLoading();

	if (fadeInFg) {
		el('dimFg').style.visibility 	= 'hidden';
	}

	el('vpContainer').style.visibility = 'hidden';
	el('vpCaption').style.visibility = 'hidden';
	clearInterval(dimTid);
	dimTid = setInterval("dimCanvas(-1, false)", 40);
}

function dimCanvas(dir, videoId) {

	dimIdx += dir;

	if (dimIdx <= 0 || dimIdx+1 >= dimSteps.length) {
		clearInterval(dimTid);
		dimIdx = Math.max(0, Math.min(dimSteps.length-1, dimIdx));

		if (dir == 1) {
			// ----------------------------------------
			// lichten uit? laadt video
			// ----------------------------------------
			var objPlayer = el('vpContainer');
			var objCaption = el('vpCaption');

			// positioneer de player
			objPlayer.style.left 		= pXY[0] + 'px';
			objPlayer.style.top  		= pXY[1] + 'px';
			objPlayer.style.visibility 	= 'visible';

			// positioneer de caption
			el('capProjType').innerHTML = 'loading video...'; //el('spanProjectType').innerHTML;
			el('capProjTitle').innerHTML= ''; //el('spanProjectTitle').innerHTML;
			objCaption.style.width 		= videoSize[0] + 'px';
			objCaption.style.left 		= pXY[0] + 'px';
			objCaption.style.top  		= (pXY[1] + videoSize[1]) + 'px';
			objCaption.style.visibility = 'visible';

			// laad de video
			loadNewVideo(videoId);

		} else if (dir == -1) {
			// ----------------------------------------
			// lichten aan? terug naar site
			// ----------------------------------------
			isDimmed = 0;
			el('dimBg').style.visibility = 'hidden';
		}
	}

	zetOpacity(
		el('dimBg'),
		dimSteps[dimIdx]*dimFactor
	);

	if (fadeInFg) {
		zetOpacity(
			el('dimFg'),
			dimSteps[dimIdx]
		);
	}
}



var flashvars = {'clip_id': '1','server': 'vimeo.com','show_title': 0,'show_byline': 0,'show_portrait': 0,'fullscreen': 1,'js_api': 1}
var parObj = {'swliveconnect':true,'fullscreen': 1,'allowscriptaccess': 'always','allowfullscreen':true,'bgcolor':'#000000'};
var attObj = {};
var oSwfId='myFlashID';
var vimeoAPI;
var videoSize;


function loadNewVideo(vid) {
	attObj.id=oSwfId;
	flashvars.clip_id=vid;
	var vp=el('videoPlayer');
	if(!vp) {
		el('vpContainer').innerHTML='';
		vp=document.createElement("DIV");
		vp.id='videoPlayer';
		el('vpContainer').appendChild(vp);
	}
	swfobject.embedSWF("http://www.vimeo.com/moogaloop.swf",'videoPlayer',videoSize[0].toString(),videoSize[1].toString(),'9.0.0','expressInstall.swf',flashvars,parObj,attObj);
}

function playVimeoVideo() {
	vimeoAPI.api_play();
}

function stopLoading() {
	vimeoAPI.api_unload();
}

function pauseVimeoVideo() {
	vimeoAPI.api_pause();
}

function seekToVimeoVideo(value) {
	vimeoAPI.api_seekTo(value);
}

function stopVimeoVideo() {
	vimeoAPI.api_seekTo(0);
	vimeoAPI.api_pause();
}

function handleVimeoProgess(data) {
	//el("currentTime").innerHTML = data;
}

function handleVimeoVideoLoading(data) {
	//el("loadedBytes").innerHTML = data.bytesLoaded;
	//el("totalBytes").innerHTML = data.bytesTotal;
	//el("percentageLoaded").innerHTML = data.percent + '%';
}

function handleVimeoVideoFinished(d) {
	//alert("Video is finished");
	//stopVimeoVideo();
	closeVimeo('close');
}

function vimeo_player_loaded() {
	//if (fadeInFg) {
	//	el('dimFg').style.visibility 	= 'hidden';
	//}

	// plaats de caption onder video
	if (customCaption) {
		el('capProjType').innerHTML = customCaption[0];
		el('capProjTitle').innerHTML= customCaption[1];
	} else {
		el('capProjType').innerHTML = el('spanProjectType').innerHTML;
		el('capProjTitle').innerHTML= el('spanProjectTitle').innerHTML;
	}

	vimeoAPI = el(oSwfId);
	//el("duration").innerHTML = vimeoAPI.api_getDuration();
	//vimeoAPI.api_addEventListener("onProgress","handleVimeoProgess");
	vimeoAPI.api_addEventListener("onFinish","handleVimeoVideoFinished");
	playVimeoVideo();
}

// ---------------------------------

function loadShowreel() {

	if (el('menuLinkShowreel') != null) {

		var strOnclick = el('menuLinkShowreel').getAttribute('onclick');

		if (strOnclick.length) {
			strOnclick = strOnclick.replace(/^(return )/, '');
			eval(strOnclick);
		}
	}
}
