/*
* Copyright @2009, Mediaweb.nl
* Based on jQuery
* Gabrijel Gavranovic
*/

/*
* Custom carousel function
*/
var position = 1;
var timeout = 10000;
var timeoutActive = 20000;
var slideSpeed = 700;
var carouselWidth = 990;
var timerWidth = 951;
this.carouselSlideRewind = function(direction, speed, timer) {
	if (!$("#jcarousel").is(':animated')) {
		$("#carousel .timer div").stop();
		$("#carousel .timer div").css({left:'-'+timerWidth+'px'});
		if(direction=='next') {
			/* calculate new position */
			curPos = $("#jcarousel").css("left");
			newPos = parseInt(curPos.replace(/px/,"")) - carouselWidth;
	
			/* check position, if last, slide to start */
			if($("#jcarousel").children().size()==position) {
				$("#jcarousel .project:first").clone().insertAfter($("#jcarousel .project:last"));
				//$("#jcarousel .project:last").css({display:'block',float:'left'});
				$("#jcarousel").animate({"left":newPos+"px"}, speed, function(){
					$("#jcarousel").css({left:'-'+carouselWidth+'px'});
					$("#jcarousel .project:last").remove();
					position = 1;
				});
			} else {
				/* slide to new position */
				$("#jcarousel").animate({"left":newPos+"px"}, speed );
				position += 1;
			};
		} else if(direction=='previous') {
			/* calculate new position */
			curPos = $("#jcarousel").css("left");
			newPos = parseInt(curPos.replace(/px/,"")) + carouselWidth;
			
			/* check position, if first, slide to last */
			if(position==1) {
				$("#jcarousel .project:last").clone().insertBefore($("#jcarousel .project:first"));
				$("#jcarousel").css({padding:0});
				$("#jcarousel").animate({"left":newPos+"px"}, function(){
					newPos = ($("#jcarousel").children().size()-1)*-carouselWidth;
					$("#jcarousel").css({padding:'0 0 0 '+carouselWidth+'px',left:newPos+'px'});
					$("#jcarousel .project:first").remove();
					position = $("#jcarousel").children().size();
				});
			} else {		
				/* slide to new position */
				$("#jcarousel").animate({"left":newPos+"px"}, speed );
				position -= 1;
			}
		}
		clearTimeout(tabtimer);
		if(parseInt(timer)>0){
			tabtimer=setTimeout("carouselSlideRewind('next',slideSpeed,timeout)", timer);
			$("#carousel .timer > div").animate({left:'0px'}, timer);
		} else {
			tabtimer=setTimeout("carouselSlideRewind('next',slideSpeed,timeout)", timeout);
			$("#carousel .timer > div").animate({left:'0px'}, timeout);
		}
	}
};

var thirdImageLoaded = false;
var loops = 0
this.loadCarousel = function() {
	if( thirdImageLoaded == true || loops > 4) {
		$("#recent-projects .project-image img.first").animate({"left":"0px"}, 700 ); // init load effect
		$("#carousel .next-link").click(function(){carouselSlideRewind('next',slideSpeed,timeoutActive);}); // slide forward
		$("#carousel .previous-link").click(function(){carouselSlideRewind('previous',slideSpeed,timeoutActive);}); // slide back
		$("#carousel .timer div").animate({left:'0px'}, timeout); // timer
		tabtimer=setTimeout("carouselSlideRewind('next',slideSpeed,timeout)", timeout); // set default timeout
	} else {
		loops++;
		setTimeout("loadCarousel();", 500);
	}
	
}


/*
* Domaincheck functions
*/
domainCount=0;
initialCheck = true;
this.checkOtherTLDs = function() {
	domain = $('[name=domein]').val();
	$.ajax({ url: "/system-pages/domaincheck?dom="+domain+"&tld="+domainCount, success: function(html){
		if(domainCount<5){
			$("#overigedomeinen div dl").append(html);
			if(domainCount==0){ $("#overigedomeinen").slideDown(); }
			domainCount+=1;
			checkOtherTLDs(domainCount);
		} else {
			if($("input.domregcheck").length > 0) $("p.domregbutton").show('fast');
			else $("p.domregbutton").hide('fast');
		}
	  } 
	});
} 
this.checkDomain = function() {
	if(initialCheck==false) {
		$("#overigedomeinen").slideUp("fast",function(){
			$("#voorkeursdomein div dl").html("");
			$("#overigedomeinen div dl").html("");
		});
		domainCount = 0;
	} else {
		$("#voorkeursdomein div dl").html("");
		$("#overigedomeinen div dl").html("");
	}
	domain = $('[name=domein]').val();
	
	$.ajax({ url: "/system-pages/domaincheck?dom="+domain, success: function(html){
		if(html!="") {
			$("#voorkeursdomein").slideDown();
			$("#voorkeursdomein div dl").append(html);
			$("#overigedomeinen b").html("Overige TLD's:");
		} else {
			$("#overigedomeinen b").html("Domein statussen:");
		}
		if(html!="<dt>Ongeldig domein opgegeven</dt><dd>&nbsp;</dd>") checkOtherTLDs(domainCount);
	  } 
	});
	initialCheck = false;
}

/*
* Sidebar navigation sitemap trick
*/
siteMap = false;
this.showSitemap = function(){
	if(siteMap == false) {
		$('#current-search-results').slideUp(600);
		$("#sub-nav .level1:not(.active), #sub-nav .level1:not(.active) .level2, #sub-nav .level1 .level2, #sub-nav .level1 .level2 .level3").slideDown('fast');
		
		siteMap = true;
		$("h3.title.sub-nav a.sitemap").attr("title","Verberg sitemap");
		$("h3.title.sub-nav a.sitemap.jqtooltip").tooltip({showURL: false}); /* reinit tooltip */
		setTimeout('clearSearch()',600);
	} else{
		$("#sub-nav .level1:not(.active), #sub-nav .level2.parent:not(.active) .level3").slideUp();
		
		siteMap = false;
		$("h3.title.sub-nav a.sitemap").attr("title","Toon complete sitemap");
		$("h3.title.sub-nav a.sitemap.jqtooltip").tooltip({showURL: false}); /* reinit tooltip */
	}
}


/*
* Image preview script
* powered by jQuery (http://www.jquery.com)
* written by Alen Grakalic (http://cssglobe.com)
* for more info visit http://cssglobe.com/post/1695/easiest-tooltip-and-image-preview-using-jquery
*/ 
this.imagePreview = function(){

	/* CONFIG */		
		xOffset = 10;
		yOffset = 30;
	// these 2 variable determine popup's distance from the cursor
	// you might want to adjust to get the right result
	/* END CONFIG */

	$("a.preview").hover(function(e){
		this.t = this.title;
		this.title = "";	
		var c = (this.t != "") ? "<br/>" + this.t : "";
		$("body").append("<p id='preview'><img src='"+ this.rel +"' alt='Preview' /></p>");
		$("#preview")
			.css("top",(e.pageY - xOffset) + "px")
			.css("left",(e.pageX + yOffset) + "px")
			.fadeIn("fast");						
	},
	function(){
		this.title = this.t;	
		$("#preview").remove();
	});	
	$("a.preview").mousemove(function(e){
		$("#preview")
			.css("top",(e.pageY - xOffset) + "px")
			.css("left",(e.pageX + yOffset) + "px");
	});
};


/*
* Check for long default/content pages; if so -> init accordion
*/
initPageLoad = true;
this.initAccordion = function(items){
	titleElems = $(".contentBox .content h4");
	if(titleElems.length >= items) {
		$(".contentBox .content h4").addClass("accordion");
		
		$(".contentBox .content h4").each(function(){
			var $this = $(this).next();
			var $curElem = $this;
			
			while(!$curElem.next().is("h4") && $curElem.next().html()) {
				$this = $this.add($curElem.next());
				var $curElem = $curElem.next();
			}
			$this.wrapAll('<div class="accordion"></div>');
		});
		
		$(".contentBox .content").accordion({
			icons: {
    			header: "inactive",
   				headerSelected: "active"
			},
			header: 'h4',
			autoHeight: false,
			active: false,
			collapsible: true,
			changestart: function(event, ui){
				if(initPageLoad) {
					clearTimeout(initSet);
					initPageLoad = false;
				} else {
					var headLink = ui.newHeader.html();
					if(headLink != null)
						_gaq.push(['_trackPageview', $.url.attr("directory")+"/"+headLink.replace(/<SPAN.*<\/SPAN>/gi,"")]);
						//pageTracker._trackPageview($.url.attr("directory")+"/"+headLink.replace(/<SPAN.*<\/SPAN>/gi,""));
				}
			}
		});
	}
	initSet = setTimeout('$(".contentBox .content").accordion("activate", 0)', 2000);
}

/* portfolio accordion init function */
this.portfolioAccordion = function(){
	$(".contentBox .portfolio-details .m-portfolio").accordion({
		icons: {
			header: "inactive",
			headerSelected: "active"
		},
		header: 'span.brd',
		autoHeight: false,
		collapsible: false,
		active: false
	});
}

/* ajax loading all portfolio items (for ajax pagination) */
this.addNextPortfolio = function(curItem,items,page){	
	var start = curItem*10;
	$(".m-portfolio-wrap").append("<div style='display:none' class='m-portfolio m-portfolio-ajax "+curItem+"'></div>");
	$(".m-portfolio."+curItem).load(page+"?start="+start+" .m-portfolio", function(){
		if( curItem < items ){
			curItem++;
			addNextPortfolio(curItem,items,page);
		}
		else {
			portfolioAccordion();
			$(".m-portfolio-ajax").removeClass("m-portfolio-ajax").css({"display":"inline"});
			ajaxPaginate();
			$(".pagination").css({"visibility":"visible"});
			
			/* ext links: add image after <a> */ 
			$("a[target=_blank]:not(:has(img), .ext, .noimg)").after("&nbsp;<img src='assets/templates/default/images/new_window-open.gif' alt='ext' />");
		}
	});
}

/* portfolio ajax pagination click init script */
this.ajaxPaginate = function(){
	ajaxPaginaInitNextPrevious();
	$("a.paginatelink").click(function(){
		var activePage = $(".pagination ul#pag li.num.active > a.paginatelink").text();
		if (!$(".m-portfolio-wrap").is(':animated')) {
			var items = $(".pagination a.num").length;
			var curItem = $(this).text();
			var slideTo = 650*(curItem-1);

			$(".contentBox .portfolio-details .m-portfolio").accordion("activate", false);
			$(".m-portfolio-wrap").animate({"left": "-"+slideTo+"px"},"slow");

			$(".pagination a.num").removeClass("active");
			$(this).addClass("active");
			
			if (curItem == 1) {
				$(".pagination .paginatelink-previous").replaceWith('<span class="paginatelink-previous"><span>&laquo;</span> vorige</span>');
				$(".pagination .paginatelink-next").replaceWith('<a class="paginatelink-next" href="#">volgende <span>&raquo;</span></a>');
			} else if (curItem == items) {
				$(".pagination .paginatelink-previous").replaceWith('<a class="paginatelink-previous" href="#"><span>&laquo;</span> vorige</a>');
				$(".pagination .paginatelink-next").replaceWith('<span class="paginatelink-next">volgende <span>&raquo;</span></span>');
			} else {
				$(".pagination .paginatelink-previous").replaceWith('<a class="paginatelink-previous" href="#"><span>&laquo;</span> vorige</a>');
				$(".pagination .paginatelink-next").replaceWith('<a class="paginatelink-next" href="#">volgende <span>&raquo;</span></a>');
			}
		}
		ajaxPaginaInitNextPrevious();
		return false;
	});
}
/* custom next/previous button for ajax pagination, reinit on every pageclick  */
this.ajaxPaginaInitNextPrevious = function(){
	$("a.paginatelink-next").click(function(){
		if (!$(".m-portfolio-wrap").is(':animated')) {
			var items = $(".pagination a.num").length;
			var activePage = $(".pagination a.active").text();
			var slideTo = 650*(activePage);

			$(".contentBox .portfolio-details .m-portfolio").accordion("activate", false);
			$(".m-portfolio-wrap").animate({"left": "-"+slideTo+"px"},"slow");

			$(".pagination a.num").removeClass("active");
			$(".pagination a.num:eq("+(activePage)+")").addClass("active");

			if (activePage == 1)
				$(".pagination .paginatelink-previous").replaceWith('<a class="paginatelink-previous" href="#"><span>&laquo;</span> vorige</a>');
			else if (activePage == (parseInt(items)-1))
				$(".pagination .paginatelink-next").replaceWith('<span class="paginatelink-next">volgende <span>&raquo;</span></span>');
				
			ajaxPaginaInitNextPrevious();
		}
		return false;
	});
	$("a.paginatelink-previous").click(function(){
		if (!$(".m-portfolio-wrap").is(':animated')) {
			var items = $(".pagination a.num").length;
			var activePage = $(".pagination a.active").text();
			var slideTo = 650*(parseInt(activePage)-2);

			$(".contentBox .portfolio-details .m-portfolio").accordion("activate", false);
			$(".m-portfolio-wrap").animate({"left": "-"+slideTo+"px"},"slow");

			$(".pagination a.num").removeClass("active");
			$(".pagination a.num:eq("+(parseInt(activePage)-2)+")").addClass("active");

			if (activePage == 2)
				$(".pagination .paginatelink-previous").replaceWith('<span class="paginatelink-previous"><span>&laquo;</span> vorige</span>');
			else if (activePage == items)
				$(".pagination .paginatelink-next").replaceWith('<a class="paginatelink-next" href="#">volgende <span>&raquo;</span></a>');
				
			ajaxPaginaInitNextPrevious();
		}
		return false;
	});
}


/* formulieren send buttons */
this.initContactForm = function(){
	$("#formcontact").validate({
		submitHandler: function(myform) { 
			$(myform).ajaxSubmit({type: "POST", url: "/system-pages/contactbedankt", target: "div.call-me-back div.innr div.desc"}); 
		},
		rules: {
			Naam: "required",
			Telefoonnummer: "required",
			Emailadres: {required: true, email: true},
			Opmerkingen: "required"
		},
		messages: {
			Naam: "Vul hier uw naam in.",
			Telefoonnummer: "Vul hier uw telefoonnummer in.",
			Emailadres: {required: "Vul hier uw email adres in."},
			Opmerkingen: "Vul hier uw bericht in."
		},
		errorElement: "div"
	}); 
	$("a#contactbutton").click( function(){ $("form#formcontact").submit() });
}

this.initResponseForm = function(){
	$("#formresponse").validate({
		submitHandler: function(myform) { 
			$(myform).ajaxSubmit({type: "POST", url: "/system-pages/contactbedankt", target: "div.content div.formRepsonse-wrap"}); 
		},
		rules: {
			Naam: "required",
			Emailadres: {required: true, email: true},
			Opmerkingen: "required"
		},
		messages: {
			Naam: "Vul hier uw naam in.",
			Emailadres: {required: "Vul hier uw email adres in."},
			Opmerkingen: "Vul hier uw bericht in."
		},
		errorElement: "div"
	}); 
	$("a#responsebutton").click( function(){ $("form#formresponse").submit() });
}

this.initPrijslijstForm = function(){
	$("#formprijslijst").validate({
		submitHandler: function(myform) { 
			$(myform).ajaxSubmit({type: "POST", url: "/system-pages/contactbedankt", target: "div.content div.formRepsonse-wrap"}); 
		},
		rules: {
			Bedrijf: "required",
			Functie: "required",
			Voornaam: "required",
			Achternaam: "required",
			Emailadres: {required: true, email: true},
			Telefoonnummer: "required",
			Opmerkingen: "required"
		},
		messages: {
			Bedrijf: "Vul hier uw bedrijfsnaam in.",
			Functie: "Vul hier uw functie in.",
			Voornaam: "Vul hier uw voornaam in.",
			Achternaam: "Vul hier uw achternaam in.",
			Emailadres: {required: "Vul hier uw email adres in."},
			Telefoonnummer: "Vul hier uw telefoonnummer in.",
			Opmerkingen: "Vul hier uw bericht in."
		},
		errorElement: "div"
	}); 
	$("a#prijslijstbutton").click( function(){ $("form#formprijslijst").submit() });
}

this.initDomeinBestel = function(){
	$("#domeinBestel").validate({
		submitHandler: function(myform) { 
			$(myform).ajaxSubmit({type: "POST", url: "/system-pages/contactbedankt", target: "div.content div.formRepsonse-wrap"}); 
		},
		rules: {
			Bedrijf: "required",
			Voornaam: "required",
			Achternaam: "required",
			Emailadres: {required: true, email: true},
			Telefoonnummer: "required",
			Opmerkingen: "required"
		},
		messages: {
			Bedrijf: "Vul hier uw bedrijfsnaam in.",
			Voornaam: "Vul hier uw voornaam in.",
			Achternaam: "Vul hier uw achternaam in.",
			Emailadres: {required: "Vul hier uw email adres in."},
			Telefoonnummer: "Vul hier uw telefoonnummer in.",
			Opmerkingen: "Vul hier uw bericht in."
		},
		errorElement: "div"
	}); 
	$("a#domeinBestelbutton").click( function(){ $("form#domeinBestel").submit() });
}

/* domein bestel form functies */
function verwijderDomein(key,domein,returnUrl){
	if (confirm('Weet u zeker dat u dit domein wil verwijderen?')) {
		$("#domeinBestel").unbind('submit', this.initDomeinBestel.handler );
		$("#"+key).attr("value",domein);
		$("#domeinBestel").attr({action: returnUrl});
		$("#domeinBestel").submit();
	}
}

/* starting the scripts on page load */
$(document).ready(function(){
	//google pagetracker fix
	//pageTracker = _gat._getTracker("UA-3523016-2");
	//_gaq.push(['_setAccount', 'UA-3523016-2']);
	//_gaq.push(['_trackPageview']);
	
	/* FP carousel init */
	if($("#carousel").length > 0) {
    	// carousel preloader thingies
    	$("#recent-projects .project-image img:eq(2)").one('load',function(){
    		thirdImageLoaded = true;
    	});
    	
    	var img = new Image();

    	// give it a single load handler
    	$(img).one('load',function() {
        	//$('.buttons li').css('visibility','visible'); // fade in the elements when the image loads
			//$(window).load(function(){
			loadCarousel();
			$("#carousel").css({border:"1px solid black"}).animate({height:"272px"}, 200);
    	});

    	// give it the src of your background image
    	img.src = "http://mediaweb.nl/assets/templates/default/images/carousel-BG.jpg";

    	// make sure if fires in case it was cached
    	if( img.complete )
        	$(img).load();
	}
	
	/* tooltip pop-ups */
	$(".jqtooltip").tooltip({showURL: false});

	/* img previews: portolio/news */
	imagePreview();

	/* navigation sidebar: toggle when empty */
	children = $("#sub-nav ul#sub li.active ul li.level2");
	if(children.length == 0)
		$("#sub-nav ul li.level1").slideDown('fast');

	/* check for contentBox elements and init accordion when h4-count >= passed number */
	initAccordion(4);


	/* portfolio accordion && portfolio ajax pagination init + reinit accordion per ajax container */
	if($(".m-portfolio-wrap").length > 0){
		// fix for regression in ajax pagination if JS is disabled
		$(".pagination").css({"visibility":"hidden"});
		
		portfolioAccordion();
		
		var items = $(".pagination a.num").length-1;
		var page = $(".pagination a:first").attr('href').split("?",2)[0];
		var curItem = 1;
		
		//ie7 fix (also ie6?)
		$(".contentBox .portfolio-details").parent().css({overflow:'hidden'});

		// activate first item of portfolio, weird css/layout fix: active=false on init
		$(".contentBox .portfolio-details .m-portfolio").accordion( 'activate' , 0 );
		addNextPortfolio(curItem, items, page);
	}

	/* ext links: add image after <a> and add google trackig to /extern/ */
	$("a[target=_blank]:not(:has(img), .noimg)").addClass("ext").after("&nbsp;<img src='assets/templates/default/images/new_window-open.gif' alt='ext' />");
	$("a[target=_blank]").click(function(){
		extLink = $(this).attr('href').replace(/http:\/\//,"").replace(/www./,"");
		_gaq.push(['_trackPageview', '/extern/'.extLink]);
		//pageTracker._trackPageview('/extern/'.extLink);
	});

	/* check for forms: contactForm, responseForm, prijslijstForm */
	$("#formcontact").ready(initContactForm);
	$("#formresponse").ready(initResponseForm);
	$("#formprijslijst").ready(initPrijslijstForm);
	$("#domeinBestel").ready(initDomeinBestel);
});


// global vars
var pageTracker;
