YAHOO.namespace('YAHOO.gp.productTileList');

YAHOO.gp.productTileList.Tile = (function(aElement) {
	var element = aElement;
	var currentAnimation = null;

	YAHOO.util.Dom.generateId(element);

	if(hasSubline()) {
		attachEvents();
	}

	function attachEvents() {
		YAHOO.util.Event.addListener(document.body, 'mouseover', handleRollover);
		YAHOO.util.Event.addListener(document.body, 'click', handleClick);
	}

	function cancelCurrentAnimation() {
		if(currentAnimation != null) {
			currentAnimation.stop();
		}
	}

	function gotoLink() {
		var linkContainer = YAHOO.util.Dom.getElementsByClassName('linkUrl', 'div', element)[0];
		if(linkContainer == null) return;
		if(linkContainer.firstChild.href != '') location.href = linkContainer.firstChild.href;
	}

	function handleClick(e) {
    	var eTarget = YAHOO.util.Event.getTarget(e);

    	var ancestor = YAHOO.util.Dom.getAncestorBy(eTarget, function(el) {
    		return el.id && el.id == element.id;
    	});

		if(eTarget.id == element.id || ancestor != null) {
			gotoLink();
		}
	}

	function handleRollover(e) {
    	var eTarget = YAHOO.util.Event.getTarget(e);

    	var ancestor = YAHOO.util.Dom.getAncestorBy(eTarget, function(el) {
    		return el.id && el.id == element.id/*YAHOO.util.Dom.hasClass(el, 'content-productTileList-item')*/;
    	});

		if(eTarget.id == element.id || ancestor != null) {
			handleMouseOver();
		}
		else {
			handleMouseOut();
		}
	}

	function handleMouseOver() {
		if(YAHOO.util.Dom.hasClass(element, 'active')) return;
		YAHOO.util.Dom.addClass(element, 'active');

		cancelCurrentAnimation();

		var anim = new YAHOO.util.Anim(getSublineElement(), { opacity: { to: 1 } }, 0.25, YAHOO.util.Easing.easeNone);
		anim.onStart.subscribe(function() {
			var el = this.getEl();
			YAHOO.util.Dom.setStyle(el, 'opacity', 0);
			YAHOO.util.Dom.setStyle(el, 'display', 'block');
		});
		anim.animate();

		currentAnimation = anim;
	}

	function handleMouseOut() {
		//if(!YAHOO.util.Dom.hasClass(element, 'active')) return;
		YAHOO.util.Dom.removeClass(element, 'active');

		cancelCurrentAnimation();


		var anim = new YAHOO.util.Anim(getSublineElement(), { opacity: { to: 0 } }, 0.25, YAHOO.util.Easing.easeNone);
		anim.onComplete.subscribe(function() {
			var el = this.getEl();
			YAHOO.util.Dom.setStyle(el, 'opacity', 0);
			YAHOO.util.Dom.setStyle(el, 'display', '');
		});
		anim.animate();

		currentAnimation = anim;
	}

	function getSublineElement() {
		return YAHOO.util.Dom.getElementsByClassName('subline', 'div', element)[0];
	}

	function hasSubline() {
		var sublineElement = getSublineElement();

		if(sublineElement == null) return false;
		if(YAHOO.lang.trim(sublineElement.innerHTML) == '') return false;
		return true;
	}

	return {};
});

YAHOO.gp.productTileList.Container = (function(listId) {
	var list = document.getElementById(listId);
	var tileElements = list.getElementsByTagName('li');

	if(tileElements.length > 0) {
		var tiles = attachRolloverEvents(tileElements);
	}

	function attachRolloverEvents(tileElements) {
		var ret = [];

		for(var i = 0; i < tileElements.length; i++) {
			var tileElement = tileElements[i];
			var tile = new YAHOO.gp.productTileList.Tile(tileElement);
			ret.push(tile);
		}

		return ret;
	}



	return {
	};
});