var Archive = new Class({
						
    Implements: Options,

    options: {
        'jsonUrl' : "",
		'sliders' : false,
		"imgBasePath"   : "http://dynimg.rte.ie/",
		"imgWidth"      : "128",
		"infoContainer" : "playerInfo",
		"playListULid"  : "clip",
		"pagerULid"     : "pager",
		"playListNavId"  : "nav_gallery",
		"pageSize"      : 8,
		"pagerSize"     : 10,
		"rowLength"		: 4,
		"topClip"		: false,
		"titleUpdate"	: false,
		"currentPage"   : 0,
		"infoFx"        : null,
		"playlistFx"    : null,
		"fxArray"       : []
    },

    initialize: function(container,options)
	{ 
		var self = this;
		
		this.setOptions(options);
		
		var listHolder = new Element("ul", {
			"id" : this.options.playListULid
		}).inject(container);
		
		var pagerHolder = new Element("div", {
			"id": this.options.playListNavId,
			"html":"<h3>More:</h3>"
		}).inject(container);
		
		var pager = new Element("ul", {
			"id": this.options.pagerULid
		}).inject($(pagerHolder));
		
		if(navigator.userAgent.toLowerCase().indexOf('msie')>0){
			is = document.getElementById('playThis');
			is.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+is.src+"', sizingMethod='scale')"; 
			is.src = "/images/transparent1x1.gif"; 
		}	

		var jsonRequest = new Request.JSON({
		   url        : this.options.jsonUrl, 
		   method     : "get",
		   secure     : false, 
		   async      : false,            
		   headers    : {'X-Request': 'JSON', 'Last-Modified' : 'Sat, 1 Jan 2005 05:00:00 GMT'},
		   onComplete : function(response){
				self.archive = response;
			}	
		}).get();
		
		if(self.autostartfromurl() == false){
			this.renderPage(this.archive.items, this.options.pageSize, 0);
		}
	},
	
	autostartfromurl: function()
	{ 

		if (document && document.location.search && document.location.search.length > 0)
		{
			var params = location.search.substr(1).split(",");
			
			if(params.length >= 4)
			{
				 try
				 {	
					eval("player.play('" + params[0] + "','" + params[1] + "','" + params[2] + "'," + params[3] + ")");
					eval("this.setCurrentClip('" + params[0] + "')");
					return true;
				 }
				 catch(e){}
			}
			else if(params.length = 2)
			{
				try
				 {	
					eval("this.showClips('" + decodeURI(params[0]) + "','" + decodeURI(params[1]) + "')");
					return true;
				 }
				 catch(e){}
			}
		}
		return false;
	},
	
	changePage: function(page, filter, value)
	{
		this.renderPage(this.archive.items, this.options.pageSize, page, filter, value);
		this.options.currentPage = page;
	},
	
	showClips: function(filter,value) 
	{
		var self = this;
		var jsonRequest = new Request.JSON({
		   url        : this.options.jsonUrl,
		   method     : "get",
		   secure     : false, 
		   async      : false,            
		   headers    : {'X-Request': 'JSON', 'Last-Modified' : 'Sat, 1 Jan 2005 05:00:00 GMT'},
		   onComplete : function(response){
			   				self.archive = response;
		   				}
		   }).get();
		
		this.options.currentPage = 0;
		this.renderPage(this.archive.items, this.options.pageSize, 0, filter, value);
		
		var x = '';
		
		if (filter == 'linkType'){
			x = (value == 'watch' ?  "Video Archive" : "Audio Archive"); 
		}else if(filter == 'url'){
			x = "Live Audio / Video";
		}else{
			if(value)x = value + ' Archive';
		}
		if(x)$('playListNav').getElement('h2').set('html',x);
	},
	
	renderPage: function(items, size, page, filter, value)
	{
		var self = this;
		var fxArray = this.options.fxArray;
		
		if (filter){
			var clips = new Array;
			if(typeof value == 'undefined'){
				for(i=0;i<items.length;i++){
					if(items[i][filter]){
						clips.push(items[i]);	
					}
				}
			}else{
				for(i=0;i<items.length;i++){
					if(items[i][filter] == value){
						clips.push(items[i]);	
					}	
				}
			}
			items = clips;
			this.archive.items = clips;
		}
			
		var container = $(this.options.playListULid);
		
		//cancel all playlist animations before emptying container
		for(i=0;i<fxArray.length;i++)
		{
			$clear(fxArray[i].timer);
		}
	
		for(i=0;i<fxArray.length;i++)
		{
			fxArray[i].fx.cancel();
		}
		
		container.empty();
		
		var start = size * page;
		var end = size * (page + 1);
		end = end.limit(0, items.length);
		
		fxChain = new Chain();
		var boxlink = "";
		var hasClip = true;
		
		var preloader = new Element('li',{ id: 'preloader' });
		preloader.inject(container);
		
		var progressBar = new dwProgressBar({
			container: preloader,
			startPercentage: 0,
			speed:750,
			boxID: 'pre_box',
			percentageID: 'pre_perc',
			displayID: 'pre_text',
			displayText: true
		});
	
		var images = new Array();
		for(i=start; i < end; i++)
		{
			images.push(this.options.imgBasePath + items[i].imageId + "-"+ this.options.imgWidth +".jpg")
		}
		
		var loader = new Asset.images(images, {
									  
			onProgress: function(counter,index) {
				preloader.setStyle('display','inline-block');
				progressBar.set((counter + 1) * (100 / images.length));
			},
			
			onComplete: function() {
				
				preloader.setStyle('display','none');
				for(i=start; i < end; i++)
				{
					if (items[i].url) {
						boxlink = "javascript:archive.setCurrentClip('hi" + items[i].clipId + "');player.play('hi" + items[i].clipId + "', '"+items[i].url+"', '" + items[i].format + "', " + items[i].profile + ");";
						var hasClip = true;
					}
					else if (items[i].clipId) {
						boxlink = "javascript:archive.setCurrentClip('hi" + items[i].clipId + "');player.play('hi" + items[i].clipId + "', '" + items[i].clipId + "', '" + items[i].format + "', " + items[i].profile + ");";
						var hasClip = true;
					}
					else {
						hasClip = false;
					}
					
					var el = new Element("li", {
						"id" : "cliphi" + items[i].clipId,
						"class": "clipHolder",
						"styles": {
							opacity : 0                   
						}
					});
	
					if (items[i].imageId) {
						var image = new Element("img", {
							"src" : self.options.imgBasePath + items[i].imageId + "-"+ self.options.imgWidth +".jpg",
							"alt" : items[i].title + "\n" + items[i].descr
						});
	
						if (hasClip) {
							var aa = new Element("a", {
								"href" : boxlink 
							}).inject(el);
							image.inject(aa);
						}
						else {
							image.inject(el);
						}
					}
	
					if (hasClip) {
						var h3 = new Element("h3", {
							"class" : "clipTitle"
						}).inject(el);
	
						new Element("a", {
							"href" : boxlink ,
							"class" : "clipTitle", 
							"html" : items[i].title
						}).inject(h3);
					}
					else {
						new Element("h3", {
							"class" : "clipTitle", 
							"html" : items[i].title
						}).inject(el);
					}
					
					new Element("span", {
						"class" : "clipDate",
						"html" : items[i].clipDate
					}).inject(el);
					
					new Element("p", {
						"class" : "clipDescr",
						"html" : items[i].descr
					}).inject(el);
	
					el.inject(container); 
					
					fx = new Fx.Morph(el, {duration: 300});
					
					f = function(){
							this.start({opacity:[0,1]});
						}.delay(100 * (i - start), fx)
						
					fxArray.push({"fx": fx, "timer" : f});
					
					if (i== (parseInt(start) + parseInt(self.options.rowLength)) ){
						new Element("div", {
							"class": "clear",
							"html":"&nbsp;"
						}).inject(container);
					}
					
					player.highlight($(player.activeItem), $('playlist')); 
				}
				
				if (filter){
					if(typeof(value) == 'undefined'){
						self.renderPager(page, items.length, self.options.pageSize, self.options.pagerSize, filter);
					}else{
						self.renderPager(page, items.length, self.options.pageSize, self.options.pagerSize, filter, value);
					}
				}else{			
					self.renderPager(page, items.length, self.options.pageSize, self.options.pagerSize);
				}
				
				if(self.options.sliders == true){self.initSliders()}
			}
	
		});
	},
	
	renderPager: function(currentPage, collectionSize, pageSize, pagerSize, filter ,value)
	{
		var params = "";
		
		if (filter){
			if(typeof value == 'undefined'){
				params = ",'" + filter + "'";
			}else{
				params = ",'" + filter + "','" + value + "'";
			}
		}
		
		var container = $(this.options.pagerULid)
		container.empty();
		
		var lBound = 0;
		var uBound = pagerSize.limit(0, ((collectionSize + pageSize - 1)/pageSize).floor());
		
		if(currentPage >= ((pagerSize-1)/2).round())
		{
			lBound = (currentPage - ((pagerSize-1)/2).round()).limit(0, currentPage - 1);
			uBound = (lBound + pagerSize).limit(lBound, ((collectionSize + pageSize - 1)/pageSize).floor());
			lBound2 = (uBound - pagerSize).limit(0, lBound);
			lBound = lBound2;
		}
		
		if (uBound > 1) {
			for(i=lBound;i<uBound;i++)
			{
				new Element("li", {
					"id"   : "page" + i,
					"class" : (i != currentPage ? ("") : ("nav_current")),
					"html" : (i != currentPage ? ("<a href=\"javascript:archive.changePage(" + i + params + ")\">" + (i + 1) + "</a>") : ("<a class=\"sel\">" + (i + 1) + "</a>"))
				}).inject(container, "bottom");     
			}
			$(this.options.playListNavId).getElement('h3').set('html','More: ');
		}else{
			$(this.options.playListNavId).getElement('h3').set('html','');	
		}
			
	},

	setCurrentClip: function(clip) 
	{
		$('playerWrapper').setStyle('background', 'none');
		
		$$("#playlist .sel").each(function (item, i) {item.removeClass('sel');}, this);
		
		var pos = "not in list";
	
		for(i=0; i < this.archive.items.length; i++)
		{
			if (this.archive.items[i].clipId == clip.substring(2)){
				pos = i;
			}
		}

		var pageCount = Math.ceil(this.archive.items.length / this.options.pageSize);
	
		var page = 0;
		
		if ( pos !== "not in list"){
			for(i=0; i < pageCount; i++)
			{
				if (pos < this.options.pageSize * (i+1)){
					page = i;
					break;
				}
			}
		}

		if (page !== this.options.currentPage){
			this.renderPage(this.archive.items, this.options.pageSize, page);
		}
	
		if ($('top_clip') && this.options.topClip == true){
			var topclip = $('top_clip');
			topclip.getElement('h3').set('html',this.archive.items[pos].title);
			topclip.getElement('span').set('html',this.archive.items[pos].clipDate);
			topclip.getElement('p').set('html',this.archive.items[pos].descr);
			
		}else if(this.archive.items[pos].title && this.options.titleUpdate){
			$(this.options.titleUpdate).innerHTML = this.archive.items[pos].title;
		}else{
			$(this.options.titleUpdate).innerHTML = "";	
		}

		this.options.currentPage = page
	},
	
	getDaysLeftString: function(days)
	{
		if(days > 1)
			return days + " days left";
		else
			return "<span class=\"red\">Last chance</span>";	
	},
	
	getDurationString: function(sec)
	{
		var m = Math.floor(sec/60);
		var s = Math.round(sec - (m * 60));
		return m + ":" + (s > 9 ? s : (s > 0 ? ("0" + s) : "00"));
	},

	autostartfirstclip: function() 
	{
		if ($E("#clipList a"))
		{
			var link = $E("#clipList a").href;
			try
			{
				eval("player"+link.substr(link.indexOf(".play(")));
				return true;
			}
			catch(e){}
		}
	},
	
	showHelp: function()
	{
		if(document.getElementById("player"))
		{
			document.getElementById("player").innerHTML = "<iframe src=\"/info/avfaq_simple.html\" name=\"adPanel\" id=\"adPanel\" width=\"512\" height=\"334\" scrolling=\"yes\" marginheight=\"0\" marginwidth=\"0\" frameborder=\"0\" status=\"no\" statusbar=\"no\" allowTransparency=\"true\"></iframe>";
			if(document.getElementById("clipExtraInfo"))document.getElementById("clipExtraInfo").innerHTML = "";
		}
	},
	
	initSliders: function()
	{
		$$('.clipDescr').each(function(item){
			var slide = new Fx.Slide(item,{duration:500});
			slide.hide();
			item.set('styles', {'display':'block'});
			$('but_clipDesc').addEvent('click', function(el){
				slide.toggle();
				if(slide.open){
					$('but_clipDesc').set('html','Show Clip Descriptions')
				}else{
					$('but_clipDesc').set('html','Hide Clip Descriptions')
				}
			 });
		});	 
	}

});
