/*!
 * jQuery TextChange Plugin
 * http://www.zurb.com/playground/jquery-text-change-custom-event
 *
 * Copyright 2010, ZURB
 * Released under the MIT License
 */
(function(a){
    a.event.special.textchange={
        setup:function(){
            a(this).data("lastValue",this.contentEditable==="true"?a(this).html():a(this).val());
            a(this).bind("keyup.textchange",a.event.special.textchange.handler);
            a(this).bind("cut.textchange paste.textchange input.textchange",a.event.special.textchange.delayedHandler)
        },
        teardown:function(){
            a(this).unbind(".textchange")
        },
        handler:function(){
            a.event.special.textchange.triggerIfChanged(a(this))
        },
        delayedHandler:function(){
            var c=a(this);
            setTimeout(function(){
                a.event.special.textchange.triggerIfChanged(c)
            },
            25)
        },
        triggerIfChanged:function(a){
            var b=a[0].contentEditable==="true"?a.html():a.val();
            b!==a.data("lastValue")&&(a.trigger("textchange",[a.data("lastValue")]),a.data("lastValue",b))
        }
    };
    
    a.event.special.hastext={
        setup:function(){
            a(this).bind("textchange",a.event.special.hastext.handler)
        },
        teardown:function(){
            a(this).unbind("textchange",a.event.special.hastext.handler)
        },
        handler:function(c,b){
            b===""&&b!==a(this).val()&&a(this).trigger("hastext")
        }
    };

    a.event.special.notext={
        setup:function(){
            a(this).bind("textchange",
                a.event.special.notext.handler)
        },
        teardown:function(){
            a(this).unbind("textchange",a.event.special.notext.handler)
        },
        handler:function(c,b){
            a(this).val()===""&&a(this).val()!==b&&a(this).trigger("notext")
        }
    }
})(jQuery);


/*
 * jQuery supersleight plugin
 */
jQuery.fn.supersleight = function(settings) {
    settings = jQuery.extend({
        imgs: true,
        backgrounds: true,
        shim: '/wp-content/themes/weboo/assets/images/x.gif',
        apply_positioning: true
    }, settings);
	
    return this.each(function(){
        if (jQuery.browser.msie && parseInt(jQuery.browser.version, 10) < 7 && parseInt(jQuery.browser.version, 10) > 4) {
            jQuery(this).find('*').andSelf().each(function(i,obj) {
                var self = jQuery(obj);
                // background pngs
                if (settings.backgrounds && self.css('background-image').match(/\.png/i) !== null) {
                    var bg = self.css('background-image');
                    var src = bg.substring(5,bg.length-2);
                    var mode = (self.css('background-repeat') == 'no-repeat' ? 'crop' : 'scale');
                    var styles = {
                        'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='" + mode + "')",
                        'background-image': 'url('+settings.shim+')'
                    };
                    self.css(styles);
                };
                // image elements
                if (settings.imgs && self.is('img[src$=png]')){
                    var styles = {
                        'width': self.width() + 'px',
                        'height': self.height() + 'px',
                        'filter': "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + self.attr('src') + "', sizingMethod='scale')"
                    };
                    self.css(styles).attr('src', settings.shim);
                };
                // apply position to 'active' elements
                if (settings.apply_positioning && self.is('a, input') && (self.css('position') === '' || self.css('position') == 'static')){
                    self.css('position', 'relative');
                };
            });
        };
    });
};


if (!Array.prototype.indexOf) {
    Array.prototype.indexOf = function(elt /*, from*/ ) {
        var len = this.length;
        var from = Number(arguments[1]) || 0;
        from = (from < 0) ? Math.ceil(from) : Math.floor(from);
        if (from < 0) from += len;
        for (; from < len; from++) {
            if (from in this && this[from] === elt) return from;
        }
        return -1;
    };
}
    
function switchPromoItem (currentItem,newItem) {
    currentItem.fadeOut('fast');
    newItem.fadeIn('slow');
}

var window_focus = true;

$(window).focus(function() {
    window_focus = true;
}).blur(function() {
    window_focus = false;
});

var n = $("#products-banner h1 > span").size();

$("#products-banner h1 > span").hide();


$("#products-banner h1 > span").each(function(index) {
    $(this).delay(500*index).fadeIn(300);
});

var oldSize = parseFloat($("#content").css('font-size'));
var newSize = oldSize  * 4;

$("#products-banner h1").stop().animate({
    fontSize: newSize
}, 2000);
       
$.fn.clientsNav = function(){
    return this.each(function(){
        var $container = $(this),
        $clients = $('.clients',$container),
        clientsCount = $clients.length,
        navHtml = '<div class="clients-nav-arrows"><a class="clients-nav-prev" href="#"><span></span></a><a class="clients-nav-next" href="#"><span></span></a></div>',
        $navPrev, $navNext,
        width = $clients.outerWidth(true),
        navOffsetCount = 0,
        currIndex = $('.clients.current').index('.clients');
			
        $container.css('width',width*clientsCount);
		
        if (clientsCount > 6) {
            $container.after($(navHtml));
			
            $navPrev = $container.next().find('.clients-nav-prev');
            $navNext = $container.next().find('.clients-nav-next');

            $navPrev.click(function(){
                if (navOffsetCount > 0) {
                    navOffsetCount--;
                    if (navOffsetCount == 0) {
                        $navPrev.hide();
                    } else {
                        $navPrev.show();
                    }
                    $navNext.show();
                    $container.stop().animate({
                        'margin-left' : -width*navOffsetCount*6
                    },600);
                }
				
                return false;
            });
			
            $navNext.click(function(){
                if (navOffsetCount < Math.ceil(clientsCount/6)-1) {
                    navOffsetCount++;
                    if (navOffsetCount == Math.ceil(clientsCount/6)-1) {
                        $navNext.hide();
                    } else {
                        $navNext.show();
                    }
                    $navPrev.show();
                    $container.stop().animate({
                        'margin-left' : -width*navOffsetCount*6
                    },600);
                }
				
                return false;
            });
			
            if (currIndex < 6) {
                $navPrev.hide();
            } else {
                navOffsetCount = Math.floor(currIndex/6);

                $container.stop().css({
                    'margin-left' : -width*navOffsetCount*6
                });
				
                if (Math.floor((clientsCount-1)/6) == navOffsetCount) {
                    $navNext.hide();
                }
            }			
        }
        
        $clients.click(function(){
        	if ($.browser.msie && parseInt($.browser.version,10) < 7) {
        		return;
        	}

	        if (!$(this).hasClass('current') || 1) {
	            var $selectedClient = $(this),
	            url = $(this).find('a').attr('href'),
	            loadCounts = 0;
	            
	            $selectedClient.siblings().andSelf().removeClass('current').end().end().addClass('current');
	            $clientHighlight.trigger('hidePopups');
	            $('#client-highlight-content').fadeOut('fast',function(){
	            
	                $(this).remove();   
	                var spinner_img = 'ajax-loader.gif';
	                var spinner = $('<img id="ajax-loader" width="32" height="32" src="/wp-content/themes/weboo/assets/images/'+ spinner_img +'">');
	
	                $("#client-highlight").append(spinner);
	
	                $('#our-work-container').load(url+' #our-work-content',function(){
	                    $('.project-testimonial').testimonialInit();                    
	                    $clientHighlight.stop().load(url+' #client-highlight-content',function(){			
	                        promoSliderReady = false;
	                        $clientHighlight.trigger('init');
	                    });
	                });
	
		            if ($('.project-testimonial').length) {
		            	$('.project-testimonial').remove();
		            	$('#our-work-container').removeClass('testimonial-added');
		            }
	
	            });
	        }
			
	        return false;
        });
    });	
}

$.fn.infoPopup = function() {
    return $(this).each(function() {
        function placePopup(i, el) {
            if (popupPosArray.length) {
                var $popup = $(el),
                popupW, hPadding, vPadding, revPadding,
                absPosA, absPosB,
                popupPosIndex = Math.floor(Math.random() * popupPosArray.length);
                
                if ($popup.width() >= $popup.height()) {
                    popupW = $popup.outerWidth();
					
                    vPadding = (popupW - $popup.height())/2;
                    $popup.css({
                        'padding-top' : vPadding,
                        'padding-bottom' : vPadding
                    });
                } else {
                    revPadding = true;
                    vPadding = $popup.css('padding-left');
                    $popup.css({
                        'padding-top' : vPadding,
                        'padding-bottom' : vPadding
                    });
                    popupW = $popup.outerHeight();
                    hPadding = (popupW - $popup.width())/2;
                    $popup.css({
                        'padding-left' : hPadding,
                        'padding-right' : hPadding
                    });
                }
				
                popupPos = popupPosArray[popupPosIndex];			
				
                popupPosArray.splice(Math.max(popupPosIndex-(popupW+popupMargin)/2,0),popupW+popupMargin);
				
                $popup.css({
                    left: popupPos[0] - popupW / 2,
                    top: popupPos[1] - popupW / 2
                });			
            }
        };

        function fillPopupPos (){
            var tempPosArray = new Array();
			
            // Right co-ords
            for (var i = chromeOffsetBottom; i >= chromeOffsetTop+60; i--) {
                tempPosArray.push([chromeOffsetRight,i]);
            }
            // Top co-ords
            /*
			for (var i = chromeOffsetRight-popupMargin; i >= chromeOffsetLeft; i--) {
				tempPosArray.push([i,chromeOffsetTop]);
			}			
*/
            // Left co-ords
            for (var i = chromeOffsetTop+60; i <= chromeOffsetBottom; i++) {
                tempPosArray.push([chromeOffsetLeft,i]);
            }
            // Bottom co-ords
            for (var i = chromeOffsetLeft+popupMargin; i <= chromeOffsetBottomLeftLimit-popupMargin; i++) {
                tempPosArray.push([i,chromeOffsetBottom]);
            }
            for (var i = chromeOffsetBottomRightLimit+popupMargin; i <= chromeOffsetRight-popupMargin; i++) {
                tempPosArray.push([i,chromeOffsetBottom]);
            }

            return tempPosArray;
        }
		
        var $container = $(this),
        $popups = $container.find('.client-stats-highlight'),
        chromeOffsetTop = 16,
        chromeOffsetRight = 812,
        chromeOffsetBottom = 453,
        chromeOffsetLeft = 148,
        /*
			chromeOffsetRightLimit = 357,
			chromeOffsetBottomLimit = 632,
*/
        chromeOffsetBottomLeftLimit = 411,
        chromeOffsetBottomRightLimit = 555,
        popupPos = [],
        popupPosArray = [],
        popupDelay = 250,
        popupMargin = 200; // The larger popupMargin is, the faster the available popup positions will run out, and the wider apart the popups will be.
		
        /* Change offset positions to avoid overlapping screenshot */
        chromeOffsetTop = -14;
        chromeOffsetRight = 851;
        chromeOffsetBottom = 483;
        chromeOffsetLeft = 118;

        $container.bind('init',function(){
            var img = new Image();
            ;
			
            $popups = $container.find('.client-stats-highlight');
            popupPosArray = fillPopupPos();
							
            if (!Modernizr.csstransforms || !Modernizr.csstransitions) {
                $popups.hide();
            }
            
            var $slider = $('#promo-slider .promo_slider_wrapper').detach();
            $(img).load(function(){
                $('#client-highlight-content').show();
                $slider.insertBefore('#promo-slider #promo-shine');
                $('.promo_slider_wrapper').sliderInit();
				$('#header, #clients-nav, #our-work-container').supersleight();
                $slider.fadeIn('normal',function(){
                    var $imgs = $slider.find('img').unwrap(),
                    i, loaded = 0, imgs = new Array(), img;
	        		
                    for (i = 0; i < $imgs.length; i++) {
                        img = new Image();
                        $(img).load(function(){
                            loaded++;
	        				
                            if (loaded == $imgs.length) {
                                setTimeout(function(){
                                    $container.trigger('showPopups');	
                                },400)
                            }
                        }).attr('src',$imgs[i].src);
                    }
                });

            }).attr('src',($('#client-highlight').css('background-image') || "").match(/url\s*\(["']*(.*?)['"]*\)/)[1]);
			
            if (Modernizr.borderradius) {
                $popups.each(placePopup);
            }
			
            return $(this);
        }).bind('hidePopups',function(e,callback){
            if (Modernizr.csstransforms && Modernizr.csstransitions) {
                $popups.each(function(){
                    $el = $(this);
                    $el.css({
                        '-webkit-transform' : 'scale(0)',
                        '-moz-transform' : 'scale(0)',
                        msTransform : 'scale(0)',
                        '-o-transform' : 'scale(0)',
                        'transform' : 'scale(0)'
                    });
                });
            } else {
                $(this).find('#client-highlight-content').fadeOut('fast');
            }
			
            return $(this);
        }).bind('showPopups',function(e,callback){
            if (Modernizr.csstransforms && Modernizr.csstransitions) {
                var loaded = 0;
                $popups.bind('webkitTransitionEnd transitionend oTransitionEnd',function(){
                    loaded++;
                    if (loaded == $popups.length && callback != undefined) {
                        callback();
                    }
                }).each(function(i){
                    var $el = $(this);
                    window.setTimeout(function(){
                        $el.show().css({
                            '-webkit-transform' : 'scale(1)',
                            '-moz-transform' : 'scale(1)',
                            msTransform : 'scale(1)',
                            '-o-transform' : 'scale(1)',
                            'transform' : 'scale(1)'
                        });					
                    },popupDelay*i);
                });
            } else {
                $popups.each(function(i){
                    var $el = $(this);
                    window.setTimeout(function(){
                        $el.fadeIn('slow')
                    },popupDelay*i);
                });
                if (callback != undefined) {
                    callback();
                }
            }
			
            return $(this);
        });
    });
}

$.fn.testimonialInit = function(){
	return $(this).each(function(){
    	var $container = $(this),
    		$fullQuote = $container.html(),
    		$workContainer = $('#our-work-container').addClass('testimonial-added').append('<br class="clear" />'),
    		$workContent = $('#our-work-content'),
    		$expandLink = $('<br /><a href="#" class="expand-link"><span>Click to read more</span></a>'),
    		$quoteOverlay = $('#quote-expanded').html($fullQuote),
    		$pullQuote;
    		
    	$pullQuote = $container.prependTo($workContainer).find('blockquote em').html();
    	$pullQuote = $('<p></p>').append('<span class="ldquo">&ldquo;</span>').append($pullQuote).append('<span class="rdquo">&rdquo;</span>').append($expandLink);
    	$container.find('blockquote').html($pullQuote);
    	$container.supersleight();
    	
    	$container.click(function(){
    		if ($('#quote-expanded-overlay').is(':visible')) {
    			$('#quote-expanded-overlay').trigger('hideFullQuote');
    		} else {
    			$('#quote-expanded-overlay').trigger('showFullQuote');
    		}
    		
    		return false;
    	});
    	
    	$('#quote-expanded-screen').click(function(){
    		$('#quote-expanded-overlay').trigger('hideFullQuote');
    	});
	});
};

var $clientHighlight;

$(function() {
    if ($('body').hasClass('error404')) {
        $('#s').focus();
    }
    if ($("#s").val() == '') {
        $("#s").fadeIn(1000).val('Search for...');
    }
    $("#s").click(function() {
        if ($("#s").val() == 'Search for...') {
            $("#s").fadeIn().val('')
        }
    }).blur(function() {
        if ($("#s").val() == '') {
            $("#s").fadeIn().val('Search for...')
        }
    });
    if ($.isFunction($.fn.lettering)) {
        $("#products-banner h1").lettering();
    }
	
    $clientHighlight = $('#client-highlight').infoPopup();
	
    $('p.placeholder-input').each(function(){
        var $p = $(this);
        $p.find('input, textarea').focus(function(){
            $p.addClass('placeholder-input-focus');
        }).blur(function(){
            $p.removeClass('placeholder-input-focus');
        }).bind('textchange', function(){
            if ($(this).val() != '') {
                $p.addClass('placeholder-input-filled');
            } else {
                $p.removeClass('placeholder-input-filled');
            }
        }).trigger('textchange');
    });
	
    $('#clients-nav').clientsNav();
	
    if ($('#products-banner h1').length) {
	
        function showProductHeroBanner (){
            if ($('html').hasClass('wf-yanonekaffeesatz-n4-active')) {
                $heroChars.each(function(i){
                    $(this).delay(65*i).fadeIn(150);
                    if (i == $('#products-banner h1 span').length - 1) {
                        window.setTimeout(function(){
                            $('#products-banner h1').removeClass('cursor-show');
                        },(i+4)*65);
                    }
                }).parent().addClass('cursor-show');
            } else {
                setTimeout(function(){
                    showProductHeroBanner();
                },100)
            }
        }
	
        var $heroChars = $('#products-banner h1 span').hide(),
        heroFlashCount = 0,
        heroFlashRate = 600,
        heroFlashCountLimit = 3,
        heroHasBorder = false,
        heroInterval = window.setInterval(function(){
            if (heroFlashCount == heroFlashCountLimit) {
                clearInterval(heroInterval);
                showProductHeroBanner();
            } else {	
                $heroChars.parent().toggleClass('cursor-show');
            }
			
            heroFlashCount++;
        },heroFlashRate);
			
        if ($.browser.msie && parseInt($.browser.version,10) < 8) {
            clearInterval(heroInterval);
            setTimeout(function(){
                showProductHeroBanner();
            },600);
        }
	
    }
	
    $('#skipToWork').click(function(){
        var $link = $(this),
        $target = $($link.attr('href'));
		
        $('html,body').animate({
            scrollTop:$target.position().top
        },600);
		
        return false;
    });
    
    var scrollOffset = 0,
    	contentHeightChanged = false,
    	originalContentHeight;
    
    $('#quote-expanded-overlay').bind('showFullQuote',function(){
    	var $overlay = $(this),
    		$overlayScreen = $('#quote-expanded-screen'),
    		$pullQuote = $('#our-work-container .project-testimonial blockquote'),
    		$workContent = $('#our-work-content');
    		
		originalContentHeight = $workContent.height();
    		
    	$overlayScreen.fadeIn('slow');
    	$('#quote-expanded, #quote-expanded-close',$overlay).hide();
    	scrollOffset = $('#our-work-container').offset().top;
    	$('html,body').animate({
    		'scrollTop' : scrollOffset
    	},'slow');
    	if (!$.browser.msie || parseInt($.browser.version,10) >= 7) {
    		$('html').addClass('theatre-mode').scrollTop(scrollOffset);
    	}
    	if (originalContentHeight < 450) {
    		$workContent.animate({
    			height : 450
    		},'normal');
    		contentHeightChanged = true;
    	}
    	$overlay.show().css({
    		'top'     : $pullQuote.offset().top - $('body').offset().top,
    		'left'    : $pullQuote.offset().left - $('body').offset().left,
    		'width'   : $pullQuote.width()-60,
    		'height'  : $pullQuote.height()-120,
    		'opacity' : 0
    	}).animate({
    		'top'     : $pullQuote.offset().top - $('body').offset().top,
    		'left'    : $('#our-work-content').offset().left - $('body').offset().left,
    		'width'   : 640,
    		'height'  : $('#quote-expanded').height(),
    		'opacity' : 1
    	},'normal',function(){
    		$('#quote-expanded, #quote-expanded-close',$overlay).fadeIn();
    	});
    }).bind('hideFullQuote',function(){
    	var $overlay = $(this),
    		$overlayScreen = $('#quote-expanded-screen'),
    		$pullQuote = $('#our-work-container .project-testimonial blockquote'),
    		$workContent = $('#our-work-content');
    		
    	$('#quote-expanded, #quote-expanded-close',$overlay).fadeOut('fast',function(){
	    	$overlay.animate({
	    		'top'     : $pullQuote.offset().top - $('body').offset().top,
	    		'left'    : $pullQuote.offset().left - $('body').offset().left,
	    		'width'   : $pullQuote.width()-60,
	    		'height'  : $pullQuote.height()-120,
	    		'opacity' : 0
	    	},'fast',function(){
	    		$overlay.hide();
		    	if (!$.browser.msie || parseInt($.browser.version,10) >= 7) {
		    		$('html').removeClass('theatre-mode').scrollTop(scrollOffset);
		    	}
	    		$('#quote-expanded-screen').fadeOut('slow');
	    	});
	    	if (contentHeightChanged) {
	    		$workContent.animate({
	    			height : originalContentHeight
	    		},'fast');
	    		contentHeightChanged = false;
	    	}
    	});
    });
    
    $('#quote-expanded-close').click(function(){
		$('#quote-expanded-overlay').trigger('hideFullQuote');
		
		return false;
    });
    
    $('.project-testimonial').testimonialInit();

	/* WebFont Loader */
	
	WebFont.load({
	    google: {
	        families: [ 'Yanone Kaffeesatz', 'Droid Sans' ]
	    },
	    active: function(){
			if ($('body').hasClass('our-work')) {
				$('#client-highlight').trigger('init');
			} else {
				$('body').supersleight();
			}
	    }
	});
	
});
