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,

	getCurrentUnixTime: function() {
		var currentTime = new Date,
			unixtime_ms = currentTime.getTime(),
			unixtime = parseInt(unixtime_ms / 1000);
		
		return unixtime;
	},
		
	getEndTime: function( id, format ) {
		var label,
			rv,
			timeInSeconds = this.lots[id]['time'] - this.getCurrentUnixTime();
		
		if( timeInSeconds <= 0 ) {
			this.setTimeComplete(id);
		}
		
		if( format ) {
			if( timeInSeconds > 86400 ) {
				rv = this.getFormattedTime('days', timeInSeconds);
				if( this.extendedTime ) {
					timeInSeconds = ((timeInSeconds / 86400) - Math.floor(timeInSeconds / 86400)) * 86400;
					if( timeInSeconds != 0 ) {
						rv += ' ' + this.getFormattedTime('hours', timeInSeconds);
					}
				}
			}
			else if( timeInSeconds > 3600 ) {
				rv = this.getFormattedTime('hours', timeInSeconds);
				if( this.extendedTime ) {
					timeInSeconds = ((timeInSeconds / 3600) - Math.floor(timeInSeconds / 3600)) * 3600;
					if( timeInSeconds != 0 ) {
						rv += ' ' + this.getFormattedTime('minutes', timeInSeconds);
					}
				}
			}
			else if( timeInSeconds > 60 ) {
				rv = this.getFormattedTime('minutes', timeInSeconds);
				if( this.extendedTime ) {
					timeInSeconds = ((timeInSeconds / 60) - Math.floor(timeInSeconds / 60)) * 60;
					if( timeInSeconds != 0 ) {
						rv += ' ' + this.getFormattedTime('seconds', timeInSeconds);
					}
				}
			}
			else {
				rv = this.getFormattedTime('seconds', timeInSeconds);
			}
		}
		else {
			rv = timeInSeconds;
		}
		
		return rv;
	},
	
	getFormattedTime: function( period, timeInSeconds ) {
		var rounding = Math.round,
			time,
			rv = '';
		
		if( this.extendedTime ) {
			rounding = Math.floor;
		}
			
		switch(period) {
			case 'days':
				time = rounding(timeInSeconds / 60 / 60 / 24);
				rv = time + ' day';
				if( time > 1 ) {
					rv += 's';
				}
				break;
			case 'hours':
				time = rounding(timeInSeconds / 60 / 60);
				if( time > 0 ) {
					rv = time + ' hour';
					if( time > 1 ) {
						rv += 's';
					}
				}
				break;
			case 'minutes':
				if( time > 0 ) {
					rv = rounding(timeInSeconds / 60) + ' min';
				}
				break;
			case 'seconds':
				if( time > 0 ) {
					rv = timeInSeconds + ' sec';
				}
				break;
		}
		return rv;
	},
	
	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;
		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':
				text = 'Last bids - bid now';
				element.innerHTML = text;
				break;
		}
		Dom.addClass(element, 'emphasis');
	},
	
	setLotStatuses: function( lots ) {
		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( this.type ) {
			case 'details':
				selectorPrefix += '-details_';
				break;
			case 'listing':
				selectorPrefix += '-listing_';
				break;
			default:
				selectorPrefix += '_';
		}

		for( id in this.lots ) {
			this.lots[id]['element'] = Dom.get(selectorPrefix + id);
			if( !this.lots[id]['element'] ) {
				this.removeLotFromArray(id);
			}
		}
		for( id in this.lots ) {
			this.lots[id]['element'].innerHTML = this.lots[id]['status'];
			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.lots[id]['timeType'] == 'start' ) {
						this.setTimeComplete[id];
					}
				}
			}
		}
	},
	
	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();
	}
});