$(document).ready(function(){
	
	Lightbox.init();
	//HomeThumbs.init();
	Programma.init();
	Eigenlint.init();
	MailAddress.init();
	TableSorter.init();
	Photopage.init();
	Validation.init();
	Dropdown.init();
	
});

// LIGHTBOX

function Lightbox(){}

Lightbox.init = function(){
	try{
		$("a[rel*=lightbox]").lightBox();
	} catch(err){ }
};

// HOMETHUMBS

function HomeThumbs(){}

HomeThumbs.init = function(){
	try{
		if(!$.browser.msie){
			var bw = $("div.w2").css('width').replace('px','');
			var thumbs = $("#thumbs img");
			thumbs.each(function(){
				var iw = $(this).css('width').replace('px','');
				var io = Math.round((iw-bw)/2);
				if(io != 0){
					$(this).css('margin-left', (-io)+'px');
				}
			});
		} 
	} catch(err) { }
};

// PROGRAMMA

function Programma(){}

Programma.init = function(){
	Programma.hidePopupEvents();
	Programma.initChoirCell();
	Programma.initActCell();
	Programma.adjustMapHeight();
};

Programma.hidePopupEvents = function(){
	$("div.programma").scroll(function(){
		$("#progpopup").hide();
	});
	$("#progpopup a.close").click(function(){
		$("#progpopup").hide("slow");
	});
};

Programma.initChoirCell = function(){
	$("td.koor").click(function(){
		var table = $(this).parents('.programma');
		$("#progpopup").hide();
		$("#activeAct").removeAttr("id");
		$(this).attr('id','activeAct');
		
		// vul popup met tekst:
		var cellData = Programma.gatherCellData(this, 'koor');
		Programma.updatePopup('koor');
		
		if(cellData.targetX != 0){
			$(table).animate({scrollLeft:$(table).scrollLeft() - cellData.targetX}, 400, 'swing').animate({opacity:1}, 200, 'linear', function(){
				Programma.animatePopup($("#activeAct"));				
			});
		} else {
			Programma.animatePopup($("#activeAct"));
		}
	});	
};

Programma.initActCell = function(){
	$("td.act").click(function(e){
		var table = $(this).parents('.programma');
		$("#progpopup").hide();
		$("#activeAct").removeAttr("id");
		$(this).attr('id','activeAct');
		
		// vul popup met tekst:
		var cellData = Programma.gatherCellData(this, 'act');
		Programma.updatePopup('activiteit');
		
		if(cellData.targetX != 0){
			$(table).animate({scrollLeft:$(table).scrollLeft() - cellData.targetX}, 400, 'swing').animate({opacity:1}, 200, 'linear', function(){
				Programma.animatePopup($("#activeAct"));				
			});
		} else {
			Programma.animatePopup($("#activeAct"));
		}
	});
};

Programma.gatherCellData = function(elem, type){
	var table = $(elem).closest("table");
	var columnNumber = getIDfromClass($(elem).attr('class'), 'col');
	var day = table.attr("id");
	var time = table.find("th[scope='col']:eq("+columnNumber+")").text();
	var x = $(elem).offset().left;
	var programBox = $(elem).parents('.programma');
	
	var locationsColumnWidth = $(elem).parents('.programma').siblings('.locations').width();
	
	var programBoxWidth = $(programBox).width();
	var scrollboxOffsetX = $(programBox).offset().left + locationsColumnWidth;
	var horPadding = Number($(elem).css('padding-left').replace('px',''));//, $(elem).css('padding-left');
	var cellWidth = $(elem).width() + 2*horPadding;
	var dx = 0;
	if(x < scrollboxOffsetX){
		dx = scrollboxOffsetX - x;
	} else if($(programBox).offset().left + programBoxWidth < x + cellWidth && cellWidth < programBoxWidth){
		dx = $(programBox).offset().left + programBoxWidth - (x + cellWidth);
	}

	var output = {
		actid: getIDfromClass($(elem).attr('class'), type),
		progid: getIDfromClass($(elem).attr('class'), 'prog'),
		label: $(elem).text(),
		dayTime: day+', '+time+' uur',
		address: $(elem).parent("tr").find("th").text()+"<br />"+$(elem).parent("tr").find("th").attr("title"),
		x: $(elem).offset().left + 8,
		y: $(elem).offset().top + 14,
		targetX:dx
	}
	
	var dataArray = [output.label, output.address, output.dayTime, output.progid, output.actid, output.x, output.y];
	$("#activeData").val(dataArray.join("|"));
	
	return output;
};

Programma.updatePopup = function(type){
	var dataStr = $("#activeData").val();
	var dataArr = dataStr.split("|");
	$("#progpopup h4").text(dataArr[0]);
	$("#progpopup span.locatie").html(dataArr[1]);
	$("#progpopup span.tijd").text(dataArr[2]);
	$("#progpopup p.action").addClass("hide").css({opacity:1});
	switch(type){
		case 'koor':
		$("#toprofile").show().children("a").attr("href", "/profiel/"+dataArr[4]+"/");
		break;
		case 'activiteit':
		$("#toprofile").show().children("a").attr("href", "/workshops/"+dataArr[4]+"/");
		break;
	}
	
}

Programma.animatePopup = function(elem){
	var x = $(elem).offset().left + 8;
	var y = $(elem).offset().top + 14;
	$("#progpopup").show().animate({'left':x, 'top':y}, 600);
}

Programma.adjustMapHeight = function(){
	// kaartje google maps even hoog maken als legenda die ernaast staat:
	try{
		var legendaHeight = $("#legenda").height() + 1;	
		//var heightDiff = legendaHeight - $(".gm").height();
		//var gmMarginTop = Number($(".gm img").css("margin-top").replace('px', ''));
		$(".gm").height(legendaHeight);//.find("a img").css("margin-top", gmMarginTop+heightDiff);
	} catch(err) {}
};



// EIGENLINT

function Eigenlint(){}

Eigenlint.init = function(){
	
	// tijdelijk: eerste progID van 2010 is 310, dus haal alles < 310 weg
//	Eigenlint.removeOldCookies(310);
	Eigenlint.updateCounter();
	Eigenlint.initAddToList();
	Eigenlint.initWarnings();
	Eigenlint.initPlaylist();
};

Eigenlint.initAddToList = function(){
	$("#addtolist").click(function(){
		var elint = Eigenlint.getCookie('eigenlint');
		var dataStr = $("#activeData").val();	
		var dataArr = dataStr.split("|");
		if(elint != null && elint != ''){
			elint+=','+dataArr[3];
			elint = filterList(elint);
		} else {
			elint = dataArr[3];
		}

		if($.browser.msie){
			$("#progpopup").hide();
		} else {
			$("#progpopup p.action").text("Toevoegen...").removeClass("hide").animate({opacity:1}, 1500).animate({opacity:0}, 300).parents("#progpopup").animate({opacity:1},1500).hide("slow");
		}
		Eigenlint.setCookie('eigenlint', elint, Eigenlint.setCookieEnd(1));
		Eigenlint.updateCounter();
		$("#selectedChoir").removeAttr("id");
	});
};

Eigenlint.initPlaylist = function(){
	// playlist op profielpagina
	$("#playlist tr[class*=prog] a").click(function(){
		var id = getIDfromClass($(this).parents("tr").attr('class'), 'prog');
		var elintx = Eigenlint.getCookie('eigenlint');
		if(elintx != null && elintx != ''){
			elintx +=','+id;
			elintx = filterList(elintx);
		} else {
			elintx = id;
		}
		Eigenlint.setCookie('eigenlint', elintx, Eigenlint.setCookieEnd(1));
		Eigenlint.updateCounter();
	});
}

Eigenlint.removeOldCookies = function(n){
	var cookie = Eigenlint.getCookie('eigenlint');
	var c_arr;
	var newcookie = '';
	if(cookie != ''){
		c_arr = cookie.split(',');
		for(var i = c_arr.length - 1; i >=0; i--){
			if(Number(c_arr[i]) < n){
				c_arr.splice(i, 1);
			}
		}
		newcookie = c_arr.join(',');
	}
	Eigenlint.setCookie('eigenlint', newcookie, -1);
	Eigenlint.updateCounter();
}

Eigenlint.setCookie = function(c_name, value, cookiesEnd){
	document.cookie=c_name+"="+escape(value)+";expires="+cookiesEnd+";path=/";
};

Eigenlint.setCookieEnd = function(n){
	var now = new Date();
	//var expires = new Date(now.getTime()+n*180*86400*1000);
	var expires = new Date(2010,9,1);
	return expires.toGMTString();
};

Eigenlint.getCookie = function(c_name){
	if (document.cookie.length > 0){
		c_start = document.cookie.indexOf(c_name + "=");
		if (c_start != -1){
			c_start = c_start + c_name.length + 1;
			c_end = document.cookie.indexOf(";",c_start);
			if (c_end == -1) c_end = document.cookie.length;
			return unescape(document.cookie.substring(c_start,c_end));
		}
	}
	return "";
};

Eigenlint.updateCounter = function(){
	var ml = Eigenlint.getCookie('eigenlint');
	var n = 0;
	if(ml != null && ml != ''){
		n = ml.split(",").length;
	}
	$("#eigenlint").text(String(n));
};

Eigenlint.removeFromCookie = function(n){
	var c = Eigenlint.getCookie('eigenlint');
	var c_arr = c.split(",");
	var newcookie;
	var expires;
	
	for(var i = c_arr.length - 1; i >=0; i--){
		if(c_arr[i] == n){
			c_arr.splice(i, 1);
		}
	}

	if(c_arr.length > 1){
		newcookie = c_arr.join(",");
		expires = Eigenlint.setCookieEnd(1);
	} else if(c_arr.length == 1){
		newcookie = c_arr[0];
		expires = Eigenlint.setCookieEnd(1);
	} else {
		newcookie = '';
		expires = Eigenlint.setCookieEnd(-1);
	}
	Eigenlint.setCookie('eigenlint', newcookie, expires);
	top.Eigenlint.updateCounter();
};

Eigenlint.initWarnings = function(){
	// eigenlint waarschuwing voor overlappende of op elkaar aansluitende optredens
	var timingproblems = $("td.red").add("td.orange");
	if(timingproblems.length > 0){
		$("div.warning").removeClass("hide");
	} else {
		$("div.warning").addClass("hide");
	}
};

// MAILADDRESS

function MailAddress(){}

MailAddress.init = function(){
	try{
		$("span.mail span").each(function(){
			var mailData = $(this).attr('class').split(' ');
			var mailStr = mailData[0]+String.fromCharCode(8*8)+mailData[1];
			$(this).parent("span.mail").html('<a href="mailto:'+mailStr+'">'+mailStr+'</a>');
		});
	} catch(err) { }
};

// TABLESORTER

function TableSorter(){}

TableSorter.init = function(){
	try{
		$("#deelnemers").dataTable({
			bLengthChange:true,
			bFilter:false,
			aoColumns: [{ sType:"html"}, null, null, null	],
			iDisplayLength:20,
			sDom: '<"navtop"pi>rt',
			sPaginationType:"full_numbers",
			oLanguage: {
				sProcessing: 'Bezig...',
				sLengthMenu: 'Toon _MENU_ records per pagina',
				sZeroRecords: 'Geen resultaten gevonden',
				sInfo: '_START_ - _END_ van _TOTAL_ deelnemers',
				sInfoEmtpy: 'Van 0 tot 0 van 0 records',
				sInfoFiltered: '(gefilterd van totaal _MAX_ records)',
				sSearch: 'Zoek:',
				sUrl: '',
				oPaginate: {
					sFirst:    'Eerste',
					sPrevious: 'Vorige',
					sNext:     'Volgende',
					sLast:     'Laatste'
				}
			}

		});
	} catch(err){ }
};

// PHOTOPAGE
function Photopage(){}

Photopage.init = function(){
	// fotopagina navigatie
	$("#photos0").show();
	$("ul.photonav li:has(a)").click(function(){
		var index = $("ul.photonav li").index(this);
		$(this).siblings().removeClass('current');
		$(this).addClass('current');
		Photopage.showPage(index-1);
	});
}

Photopage.showPage = function(n){
	$("div[id^=photos]").hide();
	$("div[id=photos"+n+"]").show();
}

// VALIDATION

function Validation(){}

Validation.init = function(){
	Validation.sendafriend();
	Validation.contact();
	Validation.reservation();
//	Validation.guestbook();
}

Validation.sendafriend = function(){
	try{
		var sum = Math.sqrt(6084);//1369
		$("#submit").click(function(){
			$("#sum").val(sum);
		});
		$("#sendafriend").validate({
			errorLabelContainer: $("#sendafriend div.error"),
			rules:{
				yourname:"required",
				yourmail:{ required:true, email:true },
				friendname:"required",
				friendmail:{ required:true, email:true }
			},
			messages:{
				yourname:"Vul uw naam in",
				yourmail:{ required:"Vul uw e-mailadres in", email:"Vul een geldig e-mailadres in" },
				friendname:"Vul de naam van uw vriend(in) in",
				friendmail:{ required:"Vul het e-mailadres van uw vriend(in) in", email:"Vul een geldig e-mailadres in" }
			}
		});
	} catch(err){ }
}

Validation.contact = function(){
	try{
		jQuery.validator.addMethod("phoneNL", function(value, element) {
			return this.optional(element) || /^-?(?:[0]{1}[1-9]{1,3}[\s\-]{0,3}[1-9]{1}[0-9]{5,8})?$/.test(value);
		}, "Vul een geldig telefoonnummer in");
		
		var sum = Math.sqrt(6084);
		var dt = new Date();
		var logval = $("#log").val();
		
		$("#submit").click(function(){
			$("#sum").val(sum);
			$("#log").val(logval+'js');
			$("#datum").val(formatDateTime(dt));
		});
		$("#contact_form").validate({
			errorLabelContainer: $("div.error ul"),
			errorElement:"li",
			rules:{
				naam:"required",
				email:{
					required:true,
					email:true
				},
				tel:{
					phoneNL:true
				},
				onderwerp:"required",
				bericht:"required"
			},
			messages:{
				naam:"Vul uw naam in",
				email:{
					required:"Vul uw e-mailadres in",
					email:"Vul een geldig e-mailadres in"
				},
				tel:{
					phoneNL:"Vul een geldig telefoonnummer in"
				},
				onderwerp:"Vul een onderwerp voor uw bericht in",
				bericht:"Typ uw bericht"
			}
		});
	} catch(err) { }
}

Validation.reservation = function(){
	
}

Validation.guestbook = function(){
	try{
		$("#guestbook_form").validate({
			errorLabelContainer:$("div.error ul"),
			errorElement:"li",
			rules:{
				naam:"required",
				email:{
					required:true,
					email:true
				},
				onderwerp:"required",
				bericht:"required"
			},
			messages:{
				naam:"Vul uw naam in",
				email:{
					required:"Vul uw e-mailadres in",
					email:"Vul een geldig e-mailadres in"
				},
				onderwerp:"Vul een onderwerp voor uw bericht in",
				bericht:"Typ uw bericht"
			}
		});
	} catch(err) { }
}

// DROPDOWN

function Dropdown(){}

Dropdown.init = function(){
	$(".dropdown h3").toggle(function(){
		$(this).siblings('ul').slideDown();
	}, function(){
		$(this).siblings('ul').slideUp();
	});
};

// ALGEMEEN

function getIDfromClass(classes, name){
	var classes = classes.split(' ');
	var len = name.length;
	var id;
	for(var i = 0; i < classes.length; i++){
		if(classes[i].indexOf(name) == 0){
			id = classes[i].substr(len);
		}
	}
	return id;
}

function filterList(str){
	var arr = str.split(",");
	arr.sort();
	for(var i=arr.length-1; i>=0; i--){
		if(i < arr.length-1){
			if(arr[i] == arr[i+1]){
				arr.splice(i,1);
			}
		}
	}
	return arr.join(",");
}

function formatDateTime(input){
	var month = prefix(input.getMonth(),9)+(input.getMonth()+1);
	var day = prefix(input.getDate(), 10)+input.getDate();
	var hours = prefix(input.getHours(), 10)+input.getHours();
	var minutes = prefix(input.getMinutes(),10)+input.getMinutes();
	var seconds = prefix(input.getSeconds(),10)+input.getSeconds();
	var output = input.getFullYear()+'-'+month+'-'+day+' '+hours+':'+minutes+':'+seconds;	
	return output;
}

function prefix(n, maxValue){
	var output = String(n < maxValue ? "0" : "");
	return output;
}

function submitForm(formname){
	$("#"+formname).submit();
}