﻿(function($){
	        	
	$.netTVServices = function(el, options){
		// To avoid scope issues, use 'base' instead of 'this'
	    // to reference this class from internal events and functions.
		var base = this;
        
        // Access to jQuery and DOM versions of element
        base.$el = $(el);
        base.el = el; 

		// Set up a few defaults
        base.currentCategoryNum = -1;
        base.btns = [];
        base.prevbutton;
        base.imageBase = "";
        base.services = [];
        base.categories = [];
        base.category = "";
        base.container;
        base.containerClear;
        base.allText = "All";
        
        base.init = function(){
        	base.options = $.extend($.netTVServices.defaults, options);
        	
        	base.loadData(base.options.dataUrl);
        }
        
        base.loadData = function(url){
        	$.ajax({
    			type: "GET",
    			url: url,
    			dataType: "xml",
    			success: function(xml) {
    				
    				$(xml).find('service').each(function(){
    					base.services.push($(this));
    				});
    				
    				$(xml).find('category').each(function(){
    					base.categories.push($(this));
    				});
    				
    				var c;
    				$(xml).find('services').each(function(){
    					c = $(this).attr('defaultCategory');
    					base.imageBase = $(this).attr('imageBase');
    				});
    				
    				$(xml).find('categories').each(function(){
    					base.allText = $(this).attr('allCategory');
    				});
    				
    				base.allText
    				
    				var num = base.getNumFromName(c);
    				base.createMenu();
    				
    				
    				base.showServices(num,base.btns[num+1]);
    			}
    		});
        }
        
        base.getNumFromName = function(name){
        	for(var i=0; i < base.categories.length;i++){
        		if(base.categories[i].attr("id")==name) return i
        	}
        	return -1;
        }
        
        base.createMenu = function(){
        	var li = $('<li/>');
        	
			var a = $('<a/>').html(base.allText+" ("+base.getCategoryTotal("all")+")").appendTo(li).
			bind("click",function(){
				var currentIndex = $(this).parent().prevAll().length;
				base.showServices(currentIndex-1,$(this));
			});
			li.appendTo(base.$el.children("ul")[0]);
			base.btns.push(a);
			
        	for(var i=0; i < base.categories.length;i++){
        		base.createButton(base.categories[i]);
    		}
        }
        
        base.createButton = function(node){
        	var li = $('<li/>');
        	
			var a = $('<a/>').html(node.text()+" ("+base.getCategoryTotal(node.attr("id"))+")").appendTo(li).
			bind("click",function(){
				var currentIndex = $(this).parent().prevAll().length;
				base.showServices(currentIndex-1,$(this));
			});
			
			li.appendTo(base.$el.children("ul")[0]);
			base.btns.push(a);
        }
        
        base.showServices = function(num,btn){
        	if(base.prevbutton) {
        		base.prevbutton.removeClass("active");
        	}
        	currentCategoryNum = num;
        	base.prevbutton = btn;
        	btn.addClass("active");
        	
        	if(base.container && !$.browser.msie) {
        		base.container.fadeOut("500",function(){
        			base.createServices(num);
        		});
        	}else{
        		base.createServices(num);
        	}
        }
        
        base.getCategoryTotal = function(name){
        	
        	//name = base.categories[num].attr("category");
        	var total = 0;
        	//var temp=[];
        	for(var i=0; i < base.services.length;i++){
        		//if(temp.indexOf(base.services[i].attr("image")) > -1) continue
        		//temp.push(base.services[i].attr("image"));
        		if(base.services[i].attr("category")==name || name=="all") total++;
        	}
        	return total;
        }
        
        base.createServices = function(num){
        	
        	if(base.container) base.container.remove();
        	if(base.containerClear) base.containerClear.remove();
        	
        	base.container = $('<div/>').addClass("content");
        	
        	if(num==-1){
        		/*var title = $('<h3/>').html("ALL");
	        	title.appendTo(base.container);
	        	
	        	//var temp=[];
	        	for(var i=0; i < base.services.length;i++){
	        		//if(temp.indexOf(base.services[i].attr("image")) > -1) continue
	        		//temp.push(base.services[i].attr("image"));
	    			var div = $('<div/>').css("background","url('"+base.imageBase+base.services[i].attr("image")+"') 10px 10px no-repeat #fff").corner("round 5px");
	    			
	    			div.appendTo(base.container);
	    		}*/
        		
        		for(var i=0; i < base.categories.length;i++){
        			base.createService(i);
        		}
        		
        	}else{
	        	
        		base.createService(num);
        	}
        	
        	base.container.appendTo(base.$el);
        	base.containerClear = $('<div/>').addClass("clear");
        	base.containerClear.appendTo(base.$el);
        	
        	if(!$.browser.msie)base.container.hide().fadeIn("500");
        	
        	base.options.onChange.call(this); 
        }
        
        base.createService = function(num){
        	var title = $('<h4/>').html(base.categories[num].text());
        	title.appendTo(base.container);
        	
        	for(var i=0; i < base.services.length;i++){
        		
    			if(base.services[i].attr("category")!=base.categories[num].attr("id")) continue;
        		
    			var div = $('<a/>').attr("title",base.services[i].text()).css("background","url('"+base.imageBase+base.services[i].attr("image")+"') 10px 10px no-repeat #fff");
    			
    			div.cp_tooltips({
    				selector:"#cp_tooltip",
    				contentSelector:"#cp_tooltip .content",
    				anchorElement:"mouse",
    				anchorH:"center",
    				anchorV:"bottom"
    			});
    			
    			if(!$.browser.msie) div.corner("round 5px");
    			
    			div.appendTo(base.container);
    		}
        }
		
        base.init();
	};
	
	$.netTVServices.defaults = {
		dataUrl:"/consumerfiles/pageitems/master/categorypages/Blu-ray2010/assets/js/netTVServices.xml",
		onChange : function(){}
	};
	
	$.fn.netTVServices = function(options){
		options = $.extend($.netTVServices.defaults, options);
		
		return this.each(function() {
			
			(new $.netTVServices(this, options));
			
		});
		
		// allow jQuery chaining 
		return this; 
	}
	
})(jQuery);
