/**
 * Create Media.Dtk namespace
 */
YAHOO.namespace('Media.Dtk');

YAHOO.Media.Dtk.CarouselMgr = new function() {
	var collections = new Array;
	
	return {
		init : function(id){
			var tScroller = YAHOO.util.Dom.get(id);
			var hashId = YAHOO.util.Dom.generateId(tScroller);
			if( !collections[hashId] ){
				// only init this module if it doesn't already exist in the carousel manager
				collections[hashId] = YAHOO.Media.Dtk.Carousel;
				collections[hashId].init(tScroller);
			}
//			alert("collections.len = " + collections.length);
		},
		
		initAll : function(){
			var scrollers = YAHOO.util.Dom.getElementsByClassName('dtk-carousel','div',document);
			for (var x=0; x<scrollers.length; x++){
				YAHOO.Media.Dtk.CarouselMgr.init(scrollers[x]);
			}
		}
	}
}();


YAHOO.Media.Dtk.Carousel = function() {
	
	function init(obj) {
		s = YAHOO.util.Dom.getElementsByClassName('scrollbody','div',obj);
		var list = YAHOO.util.Dom.getElementsByClassName('dtk-list','ul',obj);
		var len = list.length;
      
		var r = YAHOO.util.Dom.getRegion(list[0]);		// get region of first item, as all "page" items should be same width
		s[0].scrollDistance = r.right - r.left;			// width of first "page" item
		s[0].pages = len;								// save how many scrollable pages we have for this module
		s[0].current = 0;								// set to first page by default
	
		if( len > 1 ){
			// only add nav buttons and page indicators if more than one page
			addNavButtons(obj,s[0]);
			addPageIndicators(obj,s[0]);
			updateNavState(s[0]);
		}
	}
  
	function getDataSuccess(o) {
		if(o.responseText){
			//o.responseText.replace(/<\!--.+-->/gim,'');			// strip out comments (doesn't seem to work)

			// instantiate json
			var oArr = eval(o.responseText);
			
			// Get array of pages for this module specified by o.argument.id
			var list = YAHOO.util.Dom.getElementsByClassName('dtk-list','ul',YAHOO.util.Dom.get(o.argument.id));

			// loop through end of array
			if( oArr ){
				var numPostLoad = oArr.length;
				var numPages = list.length;
				for(var i=0;i<numPostLoad;i++){
					var pg = oArr[i].pgIdx;
					var html = oArr[i].pgHtml;
					if(pg < numPages){
						list[pg].innerHTML = html;		// only set inner html if page index is within bounds
					}
				}
			}
		}
	}
	
	function getDataFailure(o) {
		// stub func;
	}
  
	function getData(id,url) {
		var callback = {
			success: getDataSuccess,
			failure: getDataFailure,
			argument: {
				id: id
			}
		}
		var oConObj = YAHOO.util.Connect.asyncRequest('GET',url,callback,null);
	}
  
	function addPageIndicators(obj,scrollBody) {
		scrollBody.navList = document.createElement('div');
		YAHOO.util.Dom.addClass(scrollBody.navList,'scrollnav');
		var len = scrollBody.pages;

		for (var x=0;x<len;x++){
			var linkItem = document.createElement('a');
			linkItem.setAttribute("href", "pg:"+(x+1));
			YAHOO.util.Event.addListener(linkItem,"click",scrollToPage, { scrollBody:scrollBody, targetPage:x });	// we create a new custom object to pass in scrollBody along with the targetPage
			if (x == scrollBody.current) {
				YAHOO.util.Dom.addClass(linkItem,'current');
			}
			scrollBody.navList.appendChild(linkItem);
		}
		// insert navlist before <div class="scrollbody">
		scrollBody.parentNode.insertBefore(scrollBody.navList, scrollBody);
	}
  
	function addNavButtons(obj,scrollBody) {
		// create prev link
		scrollBody.prev = document.createElement('a');
		scrollBody.prev.setAttribute("href", "null");
		
		// clone next link from prev link
		scrollBody.next = scrollBody.prev.cloneNode(true);

		// add appropriate classes to each
		YAHOO.util.Dom.addClass(scrollBody.prev,"prev");
		YAHOO.util.Dom.addClass(scrollBody.next,"next");
		
		// add listeners to links (we pass scrollBody wrapped in another object for consistency with the scrollToPage() function
		YAHOO.util.Event.addListener(scrollBody.prev,"click",scrollPrev, { scrollBody:scrollBody });
		YAHOO.util.Event.addListener(scrollBody.next,"click",scrollNext, { scrollBody:scrollBody });
		
		// insert nodes into dom before <div class="scrollbody">
		scrollBody.parentNode.insertBefore(scrollBody.prev, scrollBody);
		scrollBody.parentNode.insertBefore(scrollBody.next, scrollBody);
	}
  
	function scrollNext(e,obj) {
		this.blur();
		YAHOO.util.Event.stopEvent(e);

		// instantiate anim object if one doensn't yet exist
		if( !obj.scrollBody.anim ){
			obj.scrollBody.anim = new YAHOO.util.Scroll(obj.scrollBody, { scroll:{} }, 1.5, YAHOO.util.Easing.easeOut);
		}
		
		// only do anim logic if not currently animating		
		if( !obj.scrollBody.anim.isAnimated() ){
			if (obj.scrollBody.current < obj.scrollBody.pages-1) {
				var end = (++obj.scrollBody.current) * obj.scrollBody.scrollDistance ;
				obj.scrollBody.anim.attributes.scroll.to = [end, 0];
				obj.scrollBody.anim.animate();
			}
			updateNavState(obj.scrollBody);
		}
	}
  
	function scrollPrev(e,obj) {
		this.blur();
		YAHOO.util.Event.stopEvent(e);

		// instantiate anim object if one doensn't yet exist
		if( !obj.scrollBody.anim ){
			obj.scrollBody.anim = new YAHOO.util.Scroll(obj.scrollBody, { scroll:{} }, 1.5, YAHOO.util.Easing.easeOut);
		}

		// only do anim logic if not currently animating		
		if( !obj.scrollBody.anim.isAnimated() ){
			if (obj.scrollBody.current > 0) {
				var end = (--obj.scrollBody.current) * obj.scrollBody.scrollDistance;
				obj.scrollBody.anim.attributes.scroll.to = [end, 0];
				obj.scrollBody.anim.animate();
			}
			updateNavState(obj.scrollBody);
		}
	}
  
	function scrollToPage(e,obj) {
		this.blur();
		YAHOO.util.Event.stopEvent(e);

		// instantiate anim object if one doensn't yet exist
		if( !obj.scrollBody.anim ){
			obj.scrollBody.anim = new YAHOO.util.Scroll(obj.scrollBody, { scroll:{} }, 1.5, YAHOO.util.Easing.easeOut);
		}

		// only do anim logic if not currently animating		
		if( !obj.scrollBody.anim.isAnimated() ){
			if (obj.scrollBody.current != obj.targetPage) {
				var end = obj.targetPage * obj.scrollBody.scrollDistance;			// calc scroll distance to new page
				obj.scrollBody.current = obj.targetPage;							// save target page as new current page
				obj.scrollBody.anim.attributes.scroll.to = [end, 0];
				obj.scrollBody.anim.animate();
			}
			updateNavState(obj.scrollBody);					// update nav states
		}
	}
  
	function updateNavState(obj) {
		// get # of pages
		var len = obj.navList.childNodes.length;
		
		// update page indicator styles
		for (var x=0; x<len; x++) {
			YAHOO.util.Dom.removeClass(obj.navList.childNodes[x],'current');
			if (x == obj.current) {
				YAHOO.util.Dom.addClass(obj.navList.childNodes[x],'current');
			}
		}
		
		// update button styles
		if(obj.current == 0){
			// first page (left inactive)
			YAHOO.util.Dom.addClass(obj.prev,'off');
			YAHOO.util.Dom.setStyle(obj.prev,'opacity',0.2);

			YAHOO.util.Dom.removeClass(obj.next,'off');
			YAHOO.util.Dom.setStyle(obj.next,'opacity',1);
		}
		else if(obj.current == (len-1)){
			// last page (right inactive)
			YAHOO.util.Dom.removeClass(obj.prev,'off');
			YAHOO.util.Dom.setStyle(obj.prev,'opacity',1);

			YAHOO.util.Dom.addClass(obj.next,'off');
			YAHOO.util.Dom.setStyle(obj.next,'opacity',0.2);
		} else {
			// all other pages (all active)
			YAHOO.util.Dom.removeClass(obj.prev,'off');
			YAHOO.util.Dom.setStyle(obj.prev,'opacity',1);

			YAHOO.util.Dom.removeClass(obj.next,'off');
			YAHOO.util.Dom.setStyle(obj.next,'opacity',1);
		}
	}
  
	return {
		init : init,
		getData : getData
	}

}();

//YAHOO.util.Event.addListener(window, "load", YAHOO.Media.Dtk.CarouselMgr.initAll);


function imageChange(propertyIMG,url){
	var obj = YAHOO.util.Dom.get(propertyIMG);
	obj.src = url;
	}



