;(function($){

    $.hitch = function(scope, method){
        // summary: Create a function that will only ever execute in a given scope
        if(!method){ method = scope; scope = null; }
        if(typeof method == "string"){
            scope = scope || window;
            if(!scope[method]){ throw(['method not found']); }
            return function(){ return scope[method].apply(scope, arguments || []); };
        }
        return !scope ? method : function(){ return method.apply(scope, arguments || []); };
    }

})(jQuery);

function showTwitter() {
	return;
    var tweetUsers = ['impresnl'];
    var buildString = "";
    
    if ($('div#twitter-ticker').length > 0) {
        $('#twitter-ticker').show();
        
        for(var i=0;i<tweetUsers.length;i++)
        {
            if(i!=0) buildString+='+OR+';
            buildString+='from:'+tweetUsers[i];
        }
        
        $.getScript('http://search.twitter.com/search.json?q='+buildString+'&callback=TweetTick&rpp=50');   
    }       	
}

(function($) {
	
	String.prototype.stripslashes = function() {
	    return (this+'').replace(/\\(.?)/g, function (s, n1) {
	        switch (n1) {
	            case '\\':
	                return '\\';
	            case '0':
	                return '\0';
	            case '':
	                return '';
	            default:
	                return n1;
	        }
	    });
	}
	
	$.fn.round = function(sub) {
		var subClass = (typeof(sub) != 'undefined') ? '-' + sub : '';
		this.each(function() {
			$(this).addClass('rounded');
            $(this).append('<span class="corner nw'+subClass+'"></span>')
                .append('<span class="corner ne'+subClass+'"></span>')
                .append('<span class="corner sw'+subClass+'"></span>')
                .append('<span class="corner se'+subClass+'"></span>'); 			
		});
		return this;
	}
	$.fn.unround = function() {
		this.each(function() {
			$(this).removeClass('rounded');
            $(this).find('span.corner').remove(); 			
		});
		return this;
	}
	
    /**
     * Content legen en loaders plaatsen
     */
    function showLoaders() {
        $('div#main-wrapper>div.content').html(loader());
        $('div#sidebar>div.content').html(loader());
    }

    /**
     * Loader snippet code verkrijgen
     */         
    function loader() {
        return $('<div class="loader">Laden...</div>');
    }
	
    /**
     * Header verbergen
     */         
    function changeHeader(data, callback) {
        $('div#header').animate({
            top: '+=270'
        }, 150).animate({
            left: '+=18',
            width: '-=36'
        }, 150, false, function() {
            if (typeof(data.header.img) == 'undefined') {
                data.header.img = 'img/headers/birdie.png';
            } 
            
            addText();                  
            
            // header terugklappen
            $('div#header').css({
                background: 'transparent url(' + data.header.img + ') no-repeat left top'
            }).animate({
                left: '-=18',
                width: '+=36'
            }).animate({
                top: '-=270'
            }).animate({
                top: '+=12'
            }, 50).animate({
                top: '-=12'
            }, 50).animate({
                top: '+=3'
            }, 50).animate({
                top: '-=3'
            }, 50, function() {
                
	            if (typeof(callback) != 'undefined') {
	                callback(); 
	            }           
				
            });
        });             
        
        function addText() {
            // eventuele tekst plaatsen
            var template = $.template('<div id="highlight"><h2>${title}</h2>${text}${link}</div>');
            $('div#header div#highlight').remove();
            if (data.header.title) {
                $('div#header div#highlight').remove();
                $('div#header').append(template, {
                    title: data.header.title,
                    text: data.header.description,
                    link: data.header.link
                });
            }                   
        }
    } 
	
	$.fn.menuLinkClick = function(callback) {
        $('ul#menu').find('.clsLinkActive,.clsLinkActiveTop').removeClass('clsLinkActive clsLinkActiveTop');
        $('ul#menu > li > a').unround();
        $(this).addClass('clsLinkActive');
        if (!$(this).hasClass('rounded')) {
            $(this).round();
        } else {
            if ($(this).attr('href') != window.location.hash) {
                // sub clicked
                $($(this).parent().parent().parent().find('>a')).addClass('clsLinkActiveTop').round();
            }
        }
        
        showLoaders();
        
        $.getJSON($(this).attr('href'), function(data) {
            if (typeof(pageTracker) != 'undefined') {
                pageTracker._trackPageview($(this).attr('href'));
            }
            $('div#main-wrapper>div.content').html(data.main.stripslashes());
            $('div#sidebar>div.content').html(data.sidebar.stripslashes());
            // show twitter feed
            showTwitter();            
            changeHeader(data, callback);
        
        });
        
        return this;		
	}

    /**
     * Ajax links koppelingen
     * 
     * @param object options
     */
    $.fn.ajaxLinks = function(options) {
		
		this.each(function() {
			
			var element = $(this);
			
			element.click(clickEvent);
			
			function clickEvent(event) {
                $.history.load($(this).attr('href').replace(/^.*#/, ''));
                return false;				
			}
		});
		
		return this;
    }

})(jQuery);
	

$(function() {
	
	animationInProgress = false;
        
	$.getScript('/js/lib/jquery.template.js');
	$.getScript('/js/lib/jquery.history.js', function() {
		$.history.init(function(hash) {
            if (hash != '') {
				if (animationInProgress == false) {
					animationInProgress = true;
					$("div#nav ul li a[href='" + hash + "']").menuLinkClick(function(){
						animationInProgress = false;
					});
				}
			}
		});
	    $.getScript('/js/lib/konami.js', function() { 
	        konami.code = function() {
	            var image = new Image();
	            image.src = '/img/elements/spencerftw.gif';
	            image.onload = function() {
	                $('body').append('<div class="overlay" style="width:100%;height:' + $(window).height()+100 + 'px;"></div>');
	                $('div.overlay').fadeTo(0, 0.5);
	                $('body').append('<img src="' + image.src + '" alt="Harharhar!" class="harhar" />');
	                pageTracker._trackEvent('Easter Eggs', 'Konami code');
	            };
	        };
	        konami.load();
			showTwitter();
	    });		
		
	});
	
	
	$('div#nav ul li a').ajaxLinks();
	
	// portfolio slider
	if ($('div.portfolio-detail').length > 0) {
        $.getScript('/js/easySlider1.7.js', function() {
            $('div.image-rotator').easySlider({
				auto: true,
				continuous: true,
				speed: 400
			});
		});
	}
	
    $('ul#menu li ul li a').round('sub');
	
	if ($('a.clsLinkActive').length > 0) {
		$('a.clsLinkActive').parent('li').find('ul').show();
        $('ul#menu>li>a.clsLinkActive, a.clsLinkActiveTop').round();
	}
});
