IRIS.eaauctions.Catalogue = {

	init: function() {
		var imageDivs = Dom.getElementsByClassName('itemImage_thumb', 'div');
		for( var i in imageDivs ) {
			var rel = imageDivs[i].getAttribute('rel');
			if( rel ) {
				YEvent.addListener(imageDivs[i], 'mouseover', this.loadImage, this, true);
			}
		}
	},
	
	loadImage: function(e, obj) {
		var imageDiv = YEvent.getTarget(e);
		while( imageDiv.tagName != 'DIV' ) {
			imageDiv = imageDiv.parentNode;
		}
		var img = document.createElement('img'),
			rel = imageDiv.getAttribute('rel');
		YEvent.removeListener(imageDiv, 'mouseover', this.loadImage);
		imageDiv.removeAttribute('rel');
		Dom.removeClass(imageDiv, 'noImage');
		imageDiv.innerHTML = '<span></span>';
		Dom.setAttribute(img, 'src', rel.substr(4, rel.length - 3));
		imageDiv.appendChild(img);
	},

	adjustGridHeight: function( id ) {
		var el = Dom.get(id),
			items = Dom.getChildren(el), i, thumb, img, children, maxHeight = 0, thumbs = [];
		for( i = 0; i < items.length; i++ ) {
			if( Dom.hasClass(items[i], 'clearing') ) {
				this.setHeight(thumbs, maxHeight);
				thumbs = [];
				maxHeight = 0;
			}
			children = Dom.getChildren(items[i]);
			if( children.length ) {
				thumb = children[0];
				img = thumb.getElementsByTagName('IMG')[0];
				if( img.height > maxHeight ) {
					maxHeight = img.height;
				}
				thumbs.push(thumb);
			}
		}
		this.setHeight(thumbs, maxHeight);
	},

	setHeight: function( els, height ) {
		for( var i = 0; i < els.length; i++ ) {
			els[i].style.height = height + 'px';
		}
	}

};

IRIS.eaauctions.CatalogueStatus = {
	extendedTime: true,
	type: null,

	closeBidding: function( id ) {
		var children = Dom.getChildren(Dom.getChildren(this.lots[id].element)[0]);
		for( var i = 0; i < children.length; i++ ) {
			Dom.setStyle(children[i], 'display', 'none');
		}
		Dom.setStyle(Dom.getElementsByClassName('itemName', 'div', this.lots[id].element), 'display', 'block');
	},

	getCurrentUnixTime: function() {
		var currentTime = new Date,
			unixtime_ms = currentTime.getTime();
		return parseInt(unixtime_ms / 1000);
	},

	getEndTime: function( id, format ) {
		var label,
			rv,
			timeInSeconds = this.lots[id].time - this.getCurrentUnixTime();
		
		if( timeInSeconds <= 0 )
			this.setTimeComplete(id);
		
		return format ? IRIS.eaauctions.getFormattedTime(timeInSeconds, true) : timeInSeconds;
	},

	removeLotFromArray: function( id ) {
		if( this.lots[id].interval ) {
			this.lots[id].interval.cancel();
		}
		delete this.lots[id];
	},

	setTimeComplete: function( id ) {
		if( this.lots[id].interval ) {
			this.lots[id].interval.cancel();
		}
		var elements = Dom.getElementsByClassName('lastBids', 'div', this.lots[id].element),
			element = elements[0],
			text;
		if( !element ) {
			return;
		}
		switch(this.lots[id].timeType) {
			case 'start':
				text = this.lots[id].join;
				element.parentNode.removeChild(element);
				this.lots[id].element.innerHTML += text;
				break;
			case 'end':
				if( !this.lots[id].effectiveEndTime || this.lots[id].effectiveEndTime > this.getCurrentUnixTime() ) {
					text = 'Last bids - bid now';
					if( this.lots[id].effectiveEndTime ) {
						var that = this,
							timeout = this.lots[id].effectiveEndTime - this.getCurrentUnixTime();
						setTimeout(function() { that.closeBidding(id); }, timeout);
					}
				}
				else {
					this.closeBidding(id);
				}
				element.innerHTML = text;
				break;
		}
		Dom.addClass(element, 'emphasis');
	},
	
	setLotStatuses: function( lots, type ) {
		if( typeof type == 'undefined' ) {
			type = this.type;
		}
		if( this.lots ) {
			for( var id in lots ) {
				this.lots[id] = lots[id];
			}
		}
		else {
			this.lots = lots;
		}
		// Store reference to element
		// If the element has been moved off stage, remove it from memory
		var selectorPrefix = 'lotStatus';
		switch( type ) {
			case 'details':
				selectorPrefix += '-details_';
				break;
			case 'listing':
				selectorPrefix += '-listing_';
				break;
			default:
				selectorPrefix += '_';
		}

		for( id in lots ) {
			this.lots[id].element = Dom.get(selectorPrefix + id);
			if( !this.lots[id].element ) {
				this.removeLotFromArray(id);
			}
		}
		var lotNumber = Dom.get('imageLotNumber');
		for( id in lots ) {
			this.lots[id].element.innerHTML = this.lots[id].html;
			if( !this.lots[id].element.parentNode ) {
				this.removeLotFromArray(id);
			}
			else {
				if( !this.lots[id].interval && this.lots[id].time ) {
					if( this.lots[id].time >= this.getCurrentUnixTime() ) {
						this.lots[id].interval = YAHOO.lang.later(1000, this, this.updateTime, id, true);
					}
					else if( this.lots[id].time <= this.getCurrentUnixTime() ) {
						this.setTimeComplete(id);
					}
				}
			}
			if( lotNumber && lots[id].lotNumber ) {
				lotNumber.innerHTML = "Lot # " + lots[id].lotNumber;
			}
		}
		if( lotNumber && !lotNumber.innerHTML ) {
			lotNumber.style.display = 'none';
		}
	},
	
	updateTime: function( id ) {
		if( typeof(this.lots[id].element.parentNode)=='undefined' ) {
			this.removeLotFromArray(id);
		}
		else {
			if( !this.lots[id].timeElement ) {
				var elements = Dom.getElementsByClassName('time', 'span', this.lots[id].element);
				this.lots[id].timeElement = elements[0];
			}
			if( this.lots[id].timeElement ) {
				this.lots[id].timeElement.innerHTML = this.getEndTime(id, true);
			}
		}
	}
};

YEvent.onDOMReady(function() {
	if( Dom.get('itemForm') ) {
		function createRequiredSpan( id ) {
			var label = Dom.get(id),
				span = document.createElement('SPAN');
			if( label ) {
				span.className = 'requiredField';
				span.innerHTML = ' * ';
				label.appendChild(span);
			}
			return span;
		}
		createRequiredSpan('item_financeCompany_label');
		createRequiredSpan('item_financePayoutFigure_label');
		createRequiredSpan('item_contractNumber_label');
		var radioEls = [Dom.get('item_financeOnItem_true'), Dom.get('item_financeOnItem_false')],
			rules = [new RequiredRule('item_financeCompany'), 
					new RequiredRule('item_financePayoutFigure'),
					new RequiredRule('item_contractNumber')
			],
			financeEls = [
		            Dom.get('item_financeCompany_li'),
		            Dom.get('item_financePayoutFigure_li'),
					Dom.get('item_contractNumber_li')
			],
			handleFinance = function() {
				if( radioEls[0].checked ) {
					Dom.setStyle(financeEls, 'display', 'block');
				}
				else {
					Dom.setStyle(financeEls, 'display', 'none');
				}
				for( var i = 0; i < rules.length; i++ ) {
					if( radioEls[0].checked ) {
						Validator.addRule(rules[i]);
					}
					else {
						Validator.removeRule(rules[i]);
					}
				}
			};
		YEvent.on(radioEls, 'change', handleFinance);
		handleFinance.call();
	}
});
