jQuery(function($){
    
    var globals = {
            az_cart_fetch_file:		manufacturer_fetch_url,
			az_cart_fetch: 			false,
			az_image_base_url:		manufacturer_image_base_url,
            az_preload_count:       manufacturer_preload_count,
			az_manufacturer_slider_container: '#' + manufacturer_slider_container //id of the div that's gonna contain the slider
    };
        
    var current_page = 1;
    var total_pages = 0;
    
    var nextLocked = true;
    var prevLocked = true;
     
    $(document).ready(function(){
        $(globals.az_manufacturer_slider_container).append(getSliderContainer());
        
        $.get(globals.az_cart_fetch_file, "", function(data){				
				var i = 0;	
                var az_manufacturer_data = new Array();
                
				jQuery(data).find("MANUFACTURER").each(function(){	
					az_manufacturer_data[i] = {id: jQuery(this).find("ID").text(), name: jQuery(this).find("NAME").text(), img: jQuery(this).find("IMAGE").text()};
					i++;
				 });				
					
                var az_manufacturers = {data: az_manufacturer_data, count:parseInt(jQuery(data).find("MANUFACTURER_COUNT").text())};
                
                //preload...
                var i;
                                
                for(i = 1; i <= Math.ceil(globals.az_preload_count/7); i++){                      
                    var manufacturer_set = get_manufacturer_set(az_manufacturers.data, i, 7 );
                    $('#az_manufacturer_slider_image').append(div_wrap(manufacturer_set, 'az_manufacturer_slider_page_' + i, ''));	         
                }
                //Load the rest of the data, if there are any remaining
                
                if(az_manufacturers.count > globals.az_preload_count){
                    var temp_html = '';
                    
                    for(; i <= Math.ceil(az_manufacturers.count / 7); i++){
                        temp_html = temp_html + div_wrap(get_manufacturer_set(az_manufacturers.data,i, 7), 'az_manufacturer_slider_page_' + i, '');                   
                    }                        						
                    
                    $('#az_manufacturer_slider_image').append(temp_html);
                }
                total_pages = i - 1;  
                $('#az_next_manufacturer').click(moveNext);              
                $('#az_prev_manufacturer').click(movePrev);
                
                nextLocked = false;
                prevLocked = false;
                
                changeButtonStatus('prev', false);
		 });   
    });
    
    /**************************************/
    /*          Helper Functions          */
    /**************************************/
     
    function get_manufacturer_set(data, page, element_count){
        var temp_html = '';
        var data = get(data, (page - 1) * 7, element_count * page);
                                                    
        $.each(data, function(i, e){
            var img_src = globals.az_image_base_url + e.img;
            var id = e.id;
            var title = e.name;
            var height = 30;                                    
                            
            temp_html = temp_html + div_wrap(get_image(img_src, id, title, height), '', 'az_manufacturer_img'); 
        });
        return temp_html;
    } 
    
    //returns the HTML structurer of the slider container  
    function getSliderContainer(){
        var manufacturer_slider_html = '<div id="az_manufacturer_slider_left"></div>';
			  
			  manufacturer_slider_html += 		'<div id="az_manufacturer_slider">';
			  manufacturer_slider_html +=			'<div id="az_manufacturer_slider_left_pane" class="az_manufacturer_slider_pane">';
			  manufacturer_slider_html +=					'<div id="az_manufacturer_slider_prev"><a id="az_prev_manufacturer">&nbsp;</a></div>';
			  manufacturer_slider_html += 			 '</div>';
			  
			  manufacturer_slider_html += 			'<div id="az_manufacturer_slider_mid_pane" class="az_manufacturer_slider_pane">';
			  manufacturer_slider_html +=					'<div id="az_manufacturer_slider_image"></div>';
			  manufacturer_slider_html +=			'</div>';
															
			  manufacturer_slider_html +=		'<div id="az_manufacturer_slider_right_pane" class="az_manufacturer_slider_pane">';
			  manufacturer_slider_html +=			'<div id="az_manufacturer_slider_next"><a id="az_next_manufacturer">&nbsp;</a></div>';
			  manufacturer_slider_html +=		'</div></div>';
										
			  manufacturer_slider_html +=  '<div id="az_manufacturer_slider_right"></div>';
        
        return manufacturer_slider_html; 
    }    
    
    function div_wrap(content, div_id, div_class){        
        return '<div id="' + div_id + '" class="'+div_class+'">' +content+ '</div>';
    }
    
    function get_image(img_src, id, title, height){         
        return '<a href="'+manufacturer_page_url + id+'"><img id="' + id + '" src="' + img_src + '" title="' + title + '" height="'+height+'" /></a>'; 
    }
    
    function get(array_src, offset, end){        
        return array_src.slice(offset, end);        
    }    
    
    var moveNext = function(){        
        if(!nextLocked){          
            nextLocked = true;
            
            if(current_page < total_pages){
                changeButtonStatus('prev', true);
                
                $('#az_manufacturer_slider_page_' + current_page).fadeOut('fast', function(){
                    current_page++;
                    $('#az_manufacturer_slider_page_' + current_page).fadeIn('fast');
                    nextLocked = false;
                    
                    if(current_page == total_pages) changeButtonStatus('next', false);
                });
            }else{
                nextLocked = false;
            }
        }
    }
    
    var movePrev = function(){
        if(!prevLocked){        
            prevLocked = true;
            
            if(current_page > 1){      
                changeButtonStatus('next', true);
                
                $('#az_manufacturer_slider_page_' + current_page).fadeOut('fast', function(){
                    current_page--;
                    $('#az_manufacturer_slider_page_' + current_page).fadeIn('fast');
                    prevLocked = false;
                    
                    if(current_page == 1) changeButtonStatus('prev', false); 
                });
            }else{
                prevLocked = false;
            }
        }
    }
    
    function changeButtonStatus(button, enabled){        
        if(enabled){
             $('#az_manufacturer_slider_' + button).removeClass('az_manufacturer_slider_' + button + '_disabled');
        }else{
            $('#az_manufacturer_slider_' + button).addClass('az_manufacturer_slider_' + button + '_disabled');
        }
    }    
});