YAHOO.namespace('cs');

YAHOO.cs.CarouselModule = function(data) {	
	var init = false;
	var numItems = 0;
	var currIndex = numItems;
	var autoplay = true;
	var timeout = 5000;
	var t;
	var spotlight = {};
	spotlight.id = YAHOO.util.Dom.get('crsl_spotlight');
	spotlight.title = YAHOO.util.Dom.get('crsl_spotlight_title');
	spotlight.body = YAHOO.util.Dom.get('crsl_spotlight_body');
	spotlight.embed = YAHOO.util.Dom.get('crsl_spotlight_embed');	
	var nav = YAHOO.util.Dom.get('crsl_nav');
    

	var createNavEl = function(obj) {
		var li = document.createElement('li');
		var a = document.createElement('a');
		a.setAttribute('href',getAbsoluteUrl(obj));
		a.innerHTML = (obj.title.length<40) ? obj.title : obj.title.substr(0,40)+'...';
		li.setAttribute('class','crsl_nav_item');
		li.setAttribute('id','item'+numItems);
		li.appendChild(a);
		
		YAHOO.util.Event.on(a, 'mouseover', function(e){	
			if (e) YAHOO.util.Event.preventDefault(e);	
			var idx = li.id.substr(4);			
			makeActive(idx);
			autoplay = false;
			if (t) clearTimeout(t);
		},this,true);
		
		numItems++;
		return li;
	};
	
	
	var highlightNavEl = function(index) {
		var li = YAHOO.util.Dom.getElementsByClassName('crsl_nav_item', 'li', 'crsl_nav');
		YAHOO.util.Dom.removeClass(li,'crsl_nav_selected');
		YAHOO.util.Dom.addClass(li[index], 'crsl_nav_selected');
	};
	
	
	var getAbsoluteUrl = function(obj){
		var monthname = ["jan","feb","mar","apr","may","jun","jul","aug","sep","oct","nov","dec"];
		var parts = String(obj.date).split(/[-]/);
	
		//stripping the leading 0
		if (parts[1][0] === 0) {
			parts[1] = parts[1][1];
		}
		
		y = parts[0];
		m = monthname[parts[1]-1];
		d = parts[2];
		
		return "/news/"+y+"/"+m+"/"+d+"/"+obj.slug;
		
	};
	
	var formatBody = function(obj) {
		var length = (obj.embed) ? 200 : 400;
		if (obj.body.length<length) return obj.body;
		
		text = obj.body.replace(/(<([^>]+)>)/ig,"");	
		text = text.substr(0,length);
		text += '...  <a class="more" href="'+getAbsoluteUrl(obj)+'">Read&nbsp;more</>';
		
		return text;
	};
	
	
	var formatEmbed = function(embed) {		
		if (embed.indexOf('youtube.com')>0) {
			var vidID = embed.substring(embed.indexOf('?v=')+3);
			if (embed.indexOf('default.jpg')<0){
				embed = 'http://img.youtube.com/vi/'+vidID+'/default.jpg';	
			}		
			
			//add click listener
			YAHOO.util.Event.onAvailable('swf_obj',function(){			
				YAHOO.util.Event.on(this, 'click', function(){
					var swfobj_container = spotlight.id;
					var swf = 'http://www.youtube.com/v/'+vidID+'&autoplay=1';
					var so = new SWFObject(swf, "mymovie", "268", "205", "8", "#f3f3f3");
					so.write(swfobj_container);
					
					//clear timeout
					if (t) clearTimeout(t);
				});			
			},this);
			
			return '<img src="'+embed+'"><span id="swf_obj" class="play"></span>';
		} 
				
		return '<img src="'+embed+'">';
	};
	
	
	var setSpotlight = function(obj) {	
		spotlight.title.innerHTML = obj.title;
		spotlight.body.innerHTML =  formatBody(obj); 
		spotlight.embed.innerHTML = (obj.embed && obj.embed.length>0) ? formatEmbed(obj.embed) : '';
		
	};
	
	
	var makeActive = function(index) {
		currIndex = index;
		setSpotlight(data[index]);
		highlightNavEl(index);
	};
	
	var autoScroll = function() {
		if (init) {
			currIndex = (currIndex>=numItems-1) ? 0 : currIndex+1;
		}else{
			currIndex = 0;
			init = true;
		}
		
		makeActive(currIndex);
		if (autoplay) {
			t = setTimeout(function(){autoScroll();},timeout);
		}
	};
	
	
	var initNav = function() {
		for (var i=0; i < data.length; i++) {
			var el = createNavEl(data[i]);
			nav.appendChild(el);
		}
	};
	
	
	var initCarousel = function() {
		autoScroll();
	};
	
	
	initNav();
	initCarousel();

};