function setLinkTarget( evt )
{
	var tg = getEventTarget( evt );
	if ( tg.nodeName == 'A' && tg.hostname != window.location.hostname ) {
		tg.target = '_blank';
	}
	else {
		setCookieViewportSize();
	}
}



function getViewportSize()
{
	var width, height;
	var page = top.frames['main'] || window;
	
	try {
		// IE6 in standards compliant mode
		width  = page.documentElement.clientWidth;
		height = page.documentElement.clientHeight;
	}
	catch( e ) {
		// Mozilla/Opera/IE7
		width  = page.innerWidth || 800;
		height = page.innerHeight || 600;
	}
	
	width  = Math.max( 100, width );
	height = Math.max( 100, height );
	 
	return [width, height];
}



function setCookieViewportSize()
{
	// Set cookie to to store viewport size
	var viewportSizeNew = getViewportSize().join( ',' );
	
	if ( window.location.href.indexOf('martijnoverweg') != -1 ) { // debug
		//alert( viewportSizeNew );
	}
	
	if ( document.cookie.indexOf('viewportSize=') != -1 ) {
		// Cookie exists
		var viewportSizeOld = document.cookie.match( /viewportSize=(\d{2,4},\d{2,4})/ )[1];
		if ( viewportSizeOld == viewportSizeNew ) {
			// Viewportsize has not changed
			return; // Do not use 'return false' or link wil not work in IE
		}
	}
	
	// Cookie does not exist or viewportsize has changed
	var objDate     = new Date();
	var lifespan    = 1000 * 60 * 60; // 1 hour
	objDate.setTime( objDate.getTime() + lifespan );
	var expDate     = objDate.toGMTString();
	document.cookie = 'viewportSize=' + viewportSizeNew + '; expires=' + expDate + '; path=/';
	return true;
}



function initImageLayer()
{
	var imageLayer = document.getElementById( 'imageLayer' );
	if ( !imageLayer ) {
		return;
	}
	
	// Show image
	// Nieuw:
	if ( imageLayer.innerHTML.indexOf('jpg') == -1 && window.location.href.indexOf('martijnoverweg') != -1 ) { // debug
		var imgCode = ( window.location.href.indexOf('item.php') != -1 ? destHeight + '-' + watermark : 'l' );
		imageLayer.style.backgroundImage = 'url(data/' + siteId + '/' + itemId + '-' + imgCode + '.jpg)';
		imageLayer.oncontextmenu = function() { return false };
	}
	// Oud:
	else if ( imageLayer.innerHTML.indexOf('jpg') == -1 ) { // debug
		//var itemId = imageLayer.getElementsByTagName('A')[0].href.match( /itemId=(\d+)/ )[1];
		try {
			// item-l.php + item-x.php
			var imgLetter = window.location.href.match( /item-(\w)/ )[1];
		}
		catch( e ) {
			// index.php
			var imgLetter = 'l';
		}
		imageLayer.oncontextmenu = function() { return false };
		imageLayer.style.backgroundImage = 'url(data/' + siteId + '/' + itemId + '-' + imgLetter + '.jpg)';
	}
	
	// Show keyboard message (but not on homepage)
	var isPhotoPage  = window.location.href.indexOf('item-') != -1;
	var isMobile     = navigator.userAgent.match( /(iphone|ipod|ipad)/i ) != null;
	var cookieExists = document.cookie.indexOf('keyboard=') != -1;
	if ( isPhotoPage && !isMobile && !cookieExists ) {
		var msg = translate( 'Navigeer met de pijltjes op uw toetsenbord' );
		imageLayer.innerHTML += "<div id='msgKeyboard'>" + msg + "</div>";
	}
}




// Return value is either '#fff' (white) or some other value (not white)
// For blinking 'Info...'
function getBgColor()
{
	var bgColor;
	var el = document.body;
	
	if ( el.currentStyle ) { // IE
		bgColor = el.currentStyle['backgroundColor'];
		if ( bgColor == '#ffffff' ) {
			bgColor = '#fff';
		}
	}
	else if ( window.getComputedStyle ) { // All other browsers
		bgColor = document.defaultView.getComputedStyle( el, null ).getPropertyValue( 'background-color' );
		if ( bgColor.indexOf('255') != -1 ) {
			bgColor = '#fff';
		}
	}
	
	return bgColor;
}



function addLoadEvent( func )
{
	var oldOnLoad = window.onload;
	if ( typeof window.onload != 'function' ) {
		window.onload = func;
	}
	else {
		window.onload = function() {
			oldOnLoad();
			func();
		}
	}
}



function attachEventListener( target, eventType, functionRef, capture )
{
    if ( typeof target.addEventListener != 'undefined' ) {
        target.addEventListener( eventType, functionRef, capture );
    }
    else if ( typeof target.attachEvent != 'undefined' ) {
        target.attachEvent( 'on' + eventType, functionRef );
    }
	else {
        eventType = 'on' + eventType;
        if ( typeof target[eventType] == 'function' ) {
            var oldListener = target[eventType];
            target[eventType] = function() {
                oldListener();
                return functionRef();
            }
        }
		else {
            target[eventType] = functionRef;
        }
    }

    return true;
}



function stopDefaultAction( event )
{
    event.returnValue = false;
    if ( typeof event.preventDefault != 'undefined' ) {
        event.preventDefault();
    }
    return true;
}




// Toggle password visibility
function togglePassword()
{
	var showPassword = document.getElementById( 'showPassword' );
	
	if ( showPassword ) {
		showPassword.onclick = function() {
			var sitePassword = document.forms[0].sitePassword;
			try {
				// All but IE
				sitePassword.type = ( this.checked ? 'text' : 'password' );
			}
			catch( e ) {
				// IE
				var sitePasswordClone   = document.createElement( 'input' );
				sitePasswordClone.size  = 10;
				sitePasswordClone.id    = 'sitePassword';
				sitePasswordClone.name  = 'sitePassword';
				sitePasswordClone.value = sitePassword.value;
				sitePasswordClone.type  = ( this.checked ? 'text' : 'password' );
				sitePassword.parentNode.replaceChild( sitePasswordClone, sitePassword );
			}
		}
	}
}



function initKeyNav()
{
	document.onkeydown = function( evt ) {
		var evt = evt || window.event;
		var tg  = getEventTarget( evt );
		if ( tg.nodeName == 'INPUT' || tg.nodeName == 'TEXTAREA' ) {
			return;
		}
		
		if ( evt.keyCode >= 37 || evt.keyCode <= 40 ) {
			try {
				switch( evt.keyCode ) {
					case 37:
						keyLeft();
						break;
					case 38:
						keyUp();
						break;
					case 39:
						keyRight();
						break;
					case 40:
						keyDown();
						break;
				}
				
				// Set cookie to hide text
				var objDate  = new Date();
				var lifespan = 1000 * 60 * 60; // 1 hour
				objDate.setTime( objDate.getTime() + lifespan );
				var expDate = objDate.toGMTString();
				document.cookie = 'keyboard=1; expires=' + expDate + '; path=/';
				return stopDefaultAction( evt );
			}
			catch( e ) {
				// No keyboard functions defined for current page
			}
		}
	}
}



function initFormatOptions()
{
	var links = document.getElementsByTagName( 'A' );
	var popupLink;
	
	for ( var i = 0; i < links.length; i++ ) {
		if ( links[i].className.indexOf('formatOptions') == -1 ) {
			continue;
		}
		
		links[i].onclick = function() {
			var url = this.getAttribute( 'href' );
			openPopup( url );
			return false;
		}
	}
	
}



function checkUpload()
{
	if ( !document.forms['frmUpload'] ) {
		return;
	}
	
	document.forms['frmUpload'].onsubmit = function() {
		var uploadImg = document.getElementById( 'uploadImg' );
		if ( uploadImg.value.length > 1 ) {
			document.getElementById( 'btnSubmit' ).disabled = true;
			return true;
		}
		var msg = translate( 'Kies eerst een bestand om te uploaden' );
		alert( msg );
		return false;
	}
}



function initUploadForm()
{
	var frm               = document.forms[0];
	var siteWatermarkType = frm.siteWatermarkType;
	
	if ( typeof siteWatermarkType == 'undefined' ) {
		return;
	}
	
	toggleWatermarkText = function() {
		var trs = frm.getElementsByTagName( 'TR' );
		for ( var i = 0; i < trs.length; i++ ) {
			if ( trs[i].className == 'siteWatermarkType' ) {
				if ( siteWatermarkType[0].checked || siteWatermarkType[1].checked ) {
					// Geen watermerk tekst
					trs[i + 1].style.display = 'none';
				}
				else {
					// Wel watermerk tekst
					try {
						trs[i + 1].style.display = 'table-row';
					}
					catch( e ) {
						trs[i + 1].style.display = 'block'; // IE
					}
				}
			}
		}
	}
	
	for ( var i = 0; i <= siteWatermarkType.length; i++ ) {
		if ( typeof siteWatermarkType[i] != 'undefined' ) {
			siteWatermarkType[i].onclick = toggleWatermarkText;
		}
	}
	toggleWatermarkText();
}



function openPopup( url )
{
	popupWidth  = 540;
	popupHeight = 300;
	windowWidth = document.body.offsetWidth;
	windowLeft  = ( windowWidth - 570 ) / 2;
	window.open( url + "", "", "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=1,resizable=1,copyhistory=yes,width=" + popupWidth + ",height=" + popupHeight + ",left=" + windowLeft + ",top=300" )
}



function getEventTarget( event ) {
    var targetElement = null;

    if ( typeof event.target != 'undefined' ) {
        targetElement = event.target;
    }
	else {
        targetElement = event.srcElement;
    }

    while ( targetElement.nodeType == 3 && targetElement.parentNode != null ) {
        targetElement = targetElement.parentNode;
    }

    return targetElement;
}



function enableSubmit( page )
{
    var frm = document.form1;
	if ( typeof frm != 'undefined' ) {
		frm.setAttribute( 'action', page );		
		var btnSubmit = document.getElementById( 'btnSubmit' );
		btnSubmit.disabled = false;
		
		frm.onsubmit = function() {
			var formOk = verifyForm( this );
			btnSubmit.disabled = formOk;
			return formOk;
		}
	}    
}



function verifyForm()
{
	var formFields = document.getElementsByTagName( 'INPUT' );
	if ( formFields.length == 0 ) {
		return;
	}
	
	var msg = '';
	var fieldValue, isEmpty, labelText, objLabel, fieldClass;
	
	for ( var i = 0; i < formFields.length; i++ ) {
		
		if ( formFields[i].getAttribute('type') != 'text' ) {
			continue;
		}
		fieldClass = formFields[i].className;
		if ( !fieldClass ) {
			continue;
		}
		
		// Paragraphs
		objLabel = formFields[i].parentNode.getElementsByTagName( 'LABEL' )[0];
		if ( !objLabel ) {
			// Table cells
			objLabel = formFields[i].parentNode.parentNode.getElementsByTagName( 'LABEL' )[0];
		}
		if ( !objLabel ) {
			continue;
		}
		
		labelText = objLabel.firstChild.nodeValue.replace( ':', '' );
		if ( !labelText ) {
			continue;
		}
		
		fieldValue = formFields[i].value;
		isEmpty    = ( formFields[i].value.length == 0 );
		
		if ( fieldClass.indexOf('required') != -1 && isEmpty ) {
			msg += "\n- " + labelText + ' ' + translate( 'is verplicht' );
		}
		
		if ( fieldClass.indexOf('phone') != -1 && !isEmpty && !validatePhone(fieldValue) ) {
			msg += "\n- " + labelText + ' ' + translate( 'is geen telefoonnummer' );
		}
		
		if ( fieldClass.indexOf('url') != -1 && !isEmpty && !validateUrl(fieldValue) ) {
			msg += "\n- " + labelText + ' ' + translate( 'is geen domeinnaam' );
		}
		
		if ( fieldClass.indexOf('mail') != -1 && !isEmpty && !validateEmail(fieldValue) ) {
			msg += "\n- " + labelText + ' ' + translate( 'is geen e-mail adres' );
		}
		
	}
	
	if ( msg ) {
		msg = translate( 'Het formulier is niet juist ingevuld:' ) + msg;
		alert( msg );
		return false;
	}
	
	return true;
}



function validateEmail( str )
{
	var pattern = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	return pattern.test( str );
}



function validateUrl( str )
{
	var pattern = /^(www\.)?(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
	return pattern.test( str );
}



function validatePhone( str )
{
	var matches = str.match( /\d/g ); // 'g' = global (search entire string, don't stop at first reference)
	return ( matches && matches.length >= 7 );
}



function translate( str )
{
	var lang = document.body.getAttribute( 'lang' ) || 'en';
	var out  = str;
	if ( typeof language[str][lang] != 'undefined' ) {
		out = language[str][lang];
	}
	return out;
}



var language = [];

language['Banner wissen?'] = {
	"en": "Delete banner?"
}

language['De waarde in het veld moet een getal zijn'] = {
	"en": "The value must be a number"
}

language['is verplicht'] = {
	"en": "is required"
}

language['is geen telefoonnummer'] = {
	"en": "is not a phone number"
}

language['is geen domeinnaam'] = {
	"en": "is not a domain name"
}

language['is geen e-mail adres'] = {
	"en": "is not an e-mail address"
}

language['Het formulier is niet juist ingevuld:'] = {
	"en": "The form has not been filled in correctly:"
}

language['Deze pagina wissen?'] = {
	"en": "Delete this page?"
}

language['Deze foto wissen?'] = {
	"en": "Delete this image?"
}

language['Kies eerst een bestand om te uploaden'] = {
	"en": "First choose a file to upload"
}

language['Wachtwoord vergeten?'] = {
	"en": "Forgot your password?"
}

language['Navigeer met de pijltjes op uw toetsenbord'] = {
	"en": "Navigate with the arrow keys on your keyboard"
}

language['Standaard DNS records instellen?'] = {
	"en": "Insert default DNS records?"
}

language['Uw wachtwoord is verstuurd naar'] = {
	"en": "Your password has been sent to"
}

language['Wachtwoord sturen naar'] = {
	"en": "Send password to"
}