var Carousel = function(carouselEl, carouselCfg, carouselObj) {
	//Private attributes
	var carouselItems;
	
	//Priviledged methods.
	this.getCarouselItems = function(carousel, args) {
		var start = args[0];
		var last = args[1];
		var innerHTML;
		for(var i=start;i<=last;i++) {
			innerHTML = '<a href="' + carouselItems.urlList[i - 1] + '" title="' + carouselItems.altTextList[i - 1] + '" class="photo-detail"><img src="' + carouselItems.imgPathList[i - 1] + '" width="84" height="104" /><\/a>';
			carousel.addItem(i, innerHTML);
		}
		return carousel;
	};
	this.getCarouselSize = function() {
		return carouselItems.imgPathList.length;
	}
	this.setCarouselItems = function(obj) {
		carouselItems = obj;
	};
	//Constructor Code
	this.setCarouselItems(carouselObj);
	this.init(carouselEl, carouselCfg);
};

Carousel.prototype = {
	init: function(id, cfg) {
		var $D = YAHOO.util.Dom;
		var $E = YAHOO.util.Event;
		var size = this.getCarouselSize();
		var that = this;
		var indicator = $D.get(id + "-indicator");
		var magnify = $D.get(id + "-magnify");
		var of = indicator.firstChild.nodeValue;
		
		var config = {
          	numVisible:        1,
			animationSpeed:    0.25,
			scrollInc:         1,
			size: size,
			loadInitHandler: function(type, args) {
				that.getCarouselItems(this, args);
				indicator.innerHTML = args[0] + " " + of + " " + size;
			},
			loadNextHandler: function(type, args) {
				var alreadyCached = args[2];
				if(!alreadyCached) {
					that.getCarouselItems(this, args);
				}
				indicator.innerHTML = args[0] + " " + of + " " + size;	
			},
			loadPrevHandler: function(type, args) {
				var alreadyCached = args[2];
				if(!alreadyCached) {
					that.getCarouselItems(this, args);
				}
				indicator.innerHTML = args[0] + " " + of + " " + size;
			},
			prevButtonStateHandler: function(type, args) {
				var enabling = args[0];
        		var leftImage = args[1];
        		if(enabling) {
					leftImage.className = "enabled";	
				} else {
					leftImage.className = "disabled";	
				}
			},
			nextButtonStateHandler: function(type, args){
				var enabling = args[0];
				var rightImage = args[1];

				if(enabling) {
					rightImage.className = "enabled";	
				} else {
					rightImage.className = "disabled";
				}
			} 
      };
	  
	  for (var key in cfg) {
         if (!cfg.hasOwnProperty(key)) { continue; }
         config[key] = cfg[key];
      };
	  
	 
	  this.carousel = new YAHOO.extension.Carousel(id, config);
	  $E.on(id, "click", this.photoPop, this);
	  $E.on(id, "mouseover", this.showMagnifyingGlass, magnify);
	  $E.on(id, "mouseout", this.hideMagnifyingGlass, magnify);
	  
	},
	photoPop: function(e) {
		var $E = YAHOO.util.Event;
		var target = $E.getTarget(e);
		while (target.id != this.id) {
			if (target.nodeName.toLowerCase() === "a") {
				$E.preventDefault(e);
				sendto('no_country','no_brand', target.href,'18');
				break; 
			}
			else {
				target = target.parentNode;	
			}
		}	 
	},
	showMagnifyingGlass: function(e, obj) {
		var $E = YAHOO.util.Event;
		var target = $E.getTarget(e);
		while (target.id != this.id) {
			if (target.nodeName.toLowerCase() === "a") {
				obj.className = "magnifying-glass-hover";
				break; 
			}
			else {
				target = target.parentNode;	
			}
		} 
	},
	hideMagnifyingGlass: function(e, obj) {
		var $E = YAHOO.util.Event;
		var target = $E.getTarget(e);
		while (target.id != this.id) {
			if (target.nodeName.toLowerCase() === "a") {
				obj.className = "magnifying-glass";
				break; 
			}
			else {
				target = target.parentNode;	
			}
		} 

	}
};