$.fn.animateHover = function(settings) {
  settings = jQuery.extend({
    bgcolor: '#000000',
    fonthovercolor: '#ffffff',
    spanclass: 'hover',
    ignoreHeight: false,
    ignoreClass: null,
    preFn: null,
    hoverFn: null,
    duration: 500
  }, settings);
  return this.each(function(e, object) {
  $(this).css('position', 'relative');
  var original = $(this).css('background-color');
  var btnText = $(this).html();
  var width = $(this).css('width');
  var height = $(this).css('height');
  var paddingTop = $(this).css('padding-top');
  var paddingRight = $(this).css('padding-right');
  var paddingBottom = $(this).css('padding-bottom');
  var paddingLeft = $(this).css('padding-left');
    
  var styleStr = "display: none; padding-top: "+paddingTop+"; padding-right: "+paddingRight+"; padding-bottom: "+paddingBottom+"; padding-left: "+paddingLeft+";width: "+width+"; color: "+settings.fonthovercolor+"; position: absolute; top: 0px; left: 0px; background-color: "+settings.bgcolor+";";
  if(settings.ignoreHeight != true) {
    styleStr += "height: "+height+""; 
  }
  $(this).append("<div class='"+settings.spanclass+"' style='"+styleStr+"'>"+btnText+"</div>");
  if(settings.preFn != null) {
    settings.preFn(e, this);
  }  
  $(this).hover(function(e) {
    if(settings.hoverFn != null) {
      settings.hoverFn(e, this);
    }    
    if(settings.ignoreClass != null && $(this).hasClass(settings.ignoreClass)) {
      return false;
    }
    $(this).children('.'+settings.spanclass).stop(true, true).fadeIn(settings.duration);
        }, function() {
          $(this).children('.'+settings.spanclass).stop(true, true).fadeOut(settings.duration);
    });
  });
};

$.fn.slider1903 = function(settings) {
  settings = jQuery.extend({
    toggleEvery: 4,
  	useArrows: false,
	arrowBackClass: 'arrBack',
	arrowNextClass: 'arrNext',
  	hasVideos: false,
  	videoWraper: 'video',
    toggleSeperator: '...',
    maxTogglers: 6,
    currentToggleClass: 'current',
    toggleNavClass: 'ulSvn',
    preFn: null,
    postFn: null,
    speed: 1500,
    ease: 'easeOutQuint',
    type: 'slide',
	current: 0
  }, settings);
    
  //count and do math
  var $this = $(this),
      total = $(this).children().length,
    $itemEl = $(this).find('li:first-child'),
    singleWidth = $itemEl.outerWidth(true),

  	baseWidth = total * singleWidth,
    baseMovement = singleWidth * settings.toggleEvery,
    totalPages = baseWidth / baseMovement,
    roundedPages = Math.floor(totalPages),
    hasOrphans,
    orphans,
  	onOrphan = false;
    //current = 0;
  //set the width for the view
  $(this).width(baseWidth);
    
  if(totalPages == roundedPages) {
    hasOrphans = false;
  } else {
    hasOrphans = true;
    substrt = totalPages.toString().lastIndexOf(".")
    orph = totalPages.toString().substring(substrt);
    orphans = orph * settings.toggleEvery;
  }
  
  if(settings.type == 'fade') {
    $this.find('li:not(:first)').hide();
    $this.find('li').each(function(index) {
      $(this).addClass("el-"+(index+1));
    });
  }
  
    //add navigation elements if using numbered / paginated slider
  if(!settings.useArrows) {
    var i = 1;
    if(totalPages > 1) {
    var str = '<div class="pagination"><ul class="'+settings.toggleNavClass+'">';
    for (i;i<=roundedPages;i++)
    {
      if(i == settings.current) {
      str += '<li><a data-val="'+(i)+'" class="'+settings.currentToggleClass+'">'+(i)+'</a></li>';
      } else {
      str += '<li><a data-val="'+(i)+'">'+(i)+'</a></li>';
      }
    }
    if(hasOrphans) {
      str += '<li><a data-id="orphan" data-count="'+orphans+'" data-val="'+(i)+'">'+(i)+'</a></li>';
    }
    str += '</ul></div>';
    $(this).after(str);
    }
  
    //control click functions   
    $('.'+settings.toggleNavClass+' li a').click(function(e) {
													
      $('.'+settings.toggleNavClass+' li a').each(function(){$(this).removeClass(settings.currentToggleClass)});
      $clicked = $(this).attr('data-val');
      $(this).addClass(settings.currentToggleClass);
      if(settings.type == 'slide') {
      if($clicked > settings.current) {
        //if $clicked is not the last or the orphaned
        if($clicked < totalPages && settings.current < roundedPages || !hasOrphans && $clicked != i)  {
        move = baseMovement * ($clicked - 1);
        $this.stop(true, true).animate({left : -move+'px'}, settings.speed, settings.ease)
        }
        
        //if $clicked is an orphan page
        if(hasOrphans && $clicked == i) {
        $this.stop(true, true).animate({left : -((roundedPages-1) * baseMovement)-(orphans * singleWidth)+'px'}, settings.speed, settings.ease)
        }
      } else if($clicked == 1) {
        //if root
        $this.stop(true, true).animate({left : 0+'px'}, settings.speed, settings.ease)
      }
      } else {
      $this.find('li').each(function(e) {
        if($(this).css('display') == 'block' || $(this).css('display') == 'list-item') {
        $(this).fadeOut(settings.speed, function() {
          $("li.el-"+$clicked).fadeIn(settings.speed);
        });
        }
      });      
      }
      if(settings.hasVideos) {
      $(settings.videoWraper).each(function() {$(this)[0].player.pause()});
      }
    });
  
  } else {
    //arrowed back / next slider
    var backAr = '<a href="#" class="slide1903 '+settings.arrowBackClass+'" attr-page="'+settings.current+'">< Back</a>';
    var nextAr = '<a href="#" class="slide1903 '+settings.arrowNextClass+'" attr-page="'+settings.current+'">Next ></a>';
    $(this).before(backAr);
    $(this).after(nextAr);
    $('.'+settings.arrowBackClass).addClass('disabled');
	
	//GO BACK
    $('.'+settings.arrowBackClass).click(function(e) {
      e.preventDefault();
      $('.'+settings.arrowNextClass).removeClass('disabled');
      if(settings.current==0 && !onOrphan) {
        //
      } else  {
			if(!onOrphan) {
				settings.current = settings.current-1;
				$this.stop(true, true).animate({left : -(baseMovement*settings.current)+'px'}, settings.speed, settings.ease);
			} else {
				onOrphan = false;
				if(settings.current == 	0) {
					//$this.stop(true, true).animate({left : -(baseMovement*settings.current)+'px'}, settings.speed, settings.ease);
					//alert((orphans*singleWidth));
					$this.stop(true, true).animate({left : '0px'}, settings.speed, settings.ease);
					settings.current = 0;
				} else {
					$this.stop(true, true).animate({left : -(baseMovement*settings.current)+'px'}, settings.speed, settings.ease);
										
				}
			}
			
			//$($(this).parent().children('.items')).stop(true, true).animate({left : -(baseMovement*current)+'px'}, settings.speed, settings.ease);
			//$this.stop(true, true).animate({left : -(baseMovement*settings.current)+'px'}, settings.speed, settings.ease);
			
			//$($(this).parent().children('.slide1903')).each(function() {$(this).attr('attr-page', current);})
			$('.'+settings.arrowBackClass).attr('attr-page', settings.current);
			$('.'+settings.arrowNextClass).attr('attr-page', settings.current);
			if(settings.current == 0) {$('.'+settings.arrowBackClass).addClass('disabled');};
      }
    })
    
	//GO NEXT
    $('.'+settings.arrowNextClass).click(function(e) {
      e.preventDefault();
      $('.'+settings.arrowBackClass).removeClass('disabled');
      	//Navigate To Orphans if Last
    	//alert(roundedPages-1);
		if(settings.current == (roundedPages-1) && hasOrphans && !onOrphan) {
			//$($(this).parent().children('.items')).stop(true, true).animate({left : -((roundedPages-1) * baseMovement)-(orphans * singleWidth)+'px'}, settings.speed, settings.ease);
			$this.stop(true, true).animate({left : -((roundedPages-1) * baseMovement)-(orphans * singleWidth)+'px'}, settings.speed, settings.ease);
			$(this).addClass('disabled');
			onOrphan = true; 
			if(settings.current == 0) {
				//settings.current = 1;
				$('.'+settings.arrowBackClass).attr('attr-page', settings.current);
				$('.'+settings.arrowNextClass).attr('attr-page', settings.current);					
			}
		}
    	else if(settings.current == (roundedPages-1) && !hasOrphans) {
			$($(this).parent().children('.items')).stop(true, true).animate({left : -((roundedPages-1) * baseMovement)-(orphans * singleWidth)+'px'}, settings.speed, settings.ease);
			$(this).addClass('disabled');
			//onOrphan = true;        
    	}
      //if on orphans, than dont do anything
      	else if(onOrphan == true) {

      	} else {
			settings.current = settings.current+1;
			//$($(this).parent().children('.items')).stop(true, true).animate({left : -(baseMovement*current)+'px'}, settings.speed, settings.ease);
			$this.stop(true, true).animate({left : -(baseMovement*settings.current)+'px'}, settings.speed, settings.ease);
			  
			//$($(this).parent().children('.slide1903')).each(function() {$(this).attr('attr-page', current);})
			$('.'+settings.arrowBackClass).attr('attr-page', settings.current);
			$('.'+settings.arrowNextClass).attr('attr-page', settings.current);		
      	}
    })
  }
  
};

$.fn.randomize = function(childElem) {
  return this.each(function() {
      var $this = $(this);
      var elems = $this.children(childElem);

      elems.sort(function() { return (Math.round(Math.random())-0.5); });  

      $this.remove(childElem);  

      for(var i=0; i < elems.length; i++)
        $this.append(elems[i]);      
  });    
}
  
jQuery.fn.idle = function(time)
{ 
    var o = $(this); 
    o.queue(function()
    { 
       setTimeout(function()
       { 
          o.dequeue(); 
       }, time);
    });
};
  

