		
		  

		
		
(function(){ //closure
	//everything in here should be private   
			var isItTheFirstTime = 0;
      var currentlyPlayingItem = null;
  function loadPlaylist(url) { 
  		 	window.Music.emp.set("config_settings_autoPlay","true");
  			window.Music.emp.call( 'loadPlaylist', ['' + url +'']);
  }
	
	
	function unhide()
	{
		var unhide = glow.dom.get('.button_container');
		unhide.css('display','block');
		var adjust = glow.dom.get('.previewable');
		unhide.css('padding-bottom','0px');
		
	}
	
	function getPercent(all, part)	{ 
		return (all > 0) ? (100 / all) * part : 0; 
	 }
	
  function play(url) {
    if (window.Music.emp) 	{
   		if (isItTheFirstTime == 0){
	      window.Music.emp.setPlaylist(url);
	   		window.Music.emp.set("config_settings_autoPlay","true");
				window.Music.emp.write();
				isItTheFirstTime = 1;
				
			}
			else{loadPlaylist(url);} 
	 	}
  }    

	function pause() { 
		if (window.Music.emp) 	{	
			window.Music.emp.call('pause');	} 
	} 
	
	function getPreviewableItems(i) {
		if (i) { 
		 var items = glow.dom.get(window.Music.selector + " .previewable div.button_container a")[i];
		}
		else  {
		 var items = glow.dom.get(window.Music.selector + " .previewable div.button_container a");	
		}
		return items;	
	}   

	function attachPreviewableHandlers()  {				
		var items = getPreviewableItems();
		// abstract out 
		if (implementsCanvas()) { 
		  if (!window.Music) window.Music = {};     
		  window.Music.ctx = new Array();
		  var i = 0;                
		  items.each( function() {
		    this.trackNumber = i; i++;
		    buildCanvasHtml(this);
        glow.events.addListener(this,  'click', function () {previewItem(this); });  		
		  })
	  }	
	}                  
    

		function getItemUrl(item) { 		                                     
			return window.Music.trackNumber[item.trackNumber];  
		}

	function playItem(item) {    
		var url = getItemUrl(item);
		if (currentlyPlayingItem != null ) {
			 pauseItem(currentlyPlayingItem);
			 glow.dom.get(item).removeClass("playing");
			 pauseCanvasIfPossible(item.trackNumber);
		}
		playCanvasIfPossible(item.trackNumber);
		glow.dom.get(item).addClass("loading");
		play(url);            
		item.isPlaying = true; 
		currentlyPlayingItem = item; 	
	} 
	
	function pauseItem(item) {       
		if (currentlyPlayingItem) currentlyPlayingItem.isPlaying = false; 
	  /*** seperate out ***/
	  pauseCanvasIfPossible(item.trackNumber);
		glow.dom.get(item).removeClass("playing");
		pause();       
		item.isPlaying = false;
		currentlyPlayingItem = null
	}

	function previewItem(item) { 
		(item.isPlaying) ? pauseItem(item) : playItem(item); 
		return false;
	}  
	
	function onPlayback(e) {
		if ((getPercent(e.duration, e.progress)) < 98.5) {
			Music.draw_percent_canvas( (getPercent(e.duration, e.progress)) );
		}
		else { 
			pauseItem(currentlyPlayingItem);window.Music.emp.call('seekTo',[0]);
 		}                         
	}
	
	function onPlaying() { 
    /*** add in the initial code ***/
		glow.dom.get(window.Music.selector + " .button_container a").removeClass("loading");
	  glow.dom.get(currentlyPlayingItem).addClass("playing");
	} 
	

function setup(args) {
		window.Music.trackNumber = args.tracklist;
		window.Music.selector = args.snippetSelector;
		window.onunload = emptyFunction;
		attachPreviewableHandlers();
	  if (!window.Music) window.Music = {};  
  	window.Music.emp =  new embeddedMedia.Player();   
	  window.Music.emp.setWidth("206");
	  window.Music.emp.setHeight("106");
	  window.Music.emp.setDomId(args.empDom);
    window.Music.emp.setPlaylist(args.empPlaylist);  
	  window.Music.emp.setConfig(args.empConfig);  
	  window.Music.emp.set("config_settings_autoPlay","false");
		window.Music.emp.write();
		window.Music.emp.onMediaPlayerInitialised = function ()	{
		unhide();
		window.Music.emp.register('onPlaybackProgress')              
		window.Music.emp.onPlaybackProgress = function(e) { onPlayback(e); }
		window.Music.emp.register('onMediaPlaying');
		window.Music.emp.onMediaPlaying = function(e) { onPlaying();	}	
		 }
	}         
                                                       

	if (!window.Music) window.Music = {};  
	window.Music.play = function(param) { playItem(param) };     
	window.Music.setup = function(args){setup(args)}; 
	window.Music.enlarge_canvas = function(el,radius){ enlarge_canvas(el,radius)};    
	window.Music.reduce_canvas = function(el,radius){reduce_canvas(el,radius)};
	window.Music.draw_percent_canvas = function(percent){draw_percent_canvas(percent)};
  window.Music.return_current = function(){   return currentlyPlayingItem.trackNumber;};

	/****** canvas functions ********/
 

	 function implementsCanvas() {    
		var browserImplementsCanvas = !!document.createElement('canvas').getContext;
	  var ieImplementation = false;
	 if (typeof window.CanvasRenderingContext2D == 'undefined' &&
		    typeof G_vmlCanvasManager == 'undefined') {	         
		}
		else { ieImplementation = true;}
		return (browserImplementsCanvas || ieImplementation);
		}
		
	function playCanvasIfPossible(number){
		 if (implementsCanvas()) {  
				enlarge_canvas(number,5) 
			}  
	} 

	function pauseCanvasIfPossible(number){
		 if (implementsCanvas()) {
				reduce_canvas(number,12) 
			}  
	} 
	
	function buildCanvasHtml(item) {

 	 var liTag =  glow.dom.get(getPreviewableItems(item.trackNumber.toString())).parent();
	 var trackNumber = item.trackNumber;
	 canvas = document.createElement('CANVAS');  
	 /**** parameterise ***/
	 canvas.setAttribute('width',28);  
	 canvas.setAttribute('height',28);
	 /**** parameterise ***/
	 liTag.append(canvas);
	 //console.log('hello' +item.trackNumber );
	 //initiate excanvas instance 
	 if (typeof window.G_vmlCanvasManager!="undefined") { 
			canvas=window.G_vmlCanvasManager.initElement(canvas);
		} 
   window.Music.ctx[trackNumber] = liTag.get('canvas')[0].getContext("2d");

	}	   
	


   



	function enlarge_canvas(el,radius) 
	{
	    window.Music.ctx[el].clearRect(0,0,28,28);
		  window.Music.ctx[el].save();
			window.Music.ctx[el].beginPath(); 
			window.Music.ctx[el].strokeStyle = '#ccc'; 
			window.Music.ctx[el].lineWidth = 3	;  
	    window.Music.ctx[el].arc(14,14,radius,-(Math.PI/2),((Math.PI*(99.8/50))-(Math.PI/2)),false);
	    window.Music.ctx[el].stroke();
			window.Music.ctx[el].closePath(); 
			window.Music.ctx[el].restore();
			if (radius < 12	 ) 
			{  
				 radius = radius + 1;    			 	
				setTimeout('window.Music.enlarge_canvas('+ el + ',' + radius  +')', 25);

			}
	}

	function reduce_canvas(el,radius) 
	{
	    window.Music.ctx[el].clearRect(0,0,28,28);
		  window.Music.ctx[el].save();
			window.Music.ctx[el].beginPath(); 
			window.Music.ctx[el].strokeStyle = '#ccc'; 
			window.Music.ctx[el].lineWidth = 3	;  
	    window.Music.ctx[el].arc(14,14,radius,-(Math.PI/2),((Math.PI*(99.8/50))-(Math.PI/2)),false);
	    window.Music.ctx[el].stroke();
			window.Music.ctx[el].closePath(); 
			window.Music.ctx[el].restore();
			if (radius > 5	 ) 
			{
				radius = radius - 1;
				setTimeout('window.Music.reduce_canvas('+ el + ',' + radius + ')', 25);		
			}
			else
			{  }


	} 
	
	function draw_percent_canvas(percent) 
	{       
		  var el = Music.return_current();
	 
      window.Music.ctx[el].clearRect(0,0,28,28);
			window.Music.ctx[el].save();
			window.Music.ctx[el].beginPath(); 
			window.Music.ctx[el].lineWidth = 3	;
			window.Music.ctx[el].strokeStyle = '#ccc'; 
	   	window.Music.ctx[el].arc(14,14,12,-(Math.PI/2),((Math.PI*(99.8/50))-(Math.PI/2)),false);
	   	window.Music.ctx[el].stroke();
			window.Music.ctx[el].closePath(); 
			window.Music.ctx[el].restore();
			window.Music.ctx[el].save();
			window.Music.ctx[el].beginPath(); 
			window.Music.ctx[el].lineWidth = 3	;  
			window.Music.ctx[el].strokeStyle = '#2892DE';   
		  window.Music.ctx[el].arc(14,14,12,-(Math.PI/2),((Math.PI*(percent/50))-(Math.PI/2)),false);
	    window.Music.ctx[el].stroke();
			window.Music.ctx[el].closePath(); 
			window.Music.ctx[el].restore();   
	}  
	


function emptyFunction() {} 
           
                                 
})();          
