(function (m, i) { // Prevent calls to Firebug from causing errors
    if (!window.console || !console.firebug) {
        window.console = {};
        for (i = 0; i < 16; i += 1) {
            window.console[m[i]] = function () {};
        }
    }
})('log debug info warn error assert dir dirxml group groupEnd time timeEnd count trace profile profileEnd'.split(' '));

(function($) {
	
	$.CONFIG = { debug: false
			, offsetTarget: 100
            , sliderCount: 1
            , slideEasing: "slowToAnHalt"
            , ajaxDelay: 500     
    };
    
    $.Cache = {};
	
	$.extend(jQuery.easing,
	{
		slowToAnHalt: function (x, t, b, c, d) {
		if (t==0) return b;
		if (t==d) return b+c;
		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
		}
	});
	

	$.fn.socialPaneSetup = function(){
		return this.each(function(){
			$(this).css({"top" : "-" + ($(this).height()-43) + "px"});
		});
		return this;
	};
	
	$.fn.triggersSetup = function(options){
		var settings = $.extend({}, $.CONFIG, options);
		
		$("<a href='http://twitter.com/kjellinwiden' class='trigger-buttons sec twitteriffic'>twitteriffic</a><a href='www.lastfm.se' class='trigger-buttons lastFm'>lastFm</a>").appendTo($(this));
		
		var buttons = $(this).find("a.trigger-buttons");
		
			buttons.each(function(i){
				var el	= $(this),
				box 	= $("div.slideDown:eq(" + i + ")"),
				ul		= box.find('ul'),
				headline = box.find('h5'),
				tUrl	= "http://api.twitter.com/1/statuses/user_timeline.json?screen_name=kjellinwiden&count=10&trim_user=1",
				fmUrl 	= "",
				shown   = false;
				el.click(function(e){
					e.preventDefault();
					createOverlay();
					(box.offset().top < 0 ? shown = false : shown = true);
					if(shown){
						box.animate({ "top": "-" + (box.height()-43)+"px"}, 700, settings.slideEasing , function(){
									box.css({"z-index" : "10"});
									$("#modalOverlay").hide();
								});
						$(this).css({"top" : "0px"});
							
					} else {
						
						// load external content
						// http://api.twitter.com/1/statuses/user_timeline.json?screen_name=kjellinwiden&count=2&trim_user=1
						if(ul.hasClass('done')){
							box.css({"z-index" : "20"}).animate( { "top": "0px"}, 700, settings.slideEasing);
							el.css({"top" : (box.height()-45)+"px"});
						} else {
							(el.hasClass('twitteriffic') ? xUrl = "http://api.twitter.com/1/statuses/user_timeline.json?screen_name=kjellinwiden&count=10&trim_user=1" : xUrl = "http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=monkeyboyf&api_key=1d53ac4f51a6afeb84cdb7b6d9b24fc0&limit=10&format=json"); 
							
							
							box.css({"z-index" : "20"}).animate( { "top": "0px"}, 700, settings.slideEasing);
							ul.css({'display':'none'});
							$.ajax({ 
								url: '/proxy/',
								dataType: "json", 
								context: ul,
								data: { url: xUrl }, 
								success: function(data){
									$(this).addClass("done");
									if(el.hasClass('twitteriffic')){
										headline.html('<a href="http://twitter.com/kjellinwiden">twitter.com/kjellinwiden</a>');
										$.each(data, function (i,tweet) {
											$('<li/>').html(tweetifyText(tweet.text)).appendTo(ul);
										
										});
									} else {
										headline.html('I lurarna eller högtalarna just nu:');
										var nowplaying;
										$.each(data.recenttracks.track, function (i,item) {
											var tuneName 	= item.name,
											artist 			= item.artist["#text"],
											playsymbol;
										 
										('@attr' in item ? playsymbol = 'speaker_on.gif' : playsymbol = 'speaker.gif');
										//('date' in item ? dateString = item.date["#text"] : dateString = 'Lyssnar nu');
										
										if ('date' in item){
											var d = new Date(item.date["#text"]);
											var dateString = d.getDate() + ' ' + monthNames(d.getMonth()) + ', ' + parseInt(d.getHours()+1) + '.' + (d.getMinutes() < 10 ? '0'+d.getMinutes() : d.getMinutes());
										} else {
											var dateString = 'Lyssnar nu'
										}
										
										   $('<li/>').html('<span class="date">' + dateString + '</span> <img class="float-left" alt="" src="http://kjellinwiden.se/wp-content/themes/kwd/images/' + playsymbol + '" height="10" width="12" /> <span class="truncate">' + artist + ' – ' + tuneName + '</span>').appendTo(ul);											
																															
										});
									}
									
								
							},
							complete: function(){
								ul.fadeIn('slow');
								el.css({"top" : (box.height()-45)+"px"});
							}
							});
						}
						
						
						
									
					}
			
				});
				
				el.hover(
			      function () {
			      	var scrollPos = $(window).scrollTop();
					jump = parseInt(box.position().top-scrollPos);
			       if(box.offset().top < 0) box.css({"top": jump+2});
			      }, 
			      function () {
			      	var scrollPos = $(window).scrollTop(),
			      	jump = parseInt(box.position().top-scrollPos);
			       if(box.offset().top < 0) box.css({"top": jump-2});		        
			      }
		    	);
				
				
			});
		
	};
	
	
	$.fn.panelSlider = function(settings) {

		var settings = $.extend({}, $.fn.panelSlider.defaults, settings);
		
		setupCount = function(slider){
			return slider.find(".panel").size();
		};
		
		return this.each(function(){

			var slider 				= $(this),
			widthArray				= [],
			panelWidth 				= slider.find(".panel").width(),
			panelCount 				= setupCount(slider),
			panelContainerWidth 	= 0,
			offset 					= 0,
			currentOffset			= 0,
			currentPanel 			= 1,
			backArrow				= $("#" + settings.bArrow + " a"),
			forwardArrow			= $("#" + settings.fArrow + " a"),
			sliderHeight			= 0;
			
			
			slider.find(".panel").each(function(i){
				var pan = $(this),
				_panelHeight = pan.height();
				if(pan.find("img").size() > 0) pan.css({"width": pan.find("img").width()});
				widthArray.push(pan.width());
				panelContainerWidth += pan.width();
				if(_panelHeight > sliderHeight) sliderHeight = _panelHeight;
			});
			
			$('.panel', slider).wrapAll('<div class="panel-container"></div>');
			$(".panel-container", slider).css({ width: panelContainerWidth });
			slider.css({ height: sliderHeight });
			backArrow.css({"display":"none"}).removeClass("shown");
			if(panelCount < 2) forwardArrow.css({"display":"none"}).removeClass("shown");
			else forwardArrow.css({"display":"block"}).addClass("shown");
			
			
			// BACK
			backArrow.click(function(e){
				e.preventDefault();
				if (currentPanel == 2) {
					$(this).css({"display":"none"}).removeClass("shown");
					forwardArrow.css({"display":"block"}).addClass("shown");
				} else {
					forwardArrow.css({"display":"block"}).addClass("shown");
				};
				$(this).css({"background-position":"-70px 0px"});
				currentPanel -= 1;
				//offset = - (panelWidth*(currentPanel - 1));
				
				if(settings.debug){
					console.info("panelWidth " + panelWidth + " offset: " + offset);
					console.log("PanelWidth: " + widthArray[currentPanel-1] + " arr " + widthArray);
				}
				currentOffset = $('.panel-container', slider).offset().left-settings.padding;
				offset 		  = currentOffset+widthArray[currentPanel-1];
				if(settings.debug){
					console.log("offset: " + offset);
				}
					
				$('.panel-container', slider).filter(':not(:animated)').stop(false,true).animate({ marginLeft: offset }, settings.slideEaseDuration, settings.slideEaseFunction, function(){
					backArrow.css({"background-position":"0 0"});
					$("#keySetup").css({"background-position":"100% 0"});
				});
				if (settings.showCounter) $("#" + settings.counterID).text(currentPanel);
				
				return false;
			});
			
		
			// FORWARD
			forwardArrow.click(function(e){
				e.preventDefault();
				if (currentPanel < panelCount-1) {
					backArrow.css({"display":"block"}).addClass("shown");
				} else {
					$(this).css({"display":"none"}).removeClass("shown");
					backArrow.css({"display":"block"}).addClass("shown");
				};
				$(this).css({"background-position":"-70px -66px"});
				currentOffset = $('.panel-container', slider).offset().left-settings.padding;
				offset    	  = currentOffset-widthArray[currentPanel-1];
				
				currentPanel += 1;
				$('.panel-container', slider).filter(':not(:animated)').stop(false,true).animate({ marginLeft: offset }, settings.slideEaseDuration, settings.slideEaseFunction, function(){
					forwardArrow.css({"background-position":"0 -66px"});
					$("#keySetup").css({"background-position":"100% 0"});
				});
				if (settings.showCounter) $("#" + settings.counterID).text(currentPanel);
				
				
				return false;
			});
						
		});
		return this;
		
	};
	
	$.fn.panelSlider.defaults = {
			  debug: false
			, slideEaseDuration: 500
			, slideEaseFunction: "slowToAnHalt"
			, showCounter: false
			, counterID: "currentPosition"
			, bArrow: "prev"
			, fArrow: "next"
			, padding: 20
	};
	
	createOverlay = function(){
		if($("#modalOverlay").length){
			$("#modalOverlay").show();
		} else {
			$('<div/>',{id: 'modalOverlay'}).addClass("modaloverlay").css("opacity","0.4").insertAfter("#footer");
		}
	};
	
	monthNames = function(i){
		var month = ['jan','feb','mar','apr','maj','jun','jul','aug','sep','okt','nov','dec'];
		return month[i];
	};
	
	hasValue = function(obj) {
		if(typeof obj === 'undefined') return false;
		else return true;
        // if (obj !== undefined) return true;
        //         else return false;
        
    };
	
	tweetifyText = function(txt){
		txt = txt.replace(/((ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?)/gi,'<a href="$1">$1</a>');
		txt = txt.replace(/(^|\s)#(\w+)/g,'$1<a href="http://search.twitter.com/search?q=%23$2">#$2</a>');
		txt = txt.replace(/(^|\s)@(\w+)/g,'$1<a href="http://twitter.com/$2">@$2</a>');
		return txt;
	};

})(jQuery);


$(document).ready(function() {
	var pagePadding = $('#wrap').css('padding-left').replace('px','');
	

	$('#blog-slider').panelSlider({padding:pagePadding});
	$("div.slideDown").socialPaneSetup();
	$("#triggers").triggersSetup();
	var forwardArrow = $("#" + $.fn.panelSlider.defaults.fArrow + " a"),
	    backArrow    = $("#" + $.fn.panelSlider.defaults.bArrow + " a");
	$("#blog-slider").swipe( {
		threshold:50, 
		swipeLeft: function(){
			if(forwardArrow.hasClass("shown"))forwardArrow.trigger('click');
		},
		swipeRight: function(){
			if(backArrow.hasClass("shown"))backArrow.trigger('click');
		}
	});
	// handler for closing overlay
	$("#modalOverlay").live('click',function(e){
				var settings = $.extend({}, $.CONFIG);
				e.preventDefault();
				var _this = $(this);
				$("#triggers a.trigger-buttons").each(function(i){
					$(this).css({"top": "0px"});
				});
				$("div.slideDown").each(function(i){
					$(this).filter(':not(:animated)').animate( { "top": "-" + ($(this).height()-43)+"px"}, 700, settings.slideEasing , function(){
						$(this).css({"z-index" : "10"});
						_this.hide();
					});
				});
			});
	
	$(window).keydown(function(event){
	  switch (event.keyCode) {
	    case 27: // Escape
	    	$("#modalOverlay").trigger('click');
	    	break;
	    case 39: // arrow right i.e Forwards
	    	
	    	if(forwardArrow.hasClass("shown")){
	    		forwardArrow.trigger('click');
	    		$("#keySetup").css({"background-position":"100% -38px"});
	    	}
	    	break;
	    case 37: // arrow left i.e Back
	    	if(backArrow.hasClass("shown")){
	    		backArrow.trigger('click');
	    		$("#keySetup").css({"background-position":"100% -76px"});
	    	}
	    	break;
	    case 38: // up arrow
	    	event.preventDefault();
	    	$('html,body').animate( { scrollTop: 0}, 700, $.CONFIG.slideEasing, function(){
	    		$("#keySetup").css({"background-position":"100% 0px"});
	    	});
	    	$("#keySetup").css({"background-position":"100% -114px"});
	    	break;
	    case 40: // down arrow
	    	event.preventDefault();
	    	if( $('#footer').size() > 0 ) {
				$('html,body').animate( { scrollTop: $("#footer").offset().top}, 700, $.CONFIG.slideEasing, function(){
		    		$("#keySetup").css({"background-position":"100% 0px"});
		    	});
		    	$("#keySetup").css({"background-position":"100% -152px"});
			}
	    	break;
	  }
	});
	

	$("#intro").bind('click',function(e){
		e.preventDefault();
		var $this = $(this),
		height = parseInt($this.height()),
		$text   = $this.find("span");
		//console.log(height);
		if(height == 82){
			$text.css({"display":"none"});
			$this.css({"padding":"0"}).animate({
				width: '37px',
				height: '37px'
			}, 'fast', function() {
    			$this.css({'background-position' : '0 -219px'}); 
  			});
		} else {
			$this.css({'background-position' : '-400px -600px'}).animate({
				width: '215px',
				height: '82px',
				padding: '17px 20px 0 20px'
			}, 'fast', function() {
				$text.fadeIn('fast');
				$text.css({'MozUserSelect':'none'});
  			});
		}
	});
	
	$("#intro").hover(
		  function () {
	      	if(parseInt($(this).height()) == 37) $(this).css({'background-position' : '0 -255px'});
	      }, 
	      function () {
	        if(parseInt($(this).height()) == 37) $(this).css({'background-position' : '0 -219px'});
	      }
	);
		
});
