/*
 * 
 * YCodaSlider plugin 2.0
 * $Date:2008-05-11 23:22:34 +0200 (dom, 11 mag 2008) $
 * @requires jQuery v1.2.3
 * @optional Easing v1.3
 * @optional Easing v1.3
 * 
 * Copyright (c) 2008 Massimiliano Balestrieri
 * Examples and docs at: http://maxb.net/blog/
 * Licensed GPL licenses:
 * http://www.gnu.org/licenses/gpl.html
 * 
 * Based on http://www.ndoherty.com/coda-slider of Niall Doherty 
 * Inspired by the clever folks at http://www.panic.com/coda
 * Many thanks to Gian Carlo Mingati. Coda-Slider is a heavily modified version of his slideViewer, which can be found at  http://www.gcmingati.net/wordpress/wp-content/lab/jquery/imagestrip/imageslide-plugin.html
 * 
 */

jQuery(function(){
    jQuery("div.yslider-toggle")
    .prepend('<p class="loading"><br /><span /></p>');
});

if(!window.YCodaSlider)
    var YCodaSlider = {};

YCodaSlider.Base = {
    cnt       : 0,
    css       : function(url){
        //solo alla prima istanza
        if(YCodaSlider.Base.cnt == 0)
           jQuery('head').append('<link type="text/css" href="'+url+'" rel="stylesheet" media="screen" />'); 
    },
    build     : function(options)
    {
        
        options = jQuery.extend({
             height :   false
              }, options);
        
        return this.each(
            function(nr)
            {
                //contatore statico di istanze
                YCodaSlider.Base.cnt++;
                
                //setto un po' di variabili
                YCodaSlider.Base.gui(this, options);         
                
                var self = jQuery(this).parent().parent().parent().get(0);
                
                //dom as singleton
                //this.ycodaslider = ycodaslider;  
                self.ycodaslider = {};
                self.ycodaslider.options = options || {};
                if(this.lazy)
                    self.ycodaslider.lazy = this.lazy;
                    
                YCodaSlider.Base.init(self);
                YCodaSlider.Base.count(self);
                YCodaSlider.Base.current(self);
                YCodaSlider.Base.nav(self);
                YCodaSlider.Base.bindings(self);
                YCodaSlider.Base.defaults(self);     
            }
        );
        
    },
    gui     :   function(el, options){
        //workaround - trasformo yslider-toggle in container.
        jQuery(el).removeClass("yslider-toggle").addClass("yslider-container");
        jQuery(el).wrap('<div class="yslider-body" id="yslider-'+YCodaSlider.Base.cnt+'">');
        jQuery(el).wrap('<div class="yslider-wrap">');
        jQuery(el).wrap('<div class="yslider-toggle">');
        
        var jPanels = jQuery(".yslider-panelwrapper", el);
        if(jPanels.size() > 0)
            jPanels.wrap('<div class="yslider-panel">');
    },
    count   :   function(el){
        var jContainer = jQuery("div.yslider-container",el);
        el.ycodaslider.pw = jContainer.find("div.yslider-panel").width();//panel
        el.ycodaslider.pc = jContainer.find("div.yslider-panel").size();//panel
        el.ycodaslider.vw = el.ycodaslider.pw * el.ycodaslider.pc;//viewer
        el.ycodaslider.nw = el.ycodaslider.pc * 2;//nav
        jContainer.css("width" , el.ycodaslider.vw);
        
    },
    init    :   function(el){
        jQuery("p.loading",el).remove();
        jQuery("div.yslider-toggle",el).removeClass("yslider-toggle").addClass("yslider-viewer");//vedi workaround
    },
    current    :   function(el){
        // Specify the current panel.
        // If the loaded URL has a hash (cross-linking), we're going to use that hash to give the slider a specific starting position...
        if (location.hash && parseInt(location.hash.slice(1)) <= el.ycodaslider.pc) {
            el.ycodaslider.current   = parseInt(location.hash.slice(1));
            el.ycodaslider.cnt = - (el.ycodaslider.pw*(el.ycodaslider.current - 1));
            jQuery(el).find("div.yslider-container").css({ "left": el.ycodaslider.cnt });
        // Otherwise, we'll just set the current panel to 1...
        } else { 
            el.ycodaslider.current = 1;
        };
    },
    nav    :   function(el){
        var jViewer = jQuery("div.yslider-viewer",el);
        jViewer.before('<div class="yslider-navl"><a href="#">Left</a></div>');
        jViewer.after('<div class="yslider-navr"><a href="#">Right</a></div>');
        var jNav = jQuery("div.yslider-nav ul",el);
        var jPanels = jQuery("div.yslider-panel",el);
        jPanels.each(function(n) {
            var lp = jQuery("div.yslider-panelwrapper",this).attr("title");
            //if(!lp)
                //console.log(jQuery(this));
                
            if(lp)
                jNav.append('<li><a href="#' + (n+1) + '">' + lp + '</a></li>');
            else                                                
                jNav.append('<li><a href="#' + (n+1) + '">' + (n+1) + '</a></li>');
        });
        //setto la larghezza del menu qui.
        jNav.find("li").each(function(nr){
            el.ycodaslider.nw += jQuery(this).width();
        });
        jNav.parent().css("width" , el.ycodaslider.nw);
            
    },
    bindings : function(el){
                
      
        // Left nav
        jQuery("div.yslider-navl a",el).click(function(){
            if (el.ycodaslider.current == 1) {
                var cnt = - (el.ycodaslider.pw * (el.ycodaslider.pc - 1));
                el.ycodaslider.current = el.ycodaslider.pc;
                jQuery(this).parent().parent().find("div.yslider-nav a.current").removeClass("current").parent().parent().find("li:last a").addClass("current");
            } else {
                el.ycodaslider.current -= 1;
                var cnt = - (el.ycodaslider.pw * (el.ycodaslider.current - 1));
                jQuery(this).parent().parent().find("div.yslider-nav a.current").removeClass("current").parent().prev().find("a").addClass("current");
            };
            if(el.ycodaslider.lazy)
                YCodaSlider.Lazy.lazyload(el, (el.ycodaslider.current - 1), el.ycodaslider.pc);
                
            
            jQuery(this).parent().parent().find("div.yslider-container")
            .animate({ left: cnt } ,el.ycodaslider.options.easeTime,el.ycodaslider.options.easeFunc);
                    
            // Change the URL hash (cross-linking)...
            location.hash = el.ycodaslider.current;
            return false;
        });
        
        // Right nav
        jQuery("div.yslider-navr a",el).click(function(){
            if (el.ycodaslider.current == el.ycodaslider.pc) {
                var cnt = 0;
                el.ycodaslider.current = 1;
                jQuery(this).parent().parent().find("div.yslider-nav a.current").removeClass("current").parent().parent().find("a:eq(0)").addClass("current");
            } else {
                var cnt = - (el.ycodaslider.pw * el.ycodaslider.current);
                el.ycodaslider.current += 1;
                jQuery(this).parent().parent().find("div.yslider-nav a.current").removeClass("current").parent().next().find("a").addClass("current");
            };
            
            if(el.ycodaslider.lazy)
                YCodaSlider.Lazy.lazyload(el, (el.ycodaslider.current - 1), el.ycodaslider.pc);
            
            jQuery(this).parent().parent().find("div.yslider-container")
            .animate({ left: cnt } ,el.ycodaslider.options.easeTime,el.ycodaslider.options.easeFunc);
                    
            // Change the URL hash (cross-linking)...
            location.hash = el.ycodaslider.current;
            return false;
        });
        //keycode
        jQuery(document).keydown(function(e){
            if (e == null) { // ie
                keycode = event.keyCode;
            } else { // mozilla
                keycode = e.which;
            }
            if(keycode == 190){ // display previous image
               jQuery("div.yslider-navl a",el).trigger("click", el);
            } else if(keycode == 188){ // display next image
               jQuery("div.yslider-navr a",el).trigger("click", el);
            }  
        });
              
    },
    defaults    :   function(el){
        // Specify which tab is initially set to "current". Depends on if the loaded URL had a hash or not (cross-linking).
        if (location.hash && parseInt(location.hash.slice(1)) <= el.ycodaslider.pc) {
            jQuery("div.yslider-nav a:eq(" + (location.hash.slice(1) - 1) + ")",el).addClass("current");
        } else {
            jQuery("div.yslider-nav a:eq(0)",el).addClass("current");
        }
    }
};  
jQuery.fn.ycodaslider = YCodaSlider.Base.build;

