/* JavaScripts: Sander Sanders 4/2001	*/

/* Forms valideren:	*/

function isEmpty(str){
	return(str==="" || str === "undefined" || str===undefined || str === 0|| str === "null" || str === null)? 1 : 0;
}
function fakeEmail(str){
	var reg1 = /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)/;				// not valid E-mail addres
	var reg2 = /^.+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/;	// valid E-mail address
	return(reg1.test(str) || !reg2.test(str));
}

function fakeTelNr(str){
	return(isEmpty(str) || str.length < 10);
}

function checkRadio(radiobuttons){// Is er berhaupt iets gekozen?
	for(var i=0;i<radiobuttons.length;i++){
		if(radiobuttons[i].checked){
			return(true);
		}
	}
	return(false);
}

function checkCheckboxes(myForm,firstBox,lastBox){// Is er berhaupt iets gekozen?
	var theFirst, theLast, i=0;
	for(i=0;i<myForm.elements.length;i++){
		if(myForm.elements[i]==firstBox){
			theFirst=i;
			break;
		}
	}
	for(i=0;i<myForm.elements.length;i++){
		if(myForm.elements[i]==lastBox){
			theLast=i;
			break;
		}
	}
	for(i=theFirst;i<=theLast;i++){
		if(myForm.elements[i].checked){
			break;
		}
	}
	return(i<=theLast);
}

/* Vensters openenen en sluiten:	*/

var myWin = null;

function openWin(url){
	myWin= window.open(url);
}

function closeWin(){
	myWin.close();
}

/*---------------------------------------------*/
/* Functie om een search querystring te parsen	*/
/* Sander Sanders juni 2003			*/
/*---------------------------------------------*/

function getValueByName(vName,locSearch){
	var name,value,varArr = [];
	
	if(arguments.length < 2){
		locSearch = location.search;
	}
	
	locSearch = locSearch.substring(locSearch.indexOf("?")+1,locSearch.length);
	var arr = locSearch.split("&");

	function variable(name,value){
		/* bouw een variable object	*/
		this.name	= name;
		this.value	= value;
	}

	for(var i=0;i<arr.length;i++){
		name		= arr[i].substring(0, arr[i].indexOf("="));
		value		= arr[i].substring(arr[i].indexOf("=") + 1, arr[i].length);
		varArr[i]	= new variable(name,value);
		varArr[name]= varArr[i];	/* maak een identifier, identiek aan de name van de variabele	*/
	}
	return(typeof varArr[vName] == "undefined"? "" : unescape(varArr[vName].value));
}



/*(c) Sander Sanders 7/2001 Foto afbeelden, evt. met de tekst er onder: */

function doPic(){
	var pict = getValueByName("p");
	var text = getValueByName("t");
	
	if(!pict || !pict.length){ // geen plaatje!
		alert("Syntax error!\nSyntax: "+location.pathname+ "?&p=imagefile&t=Text");
		return;
	}
	var str1 = "<br><a href='javascript:history.back()'><img src='";
	var str2 = "' style='border:0px;' alt='Klik om terug te gaan!' title='Klik om terug te gaan!' /></a>";
	document.write(text + str1 + pict + str2);
}

var mail = "info@2linden.nl";

function mailLink(address,bodyText){
	/* default aan popschool	*/
	if(!address || !address.length){ address = mail;}
	if(!bodyText || !bodyText.length){ bodyText = "";}
	var subjectText = "Bericht%20van%202linden%20site:%20" + this.location.hostname + this.location.pathname;
	/* email adressen gecodeerd als persoon|adres ipv persoon@adres ivm email harvesting	*/
	address = address.replace(/[|]/g,"@");
	location.href = "mailto:" + address + "?subject=" + subjectText + "&body=" + bodyText;
}

function writeMailLink(address,bodyText){
	/* Schrijf een maillink als mailadres in de pagina, default aan popschool	*/
	if(!address || !address.length){address = mail;}
	if(!bodyText || !bodyText.length){bodyText = "";}
	var subjectText = "Bericht%20van%202linden%20site:%20" + this.location.hostname + this.location.pathname;
	/* email adressen gecodeerd als persoon|adres ipv persoon@adres ivm email harvesting	*/
	var str = '<a href=\"javascript:mailLink(\'' + address + '\',\'' + bodyText + '\')\">' + address.replace(/[|]/g,"@") + '</a>';
	document.write(str);
}

function roundPrice(nr){
	/* prijzen afronden op 2 decimalen en formatteren	*/
	nr = (Math.round(nr * 100));
	nr = nr.toString();
	while(nr.length <= 2){nr = "0" + nr;	/* evt 0 er voor!	*/}
	var nr1 = nr.substring(0,nr.length - 2);
	var nr2 = nr.substring(nr.length - 2,nr.length);
	nr = nr1 + "," + nr2;
	return(nr);
}

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * */

/* Sander Sanders january 2001/okt 2004/aug 2006
Universal picture changer, cross-browser! 
Contains lots of error-checking and debugging-aids!

Syntax:
"changePic(lowNum,HighNum,random,preload)"
"lowNum": path first picture
"highNum": number of last picture
"random": value "true" or "false" (do not use the quotes!) chooses numbers at random between lowNum and highNum
"preload": value "true" or "false"  (do not use the quotes!) preloads all images, for faster transitions. No error report if images don't exist...

Syntax picturenames:
"myPictureNamexx.ext"
"mypicturename" can be anything you like, but has to be the same for all pictures!
"xx" is a two digit number, eventually zero-leading, pictures have to be numbered consecutively!
".ext" is any extension you browser can handle (.jpg, .gif etc) */

function clearStatus(){
	window.status = "";
}

function loadError(pic){
	alert("Error loading picture:\n\n" + pic);
}

function getPicPath(str){
	return(str.substring(0,str.lastIndexOf("/")+1));
}

function getPicName(str){
	var s=str.substring(str.lastIndexOf("/")+1,str.lastIndexOf('.')-2);
	var p=getPicPath(str);
	return(p+s);
}

function getPicNum(str){
	return(str.substring(str.lastIndexOf(".")-2,str.lastIndexOf('.')));
}

function makePicNum(num){
	num =  (num > 9)? "" + num : "0" + num;
	return(num);
}

function getPicExt(str){
	return(str.substring(str.lastIndexOf('.'),str.length));
}

/* Globals:	*/
var preloaded = [];
var images = [];
var picTimer = null;
var numberOfPictureChangers = 0; /* hoeveel keer op 1 pagina?	*/

function preloadPics(id,sP,eP){
	if(preloaded[id]){ return;}
	window.status = "Preloading images, please wait...";
	images[id] = [];
	for(var i = 0; i< eP-sP+1; i++){
		images[id][i] = new Image();
		imgName = document.getElementById("myPic" + id).src;
		images[id][i].src = getPicName(imgName) + makePicNum(sP + i) + getPicExt(imgName);
	}
	preloaded[id] = true;
}

function writeChangePic(startPicSrc,startPic,endPic,doRandom,preload){
	/* arguments: pad eerste plaatje, nummer eerste plaatje, nummer laatste plaatje, random, preload (booleans)	*/
	picLoadStr = "Picture Loaded: ";
	numberPic = Math.abs(endPic-startPic)+1;
	var ahrefStr = "<a href='JavaScript:void(0)' onClick='changePic(" + numberOfPictureChangers + "," + startPic + "," + endPic + "," + doRandom + "," + preload + ");return(false)'>";
	var str = ahrefStr + "<img src ='" + startPicSrc + "' id='myPic" + numberOfPictureChangers + "' alt='Klik hier!' border=0 onError='loadError(this.src)'></a>";
	str += ahrefStr + "<br>Klik voor meer foto's!</a> <span id=\"cpTextdiv" + numberOfPictureChangers + "\">Er zijn er: " + numberPic + "</span>";
	++numberOfPictureChangers;	/* evt meerdere op 1 pag!	*/
	document.write(str);
}

function changePic(id,startPic,endPic,randomly,preload){
	var reverseOrder = (startPic > endPic);
	window.status = randomly? "Loading next randomly chosen picture, wait a sec..." : "Loading next picture in line, wait a sec...";

	if(startPic < 0 || endPic > 99){
		alert("Error: Start or endnumber out of range (0 - 99)\nStart: "+startPic+"\nEnd: "+endPic);
		return;
	}

	var picName = document.getElementById("myPic" + id).src;
	var newPic = getPicName(picName);
	var nr = 0;

	if(!randomly){
		var oldNum = getPicNum(picName);
		nr = parseInt(oldNum,10);
		if(isNaN(nr)){
			alert("Error in filename number:\n" + picName);
			return;
		}
		nr=reverseOrder?nr-1:nr+1;
		if(nr > 99){
			alert("Error: End image number > 99");
			return;
		}
		if(!reverseOrder){
			if(nr > endPic){ nr = startPic;}
			else if(nr < startPic){ nr = startPic;}
		}
		else{
			if(nr < endPic){ nr = startPic;}
			else if(nr > startPic){ nr = startPic;}
		}
	}
	else{
		nr =  Math.round(Math.random() * endPic) + startPic;
	}

	newNum = (nr > 9)? "" + nr : "0" + nr;
	var ext =  getPicExt(picName);

	if(preload){ preloadPics(id,startPic,endPic);}
	
	document.getElementById("myPic" + id).src = preloaded[id]? images[id][nr].src : newPic + newNum + ext;
	/* tekst veranderen	*/
	var myDiv = document.getElementById("cpTextdiv" + id);
	var str = (newNum - startPic + 1) + "/" + (Math.abs(endPic-startPic)+1);
	myDiv.innerHTML = str;
	
	/* src even laten zien	*/
	if(picTimer){ clearTimeout(picTimer);}
	var mypicId = "myPic" + id;
	window.status = document.getElementById(mypicId).src;
	picTimer = setTimeout("clearStatus()",3000);
	return(true);
}

/* * * * * * * * * * * * * * * * * * * * */

function bookmark(url,description){
	nsUser="Druk op Enter, daarna Ctrl + D om een bookmark te maken";

	if(navigator.appName=='Microsoft Internet Explorer'){
		window.external.AddFavorite(url,description);
	}
	else if (navigator.appName=='Netscape'){
		alert(nsUser);
	}
}
/* op alfabet sorteren van menu options, is minder simpel dan gedacht...	*/

function sortSelect(obj,startAt, upDown) {
	/* tweede parameter geeft aan of er (een aantal) options bovenaan staan moeten blijven	*/
	var sortUp = "up";
	if(arguments.length == 1 || startAt < 1){ startAt = 0;}
	if(upDown){ sortUp = upDown;}
	var o = [];
	if(obj.options === null){return;}
	/* kopie maken:	*/
	for(var i=startAt; i<obj.options.length; i++){
		o[o.length] = new Option(obj.options[i].text,obj.options[i].value,obj.options[i].defaultSelected,obj.options[i].selected);
	}
	if(o.length === 0){return;}
	var index = obj.selectedIndex;
	/* kopie sorteren:	*/
	if(sortUp == "up"){
		pos = 1;
		neg = -1;
	}
	else{
		pos = -1;
		neg = 1;
	}
	o = o.sort( 
		function(a,b) { 
			if(a.text.toString() < b.text.toString()){return neg;}
			if(a.text.toString() > b.text.toString()){return pos;}
			return 0;
			}
	);
	/* options opnieuw invullen	*/
	for(i=startAt,j=0; i<obj.options.length; i++,j++){
		obj.options[i] = new Option(o[j].text,o[j].value,o[j].defaultSelected,o[j].selected);
	}
	obj.selectedIndex = index;
}

function altToTitleTag(){
	/* vul automatisch de title tag in voor alle images. Toont tooltip in Firefox	*/
	for(var i=0;i<document.images.length;i++){
		if(isEmpty(document.images[i].title) && !isEmpty(document.images[i].alt)){
			document.images[i].title = document.images[i].alt;
		}
	}
	/* idem voor links en image maps	*/
	for(i=0;i<document.links.length;i++){
		if(isEmpty(document.links[i].title) && !isEmpty(document.links[i].alt)){
			document.links[i].title = document.links[i].alt;
		}
	}
}

function mailLink(address,bodyText){
	/* default aan lighthouse	*/
	if(!address || !address.length){address = "info|2linden.nl";}
	if(!bodyText || !bodyText.length){bodyText = "";}
	var subjectText = "Bericht%20van%20www.2linden.nl%20site:%20" + this.location.hostname + this.location.pathname;
	/* email adressen gecodeerd als persoon|adres ipv persoon@adres ivm email harvesting	*/
	address = address.replace(/[|]/g,"@");
	location.href = "mailto:" + address + "?subject=" + subjectText + "&body=" + bodyText;
}

function externalLinks(){
	/* maak van alle a tags met rel= "external" links met target="_blank"	*/
	if(!document.getElementsByTagName){
		return;
	}
	var anchors = document.getElementsByTagName("a");
	for(var i=0; i<anchors.length; i++){
		var anchor = anchors[i];
		if(anchor.getAttribute("href") && anchor.getAttribute("rel") == "external"){
			anchor.target = "_blank";
		}
	}
} 

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