// JavaScript Document

var tUpdate;
function update(scrollTop)
{
	clearTimeout(tUpdate);
	tUpdate = setTimeout(function()
	{
		//setup correct color visuals
		var currentSlide = jQuery("#slide-0");	
		jQuery("#scroller").children().each(function()
		{
			if (scrollTop >= jQuery(this).offset().top - 60)
			{
				currentSlide = jQuery(this);
			}
		});		
		
		//set correct current page
		var currentPage = 'home';
		jQuery(".content").each(function()
		{
			if (scrollTop >= jQuery(this).offset().top - 60)
			{
				currentPage = jQuery(this).attr('id');
			}
		});
		window.location.hash = '!/'+currentPage;
		setupSlide(currentSlide.attr('class'), currentPage);
		
		//jQuery('#tf').html(currentPage);
		jQuery('#menu a').removeClass("selected");
		jQuery('#menu-item-'+currentPage).addClass("selected");
		jQuery('#menu a').mouseover();
		Cufon.refresh();
	}, 250);
}


function setupSlide(type, page)
{
	//reset topbar
	jQuery('#topbar').removeClass("tb-bj");
	jQuery('#topbar').removeClass("tb-tsbj");
	jQuery('#topbar').removeClass("tb-gebj");
	jQuery('#topbar').removeClass("tb-mobj");
	//reset menu
	jQuery('#menu ul').removeClass("menu-bj");
	jQuery('#menu ul').removeClass("menu-tsbj");
	jQuery('#menu ul').removeClass("menu-gebj");
	jQuery('#menu ul').removeClass("menu-mobj");	
	//reset social
	jQuery('.topbar-social').hide();
	
	//set new
	switch (type)
	{
		case "bj":
			jQuery('#topbar').addClass("tb-bj");
			jQuery('#menu ul').addClass("menu-bj");
		break;
		
		case "gebj":
			jQuery('#topbar').addClass("tb-gebj");
			jQuery('#menu ul').addClass("menu-gebj");
		break;
		
		case "mobj":
			jQuery('#topbar').addClass("tb-mobj");
			jQuery('#menu ul').addClass("menu-mobj");
		break;
		
		case "tsbj":
		default:
			jQuery('#topbar').addClass("tb-tsbj");
			jQuery('#menu ul').addClass("menu-tsbj");
		break;
	}
	
	jQuery('#tb-social-'+type).show();
	
	//update logo
	var src_parts = jQuery('h1 img').attr('src').split('/');
	src_parts.pop();
	var logo = (page == 'home' || page == 'contact') ? 'bj' : type;
	src_parts.push('logo-'+logo+'.png');
	var new_src = src_parts.join('/');
	jQuery('h1 img').attr('src', new_src);
}

/* SUBPAGES */
var sub_intransition = false;
function setupSubpages()
{
	jQuery('.submenu a, .news-list a, #back-to-home, .back-to-home, .intro-link, .calendar-link').click(function() 
	{
		if (jQuery('#'+(jQuery(this).attr('rel'))).is(':visible') || sub_intransition) { return false; };
		
		sub_intransition = true;
		
		if (jQuery(this).parent().parent().hasClass('submenu'))
		{
			//update selected menu item
			jQuery('a', jQuery(this).parent().parent()).removeClass('selected');
			jQuery(this).addClass('selected');
			Cufon.refresh();
		}
		
		//if this is the back to home link, hide it and change the title back to home
		if (jQuery(this).attr('id') == 'back-to-home' || jQuery(this).hasClass('back-to-home'))
		{
			jQuery('#back-to-home').fadeOut();
			jQuery('#home-title').html('Home');
			Cufon.refresh();
		}
		
		//load new content
		var pbid = jQuery(this).attr('rel');		
		if (pbid == null) { return false; }
		var newContent = $('#'+pbid);		
		
		//second element should be the subpages id of the parent
		var pb_parent = pbid.split('-')[1];		
		var subpages_container = jQuery('#subpages-'+pb_parent);
		
		subpages_container.height(subpages_container.height());
		
		var oldContent = jQuery('> div:visible', subpages_container);
				
		var news_item_link = jQuery(this).hasClass('news-item-link');
		var intro_link = jQuery(this).hasClass('intro-link');
		var calendar_link = jQuery(this).hasClass('calendar-link');
		
		if (newContent.size() > 0)
		{
			//already there, make the transistion
			oldContent.fadeOut('fast', function() 
			{
				switchPages(oldContent, newContent);
				if (news_item_link || intro_link || calendar_link)
				{
					jQuery('#back-to-home').fadeIn();
					if (news_item_link)
					{
						jQuery('#home-title').html('TSBJ Nieuws');
						Cufon.refresh();
					}
					if (calendar_link)
					{
						jQuery('#home-title').html('Agenda');
						Cufon.refresh();
					}
				}
			});
		}
		else
		{
			var deeplink = jQuery(this).attr('href');
			
			var pagetype = intro_link ? 'page' : 'post';
			
			var data = 
			{
				action: 'load_post',
				page_type: pagetype,
				parent_id: pb_parent,
				deeplink: deeplink
			};
			
			oldContent.fadeOut('fast', function() 
			{
				subpages_container.append('<div id="loading">De pagina wordt geladen</div>');
				jQuery('#loading').css('margin-top', (Math.round(jQuery('#loading').parent().height() - jQuery('#loading').height()) / 2)+"px");
				jQuery('#loading').css('margin-left', (Math.round(jQuery('#loading').parent().width() - jQuery('#loading').width()) / 2)+"px");
				
				// since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php
				jQuery.post(ajaxurl, data, function(response) 
				{
					jQuery('#loading').remove();
					subpages_container.append('<div id="'+pbid+'" class="page-body"></div>');
					jQuery('#'+pbid).hide();
					jQuery('#'+pbid).html(response);
					switchPages(oldContent, jQuery('#'+pbid));
					if (news_item_link || intro_link || calendar_link)
					{
						jQuery('#back-to-home').fadeIn();
						if (news_item_link) { jQuery('#home-title').html('TSBJ Nieuws'); }
						if (calendar_link) { jQuery('#home-title').html('Agenda'); }
					}
					Cufon.refresh();
					setupSubpages();
					setupTwitterBoxes();
				});
				
			});
		}
		
		window.location = jQuery(this).attr('href');
		
		return false;
	});
	
}

function switchPages(oldContent, newContent)
{
	var subpages_container = oldContent.parent();
	
	//use visibility for correct height calculation
	newContent.css('visibility', 'hidden');
	newContent.show();
	
	subpages_container.animate({
		height: newContent.height()
	}, 500, function()
	{
		newContent.hide();
		newContent.css('visibility', 'visible');
		newContent.fadeIn();
		sub_intransition = false;
		if (ismobile)
		{
			setTimeout(function () {
				myScroll.refresh();
			}, 0);
		}
	});
}


/* MOBILE */
var myScroll;
function loaded() {
	setTimeout(function () {
		myScroll = new iScroll('slides', { onScrollEnd: scrollHandler });
	}, 100);
}

function scrollHandler() { update(Math.abs(Math.round(this.y))); }


/* homepage slider */
var dks_timer = null;
var dks_items_per_page;
var dks_nr_of_items;
var dks_total_width;
var dks_nr_of_pages;
var dks_width_per_page;
var dks_timer;
var dks_current_page;
var dks_new_page;

function setupSlider()
{
	//config
	dks_items_per_page = 1;
	
	//setup
	dks_nr_of_items = $('#slider ul').children().length;
	dks_total_width = $('#slider ul li').width() * dks_nr_of_items;
	dks_width_per_page = $('#slider ul li').width();
	
	$('#slider ul').width(dks_total_width);
	
	dks_nr_of_pages = Math.ceil(dks_nr_of_items / dks_items_per_page);
	
	//add pagination buttons
	if(dks_nr_of_pages > 1)
	{
		dks_current_page = 0;
		
		//add click functionality
		jQuery('#slider-previous').click(function()
		{
			dks_new_page = dks_current_page-1;
			if (dks_new_page < 0) { dks_new_page = dks_nr_of_pages-1; }
			slideToPage(dks_new_page);
			return false;
		});
		
		jQuery('#slider-next').click(function()
		{
			dks_new_page = dks_current_page+1;
			if (dks_new_page >= dks_nr_of_pages) { dks_new_page = 0; }
			slideToPage(dks_new_page);
			return false;
		});
		
		slideToPage(dks_current_page);
	}
	else
	{
		jQuery('#slider-previous').hide();
		jQuery('#slider-next').hide();
	}
}


function slideToPage(page)
{	
	clearTimeout(dks_timer);
	
	dks_current_page = page;
	
	var posx = dks_current_page * dks_width_per_page;
	
	$('#slider ul').filter(':not(:animated)').animate({left: -posx}, 1000);
	
	dks_timer = setTimeout(autoslide, 5000);
}

function autoslide()
{
	jQuery('#slider-next').click();
}


/* INTRO BOX */
function setupIntroBox()
{
	jQuery(".intro-box-tabs a").click(function()
	{
		//update tabs
		jQuery('.intro-box-tabs a').removeClass('intro-box-tab-active');
		jQuery(this).addClass('intro-box-tab-active');
		//update box content
		jQuery('.intro-box').hide(); 
		jQuery('#intro-box-'+jQuery(this).attr('rel')).show();
		
		Cufon.refresh();
		
		return false;
	});
	jQuery(".intro-box-tabs a:first-child").click();
	
}


/* CONTACT FORM */
function setupContactForm()
{
	jQuery('#contact-form').submit(function()
	{
		var errors = new Array();
	
		//check fields
		if (jQuery('#name').val() == "")
		{
			errors.push(new Array('name', "U heeft geen voornaam ingevuld."));
		}
		
		if (jQuery('#email').val() == "")
		{
			errors.push(new Array('email', "U heeft geen e-mailadres ingevuld."));
		} 
		else if (!validateEmail(jQuery('#email').val()))
		{
			errors.push(new Array('email', "U heeft geen geldig e-mailadres ingevuld."));
		}	
		
		if (jQuery('#subject').val() == "")
		{
			errors.push(new Array('subject', "U heeft geen onderwerp ingevuld."));
		}
		
		if (jQuery('#message').val() == "")
		{
			errors.push(new Array('message', "U heeft geen bericht ingevuld."));
		}
	
		if (errors.length == 0)
		{
			//no errors -> send form
			//clear all error messages
			jQuery('.form-feedback').remove();
			
			var data = {
				action: 'send_contact_form',
				name: jQuery('#name').val(),
				email: jQuery('#email').val(),	
				subject: jQuery('#subject').val(),				
				message: jQuery('#message').val()
			};
			
			jQuery('#contact-form-btn').after('<div id="loading">Uw gegevens worden verstuurd...</div>');
			jQuery('#contact-form-btn').hide();
			
			jQuery.post(ajaxurl, data, function(response) 
			{
				jQuery('#loading').remove();
				
				if (response == "OK")
				{
					jQuery('#contact-form-btn').after('<div class="form-feedback form-feedback-ok">Uw bericht is verstuurd!</div>');
					jQuery('#name, #email, #subject, #message').val('');
				}
				else
				{
					jQuery('#contact-form-btn').after('<div class="form-feedback">Er is een technische fout opgetreden. <br />Neem alstublieft contact op via <a href="mailto:berry@tsbj.nl">berry@tsbj.nl</a>. <br />Onze excuses voor het ongemak.</div>');
				}
			});
		}
		else
		{
			//clear all previous error messages
			jQuery('.form-feedback').remove();
			
			for (var i = 0; i < errors.length; i++)
			{
				jQuery('#'+errors[i][0]+"-wrapper").append('<div class="form-feedback">'+errors[i][1]+'</div>');
			}
			
			jQuery('#contact-form-btn').after('<div class="form-feedback">Het formulier is niet helemaal goed ingevuld.<br />Vul de aangegeven velden correct in.</div>');
		}
		
		return false;
	});
}

/* NEWSLETTER FORM */
function setupNewsletterForm()
{
	jQuery('#newsletter-form').submit(function()
	{
		var errors = new Array();
	
		//check fields
		if (jQuery('#nl-email').val() == "")
		{
			errors.push(new Array('nl-email', "U heeft geen e-mailadres ingevuld."));
		} 
		else if (!validateEmail(jQuery('#nl-email').val()))
		{
			errors.push(new Array('nl-email', "U heeft geen geldig e-mailadres ingevuld."));
		}	
	
		if (errors.length == 0)
		{
			//no errors -> send form
			//clear all error messages
			jQuery('#newsletter-form .form-feedback').remove();
			
			var data = {
				action: 'send_newsletter_form',
				email: jQuery('#nl-email').val()					
			};
			
			jQuery('#newsletter-form-btn').after('<div id="loading">Uw gegevens worden verstuurd...</div>');
			jQuery('#newsletter-form-btn').hide();
			
			jQuery.post(ajaxurl, data, function(response) 
			{
				jQuery('#loading').remove();
				
				if (response == "OK")
				{
					jQuery('#newsletter-form-btn').after('<div class="form-feedback form-feedback-ok">Uw e-mailadres is toegevoegd!</div>');
					jQuery('#nl-email').val('');
				}
				else
				{
					jQuery('#newsletter-form-btn').after('<div class="form-feedback">Er is een technische fout opgetreden. <br />Neem alstublieft contact op via <a href="mailto:berry@tsbj.nl">berry@tsbj.nl</a>. <br />Onze excuses voor het ongemak.</div>');
				}
			});
		}
		else
		{
			//clear all previous error messages
			jQuery('#newsletter-form .form-feedback').remove();
			
			for (var i = 0; i < errors.length; i++)
			{
				jQuery('#'+errors[i][0]+"-wrapper").append('<div class="form-feedback">'+errors[i][1]+'</div>');
			}
			
			jQuery('#newsletter-form-btn').after('<div class="form-feedback">Het formulier is niet helemaal goed ingevuld.<br />Vul de aangegeven velden correct in.</div>');
		}
		
		return false;
	});
}


function validateEmail(address) {
	var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	return reg.test(address);
}


/* Twitter */
function setupTwitterBoxes()
{
	var twitter_boxes = new Array(), key;
	jQuery('.twitter-box').each(function() 
	{
		var classes = jQuery(this).attr('class').split(" ");
		for (key in classes)
		{
			var cl = classes[key];
			if (cl.substr(0, 12) == 'twitter-box-' && jQuery.inArray( cl.split('-').pop(), twitter_boxes ) == -1)
			{
				twitter_boxes.push(cl.split('-').pop());
			}
		}
	});
	
	for (key in twitter_boxes)
	{
		var data = 
		{
			action: 'load_twitter_boxes',
			key: twitter_boxes[key]
		};
		jQuery.post(ajaxurl, data, function(response) 
		{
			var nr = response.split("{|}")[0];
			var tweet = response.split("{|}")[1];
			jQuery(".twitter-box-"+nr+":contains('laden')").html(tweet);
		});
	}
}


/* INIT */

function init()
{
	/*ismobile = /mobile/i.test(navigator.userAgent);
	if (ismobile)
	{
		document.addEventListener('touchmove', function (e) { e.preventDefault(); }, false); 
		window.addEventListener('load', loaded, false);	
		jQuery('head').append('<link rel="stylesheet" href="css/mobile.css" type="text/css" />');
		jQuery('#menu a, .intro-box a.arrow-down').click(function()
		{
			myScroll.scrollToElement(jQuery(this).attr('href'), 750);
			return false;
		});		
	}
	else
	{*/
		//jQuery('#menu').onePageNav();
		//jQuery('.intro-box').onePageNav();
		//jQuery('.interesse-link').onePageNav();
		//base visual element on scroll position
		//update(jQuery(document).scrollTop());
		jQuery(window).scroll(function() 
		{
			update(jQuery(document).scrollTop());
		});
		
		
		var viewport_height = jQuery(window).height();
		jQuery('.content').css('min-height', viewport_height+'px');
		$(window).resize(function() {
			viewport_height = jQuery(window).height();
			jQuery('.content').css('min-height', viewport_height+'px');
		});
		
	//}
	
	jQuery('.scroll-to-link').click(function()
	{
		scrollToAnchor(jQuery(this).attr('href'));
		return false;
	});
	
	var currentTime = new Date();
	var month = currentTime.getMonth() + 1
	var year = currentTime.getFullYear()
	
	var calendar_init_link = false;
	
	var inithash;
	if (window.location.hash != '')
	{
		inithash = window.location.hash;		
		var hashpath = inithash.split('/');
		if (hashpath[2] == 'agenda')
		{
			var date_parts = hashpath[3].split('-');
			month = date_parts[0];
			year = date_parts[1];
			//scrollToAnchor when calendar loaded
			calendar_init_link = true;
		}
		else
		{
			setTimeout(function() { scrollToAnchor('/'+inithash) }, 500);
		}
	}
	
	//load calendar
	loadCalendar(month, year, calendar_init_link);
	setupCalendar();
	
}

function scrollToAnchor(href, skip)
{
	//first scroll to right main page -> use the first element
	var id = href.substr(4);
	var parts = id.split('/');
	var newLoc = jQuery('#'+parts[0]).offset().top;
	if (skip)
	{
		jQuery(document).scrollTop(newLoc);
	}
	else
	{
		$.scrollTo(newLoc, 1000, 
		{
			onAfter: function() 
			{            
				window.location = href;
			}		
		});
	}
	
	//check if a subpage needs to be loaded
	if (parts.length > 1)
	{
		//load subpage
		var hit = false;
		jQuery('#'+parts[0]+' a').each(function()
		{
			if (!hit && jQuery(this).attr('href') == href)
			{				
				jQuery(this).click();
				hit = true;
			}
		});
	}
}


function setupCalendar()
{
	jQuery('#calendar .prev_month, #calendar .next_month').click(function()
	{
		var rel = jQuery(this).attr('rel');
		var date_parts = rel.split('-');
		loadCalendar(date_parts[0], date_parts[1], false);
		return false;
	});
}

function loadCalendar(m, y, calendar_init_link)
{
	jQuery('#calendar .table-wrapper').after('<div style="padding: 30px 0 0 60px;"><div class="loading">Laden...</div></div>');
	jQuery('#calendar .table-wrapper').remove();
	//parent post id
	var ppid = jQuery('#calendar-content').attr('class').split('-')[1];
	var data = 
	{
		action: 'load_calendar',
		m: m,
		y: y,
		ppid: ppid
	};
	jQuery.post(ajaxurl, data, function(response) 
	{
		jQuery('#calendar-content').html(response);
		setupCalendar();
		setupSubpages();
		if (calendar_init_link) { setTimeout(function() { scrollToAnchor('/'+window.location.hash) }, 500); }
	});
}

