

$(document).ready(
    function() {
        
    	// add edited class so we can tell
    	// whether we should auto-update input
    	// box or not
    	$(':text[name=incrAmount]').focus(
    		function() {	
    			$(this).addClass("edited");
    		}
    	);
    	
    	function updateBiddingStatus(biddingStatus, lot) {
    		var statusClasses = [ 'winning', 'losing', 'won', 'lost', 'belowReserve' ];
		    var status = '';
		    var statusText = '';
		    if ( lot.belowReserve && lot.winning ) {
		    	status = 'belowReserve';
		    	statusText = 'Below Reserve';
		    }
		    else if ( lot.winning && lot.biddingOpen ) {
		    	status = 'winning';
		    	statusText = 'You are winning';
		    }
		    else if ( lot.losing && lot.biddingOpen ) {
		    	status = 'losing';
		    	statusText = 'You are losing';
		    }
		    else if ( lot.winning && !lot.biddingOpen ) {
		    	status = 'won';
		    	statusText = 'You won';
		    }
		    else if ( lot.losing && !lot.biddingOpen ) {
		    	status = 'lost';
		    	statusText = 'You lost';
		    }
		    for ( var i = 0; i < statusClasses.length; i++ ) {
		    	var statusi = statusClasses[i];
		    	if ( statusi != status ) {
		    		biddingStatus.removeClass(statusi);
		    	}
		    }
		    if ( status ) {
		    	biddingStatus.addClass(status);
		    }
		    biddingStatus.find('span').text(statusText);
    	}
    	
    	function calcTimeRemaining(lot) {
    		var timeRemainingMillis = lot.timeRemainingMillis;
    		if ( timeRemainingMillis > 0 ) {
    			var days    = Math.floor(timeRemainingMillis/(1000*24*60*60));
				var hours   = Math.floor((timeRemainingMillis/(1000*60*60)) - days*24);
				var minutes = Math.floor((timeRemainingMillis/(1000*60)) - 60*(days*24 + hours));
				var seconds = Math.floor((timeRemainingMillis/(1000)) - 60*(60*(days*24 + hours) + minutes));
				
				if ( days > 0 ) {
					return days+"d "+hours+"h";
				}
				else if ( hours > 0 ) {
					return hours+"h "+minutes+"m";
				}
				else if ( minutes > 0 ) {
					return minutes+"m "+seconds+"s";
				}
				else {
					return seconds+"s";
				}
    		}
    		else {
    			return "bidding ended";
    		}
    	}
    	
    	function processLotJSON(id, lot) {
		    var currentBid        = lot.currentBid;
		    var nextBid           = lot.nextBid;
		    var belowReserve      = lot.belowReserve;
		    var userAutobidAmount = lot.userAutobidAmount;
		    var winning           = lot.winning;
		    var losing            = lot.losing;
		    var biddingOpen       = lot.biddingOpen;
		    var bidCount          = lot.bidCount;
		    
		    var details = $('#lot_'+id);
		    
		    var currentBidLabel = 'Current bid:';
		    if ( bidCount == 0 ) {
		    	currentBidLabel = 'Opening bid:';
		    }
		    else if ( !biddingOpen ) {
		    	currentBidLabel = 'Final bid:';
		    }
		    
		    details.find('.currentBid .label').text(currentBidLabel);
		    details.find('.currentBid .value').text(currentBid);
		    
		    var bidBox = details.find(':text[name=incrAmount]');
		    if ( bidBox.size() > 0 ) {
			    if ( !(bidBox.hasClass("edited") || bidBox.hasClass("error")) && bidBox.val() != nextBid ) {
			    	bidBox
			    		.val(nextBid)
			    		.css('background', '#FFFF00');
			    	setTimeout(
			    		function() { bidBox.css('background', 'none') },	
			    		500
			    	);
			    }
		    }
		    
		    var biddingStatus = details.find('.currentBid .biddingStatus');
		    updateBiddingStatus(biddingStatus, lot)
		    
		    details.find('.bidCount .value').text(bidCount);
		  	
		    details.find('.endDate .value').text(lot.endDate);
		    details.find('.endDate .remaining').text(calcTimeRemaining(lot));
		    
		    details.find('tr.overtime .value').text(lot.overtimeActive? "Overtime bidding" : "");
		    
		    if ( !biddingOpen ) {
		    	details.find('tr.overtime').remove();
		    	details.find('tr.errors').remove();
		    	details.find('tr.incrementalBid').remove();
		    	details.find('tr.autoBid').remove();
		    }
		    else {
				if ( userAutobidAmount > currentBid ) {			
					details.find('.currentAutobid').html("(Current autobid is &pound;"+userAutobidAmount+")"); 
				}
				else {
					details.find('.currentAutobid').html("");		    
				}
		    }
		}
    	
    	attachAllJavascriptBidding($('div.itemBidding'));
        
    	setTimeout(function() { updateLots(processLotJSON); }, 500);
    }
);