/**
* hoverIntent r5 // 2007.03.27 // jQuery 1.1.2+
* <http://cherne.net/brian/resources/jquery.hoverIntent.html>
* 
* @param  f  onMouseOver function || An object with configuration options
* @param  g  onMouseOut function  || Nothing (use configuration options object)
* @author    Brian Cherne <brian@cherne.net>
*/
(function($){$.fn.hoverIntent=function(f,g){var cfg={sensitivity:7,interval:100,timeout:0};cfg=$.extend(cfg,g?{over:f,out:g}:f);var cX,cY,pX,pY;var track=function(ev){cX=ev.pageX;cY=ev.pageY;};var compare=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);if((Math.abs(pX-cX)+Math.abs(pY-cY))<cfg.sensitivity){$(ob).unbind("mousemove",track);ob.hoverIntent_s=1;return cfg.over.apply(ob,[ev]);}else{pX=cX;pY=cY;ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}};var delay=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);ob.hoverIntent_s=0;return cfg.out.apply(ob,[ev]);};var handleHover=function(e){var p=(e.type=="mouseover"?e.fromElement:e.toElement)||e.relatedTarget;while(p&&p!=this){try{p=p.parentNode;}catch(e){p=this;}}if(p==this){return false;}var ev=jQuery.extend({},e);var ob=this;if(ob.hoverIntent_t){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);}if(e.type=="mouseover"){pX=ev.pageX;pY=ev.pageY;$(ob).bind("mousemove",track);if(ob.hoverIntent_s!=1){ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}}else{$(ob).unbind("mousemove",track);if(ob.hoverIntent_s==1){ob.hoverIntent_t=setTimeout(function(){delay(ev,ob);},cfg.timeout);}}};return this.mouseover(handleHover).mouseout(handleHover);};})(jQuery);

/*--------------------------------------------------------------------------*/

(function($){$.fn.lazyload=function(options){var settings={threshold:0,failurelimit:0,event:"scroll",effect:"show",container:window};if(options){$.extend(settings,options);}
var elements=this;if("scroll"==settings.event){$(settings.container).bind("scroll",function(event){var counter=0;elements.each(function(){if($.abovethetop(this,settings)||$.leftofbegin(this,settings)){}else if(!$.belowthefold(this,settings)&&!$.rightoffold(this,settings)){$(this).trigger("appear");}else{if(counter++>settings.failurelimit){return false;}}});var temp=$.grep(elements,function(element){return!element.loaded;});elements=$(temp);});}
this.each(function(){var self=this;if(undefined==$(self).attr("original")){$(self).attr("original",$(self).attr("src"));}
if("scroll"!=settings.event||undefined==$(self).attr("src")||settings.placeholder==$(self).attr("src")||($.abovethetop(self,settings)||$.leftofbegin(self,settings)||$.belowthefold(self,settings)||$.rightoffold(self,settings))){if(settings.placeholder){$(self).attr("src",settings.placeholder);}else{$(self).removeAttr("src");}
self.loaded=false;}else{self.loaded=true;}
$(self).one("appear",function(){if(!this.loaded){$("<img />").bind("load",function(){$(self).hide().attr("src",$(self).attr("original"))
[settings.effect](settings.effectspeed);self.loaded=true;}).attr("src",$(self).attr("original"));};});if("scroll"!=settings.event){$(self).bind(settings.event,function(event){if(!self.loaded){$(self).trigger("appear");}});}});$(settings.container).trigger(settings.event);return this;};$.belowthefold=function(element,settings){if(settings.container===undefined||settings.container===window){var fold=$(window).height()+$(window).scrollTop();}else{var fold=$(settings.container).offset().top+$(settings.container).height();}
return fold<=$(element).offset().top-settings.threshold;};$.rightoffold=function(element,settings){if(settings.container===undefined||settings.container===window){var fold=$(window).width()+$(window).scrollLeft();}else{var fold=$(settings.container).offset().left+$(settings.container).width();}
return fold<=$(element).offset().left-settings.threshold;};$.abovethetop=function(element,settings){if(settings.container===undefined||settings.container===window){var fold=$(window).scrollTop();}else{var fold=$(settings.container).offset().top;}
return fold>=$(element).offset().top+settings.threshold+$(element).height();};$.leftofbegin=function(element,settings){if(settings.container===undefined||settings.container===window){var fold=$(window).scrollLeft();}else{var fold=$(settings.container).offset().left;}
return fold>=$(element).offset().left+settings.threshold+$(element).width();};$.extend($.expr[':'],{"below-the-fold":"$.belowthefold(a, {threshold : 0, container: window})","above-the-fold":"!$.belowthefold(a, {threshold : 0, container: window})","right-of-fold":"$.rightoffold(a, {threshold : 0, container: window})","left-of-fold":"!$.rightoffold(a, {threshold : 0, container: window})"});})(jQuery);

/*--------------------------------------------------------------------------*/

var Nav = function (container) {
	this.togglers = container.find('li');
	this.setup();	
};
Nav.prototype = {
	setup: function () {
		var self = this;
		this.togglers.each(function () {
			var arrow = $(this).find('.arrow');
			var top = arrow.css("top");
			$(this).hoverIntent({
				sensitivity: 1,
				interval: 50,
				over: function () {
					self.over($(this), top + arrow.height());
				},
				out: function () {
					self.out($(this), top);
				}
			});
			
		});
	},
	over: function (el, xPos) {
		el.find('.arrow').animate(
			{ top: 78 },
			{ duration: 300 }
		);
	},
	out: function (el, xPos) {
		el.find('.arrow').animate(
			{ top: xPos },
			{ duration: 300 }
		);
	}
};

/*--------------------------------------------------------------------------*/

var Toggler = function (trigger, content) {
	this.trigger = $(trigger);
	this.content = $(content);
	this.setup();	
};
Toggler.prototype = {
	setup: function () {
		var self = this;
		var expanded_height = this.content.height();
		var collapsed_height = 18;
		
		if (!this.trigger.hasClass('active')) {
			this.trigger.css("opacity", 0.5);
			this.content.css("height", collapsed_height);
		}
		
		this.trigger.bind('click', function () {
			if (self.trigger.hasClass('active')) {
				self.trigger.css("opacity", 0.5);
				self.trigger.removeClass('active');
				self.content.animate(
					{ height: collapsed_height },
					{ duration: 200 }
				);
			}
			else {
				self.trigger.css("opacity", 1.0);
				self.trigger.addClass('active');
				self.content.animate(
					{ height: expanded_height },
					{ duration: 200 }
				);
			}
		});
	}
};

/*--------------------------------------------------------------------------*/

$(document).ready(function () {
	if ($.browser.msie && $.browser.version=="6.0") {
		try {
			document.execCommand('BackgroundImageCache', false, true);
		} catch (e) {}
	}
	
	$('#what_we_do #col_a li').each(function () {
		new Toggler($(this), $(this).find('.desc'));
	});
	
	if ($('#home').length == 0) {
		new Nav($('#nav'));
	}
	
	/* homepage */
	if ($('#hero').length) {
		setTimeout(function () {
			$('#hero .laptop img, #hero .iphone img').fadeIn(1000);
		}, 500);
	}
	
	/* our work */
	$('#our_work .laptop img').lazyload({
		effect: "fadeIn",
		threshold: -150,
		placeholder: 'img/photo/work/fpo_laptop.png'
	});
	$('#our_work .iphone img').lazyload({
		effect: "fadeIn",
		threshold: -300,
		placeholder: 'img/photo/work/fpo_iphone.png'
	});


        /* contact */
        if($("#contact_form").length > 0)
        {
           $('#contact_form').ajaxForm({ 
          target : $('#form_response'),
          complete : animateMessage
        });
	}

        function animateMessage(){
          $('#form_response').fadeOut(3000);
        }

        $('#send_message_btn').click(function(){

          $('#contact_form').submit();

          //$('#contact_form').validate({
            //submitHandler: function(form){ form.ajaxSubmit(); }
          //});

          //$('#contact_form').validate();
          //$.post('/contact', $('#contact_form').formSerialize(), function() {
            //alert('your message was sent');
          //});
        });
});

