CARDS = {
	prepareCards : function(cardsParent, contextEl){
		var i, k, card;
		this.cards = [];
		this.contextEl = contextEl;
		this.contextElChildNodes = [];
		for(i = contextEl.childNodes.length - 1; i >= 0; i--){
			this.contextElChildNodes[i] = contextEl.childNodes[i];
		}
		for(i = cardsParent.childNodes.length - 1; i >= 0; i--){
			if(cardsParent.childNodes[i].nodeName.toLowerCase() == "div"){
				card = cardsParent.childNodes[i];
				this.cards.push(card);
				for(k = card.childNodes.length -1; k >= 0; k--){
					// remove textNodes
					if(card.childNodes[k].nodeType == 3) {
						card.removeChild(card.childNodes[k]);
					} else {
						if(!card.cardHref && card.childNodes[k].getAttribute("href")){
							card.cardHref = card.childNodes[k].getAttribute("href");
							card.onclick = this.clickHandler;
							card.style.cursor = "pointer";
						}
					}
				}
				if(card.childNodes.length > 0) {
					card.childNodes[0].style.display = "block";
				} else {
					card.appendChild(document.createTextNode(" "));
				}
				card.cardContext = card.childNodes[3];
				card.setHover = this.setHover;
			}
		}
		document.onmousemove = this.mouseMoveHandler;
		if(document.captureEvents) document.captureEvents(Event.MOUSEMOVE);
	},

	mouseMoveHandler : function(e){
		e = e || window.event;
		var
			el = e.srcElement || e.target,
			i, k, card, subEls, hover, activeCard
		;
		for(i = CARDS.cards.length -1; i >= 0; i--){
			card = CARDS.cards[i];
			hover = false;
			subEls = card.getElementsByTagName("*")
			for(k = subEls.length - 1; k >= 0; k--){
				if(subEls[k] === el) {
					activeCard = card;
					hover = true;
				}
			}
			card.setHover(hover);
		}
		CARDS.setContext(activeCard ? activeCard.cardContext : null);
	},

	clickHandler : function() {
		if(this.cardHref) location.href = this.cardHref;
	},

	setHover : function(hover) {
		if(this.childNodes.length > 1){
			this.childNodes[0].style.display = hover ? "" : "block";
			this.childNodes[1].style.display = hover ? "block" : "";
		}
	},

	clearContext : function(){
		for(i = this.contextEl.childNodes.length - 1; i >= 0; i--){
			this.contextEl.removeChild(this.contextEl.childNodes[i]);
		}
	},

	setContext : function(cardContext) {
		var i;
		if(cardContext){
			if(this.contextEl.childNodes[0] != cardContext){
				this.clearContext();
				this.contextEl.appendChild(cardContext);
			}
		} else {
			if(this.contextEl.childNodes[0] != this.contextElChildNodes[0]){
				this.clearContext();
				for(i = 0; i < this.contextElChildNodes.length; i++){
					this.contextEl.appendChild(this.contextElChildNodes[i]);
				}
			}
		}
	}
}


