// jQuery addons
// -------------
$.fn.textWidth = function(){
  var text = $(this).text().replace('<em>','');
  text = text.replace('</em>','');



 var calc = '<span class="post-title-check" style="display:none">' + text + '</span>';
 $('body').append(calc);
 var width = $('body').find('span:last').width() + 10;
 $('body').find('span:last').remove();
 return width;
};

// Options
// -------
var baseUrl = "http://test.muse.nl/";

var calculateTime = function (value) {
	time = (value < 600) ? 1.5 : (value / 450);
	return time * 150;
}

// Muse Application
// ----------------
var MuseApplication = function() {

    var inited = false;

    var favoriteModule;
    var galleryModule;
    var relatedModule;
    var hoverModule;
    var postModule;
    
    var uagent = navigator.userAgent.toLowerCase();
    var myScroll;
    var a = 0;
    var scrollDisabled = false;
    var scrolling = false;
    
    var mobile;
    
    var getEventTarget = function(e) {  
        e = e || window.event;  
        return e.target || e.srcElement;
    }

    var setHeight = function() {
        var headerH = document.getElementById('header').offsetHeight,
            wrapperH = window.innerHeight - headerH;
        document.getElementById('container').style.height = wrapperH + 'px';
        document.getElementById('tagIndicator').style.height = wrapperH + 'px';
    }
    
    var addEventListeners = function(mobile) {
        $('#content').bind('click', function(event) {
            postModule.interact(event.originalEvent);
        });
        
        $('#header').bind('click', function(event) {
            if ( !mobile ) {
            	if ( ( $(getEventTarget(event)).attr('id') == 'header' || $(getEventTarget(event)).attr('id') == 'branding' || $(getEventTarget(event)).attr('id') == 'home') && !scrolling) {
                	scrolling = true;
                	$.scrollTo(0, 600, function(){
						scrolling = false;
						$(window).trigger('scroll');
					});
            	}
            }
        });
        
        $(window).resize(function() {
            //relatedModule.resize();
            //favoriteModule.resize();
            //postModule.resize();
        });
        
        
        $('#awards, #contact, #careers, #about, #cases').bind('click', function(event) {
				if ( ( $(getEventTarget(event)).attr('id') == 'cases' ) && !scrolling) {
                	//scrolling = true;
                	$.scrollTo($('#post-1061'), 'slow', {offset:-50});
            	}else{
			menuHandler(getEventTarget(event));
			}
        });
        
        $('.post-overlay').bind('click', function(event) {
        	postModule.open(getEventTarget(event));
        });
        
        $('.post-overlay').bind('mouseover', function(event) {
        	postModule.over(getEventTarget(event));
        });
        
        $('.post-overlay').bind('mouseout', function(event) {
        	postModule.out(getEventTarget(event));
        });
		
		$('.post-title').bind('click', function(event) {
        	postModule.open(getEventTarget(event));
        });
        
        $('.post-close').bind('click', function(event) {
        	postModule.close(getEventTarget(event));
        });
        
        $('.button').bind('mouseover', function(event) {
			handleButtonClasses('mouseover', event);
	    });
        
        $('.button').bind('mouseout', function(event) {
            handleButtonClasses('mouseout', event);
        });
        
        $('.button').bind('mousedown', function(event) {
            handleButtonClasses('mousedown', event);
        });
        
        $('.button').bind('mouseup', function(event) {
            handleButtonClasses('mouseup', event);
        });
         
		 //awards events       
        $('#award_01').bind('click', function(event){
        	gotoPost('472');
        });
		$('#award_02, #award_03, #award_04, #award_05, #award_06, #award_07').bind('click', function(event){
        	gotoPost('478');
        });
		$('#award_08, #award_09').bind('click', function(event){
        	gotoPost('480');
        });
		$('#award_10, #award_11').bind('click', function(event){
        	gotoPost('474');
        });
		$('#award_12').bind('click', function(event){
        	gotoPost('476');
        });
       $('#award_13, #award_14, #award_15, #award_16, #award_17, #award_18, #award_19, #award_20, #award_21, #award_22, #award_23, #award_23_01').bind('click', function(event){
        	gotoPost('490');
        });
		$('#award_24').bind('click', function(event){
        	gotoPost('492');
        });
		$('#award_12_01, #award_25').bind('click', function(event){
        	gotoPost('506');
        });
		$('#award_26').bind('click', function(event){
        	gotoPost('508');
        });
		 
		$('.award').bind('mouseover', function(event) {
			var imgSrc = $(this).children('img').attr('src');
			var newImgSrc = imgSrc.replace('.png','-over.png');
			$(this).children('img').attr('src',newImgSrc);
	    });
		
		$('.award').bind('mouseout', function(event) {
			var imgSrc = $(this).children('img').attr('src');
			var newImgSrc = imgSrc.replace('-over.png','.png');
			$(this).children('img').attr('src',newImgSrc)
	    });
		 
        $(window).hashchange(function() { 
          	hashname = window.location.hash.replace('#item-', '');
			if (hashname != "" ) gotoPost(hashname);		       
        });
    }
    23
    var menuHandler = function(event) {
	
		switch ( $(event).attr('id') ) {

			case 'awards':
				gotoPost(808);
				break;
			case 'contact':
				gotoPost(128);
				break;
			case 'careers':
				gotoPost(77);
				break;
			case 'about':
				gotoPost(323);
				break;
		
		}
		
	}
        
    
    var handleButtonClasses = function (type, event) {
	   	if ( mobile ) return;

    	var target = $(getEventTarget(event));
	
    	switch (type) {
    		case 'mouseover':
    			target.addClass('over');
    			break;
    		case 'mouseout':
    			target.removeClass('over');
    			target.removeClass('down');
    			break;
    		case 'mousedown':
    			target.addClass('down');
    			break;
    		case 'mouseup':
    			target.removeClass('down');
    			break;
    	}
    }
    
    var setScroll = function (value) {
        scrollDisabled = value;
        
        if (value == true) {
          	$("html").addClass('overflow');
        } else {
        	$("html").removeClass('overflow');
       	}
    }
    
    var scrollToggle = function () {        
        $(document).bind('touchmove', function(event) {
            if ( scrollDisabled )
                event.preventDefault();
        });
    }
    
    var addImageLoader = function() {
    	
    	$.imgpreload([	'../wp-content/themes/muse/assets/images/loader.gif',
    	              	'../wp-content/themes/muse/assets/images/buttons/cl.png',
    					'../wp-content/themes/muse/assets/images/buttons/cl_over.png',
    					'../wp-content/themes/muse/assets/images/buttons/close.png',
   					 	'../wp-content/themes/muse/assets/images/buttons/facebook.png',
  					  	'../wp-content/themes/muse/assets/images/buttons/facebook_over.png',
    					'../wp-content/themes/muse/assets/images/buttons/left.png',
    					'../wp-content/themes/muse/assets/images/buttons/left_over.png',
    					'../wp-content/themes/muse/assets/images/buttons/left_down.png',
    					'../wp-content/themes/muse/assets/images/buttons/less_info.png',
    					'../wp-content/themes/muse/assets/images/buttons/less_info_over.png',
    					'../wp-content/themes/muse/assets/images/buttons/less_info_down.png',
    					'../wp-content/themes/muse/assets/images/buttons/more_info.png',
   					 	'../wp-content/themes/muse/assets/images/buttons/more_info_over.png',
    					'../wp-content/themes/muse/assets/images/buttons/more_info_down.png',
    					'../wp-content/themes/muse/assets/images/buttons/related.png',
    					'../wp-content/themes/muse/assets/images/buttons/related_over.png',
    					'../wp-content/themes/muse/assets/images/buttons/related_down.png',
    					'../wp-content/themes/muse/assets/images/buttons/right.png',
    					'../wp-content/themes/muse/assets/images/buttons/right_over.png',
    					'../wp-content/themes/muse/assets/images/buttons/right_down.png',
    					'../wp-content/themes/muse/assets/images/buttons/share.png',
    					'../wp-content/themes/muse/assets/images/buttons/share_over.png',
    					'../wp-content/themes/muse/assets/images/buttons/share_down.png',
    					'../wp-content/themes/muse/assets/images/buttons/twitter.png',
    					'../wp-content/themes/muse/assets/images/buttons/twitter_over.png',
    					'../wp-content/themes/muse/assets/images/buttons/visit.png',
    					'../wp-content/themes/muse/assets/images/buttons/visit_over.png',
    					'../wp-content/themes/muse/assets/images/buttons/visit_down.png',
    					'../wp-content/themes/muse/assets/images/fail.png'
    					],
		{
			each: function() {},
			all: function()
			{
				$(".favorites-item .img").lazyload({
    		        placeholder : "../wp-content/themes/muse/assets/images/loader.gif" 
      			});
    	
    			$(".slider ul .slide-0.img").lazyload({
        		    placeholder : "../wp-content/themes/muse/assets/images/loader.gif", 
        		});
			}
		});
    }
	
    var gotoPost = function (id) {
    	var time = 0;  	
		if ( $(window).scrollTop() > $('#post-' + id).offset().top ) {
			time = calculateTime($(window).scrollTop() - $('#post-' + id).offset().top);
		} else {
			time = calculateTime($('#post-' + id).offset().top - $(window).scrollTop());
		}
		    
 	   	postModule.goto($('#post-' + id));
	}
    
    var urlCheck = function(mobile) {
        hashname = window.location.hash.replace('#item-', '');
        if (hashname != "" ) gotoPost(hashname);            
    }
    
    var checkDevice = function() {
        if ( checkAgent('ipad') || checkAgent('iphone') ) {
            $("#wrapper").addClass('ios');
            return true;
        } else {
            return false;
        }
    }
    
    var checkAgent = function (value) { 
        if (uagent.search(value) > -1){
            return true;
        } else {
            return false;
        }
    }
           
    var Muse = {
        init: function(postSliders){   
            if ( inited ) return;
            
            inited = true;
            mobile = checkDevice();
            
            favoriteModule = new FavoriteModule(mobile, Muse);
            favoriteModule.init();
            
            galleryModule = new GalleryModule(mobile, postSliders, Muse);
            galleryModule.init();
            
          //  relatedModule = new RelatedModule(mobile, Muse);
           // relatedModule.init();
            
            postModule = new PostModule(mobile, Muse, relatedModule, hoverModule);
            postModule.init();
            
            urlCheck(mobile);
            
            addEventListeners();
            addImageLoader(); 
            
            scrollToggle();
			
        },
        disableScroll: function (value) {
            setScroll(value);
        },
        gotoPost: function (value) {
        	gotoPost(value);
        }
    }
    return Muse;
}
