

(function(){
	
	var saw = window.saw;
	
	
	var IssueTOC = saw.widget.IssueTOC = function(opts){
		saw.widget.Abstract.apply(this, arguments);
		
		assert(this.issue, "saw.widgets.TOC construct requires an issue parameter.");
	}
	IssueTOC.prototype = new saw.widget.Abstract({
		issue:"201004",
		data:null,
		container:null,
		displaySequence:null,		
		controlBar:null,
		
		_settings:{
			displaySequence:{
				ul:">ul.banners",
				displayTime:15000,
				autoPlay:false,
				startIndex:1
			},
			controlBar:{
				ul: ">ul.controls",
				btnPlay: ">li.item-play",
				btnPause: ">li.item-pause"
			},
			ajax:{
				type:"GET"
			}
		},
		/* Moved to saw.widget.Abstract
		settings:function(collection, key, value){
			if(arguments.length == 1){
				return $.isPlainObject(this._settings[collection]) ? this._settings[collection] : null;	
			}else if($.isPlainObject(key)){
				$.extend(this.settings(collection), key);
				return this;
			}else if(typeof(key)==="string"){
				if(arguments.length == 3){
					this.settings(collection)[key]=value;
					return this;
				}else{
					return this.settings(collection)[key];
				}
			}
		},*/
		
		init:function(){
			//Change some settings
			if(this.settings("ajax","url")==null){
				this.settings("ajax", "url", "../../issue/"+this.issue+"/toc/toc.xml");				
			}
			//Bind some events
			this.bind("loadSuccess", this.onLoadSuccess);
			
			//Load the data
			this.load();
			
			return this;			
		},
		
		onLoadSuccess:function(evt, req){
			var I = this;
			I.data = $(req.responseXML);
			var album = I.data.find("album#"+saw.lang.code());
			if(!album.length){
				album = I.data.find("album:first");
			}
			I.data = album;
			I.drawItems();
			I.drawControls();
				
		},
		
		drawItems:function(){
			//Create the DisplaySequence
			var	ulBanners = this.settings("displaySequence","ul") instanceof $ ? this.settings("displaySequence", "ul") : this.container.find(this.settings("displaySequence","ul"))

			var seqItems = this.data.children(),
				basePath = this.data.attr("lgpath")+"/" || "";
			
			seqItems.each(function(n, node){
				var $node = $(node),
					li = $("<li class='item-"+ n+1 +"'/>").appendTo(ulBanners),
					title = attrPrepStr($node.attr("title")),
					caption = $node.attr("caption").replace(/'/g,"&#39;"),
					url = $node.attr("link"),
					src = basePath+$node.attr("src"),
					img = $("<img src='"+src+"' alt='"+ caption +"'/>").appendTo(li);

				if(url != null && url.length){
					img.wrap("<a title='"+title+"' href='"+url+"'/>");
				}
			});
			
			this.settings("displaySequence",{
				ul:ulBanners
			});
			var seq = this.displaySequence = new esf.widget.DisplaySequence(this.settings("displaySequence"));			
			seq.transitionOutArgs[1].duration = 2000;
		},
		
		drawControls:function(){
			
			//Create the Controller Bar
			var I = this,
				seqItems = this.data.children(),
				ulControls = this.settings("controlBar","ul") instanceof $ ? this.settings("controlBar", "ul") : this.container.find(this.settings("controlBar","ul")),
				liCover = ulControls.children(".item-cover").data("sequenceIndex", 0);
				
			this.settings("controlBar", {
				sequence:this.displaySequence,
				ul: ulControls,
				btnPlay: this.settings("controlBar","btnPlay") instanceof $ ? $this.settings("controlBar", "btnPlay") : ulControls.find(this.settings("controlBar","btnPlay")),
				btnPause: this.settings("controlBar","btnPause") instanceof $ ? $this.settings("controlBar", "btnPause") : ulControls.find(this.settings("controlBar","btnPause"))
			});			
			
			var seq = this.displaySequence,
				bar = this.controlBar = new esf.widget.DisplaySequenceControlBar(this.settings("controlBar"));
			
			//Shift the generated button numbers, since the "Cover" button is actually for index 0
			bar.btnNumbers.each(function(l, li){
				var $li = $(li),
					$a = $li.children("a:first");
					num = parseInt( $.trim($a.text()) );
				$a.html(num-1);
				$li.attr("class","item-"+(num-1));
			});
			bar.btnNumbers.eq(0).attr("class","").hide();
			
			
			liCover.addClass("item-0");
			bar.btnNumbers = bar.btnNumbers.add(liCover);		
			
			liCover.children("a").click(function(evt){
				seq.index(0);
			});			
			
			
			$(seq).bind("play.Sequence", function(evt){
				bar.btnPlay.hide();
				bar.btnPause.show();
			});
			
			$(seq).bind("pause.Sequence", function(evt){
				bar.btnPlay.show();
				bar.btnPause.hide();
			});
			
			seq.items.hide();
			seq.play(seq.startIndex);
			
		}
	});
	
	
	
	function attrPrepStr(str, useSingleQuote){
		var prep = str.replace(/</g, "&lt;").replace(/>/g, "&gt;");
		if(useSingleQuote){
			prep = prep.replace(/'/g,"&#39;")	
		}else{
			prep = prep.replace(/"/g,"&quo;")	
		}
		return prep;	
	}
	
	
	
	
	
})();
