/*
bxCarousel v1.0
Plugin developed by: Steven Wanderski
http://bxcarousel.com
http://stevenwanderski.com

Released under the GPL license:
http://www.gnu.org/licenses/gpl.html

customized by InterLake
*/

(function($){

	$.fn.bxCarousel = function(options){

		var defaults = {
			move: 4,
			speed: 500,
			margin: 0,
			next_text: 'next',
			next_image: '',
			next_image_disabled: '',
			prev_text: 'prev',
			prev_image: '',
			prev_image_disabled: '',
			controls: true,
			container_width: 0
		};

		var options = $.extend(defaults, options);

		return this.each(function() {
			var $this = $(this);                
			var li = $this.find('li');
			var first = 0;
			var fe = 0;
			var is_working = false;
			var j = '';
			var clicked = false;		

			li.css({'float':'left','listStyle':'none', 'marginRight':options.margin});
			var ow = li.outerWidth(true);
			wrap_width = options.width;
			slider_width = ow*li.size();
			var seg = ow*options.move;
			var seg_init = ow*options.move;
			$this.wrap('<div class="bx_container"></div>').width(slider_width);
			if(options.controls){
				if(options.next_image != '' || options.prev_image != ''){var controls = '<div class="prev"></div><div class="next"></a></div>';}
				else{var controls = '<a href="" class="prev">'+options.prev_text+'</a><a href="" class="next">'+options.next_text+'</a>';}	
			}
			$this.parent('.bx_container').wrap('<div class="bx_wrap"></div>').css({'position':'relative', 'width':options.container_width,'overflow':'hidden'}).before(controls);
			$this.css({'position':'relative', 'left':(0)});
			set_controls();
						
			$this.parent().siblings('.next').click(function(){
				slide_next();
				clearInterval(j);
				clicked = true;
				return false;
			});				
			$this.parent().siblings('.prev').click(function(){
				slide_prev();
				clearInterval(j);
				clicked = true;
				return false;
			});

			function slide_next(){
				if(!is_working){
					is_working = true;
					seg = seg_init;
					/* set step width of sliding, check if the slider ends */
					isLeft = $this.position().left;
					//alert("isLeft " + isLeft + " slider_width " + slider_width + " options.container_width " + options.container_width + "\ndiff " + Number(slider_width-options.container_width+isLeft) + " seg " + seg);
					if(seg > Number(slider_width-options.container_width+isLeft)) 
						seg = Number(slider_width-options.container_width+isLeft-options.margin);
					//alert("seg " + seg);
					if(seg > 0) {
						$this.animate({left:'-='+seg}, options.speed, function(){
							is_working = false;
							set_controls();
						});
					} else {
						is_working = false;
					}
				}
			}
			
			function slide_prev(){
				if(!is_working){
					is_working = true;
					if(seg < seg_init) seg = seg+seg_init;
					else seg = seg_init;
					/* set step width of sliding, check if the slider ends */
					isLeft = $this.position().left;
					//alert("isLeft " + isLeft + " slider_width " + slider_width + " options.container_width " + options.container_width + "\ndiff " + Number(slider_width-options.container_width-isLeft) + " seg " + seg);
					if(isLeft == 0) seg = 0;
					else if(seg > Math.abs(isLeft)) 
						seg = Math.abs(isLeft);
					else if(seg > Number(slider_width-options.container_width-isLeft)) 
						seg = Number(slider_width-options.container_width-isLeft);
					//alert("seg " + seg);
					if(seg > 0) {
						$this.animate({left:'+='+seg}, options.speed, function(){
							is_working = false;
							set_controls();
						});
					} else {
						is_working = false;
					}
				}
			}
			
			function set_controls() {
				isLeft = $this.position().left;
				//alert("isLeft " + isLeft + " diff " + Number(slider_width-options.container_width-options.margin+isLeft));
				$this.parent().siblings('.next').empty();
				$this.parent().siblings('.prev').empty();
				if(isLeft == 0) {
					
					$this.parent().siblings('.prev').append('<img src="'+options.prev_image_disabled+'" style="border:0; padding: 2px;"/>');
					$this.parent().siblings('.next').append('<a href=""><img src="'+options.next_image+'" style="border:0; padding: 2px;"/></a>');
				
				} else {
					
					if(Number(slider_width-options.container_width-options.margin+isLeft) <= 0) {
						
						$this.parent().siblings('.next').append('<img src="'+options.next_image_disabled+'" style="border:0; padding: 2px;"/>');
						$this.parent().siblings('.prev').append('<a href=""><img src="'+options.prev_image+'" style="border:0; padding: 2px;"/></a>');
					
					} else if(Number(slider_width-options.container_width-options.margin+isLeft) > 0) {
						
						$this.parent().siblings('.next').append('<a href=""><img src="'+options.next_image+'" style="border:0; padding: 2px;"/></a>');
						$this.parent().siblings('.prev').append('<a href=""><img src="'+options.prev_image+'" style="border:0; padding: 2px;"/></a>');
					
					}
				}
			}
		});			
	}    
})(jQuery);

(function($){

	$.fn.bxCarouselVertical = function(options){

		var defaults = {
			move: 1,
			speed: 500,
			margin: 0,
			next_text: 'next',
			next_image: '',
			next_image_disabled: '',
			prev_text: 'prev',
			prev_image: '',
			prev_image_disabled: '',
			controls: true,
			container_height: 0,
			container_width: 0
		};

		var options = $.extend(defaults, options);

		return this.each(function() {
			var $this = $(this);                
			var li = $this.find('li');
			var first = 0;
			var fe = 0;
			var is_working = false;
			var j = '';
			var clicked = false;		

			li.css({'float':'none','listStyle':'none', 'marginRight':options.margin});
			var oh = li.outerHeight(true);
			wrap_height = options.height;
			slider_height = oh*li.size();
			var seg = oh*options.move;
			var seg_init = oh*options.move;
			$this.wrap('<div class="bx_container"></div>').height(slider_height);
			if(options.controls){
				if(options.next_image != '' || options.prev_image != ''){
					var controlTop = '<div class="prev"></div>';
					var controlBottom = '<div class="next"></div>';
				} else {
					var controlTop = '<a href="" class="prev">'+options.prev_text+'</a>';
					var controlBottom = '<a href="" class="next">'+options.next_text+'</a>';
				}	
			}
			//$this.parent('.bx_container').wrap('<div class="bx_wrap"></div>').css({'position':'relative', 'height':options.container_height,'overflow':'hidden'}).before(controls);
			$this.parent('.bx_container').wrap('<div class="bx_wrap"></div>').css({'position':'relative', 'height':options.container_height,'overflow':'hidden'}).after(controlBottom).before(controlTop);
			//$this.css({'position':'relative', 'left':(0)});
			$this.css({'position':'relative', 'top':(0),'margin':'0px auto', 'width':options.container_width});
			set_controls();
						
			$this.parent().siblings('.next').click(function(){
				slide_next();
				clearInterval(j);
				clicked = true;
				return false;
			});				
			$this.parent().siblings('.prev').click(function(){
				slide_prev();
				clearInterval(j);
				clicked = true;
				return false;
			});

			function slide_next(){
				if(!is_working){
					is_working = true;
					seg = seg_init;
					/* set step width of sliding, check if the slider ends */
					isTop = $this.position().top;
					//alert("isTop " + isTop + " slider_height " + slider_height + " options.container_height " + options.container_height + "\ndiff " + Number(slider_height-options.container_height+isTop) + " seg " + seg);
					if(seg > Number(slider_height-options.container_height+isTop)) 
						seg = Number(slider_height-options.container_height+isTop-options.margin);
					//alert("seg " + seg);
					if(seg > 0) {
						$this.animate({top:'-='+seg}, options.speed, function(){
							is_working = false;
							set_controls();
						});
					} else {
						is_working = false;
					}
				}
			}
			
			function slide_prev(){
				if(!is_working){
					is_working = true;
					if(seg < seg_init) seg = seg+seg_init;
					else seg = seg_init;
					/* set step width of sliding, check if the slider ends */
					isTop = $this.position().top;
					//alert("isTop " + isTop + " slider_height " + slider_height + " options.container_height " + options.container_height + "\ndiff " + Number(slider_height-options.container_height-isTop) + " seg " + seg);
					if(isTop == 0) seg = 0;
					else if(seg > Math.abs(isTop)) 
						seg = Math.abs(isTop);
					else if(seg > Number(slider_height-options.container_height-isTop)) 
						seg = Number(slider_height-options.container_height-isTop);
					//alert("seg " + seg);
					if(seg > 0) {
						$this.animate({top:'+='+seg}, options.speed, function(){
							is_working = false;
							set_controls();
						});
					} else {
						is_working = false;
					}
				}
			}
			
			function set_controls() {
				isTop = $this.position().top;
				//alert("isTop " + isTop + " diff " + Number(slider_height-options.container_height-options.margin+isTop));
				$this.parent().siblings('.next').empty();
				$this.parent().siblings('.prev').empty();
				if(isTop == 0) {
					
					$this.parent().siblings('.prev').append('<img src="'+options.prev_image_disabled+'" style="border:0; padding: 2px;"/>');
					$this.parent().siblings('.next').append('<a href=""><img src="'+options.next_image+'" style="border:0; padding: 2px;"/></a>');
				
				} else {
					
					if(Number(slider_height-options.container_height-options.margin+isTop) <= 0) {
						
						$this.parent().siblings('.next').append('<img src="'+options.next_image_disabled+'" style="border:0; padding: 2px;"/>');
						$this.parent().siblings('.prev').append('<a href=""><img src="'+options.prev_image+'" style="border:0; padding: 2px;"/></a>');
					
					} else if(Number(slider_height-options.container_height-options.margin+isTop) > 0) {
						
						$this.parent().siblings('.next').append('<a href=""><img src="'+options.next_image+'" style="border:0; padding: 2px;"/></a>');
						$this.parent().siblings('.prev').append('<a href=""><img src="'+options.prev_image+'" style="border:0; padding: 2px;"/></a>');
					
					}
				}
			}
		});			
	}    
})(jQuery);


;(function($){ // secure $ jQuery alias
/*******************************************************************************************/	
// jquery.event.hover.js - rev 5 
// Copyright (c) 2008, Three Dub Media (http://threedubmedia.com)
// Liscensed under the MIT License (MIT-LICENSE.txt)
// http://www.opensource.org/licenses/mit-license.php
// Created: 2008-06-02 | Updated: 2008-07-30
/*******************************************************************************************/

//	USE THESE PROPERTIES TO CUSTOMIZE SETTINGS...

//	$.event.special.hover.delay = 100; 
//	Defines the delay (msec) while mouse is inside the element before checking the speed

//	$.event.special.hover.speed = 100; 
//	Defines the maximum speed (px/sec) the mouse may be moving to trigger the hover event

// save the old jquery "hover" method
$.fn._hover = $.fn.hover;

// jquery method 
$.fn.hover = function( fn1, fn2, fn3 ) {
	if ( fn3 ) this.bind('hoverstart', fn1 ); // 3 args
	if ( fn2 ) this.bind('hoverend', fn3 ? fn3 : fn2 ); // 2+ args
	return !fn1 ? this.trigger('hover') // 0 args 
		: this.bind('hover', fn3 ? fn2 : fn1 ); // 1+ args
	};	

// special event configuration
var hover = $.event.special.hover = {
	delay: 100, // milliseconds
	speed: 100, // pixels per second
	setup: function( data ){
		data = $.extend({ speed: hover.speed, delay: hover.delay, hovered:0 }, data||{} );
		$.event.add( this, "mouseenter mouseleave", hoverHandler, data );
		},
	teardown: function(){
		$.event.remove( this, "mouseenter mouseleave", hoverHandler );
		}
	};

// shared event handler
function hoverHandler( event ){
	var data = event.data || event;
	switch ( event.type ){
		case 'mouseenter': // mouseover
			data.dist2 = 0; // init mouse distance²
			data.event = event; // store the event
			event.type = "hoverstart"; // hijack event
			if ( $.event.handle.call( this, event ) !== false ){ // handle "hoverstart"
				data.elem = this; // ref to the current element
				$.event.add( this, "mousemove", hoverHandler, data ); // track the mouse
				data.timer = setTimeout( compare, data.delay ); // start async compare
				}
			break;
		case 'mousemove': // track the event, mouse distance² = x² + y²
			data.dist2 += Math.pow( event.pageX-data.event.pageX, 2 ) 
				+ Math.pow( event.pageY-data.event.pageY, 2 ); 
			data.event = event; // store current event
			break;
		case 'mouseleave': // mouseout
			clearTimeout( data.timer ); // uncompare
			if ( data.hovered ){ 
				event.type = "hoverend"; // hijack event
				$.event.handle.call( this, event ); // handle "hoverend"
				data.hovered--; // reset flag
				}
			else $.event.remove( data.elem, "mousemove", hoverHandler ); // untrack
			break;
		default: // timeout compare // distance² = x² + y²  = ( speed * time )²
			if ( data.dist2 <= Math.pow( data.speed*( data.delay/1e3 ), 2 ) ){ // speed acceptable
				$.event.remove( data.elem, "mousemove", hoverHandler ); // untrack
				data.event.type = "hover"; // hijack event
				if ( $.event.handle.call( data.elem, data.event ) !== false ) // handle "hover"
					data.hovered++; // flag for "hoverend"
				}
			else data.timer = setTimeout( compare, data.delay ); // async recurse
			data.dist2 = 0; // reset distance² for next compare
			break;
		}
	function compare(){ hoverHandler( data ); }; // timeout/recursive function
	};
	
/*******************************************************************************************/
})(jQuery); // confine scope
