/*

	jQuery slider plugin
	Copyright (c) 2010 Gael Jaunin

	For support and tutorials visit
	http://www.xuserver.net/

	License: GNU Lesser General Public License (LGPL) 
	at http://opensource.org/licenses/lgpl-2.1.php

	This plugin is free software;  you can redistribute it  and/or  modify  it 
	under the terms of the GNU Lesser General Public License as  published  by 
	the Free Software Foundation;  either version 2.1 of the License,  or  (at 
	your option) any later version.
	This software is distributed in the hope  that  it  will  be  useful,  but 
	WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
	or FITNESS FOR A PARTICULAR PURPOSE.  See the  GNU Lesser  General  Public 
	License for more details.
	You should have received a copy of  the  GNU Lesser General Public License 
	along with this library;  if not,  write to the  Free Software Foundation, 
	Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA

	THIS COMMENT AND COPYRIGHT NOTICE MUST BE RETAINED IN THE CODE AS IS FOR LEGAL USE

*/

var jxsnbl = new Array(); // last tab in slider 
var jxscid = 0; // id of new slider

(function($){
  $.fn.extend({    
	 jxSlider: function(options){
      var defaults = {
        className:'',
        urlPrefix:'',
        tabclass:'ui-corner-top',
        border:true,
        icon:true,
        icon_type:'ui-icon-extlink',
        icon_home:'ui-icon-home',
        navigator:true,        
        fx:'slide',
        fx_options:{direction:'right'  },
        fx_speed:'fast',        
        style:'border:0px;margin:0px;padding:0px;position:relative'                                              
			};				
			var options =  $.extend(defaults, options);
      jxscid++;
      var $jxhomediv = $(this);
      var $jxhomedivstore = $('<div id="jxhomedivstore-'+options.className+'" style="display:none" class="jxhomedivstore"></div>');
      var $jxhomedivcontainer = $('<div id="jxhomedivcontainer-'+options.className+'" class="jxhomedivcontainer"></div>');
      $('body').prepend($jxhomedivstore);
      $jxhomediv.before($jxhomedivcontainer);
      
      /* create navigation bar */
      if( $('#jxslidenavbar-'+options.className).width() == null ){
        var $jxslidenavbar = $( '<div id="jxslidenavbar-'+options.className+'" style="margin-bottom:5px;border:0px;" class="jxslidenavbar ui-widget ui-widget-content" ></div>' );
        var $jxslidenavbaritem = $('<span class="jxslidenavbaritem" style="padding:0px" id="jxslidenavbaritem-'+jxscid+'" jxscid="'+jxscid+'"></span>');
        var $jxslidenavbarbutton = $('<a style="padding:5px;outline:none;"  id="jxslidenavbarbutton-'+jxscid+'" jxscid="'+jxscid+'" href="javascript:void(0)" title="'+options.className+'" class="jxslidenavbarbutton ui-widget ui-state-default ui-widget-content '+options.tabclass+'" ></a>');
        //var $jxslidenavbarbuttonicon = $('<span id="jxslidenavbarbuttonicon-'+jxscid+'" class="jxslidenavbarbuttonicon jx-inline ui-icon '+options.icon_type+'" />');
        
        $jxhomedivcontainer.before($jxslidenavbar);
        
        $jxslidenavbar.hide();
        jxsnbl ['jxslidenavbar-'+options.className] = $jxslidenavbar;
      }else{
        var $jxslidenavbar = $('#jxslidenavbar-'+options.className); 
      };
      
      var spanTab = function(obj){
        jxslidefirst = 'jxslidenext';
        if(jxsnbl ['jxslidenavbar-'+options.className].attr('class').indexOf("jxslidenavbar") != -1 ){
          jxslidefirst = 'jxslidefirst';          
        };
        $('#jxslide-'+obj.attr('jxslideid') ).addClass(jxslidefirst);
         
        var objattr = ' jxscid="'+obj.attr('jxscid')+'" jxslideid="'+obj.attr('jxslideid')+'" ';
        var $jxnavitem=$('<span '+objattr+' id="jxnavitem-'+obj.attr('jxslideid')+'" jxHref="'+obj.attr('jxHref')+'" class="jxnavitem" style="border:0px;padding:0px;margin:0px;" ></span>'); //&gt;
        if(jxslidefirst == 'jxslidenext'){iconf='ui-icon-carat-1-e';stylef='';}else{iconf=options.icon_home;stylef='padding:2px 1px 2px 2px;';};
        
        var $jxnavitemarrow = $('<span '+objattr+' class="jxnavitemarrow '+jxslidefirst+' jx-inline ui-icon '+iconf+'" style="cursor:pointer;'+stylef+'" />');
        
        var $jxnavtab=$('<span '+objattr+' id="jxnavtab-'+obj.attr('jxslideid')+'" class="jxnavtab ui-widget ui-state-default ui-widget-content '+options.tabclass+'" style="padding:5px;" ></span>'); //&gt;
        var $jxnavbutton= $('<a '+objattr+' id="jxnavbutton-'+obj.attr('jxslideid')+'" class="jxnavbutton" style="text-decoration:none;outline:none;" href="javascript:void(0)"  >'+obj.text()+'</a>');
        var $jxnavbuttonclose = $('<a '+objattr+' id="jxnavbuttonclose-'+obj.attr('jxslideid')+'" class="jxnavbuttonclose '+jxslidefirst+' jx-inline ui-icon ui-icon-close" href="javascript:void(0)" />');
        $jxnavtab.append($jxnavbuttonclose).append($jxnavbutton);
        $jxnavitem.append($jxnavitemarrow).append($jxnavtab);
        $jxnavitemarrow.click(function (){
          if($(this).attr('class').indexOf('jxslidefirst') !=-1 ){
            
            $jxhomedivcontainer.hide();
            $('.jxslide-'+options.className+'').appendTo($jxhomedivstore);
            $jxhomedivcontainer.append($jxhomediv);
            $jxhomedivcontainer.slideDown();
            
          }else{
            if($(this).attr('open')=='open'){
              $(this).attr('open','close').removeClass('ui-icon-carat-1-s').addClass('ui-icon-carat-1-e');$('#jxnavtab-'+$(this).attr('jxslideid')).show();$('#jxnavitem-'+$(this).attr('jxslideid')).children('.jxnavitem').show();
            }else{
              $(this).attr('open','open').removeClass('ui-icon-carat-1-e').addClass('ui-icon-carat-1-s');$('#jxnavtab-'+$(this).attr('jxslideid')).hide();$('#jxnavitem-'+$(this).attr('jxslideid')).children('.jxnavitem').hide();
            };
          };          
        });
        $jxnavbutton.dblclick(function (){$jxnavitemarrow.click();});
        $jxnavbutton.click(function (){
          $jxhomedivcontainer.hide('slide',500);
          $jxhomedivstore.append($('#jxslide-'+jxsnbl ['jxslidenavbar-'+options.className].attr('jxslideid') ));
          $jxhomedivstore.append($jxhomediv);
          setFocus( $(this).parent().parent());
          $jxhomedivcontainer.append($('#jxslide-'+jxsnbl ['jxslidenavbar-'+options.className].attr('jxslideid') ));
          $jxhomedivcontainer.show('slide', {direction:'right'}, 500);
                                        
        });        
        $jxnavbuttonclose.click(function(){
          $jxhomedivcontainer.hide('slide',500);
          $('#jxslide-'+ $(this).attr('jxslideid') ).remove();          
          setFocus( $('#jxnavitem-'+ $(this).attr('jxslideid')).parent() );
          $('#jxnavitem-'+ $(this).attr('jxslideid') ).remove();          
          if($(this).attr('class').indexOf('jxslidefirst') !=-1 ){ 
            $('#jxslidenavbar-'+options.className).fadeOut();
            $( '.jxslide-'+options.className+'').remove();
            $jxhomedivcontainer.append($jxhomediv); 
          }else{
            $jxhomedivstore.append($( '.jxslide-'+options.className+'', $jxhomedivcontainer ));
            $jxhomedivcontainer.append($('#jxslide-'+jxsnbl ['jxslidenavbar-'+options.className].attr('jxslideid') ));
          };
          $jxhomedivcontainer.show('slide',500);
        });
        return $jxnavitem;
      };
      
      var setFocus = function(o){        
        jxsnbl ['jxslidenavbar-'+options.className] = o;
        $('.jxnavtab').removeClass('ui-state-active');
        $('#jxnavtab-'+o.attr('jxslideid')).addClass('ui-state-active');                        
      };
            
      /* LOOP */
      var alinkId=0;
      if(options.className==""){selector='a';}else{selector='a.'+options.className;}      
      $jxhomediv.find(selector).each(function(){         
        var $a = $(this);                
        alinkId++;
        /* procede once only */                
        if($a.attr('jxscid')== null){ 
          var jxslideid = options.className+'-'+jxscid +'-'+ alinkId;            
          var $jxslide = $('<div id="jxslide-'+jxslideid+'" jxslideid="'+jxslideid+'" class="jxslide jxslide-'+options.className+'" style="'+options.style+'"></div>'); 
          var $jxslidemenu = $('<div id="jxslidemenu-'+jxslideid+'" class="jxslidemenu" style=""></div>');
          
          if(options.border){borderStyle='';}else{borderStyle='border:0px';}
          var $jxslidecontent = $('<div id="jxslidecontent-'+jxslideid+'" class="jxslidecontent  ui-widget ui-widget-content ui-corner-all" style="padding:0px 3px 3px 0px;'+borderStyle+'"></div>'); 
          $jxslide.append($jxslidemenu).append($jxslidecontent);
          $jxhomedivstore.append($jxslide);
          var $jxalinkicon = $('<span id="jxslideid-'+jxslideid+'" class="jxalinkicon jx-inline ui-icon '+options.icon_type+'" />');
          $a.css('outline', 'none');
          if(options.icon){$a.css('text-decoration', 'none').append($jxalinkicon);}else{$a.css('text-decoration', 'underline');}
          
          $a.attr('jxHref', options.urlPrefix+$a.attr('href') ).attr('jxscid', jxscid).attr('jxslideid', jxslideid ).attr('href', 'javascript:void("'+jxslideid+'")' );
          $a.click(function(){
            linkInNavbar = 'no';
            $jxslidenavbar.fadeIn();
            $jxslidenavbar.find('span').each(function(){
              if($(this).attr('jxHref') == $a.attr('jxHref')){
                linkInNavbar = $(this).attr('jxslideid');    
              }
            });
            $jxhomedivstore.append($jxhomediv);
            if(linkInNavbar == 'no'){
              newLast = spanTab($a);
              newLast.appendTo(jxsnbl['jxslidenavbar-'+options.className]);
              setFocus(newLast);
              $.ajax({
                url: $a.attr('jxHref'),
                cache: false,
                beforeSend :function(){
                  $jxhomedivcontainer.fadeOut(200);
                },
                success : function(html){
                  $jxhomedivcontainer.append($jxslide);
                  $jxslidecontent.html(html);  
                },
                complete:function(){
                setTimeout(function(){                                        
                    $('#jxslide-'+$a.attr('jxslideid')).jxSlider({className:options.className,urlPrefix:options.urlPrefix});
                    $jxhomedivcontainer.show('slide',500);
                  } , 100);   
                
                }
              });              
            }else{
              $('#jxnavbutton-'+linkInNavbar).click();
            };
          });
        };
      });
      return $(this);
            
    }
  }); 
})(jQuery);

