
jQuery.fn.AQSlider = function(options){
            var SliderMaxIndexAdded = -1;   
            var SliderContent = null;
            var SliderTarget = null;            	
            var SliderTotalCount = 0; 
            var SliderScrollBar = null;  
            var VisibleSlides = 1;                      
            var settings = {
                'slidercontent': null,
                'scrollbar': null,
                'scrollevent': 'slidestop',
                'scrollwidth': '100%',                
                'behavior': 'slider',
                'loadall': false,
                'loadimages': false,                
                'anythingOptions': null,
                'colorboxOptions': null,
                'usecolorbox': false,
                'showtitle': false
            };
            function setDefaultAnythingOptions()
            {
                if(!settings.anythingOptions)
                settings.anythingOptions = {
                'width'          : 500,
                'height'         : 300,
                'startStopped'   : true,
                'toggleControls' : false,
                'buildNavigation' : false,
                'autoPlay': false,
                'buildArrows': false,
                'theme'          : 'aq',
                'easing': 'swing',
                'visibleSlides': 1};
            }
            function setDefaultColorboxOptions()
            {
                if(!settings.colorboxOptions)
                settings.colorboxOptions = {
                     width: '90%',
                     height: '90%',
                     href: function(){ return jQuery(this).attr('src'); },
                     // use $(this).attr('title') for specific image captions
                     title: 'Press escape to close',
                     rel: SliderTarget.context.id
                    }
            }           
            function getExternalContent(data, textStatus, jqXHR){
                if (textStatus != "error"){
                    if(!settings.loadimages)
                        data = data.replace(/src=/gi,'xsrc=');
                    var oSettings = settings.slidercontent.split(' ');
                    var sSettings = "";
                    for(i = 1;i < oSettings.length;i++){
                        if(i<oSettings.length-1)
                            sSettings += oSettings[i] + " ";
                        else
                            sSettings += oSettings[i];                        
                    }
                     if(oSettings.length > 1){
                        SliderContent = jQuery(data).find(sSettings).andSelf(sSettings).children('li').detach();   
                    }else
                        SliderContent = jQuery(data).children('ul').children('li').detach();
                    setUp();
                }else{
                    //alert("Error loading slider: " + jqXHR.status + " " + jqXHR.statusText);
                }
            }
            function setUp(){ 
                cleanEmptyLi();
                if(settings.loadall){
                    loadImages(SliderContent);
                    SliderTarget.append(SliderContent);
                    SliderTotalCount = SliderTarget.children('li').length;
                    SliderMaxIndexAdded = SliderTotalCount-1;
                }else{
                    if(SliderContent!=null){
                        SliderTotalCount = SliderContent.length + SliderTarget.children('li').length;
                        addNext(0);
                    }else{
                        SliderTotalCount = SliderTarget.children('li').length;
                    }                 
                }
                if(SliderTotalCount == 0)
                    SliderTarget.append('<li></li>');
                if(settings.behavior != 'slider')
                    settings.anythingOptions.buildArrows = true;
                SliderTarget.bind('initialized',anythingInitialized);
                SliderTarget.anythingSlider(settings.anythingOptions);
                

            }           
            function getContent(){
                if(settings.slidercontent != null && settings.slidercontent.length > 0){
                    SliderContent = jQuery(settings.slidercontent).children('li');
                    if(SliderContent.length == 0){
                        var oSettings = settings.slidercontent.split(' ');
                        jQuery.get(oSettings[0],null,getExternalContent);
                        return;
                    }
                }
                settings.loadimages = true;
                setUp();
            }
            function scrollEvent(event, ui){
                if(SliderMaxIndexAdded < ui.value){
                    if(addNext(ui.value,this))
                        SliderTarget.anythingSlider(); 
                }
                SliderTarget.anythingSlider(ui.value+1);
            }
            function anythingInitialized(e,slider)
            {       
                if(settings.behavior == 'slider'){
                    slider.$el.bind('slide_complete',anythingSlideComplete);                     
                    SliderScrollBar = jQuery(settings.scrollbar).slider({max: SliderTotalCount - VisibleSlides});
                    SliderScrollBar.width(scrollWidth()).css('margin-left','auto').css('margin-right','auto');
                    SliderScrollBar.bind(settings.scrollevent,scrollEvent);
                } else if (settings.behavior == 'arrows2'){
                    anythingControlAlter(slider);
                }   
                if(settings.usecolorbox){
                    setDefaultColorboxOptions();
                    slider.$el.find('.panel:not(.cloned) img') // ignore the cloned panels
                       .attr('rel',slider.$el.context.id)            // add all slider images to a colorbox group
                       .colorbox(settings.colorboxOptions);
                }
                slider.$el.bind('slide_init',anythingSlideInit);
                showTitle(slider);
            }     
            function anythingSlideComplete(e,slider)
            {
               //this hack is required because if the event is slide and the user moves the slider fast they get out of sync
               if(SliderScrollBar != null && SliderScrollBar.length > 0){
                   if(slider.currentPage != SliderScrollBar.slider('value')+1)
                        SliderScrollBar.slider('value',slider.currentPage-1); 
               }      
            }   
            function anythingSlideInit(e,slider)
            {
               showTitle(slider);
               if(SliderContent == null)return;
               if(slider.pages < slider.currentPage + (VisibleSlides * 2) || slider.currentPage == 0){
                    var iPage = slider.currentPage == 0 ? SliderTotalCount-1 : slider.currentPage + 1;
                    if(addNext(iPage,this))
                        slider.$el.anythingSlider();
               }
            }
            function showTitle(slider){
               if(settings.showtitle){
                   var sLiTitle = slider.$currentPage.attr('title');
                   if(sLiTitle != null && sLiTitle.length > 0)
                        jQuery('.labelText', slider.$controls).text(sLiTitle);
               }            
            }
            function anythingControlAlter(slider)
            {
                var oAnythingControls = slider.$controls;
                jQuery('.start-stop', oAnythingControls).hide();
                oAnythingControls.append('<span class="arrow startstop2"><a>Play | Stop</a></span>');                
                oAnythingControls.append(jQuery('.arrow.forward', slider.$wrapper));
                oAnythingControls.append(jQuery('.arrow.back', slider.$wrapper)); 
                oAnythingControls.addClass('withText');                
                oAnythingControls.append('<span class="labelText"></span>');                  
                jQuery('.arrow.forward a', oAnythingControls).button({icons: {primary: 'ui-icon-seek-next'},text: false}); 
                jQuery('.arrow.back a', oAnythingControls).button({icons: {primary: 'ui-icon-seek-prev'},text: false}); 
                var oStartStop = jQuery('.arrow.startstop2 a', oAnythingControls);
                oStartStop.button({icons: {primary: 'ui-icon-play'},text: false});
                oStartStop.click(function(){ SliderTarget.data('AnythingSlider').startStop(!oStartStop.is('.playing')); });
                slider.$el.bind('slideshow_stop',function(e, slider){ oStartStop.toggleClass('playing',false);  jQuery('.arrow.startstop2 a', oAnythingControls).button({icons: {primary: 'ui-icon-play'},text: false});});
                slider.$el.bind('slideshow_start',function(e, slider){ oStartStop.toggleClass('playing',true); jQuery('.arrow.startstop2 a', oAnythingControls).button({icons: {primary: 'ui-icon-stop'},text: false});});
            }            
            function loadImages(oContext){
                if(!settings.loadimages)
                    jQuery('img', oContext).each(function(){jQuery(this).attr('src',jQuery(this).attr('xsrc'))});;             
            }                     
            function addNext(n){
                var iAdjustedValue = n + VisibleSlides*2;
                if(iAdjustedValue > SliderTotalCount-1)
                    iAdjustedValue = SliderTotalCount-1; 
                var i = -1;
                var bAdded = false;               
                for(i = SliderMaxIndexAdded+1; i <= iAdjustedValue; i++){
                    var oLi = SliderContent.eq(i);
                    loadImages(oLi);
                    SliderTarget.append(oLi);
                    bAdded = true;
                }
                if(bAdded)
                    SliderMaxIndexAdded = i-1; 
                return  bAdded;                 
            }
            function doSettings(){
                if(options)
                    jQuery.extend(settings,options);
                if(SliderTarget.attr('scrollbar') && settings.scrollbar == null)
                    settings.scrollbar = SliderTarget.attr('scrollbar');
                if(SliderTarget.attr('slidercontent') && settings.slidercontent == null)
                    settings.slidercontent = SliderTarget.attr('slidercontent');     
                if(settings.anythingOptions && settings.anythingOptions != null && settings.anythingOptions.visibleSlides && settings.anythingOptions.visibleSlides != null)
                    VisibleSlides = settings.anythingOptions.visibleSlides;
                setDefaultAnythingOptions();
            }
            function cleanEmptyLi(){
        	    SliderTarget.children('li:not(.cloned)').each(function(){
        	        var oLI = jQuery(this);
                    if(jQuery.trim(oLI.html()).length == 0)
                        oLI.remove();
                });
            }
            function scrollWidth(){
                var sWidth = settings.scrollwidth;
                if(sWidth.indexOf('%') > 0){
                    sWidth = sWidth.substr(0,sWidth.indexOf('%'));
                    var iWidthPercent = new Number(sWidth);
                    if(settings.anythingOptions && settings.anythingOptions.width && settings.anythingOptions.width > 0)
                        return settings.anythingOptions.width*VisibleSlides*iWidthPercent*.01;
                    else
                        return settings.scrollwidth;
                }
                if(sWidth.indexOf('px') > 0){
                    sWidth = sWidth.substr(0,sWidth.indexOf('px'));
                    var iWidthPixel = new Number(sWidth);
                    return iWidthPixel;
                }
                return settings.scrollwidth;                
            }
            return this.each(function() {
                SliderTarget = jQuery(this);
                doSettings();
                getContent();

            });
        };
