function log(msg) { return window.console ? console.log(msg) : null; }

$(function() {

    var _getWindow = function() {
		
        try { top.document; return top; } catch (e) { return window; }
		
    };

    var _getHash = function() {
		
        var index = _l.href.indexOf('#!');
        return index != -1 ? encodeURI(decodeURI(_l.href.substr(index + 1))).split('/').pop() : null;
		
	};

	var _getBaseURL = function() {
	   
        var url = _l.href;
        if (url.indexOf('#!') != -1)
            url = url.substr(0, url.indexOf('#!'));
        if (url.substr(url.length - 1) == '/')
            url = url.substr(0, url.length - 1);
        return url+'/';
		
	};

	// --> page functions
	var _pageFn = {
		
		_get: function(page) {

			for(i in _p) { if(_p[i].href == page) { return +i; }  } // unary plus operator - converts i to a number
			return false;

		},
		
		_switch: function(page, href) {

			log('action: switch to page: '+page);

			if(page == 'contact') {
			
				_pageFn._toggleContactForm();
				self.location.href = href; 
				_pageFn._trackPageView(href);
				return false;
				
			}

			var index = _pageFn._get(page);

			// return false if page not found
			if(typeof(index) != "number") { log(page + ' - 404 page not found'); return false; }

			// update contents
			$("#contents", content).html(_p[index].text);
			$("h2", content).html(_p[index].title);

			$("img#page-photo", content).attr({"src":_b+"img/foto-"+page+".jpg"});
			$("img#page-logo", content).attr({"src":_b+"img/logo-"+page+".jpg"});

			slideshow.hide();

			nav.animate(
				{ "left":"-300px" }, 
				500,
				function() {
					nav.hide().toggleClass("hidden");
					content.show();	
				});

			// update href
			self.location.href = href; 

			_pageFn._trackPageView(href);

		},

		_return: function() {
		
			nav.animate({ 
				"left":"20px"
				}, 500 ).show();
	
			content
				.hide();
			
			slideshow.show();
			
			content.toggleClass("hidden");
			self.location.href = "#";
		
		},
		
		_toggleContactForm: function() {
			
			log('action: toggle contact form');
			
			var is_visible = contact.is(':visible') ? true : false;

			if(is_visible) {
			
				contact.hide();
				_pageFn._return();

			} else {
				
				slideshow.hide();
	
				nav.animate(
					{ "left":"-300px" }, 
					500,
					function() {
						nav.hide().toggleClass("hidden");

						$("img#contact-logos", contact).attr({"src":_b+"img/contact-logos.jpg"});
						contact.show();
					});

				$("#form-message", contact).attr({"class":''}).html('');
				
			}

		},

		_trackPageView: function(href) {

			log('action: track pageview / page: '+href);

			var value = (_l.pathname + (/\/$/.test(_l.pathname) ? '' : '/')).replace(/\/\//, '/').replace(/^\/$/, '')+href;

			if (typeof _w.pageTracker != "undefined" && typeof _w.pageTracker._trackPageview == "function")
			_w.pageTracker._trackPageview(value);
			
		}

	}

	// --> slideshow
	var _slideShowFn =  {
		
		_init: function() {
			
			$("img:first-child", slideshow).addClass('current');
			setInterval(_slideShowFn._next, 2000);
			
		},
		
		_next: function() {
			
			var active = $('img.current', slideshow);

   			if ( active.length == 0 ) active = $('img:last', slideshow);

   			var next =  active.next().length ? active.next() : $('img:first', slideshow);
  
			active.addClass('prev');   

			next.css({opacity: 0.0})
				.addClass('current')
				.animate({opacity: 1.0}, 1000, function() {
					active.removeClass('current prev');
				});

		}

	}

	// --> init
	var _w = _getWindow(),
		_l = _w.location,
		_h = _getHash(),
		_b = _getBaseURL();

	var _xml,
		_ss,
		_p = [];

	var nav = $("#navigation"),
		content = $("#content"),
		contact = $("#contact-form"),
		slideshow = $("#slideshow");

		content.addClass('hidden');
		contact.hide();

	// inladen xml
	$.get('xml.php', function(xml) {
		
		log('action: load xml');
		
		_xml = $(xml);
		_ss = $("slideshow", _xml);
		
		// creeer slideshow images
		$("slide", _ss).each(function() { $("<img />").attr({src: $(this).find('pic').text(), alt: ""}).appendTo(slideshow); });
		
		_slideShowFn._init();

		$("pages page", _xml).each(function(){
		
			var title = $(this).find('title').text(),
				href = $(this).find('url').text(),
				text = $(this).find('text').text();
			
			var _page = {"title": title, "text": text, "href": href};
				_p.push(_page);

		});
		
		// hash is meegegeven, redirect naar juiste pagina
		if(_h != null) { _pageFn._switch(_h, "#!/"+_h); } else { slideshow.show(); } 
				
	}, 'xml'); 

	// --> contact form submit
	$("form #submit", contact).click(function() {
											  
		log('action: submit form');
		var is_ready = true;
		
		var email_regexp = /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/; 
		
		var input = {
			first_name: $("#first_name", contact).val(), 
			last_name: $("#last_name", contact).val(), 
			city: $("#city", contact).val(), 
			phone_number: $("#phone_number", contact).val(), 
			email: $("#email", contact).val(),
			message: $("#message", contact).val()
			}; 
			
		for(prop in input) {
		
			if(prop == 'email') {
				if( ! email_regexp.test(input[prop])) { is_ready = false; }
			} else { if(input[prop] == '') { is_ready = false; log('input '+prop+': empty'); } }

		}

		$("#form-message", contact).removeClass('error');

		if ( ! is_ready) {
			
			$("#form-message", contact).addClass('error').html('U heeft niet alle velden (correct) ingevuld. Let op: alle velden zijn verplicht.');
			
		} else {
			
			$.post("mail.php", input, function(data){
			
				var status = data.status,
					message = data.message;

				$("#form-message", contact).addClass(status).html(message);

				// reset input fields if success
				if(status == 'ok') {
				for(prop in input) { $('#'+prop, contact).val(''); } }

			}, "json");
			
		}

		return false;
	
	});

	// --> click event handler
	$("li a", nav).click(function() {

		var _href = $(this).attr('href'),
			_uri = _href.split('/').pop();

		_pageFn._switch(_uri, _href);
		return false;

	});
	
	$("#back-link", content).click(function() {

		_pageFn._return();
		return false;
	
	});
	
	$("#back-link", contact).click(function() {

		_pageFn._toggleContactForm();
		return false;
	
	});

});
