/*
* Created by		: Demente Design
* Email				: contact@demente-design.com
* URL				: http://demente-design.com
*/

/*-----------------------------------------------------------------------------------------------------------------
// Enhance Menu 
-----------------------------------------------------------------------------------------------------------------*/

(function(jQuery){

	jQuery.fn.enhanceMenu = function(options){
		settings = jQuery.extend({
			effect:'slide',		// slide or fade
			duration: 800,		// time for the animation to complete
			delayIn: 150,		// delay to show the sub menu on hover
			delayOut: 0,		// delay to hide the sub menu on blur
			siteWidth: 960		// with of the site
		},options );

		return this.each(function(){
		
			//get the menu
			var target = jQuery(this),
				menu = target.first('ul'),
				li = menu.find('li').children('ul').hide().end(),
				topLi = menu.find('> li'),
				subWidth = menu.find('> li').children('ul').outerWidth(),
				menuPosition = target.position().left;
				
			// See if there's enough room for a sub menu
			topLi.each(function(){
			
				var item = jQuery(this),
					position = item.position().left,
					children = item.find('ul').slice(1);
					
				if( 2 * subWidth + position + menuPosition > settings.siteWidth ){
				
					var paddingLeft = children.css('padding-left'),
						paddingRight = children.css('padding-right');
					
					children.css({
						'left': 'auto',
						'right': '100%',
						'padding-left': paddingRight,
						'padding-right': paddingLeft
					});
				}
				
			});
			
			//add the parent class
			li.has('ul').addClass('parent');
			
			//remove titles
			jQuery("a", menu).removeAttr('title');
			
			if(settings.effect == 'fade')
			{
				li.hover(function() {
					// mouseover
					jQuery(this).find('> ul').stop(true, true).css('z-index',11).delay(settings.delayIn).fadeIn(settings.duration);
				}, function() {
					// mouseout
					jQuery(this).find('> ul').stop(true, true).css('z-index',10).delay(settings.delayOut).fadeOut(settings.duration); 		
				});
			}	
			
			else if(settings.effect == 'slide')
			{

				li.hover(function() {
					
					// mouseover
					var item = jQuery(this);
					
					item.find('> ul').css('z-index',11).delay(settings.delayIn).slideDown(settings.duration,
					function()
					{
						jQuery(this).css({
							'overflow':'visible', 
							'display':'block' // Since jQuery 1.4.3 the CSS must be overwritten
						});
					}); 
				}, function() {
					
					// mouseout	
					var item = jQuery(this);
					
					item.find('> ul').stop(true, false).css('z-index',10).delay(settings.delayOut).slideUp(settings.duration, 
					function()
					{
						jQuery(this).css({
							'height':'auto', // This fixes the bug where the menu won't show completely after mouseout event
							'padding':'auto'
						});
					}); 		
				});
			}
			
			else{

				li.hover(function() {
					// mouseover
					var item = jQuery(this);
					item.find('> ul').show(); 
					
				}, function() {
					// mouseout	
					var item = jQuery(this);
					item.find('> ul').hide(); 		
				});
			}
			// Else the CSS will take care
		});
	};
})(jQuery);

/*-----------------------------------------------------------------------------------------------------------------
// Image preloader
-----------------------------------------------------------------------------------------------------------------*/

jQuery.fn.preloader = function(options){
	
	var defaults = {
		             delay: 200,
					 preload_parent: "a",
					 check_timer: 300,
					 ondone: function(){ },
					 oneachload: function(image){  },
					 fadein: 500 ,
					 widthLimit: 32
					};
	
	var options = jQuery.extend(defaults, options),
		root = jQuery(this), 
		images = root.find("img").filter(function(){
			if( jQuery(this).width() > options.widthLimit ) return true;
			else return false;
		}).css({"visibility":"hidden",opacity:0}),  
		timer,  
		counter = 0, 
		i=0, 
		checkFlag = [], 
		delaySum = options.delay,
	 
	init = function(){
		
		timer = setInterval(function(){
			
			if(counter>=checkFlag.length){
				clearInterval(timer);
				options.ondone();
				return;
			}
		
			for(i=0;i<images.length;i++){
			
				if(images[i].complete == true){
				
					if(checkFlag[i] == false){
						checkFlag[i] = true;
						options.oneachload(images[i]);
						counter++;
						
						delaySum = delaySum + options.delay;
					}
					
					jQuery(images[i]).css("visibility","visible").delay(delaySum).animate({opacity:1},options.fadein,
					function(){ jQuery(this).parent().removeClass("preloader");   });
				}
			}
		},options.check_timer) 
	};
	
	images.each(function(){
		
		if(jQuery(this).parent(options.preload_parent).length==0)
		jQuery(this).wrap("<a class='preloader' />");
		else
		jQuery(this).parent().addClass("preloader");
		
		checkFlag[i++] = false;
		
		}); 
	images = jQuery.makeArray(images); 

	timer = setInterval(function(){
		clearInterval(timer);
		init();
		return;
	},100);
}
