/* ---------------------------------- */

/*
 * DesignWest Michigan 
 * 2011
 *
 * com.designwestmichigan.js
 *
 * 
 */
 
/* ---------------------------------- */

/* Initialize */

jQuery(
  
  function ($) {
	  
    $.Body = $('body');
    
    $.Window = $(window);
    
    $.Scroll = ($.browser.mozilla || $.browser.msie) ? $('html') : $.Body;
   
    $.Mobile = ($.Body.hasClass('webkit-mobile') || (navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i)) || (navigator.userAgent.match(/iPad/i))),
    
    $.Unsupported = $.Body.hasClass('unsupported-browser');

	if($.browser.msie){
		var version = $.browser.version.split('.')[0];
		$.Body.addClass('ie ie-' + version);
	}
	$('[data-controller]').Instantiate();
	    
	
	
	
	
	var $searchForm = $('#search');
	var $searchfield = $('#search_field');
	var searchDefault = 'Search';
	
	$searchfield.val(searchDefault).addClass('empty');
	$searchfield.focus(function(){
		if($searchfield.val() == searchDefault) {
			$searchfield.val("").removeClass('empty');
		}
		$searchfield.blur(function() {
			if($searchfield.val() == "") {
				$searchfield.val(searchDefault).addClass('empty');
			}
		});
	});

	
	// ADDED BY AV
	// Anything but anchors do not recieve a hover pseudoclass in IE6 (also fix for ios)
	$('.post-meta > ul > li').hover(
		function () {
			$(this).addClass('over');
		}, 
		function () {
			$(this).removeClass('over');
		}
	);
	
	
	// ADDED BY AV
	// Anything but anchors do not recieve a hover pseudoclass in IE6 (also fix for ios)
	$(".single-gallery-thumb a").fancybox({
		// 'overlayShow'	: false,
		'transitionIn'	: 'elastic',
		'transitionOut'	: 'elastic'
	});
	
  });

/* ---------------------------------- */

/* Events */

(function($) {

  $.Events = {

    OMNITURE_TRACK: 'omnitureTrack',
     OMNITURE_TRACK_LINK: 'omnitureTrackLink',
     
     
     SECTION_ENTER: 'sectionEnter',
     
     SCROLL_TO: 'scrollTo',
     
     SCROLL: 'windowScroll',
     SCROLL_ENTER: 'windowScrollEnter',
     SCROLL_LEAVE: 'windwScrollLeave',
     
     KEY_UP: 'keyUp',
     KEY_DOWN: 'keyDown',
     KEY_LEFT: 'keyLeft',
     KEY_RIGHT: 'keyRight',
     KEY_ESC: 'keyEsc',
     KEY_SPACE: 'keySpace',
     
     
     PROOF_POINT: 'proofPointMore'
    
  
  } // Events  
  
  $.Views = {
  
  
  } // Views 

})(jQuery);

/* Auto Instantiate */

(function($) {

  $.fn.Instantiate = function(settings) {
   
    var config = {};
 
    if (settings) $.extend(config, settings);
  
      this.each(function() { 

          var $self = $(this),
              $controller = $self.attr('data-controller');
                  
          if ($self[$controller])
            $self[$controller]();
              
      });
      
  }
    
  

})(jQuery);


(function($) {
	
$.fn.PartialScroll = function(settings) {
	 var config = { offset_top: 100, offset_bottom: 20};
	 if (settings) $.extend(config, settings);
	 
	 this.each(function() { 
	 	var $self = $(this),
            $id = $self.attr('id');
		
		
		
		if ($.Mobile || $.Unsupported) {  
        	$self.css({backgroundAttachment:'scroll'})
        } else {
			$.Window.bind('scroll',
            function(e){
				var tpad = config.offset_top - ($(window).scrollTop()/2);
				if (tpad < config.offset_bottom) {
					tpad = config.offset_bottom;
				}
				tpad = tpad +"px";
				
				var css = {};
				css['paddingTop'] = tpad;

				$self.css(css);
			})
		}
	 })
	 
	  return this;
}

$.fn.Scrollable = function(settings) {
	var config = { threshold: -100, offset_scroll: 6, offset_intertia: .15 };
	 
	if (settings) $.extend(config, settings);
	  
	  this.each(function() { 
	  
	   var $self = $(this),
            $id = $self.attr('id');
			
		config.threshold = 0
		
		if ($.Mobile || $.Unsupported) {  
          $self.css({backgroundAttachment:'scroll'})
			alert('unsupported');
        }else{
			
			$.Window
	          .bind('scroll',
	            function(e){
					if ( $.inview($self,{threshold:config.threshold}) ) {
							_scroll_background();
					 		$self.triggerHandler($.Events.SCROLL,$.distancefromfold($self,{threshold:config.threshold}) - config.threshold)
				
					}  else {
						if ($self.hasClass('_active')){
                
	                  $self.removeClass('_active');
                  
	                  $self.triggerHandler($.Events.SCROLL_LEAVE);
                  
	                }
				}
				
			
			})
		}
		
		function _scroll_background() {
			if(!$.browser.msie){
				var neg = Math.round((-($.distancefromfold($self,{threshold:config.threshold}) - config.threshold) * config.offset_intertia));
				// var neg = -1 * $.Window.scrollTop();
				var bpos = '50% ' + neg + 'px';
				var height = 1200 + neg;
				$self.css({'backgroundPosition':bpos, 'height':height});
			}
        }
		
		$.Window.load(function(){
			$(this).trigger('scroll');
			$self.css({'opacity':'1', 'visibility':'visible'});
		}).resize(function(){
			$(this).trigger('scroll');
		})
	  
	  })
	  
	  return this;
 }
 
  $.fn.Masthead = function() {
   		
     this.each(function() { 
      
        var $self = $(this),
			_offset_top =  100;
			_offset_bottom =  20;
       
        $self
          .PartialScroll({offset_top: _offset_top, offset_bottom:_offset_bottom})
          .bind($.Events.SCROLL,on_scroll);
        
          
        function on_scroll(e,distance) {
          
        }
        
     });
     
    return this;
     
  } //DWMHeader

 $.fn.StoryFreeXT = function() {
   		
     this.each(function() { 
      
        var $self = $(this),
            $header = $self.find('header'),
            $bg = $self.find('.bg'),
            $h1 = $self.find('h1'),
            $h2 = $self.find('h2'),
            $id = $self.attr('id'),
            $img = $self.find('img'),
            _threshold = -200;
       
        $self
          .Scrollable({threshold: _threshold,is_nav:true})
          .bind($.Events.SCROLL,on_scroll)
          .bind($.Events.SCROLL_ENTER,on_scroll_enter)
          .bind($.Events.SCROLL_LEAVE,on_scroll_leave);
        
          
        function on_scroll(e,distance) {
        		
          var bpos = '50% ' + ($.Window.height()/2.5-distance/3) + 'px';
          $bg.css({'backgroundPosition':bpos})
          
        }
        
        function on_scroll_enter(e) {
        
        }
        
        function on_scroll_leave(e) {
        
        }
        
     });
     
    return this;
     
  } //StoryFreeXT

})(jQuery);
/* ---------------------------------- */



(function($) {


    $.distancefromfold = 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 + settings.threshold) - $element.offset().top ;
    };
    
    $.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();
    };
    
    $.inview = function($element, settings) {
        return ($.abovethetop($element,settings)!=true && $.belowthefold($element,settings)!=true)
    };


    $.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);    


/* ---------------------------------- */

