(function( $ ){
	
    var settings = {
        noSlides:0,
        currentSlide:null,
        width:null,
        height:null,
        orientation:"horizontal",
        beforeLoading:function(){},
        afterLoading:function(){},
        slideSelector:".slide"
    };
   
    var locker={
        status:"locked"
    };
  
  
  
    var addSlide=function($this,slide){
        var data = $this.data('visualslide');
        if(data.settings.currentSlide==undefined) data.settings.currentSlide=0;
        data.slides.push(slide);
        data.settings.noSlides=data.slides.length;
        if(data.settings.orientation=="horizontal"){
            slide.css("float","left");
            if(data.settings.width!=undefined)
                slide.css("width",data.settings.width+"px");
            if(data.settings.height!=undefined)
                slide.css("height",data.settings.height+"px");
        }
        return slide.width();
    };
  
    var buildSlider=function($this){
	  
        var data = $this.data('visualslide');
        var containerWidth=0;
        $this.find(data.settings.slideSelector).each(
            function(){
                containerWidth+=addSlide($this,$(this));
            }
            );
	  
        var content=$this.html();
	  
        $this.empty();

        if(data.settings.orientation=="horizontal"){
            var container=$('<div/>', {  
                style:"width:"+containerWidth+"px; position:relative;"
            });
            data.container=container;
            container.appendTo($this);
        }else{
            var container=$('<div/>', {  
                style:"background-color:red;"
            });
            container.appendTo($this);		  
        }
	  
        $this.children(':first-child').html(content);
        if(data.settings.orientation=="horizontal") 
            $('<div/>', {  
                style:"clear:both;"  
            }).appendTo($this.children(':first-child'));
	  
        $this.css("overflow","hidden");
        $this.css("position","relative");
          
          
        if((data.settings.currentSlide>=0)&&(data.settings.currentSlide<=data.settings.noSlides-1)){
            $this.children(':first-child').css("left",((0-data.settings.currentSlide)*data.settings.width)+"px");
        }
          
        data.settings.afterLoading.apply( $this );
    };
  
  
    var methods = {
        init : function( options ) {

            return this.each(function(){
    	   
                var $this = $(this),
                data = $this.data('visualslide'),
                version = 0.1;
         
                if ( ! data ) {
                    $(this).data('visualslide', {
                        target : $this,
                        version : version,
                        settings : $.extend(true, {}, settings),
                        slides: [],
                        locker:$.extend(true, {}, locker)
                    });
                    data = $this.data('visualslide');
                }
         
                if ( options ) { 
                    $.extend( data.settings, options );
                }
         
         
                buildSlider($this);


         
            });
        },
     
        destroy : function( ) {

            return this.each(function(){

                var $this = $(this),
                data = $this.data('visualslide');
                if(data){
                    var container=data.container;
                    var content=container.html();
                    container.remove();
                    $this.html(content);
                }
                // Namespacing FTW
                $(window).unbind('.visualslide');
                $this.removeData('visualslide');

            });

        },
     
        show : function( ) {  },
        hide : function( ) {  },
        update : function(slideNumber) {
            return this.each(function(){
                var $this = $(this);
                data = $this.data('visualslide');
            //                 if(slideNumber!=undefined){
            //                     if(typeof(slideNumber)=="number"){
            //                         if((slideNumber>=0)&&(slideNumber<=data.settings.noSlides-1)){
            //                             data.settings.currentSlide=slideNumber
            //                         }
            //                     }
            //                 }
    		 
            });
        },
     
        goToSlide: function (slideNumber){
            return this.each(function(){
                var $this = $(this),
                data = $this.data('visualslide');
                if(data.settings.currentSlide!=undefined){
                    if((slideNumber>=0)&&(slideNumber<=data.settings.noSlides-1)){
                        data.locker.status="unlocked";
                        data.settings.beforeLoading.apply( $this );
                        if(data.locker.status=="unlocked"){
                            if(data.settings.currentSlide==slideNumber) return;
                            $this.children(':first-child').stop(true,true).animate({
                                left:"+="+((data.settings.currentSlide-slideNumber)*data.settings.width)+"px"
                            }, 600,'easeInExpo', function() {
                                data.settings.currentSlide=slideNumber;	 
                                data.settings.afterLoading.apply( $this );
                            });

                        }
                        data.locker.status="locked";
                    }
                }
    		 
    		 
            });
        },
     
        next: function(){
            return this.each(function(){
    		 
                var $this = $(this),
                data = $this.data('visualslide');

                if(data.settings.currentSlide!=undefined){
                    var slideNumber=data.settings.currentSlide+1;
                    if((slideNumber>=0)&&(slideNumber<=data.settings.noSlides-1)){
                        data.locker.status="unlocked";
                        data.settings.beforeLoading.apply( $this );
                        if(data.locker.status=="unlocked"){
                            $this.children(':first-child').stop(true,true).animate({
                                left:"-="+data.settings.width+"px"
                            }, 600,'easeInExpo', function() {
                                data.settings.currentSlide=slideNumber;	 
                                data.settings.afterLoading.apply( $this );
                            });

                        }
                        data.locker.status="locked";
                    }
                }
    		 
            });
        },
     
     
        back: function(){
            return this.each(function(){
    		 
                var $this = $(this),
                data = $this.data('visualslide');

                if(data.settings.currentSlide!=undefined){
                    var slideNumber=data.settings.currentSlide-1;
                    if((slideNumber>=0)&&(slideNumber<=data.settings.noSlides-1)){
                        data.locker.status="unlocked";
                        data.settings.beforeLoading.apply( $this );
                        if(data.locker.status=="unlocked"){
                            $this.children(':first-child').stop(true,true).animate({
                                left:"+="+data.settings.width+"px"
                            }, 600,'easeInExpo', function() {
                                data.settings.currentSlide=slideNumber;	 
                                data.settings.afterLoading.apply( $this );
                            });

                        }
                        data.locker.status="locked";
                    }
                }
    		 
            });
        },
     
        lock:function(){
            return this.each(function(){
                var $this = $(this),
                data = $this.data('visualslide');
                data.locker.status="locked";
            });
        },
     
        unlock:function(){
            return this.each(function(){
                var $this = $(this),
                data = $this.data('visualslide');
                data.locker.status="unlocked";
            });
        },
     
        slidesNumber:function(){
            var $this = $(this),
            data = $this.data('visualslide');
            return data.settings.noSlides;
        },
     
        currentSlide:function(){
            var $this = $(this),
            data = $this.data('visualslide');
            return data.settings.currentSlide;
        }
     
     
    };

    $.fn.visualslide = function( method ) {
    
        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.wizard' );
        }    
  
    };

})( jQuery );

