var map = null;
var geocoder = null;
var pageTracker;
var mapOptions = null;

String.prototype.trim = function() {
	return this.replace(/(?:(?:^|\n)\s+|\s+(?:$|\n))/g,"");
};

	
// fix indexOf compatibility
if(!Array.indexOf){
    Array.prototype.indexOf = function(obj, start){
        for(var i=(start||0); i<this.length; i++){
            if(this[i]===obj){
                return i;
            }
        }
    };
}

function initPopups() {
  $('.bubbleInfo').each(function () {
    // options
    var distance = 10;
    var time = 250;
    var hideDelay = 500;

    var hideDelayTimer = null;

    // tracker
    var beingShown = false;
    var shown = false;
    
    var trigger = $('.trigger', this);
    var popup = $('.popup', this).css('opacity', 0);

    // set the mouseover and mouseout on both element
    $([trigger.get(0), popup.get(0)]).mouseover(function () {
      // stops the hide event if we move from the trigger to the popup element
      if (hideDelayTimer) clearTimeout(hideDelayTimer);

      // don't trigger the animation again if we're being shown, or already visible
      if (beingShown || shown) {
        return;
      } else {
        beingShown = true;

        // reset position of popup box
        popup.css('display','block')

        // (we're using chaining on the popup) now animate it's opacity and position
        .animate({
          opacity: 1
        }, time, 'swing', function() {
          // once the animation is complete, set the tracker variables
          beingShown = false;
          shown = true;
        });
      }
    }).mouseout(function () {
      // reset the timer if we get fired again - avoids double animations
      if (hideDelayTimer) clearTimeout(hideDelayTimer);
      
      // store the timer so that it can be cleared in the mouseover if required
      hideDelayTimer = setTimeout(function () {
        hideDelayTimer = null;
        popup.animate({
          opacity: 0
        }, time, 'swing', function () {
          // once the animate is complete, set the tracker variables
          shown = false;
          // hide the popup entirely after the effect (opacity alone doesn't do the job)
          popup.css('display', 'none');
        });
      }, hideDelay);
    });
  });
}

function gb_smilie(thesmile) {
	document.gbookForm.gbtext.value += " "+thesmile+" ";
	document.gbookForm.gbtext.focus();
}

function initMediaPlayer(){
	var mediaPlayer = new SWFObject("mediaplayer/player.swf", "audioPlayer", "75", "30", "0");
	mediaPlayer.addParam('allowscriptaccess','always');
	mediaPlayer.addParam('allowfullscreen','false');
	mediaPlayer.addParam('flashvars','&file=webservice/audio.php&streamscript=lighttpd&playlist=none&fullscreen=false&autostart=true&skin=mediaplayer/tc_audio_skin.swf&repeat=list&shuffle=true');
	mediaPlayer.write("mp3player");
}

function showAddress(address, url, linktext, date, time) {
	try {
		if (GBrowserIsCompatible()) {
			map = new GMap2(document.getElementById("map"));
			map.addControl(new GLargeMapControl());
			map.addControl(new GMapTypeControl());
			geocoder = new GClientGeocoder();
		}
		if (geocoder) {
			geocoder.getLatLng(address, function(point) {
				if (!point) {
					map.html(address + " not found");
				} else {
					map.setCenter(point, 15);
					var marker = new GMarker(point, mapOptions);
					map.addOverlay(marker);
					marker.openInfoWindowHtml('datum: ' + date + ' om ' + time + ' uur<br>adres: ' + address + '<br>website: <a href="http://' + url + '">' + url	 + '</a>');
				}
			});
		}
	} catch (Error){
		$("#map").html("google maps kan niet worden geladen");
	}
}

function agendaHandler(data) {
	var events = data.getElementsByTagName('event');
	if (events.length > 0){
		var event = events[0];
		var address = event.getElementsByTagName('address')[0].firstChild.nodeValue;
		var url = event.getElementsByTagName('url')[0].firstChild.nodeValue;
		var linktext = event.getElementsByTagName('city')[0].firstChild.nodeValue;
		var date = event.getElementsByTagName('date')[0].firstChild.nodeValue;
		var time = event.getElementsByTagName('time')[0].firstChild.nodeValue;
		showAddress(address, url, linktext, date, time);
	}
}

function getRequestParameter ( queryString, parameterName ) {
	var parameterName = parameterName + "=";
	if ( queryString.length > 0 ) {
		var begin = queryString.indexOf ( parameterName );
		if ( begin !== -1 ) {
			begin += parameterName.length;
			var end = queryString.indexOf ( "&" , begin );
			if ( end < 0 ) {
				end = queryString.indexOf ( "#" , begin );
			}
			if ( end < 0 ) {
				end = queryString.length
			}
			return decodeURIComponent( queryString.substring ( begin, end ) );
		}
	}
	return false;
} 

function menuHandler(url){
	var section = getRequestParameter(url,"section");
	var menu = $('#menu').get(0);
	var menuItems = menu.getElementsByTagName('td');
	for (var i=0; i<menuItems.length; i++){
		var menuItem = menuItems[i];
		menuItem.className = "";
		if (menuItem.id === ('menu_' + section)){
			menuItem.className='activeMenuItem';
		}
	}
}

function gallery_initCallback(carousel){
	jQuery('#main_image').bind('img_change', function(){
		var num = parseInt((jQuery('.caption').text())) - 5;
		carousel.scroll(num);
		return false;
	});
}

/*
 * function for specific content modifications
 */
function contentHandler(url){
	var section = getRequestParameter(url,"section");
	if (!section || section === null){
		section = 'home';
	}
	switch (section){
		case 'video':
			// first, stop the audio player
			$("#audioPlayer").get(0).sendEvent('STOP');
		
			var mediaPlayer = new SWFObject("mediaplayer/player.swf", "playlist", "600", "320", "7");
			mediaPlayer.addParam('allowscriptaccess','always');
			mediaPlayer.addParam('allowfullscreen','true');
			mediaPlayer.addParam('flashvars','&file=webservice/video.php&playlistsize=200&streamscript=lighttpd&playlist=right&fullscreen=true&logo=img&autostart=true&skin=mediaplayer/tc_video_skin.swf');
			mediaPlayer.write("videoplayer");
			break;
		case "agenda":
			// only show google map when it was able to initialize
			if (pageTracker != null) {
				var googlemap = $('#googlemap');
				googlemap.html('');
				var id = getRequestParameter(url, "id");
				if (id) {
					$.get("webservice/agenda.php?id=" + id, agendaHandler);
				}
				else {
					$.get("webservice/agenda.php", agendaHandler);
				}
			}
			break;
		case "bio":
			$('.bioImage').cycle({ 
			    fx:      'fade', 
			    speed:    2500,
				timeout:  2500
			});
			break;
		case "gallery":
			$('ul.gallery').galleria({
				history : false,
				clickNext : true,
				insert : '#main_image',
				onImage : function(image,caption,thumb) {
					image.css('display','none').fadeIn(200);
					var _li = thumb.parents('li');
					_li.siblings().children('img.selected').fadeTo(100,0.6);
					thumb.fadeTo('fast',1).addClass('selected');
					
					caption.text(thumb.parent().attr("jcarouselindex"));
					image.attr('title','Next image >>');
					$('#main_image').trigger('img_change');
				},
				onThumb : function(thumb) {
					var _li = thumb.parents('li');
					var _fadeTo = _li.is('.active') ? '1' : '0.6';
					thumb.css({display:'none',opacity:_fadeTo}).fadeIn(500);
					thumb.hover(
						function() {
							thumb.fadeTo('fast',1);
						},
						function() {
							_li.not('.active').children('img').fadeTo('fast',0.6);
						});
				}
			});
		
			$('#gallery').jcarousel({
				scroll: 9,
				initCallback: gallery_initCallback
				});
			break;
	}
	
	var action = getRequestParameter(url,"action");
	if (section === 'gallery' && $('#banner').get(0) && $('#banner').get(0).style.visibility !== 'hidden' && !action){
		// hide the banner
		$('#banner').hide();
		$("#content").addClass("contentBig");
	} else {
		if ($('#banner').get(0) && $('#banner').get(0).style.visibility !== 'visible') {
			// show the banner
			$('#banner').show();
			$("#content").removeClass("contentBig");
		}
	}
	
	// set the window title;
	document.title = section;
	
	// track the page for google analytics
	try{
		pageTracker._trackPageview(url);
	} catch (Error){
		
	}
}

function ahhHandler(url) {
	contentHandler(url);
	menuHandler(url);
	initPopups();
	
	$("#content a").not(".captcha").not(".extern").click(function(event){
		if (!this['target']) {
			event.preventDefault();
			var url = this.href;
			$("#content").load(url, null, function(){
				ahhHandler(url);
			});
		}
	});
	
	$("#content a").filter(".captcha").click(function(event){
		event.preventDefault();
		$('#captcha').get(0).src += Math.round(Math.random()*100000);
	});
	
	$("#content form").submit(function(event){
		event.preventDefault();
		if (validate(this)){
			// add ajax parameter to form
			var action = this.getAttribute('action');
			$.post(action,$(this).formSerialize(), function(data){
				$("#content").html(data);
				ahhHandler(action);
			});
		} else {
			alert('het formulier bevat fouten');
		}
	});
	
	//reset focus
	$("#dummyFocus").focus();
	$("#dummyFocus").blur();
}

function validateElement(element){
	if (element.className === 'required' || element.className === 'required error'){
		element.value = element.value.trim();
		if (element.value === '') {
			element.className = 'required error';
			return false;
		} else {
			element.className = 'required';
		}
	}
	return true;
}

function validate(form){
	var valid = true;
	var inputs = form.getElementsByTagName("input");
	for (var i = 0; i<inputs.length; i++){
		if (!validateElement(inputs[i])){
			valid = false;
		}
	}
	inputs = form.getElementsByTagName("textarea");
	for (var j = 0; j<inputs.length; j++){
		if (!validateElement(inputs[j])){
			valid = false;
		}
	}
	return valid;
}

$(document).ready(
	function(){
		try {
			var tcIcon = new GIcon();
			tcIcon.image = "img/icon.png";
			tcIcon.printImage = "img/icon.gif";
			tcIcon.iconSize = new GSize(32, 32);
			tcIcon.iconAnchor = new GPoint(0, 32);
			tcIcon.infoWindowAnchor = new GPoint(19, 8);
			mapOptions = {
				icon: tcIcon
			};
			pageTracker = _gat._getTracker("UA-364069-1");
			pageTracker._initData();
			pageTracker._trackPageview();
		} catch (Error){
			
		}
		
		initMediaPlayer();
		initPopups();
		contentHandler(window.location + "");
		
		$('.bannerImage').cycle({ 
		    fx:      'fade', 
		    speed:    2500,
			timeout:  2500
		});
		
		$("#processIndicator").ajaxStart(function(){
			$(this).fadeIn("fast");
		 });
		 
		$("#processIndicator").ajaxStop(function(){
		   $(this).fadeOut("slow");
		 });
		 
		$("#processIndicator").ajaxError(function(event, request, settings){
		   $(this).fadeOut("slow");
		});
		 
		$("a").not(".captcha").not(".extern").click(function(event){
			if (!this['target']) {
				event.preventDefault();
				var url = this.href;
				$("#content").load(url, null, function(){
					ahhHandler(url);
				});
			}
		});
		
		$("a").filter(".captcha").click(function(event){
			event.preventDefault();
			$('#captcha').get(0).src += Math.round(Math.random()*100000);
		});
		
		$("form").submit(function(event){
			event.preventDefault();
			if (validate(this)){
				// add ajax parameter to form
				var action = this.getAttribute('action');
				$.post(action,$(this).formSerialize(), function(data){
					$("#content").html(data);
					ahhHandler(action);
				});
			} else {
				alert('het formulier bevat fouten');
			}
		});
		
		$("#banner").click(function(event){
			var url = "?section=gallery";
			$("#content").load(url, null, function(){
				ahhHandler(url);
			});
		}).css('cursor','pointer');
		
		$("div.menu").css('width', 800);
		$("div.menu td").css("width", 93);
	});
