var Rese = {
	decode: function (data, separators) {
		return Rese.decodeHelper(data, separators, 0);
	},

	decodeHelper: function (data, separators, depth) {
		var parts = data.split(separators[depth]);
		var obj = {};
		
		for(var i = 0; i < parts.length; i++) {
			var key = parts[i].split('=', 1)[0];
			if(key == parts[i]) return key;
			var val = parts[i].substring(key.length + 1);
			obj[key] = Rese.decodeHelper(val, separators, depth + 1);
		}
	
		return obj;
	}
}

var auctions = new Array();
var auctionObjects = new Array();
var serverTimestamp = null;

// additional object
var bidOfficialTime = null;
var bidBalance = null;
var price = '';
var priceFixed = '';
var getstatus_url_time;
var statusUrlBase;
var statusUrl;
var isPeakNow;
var bidClickable = true;

function updateGlobalVersion(version) {
	statusUrl = statusUrlBase + '&v=' + version;
}

function convertToNumber(sourceString){
    return sourceString.replace(/&#[0-9]{1,};/gi, "")
                       .replace(/&[a-z]{1,};/gi, "")
                       .replace(/[a-zA-Z]+/gi, "")
                       .replace(/[^0-9\,\.]/gi, "");
}

function updateRequestSuccess(data) {
	data = Rese.decode(data, ['!', '|', '#', '?', '/']);
	if(data.tstr && bidOfficialTime.length) bidOfficialTime[0].innerHTML = data.tstr;
	if(data.ts) serverTimestamp = data.ts;
	if(data.ipk) isPeakNow = data.ipk;
	if(data.nv) updateGlobalVersion(data.nv);
	$.each(data, updateAuction);
	bidClickable = true;
}

function padNumber(n) {
	return n < 10 ? '0' + n : n;
}

function formatTimeLeft(t) {
	var secsInDay = 86400.0;
	var secsInHour = 3600.0;
	var secsInMinute = 60.0;
	
	var days = Math.floor(t / secsInDay);
	t = t % secsInDay;
	var hours = padNumber(Math.floor(t / secsInHour));
	t = t % secsInHour;
	var minutes = padNumber(Math.floor(t / secsInMinute));
	var seconds = padNumber(t % secsInMinute);
	
	var daysStr = days > 0 ? days + 'd ' : '';
	return daysStr + hours + ':' + minutes + ':' + seconds;
}

function updateAuction(aid, item){
	if(item.tl == undefined) return;
	var aid = parseInt(aid);
	
    if(auctionObjects[aid]['bid-price-fixed'].html()){

        if(auctionObjects[aid]['bid-price-fixed'].length > 1){
            auctionObjects[aid]['bid-price-fixed'].each(function(){
                price = $(this).html();
            });
        }else{
            price = auctionObjects[aid]['bid-price-fixed'].html();
        }
    }else{
        if(auctionObjects[aid]['bid-price'].length > 1){
            auctionObjects[aid]['bid-price'].each(function(){
                price = $(this).html();
            });
        }else{
            price = auctionObjects[aid]['bid-price'].html();
        }
    }

    price = convertToNumber(price);
    
    if(item.u != undefined && auctionObjects[aid]['bid-bidder'].html() != item.u){
    	var latestBidder = item.u ? item.u : 'No bids yet'; 
    	auctionObjects[aid]['bid-bidder'][0].innerHTML = latestBidder;
    	
    }

    if(item.p && price != convertToNumber(item.p)){
        auctionObjects[aid]['bid-price'].html(item.p);
        auctionObjects[aid]['bid-price-fixed'].html(item.p);

        if(auctionObjects[aid]['bid-histories'].length){
            if(auctionObjects[aid]['bid-histories-p'].html()){
                auctionObjects[aid]['bid-histories-p'].remove();
            }

            auctionObjects[aid]['bid-histories-tbody'].empty();

            $.each(item.h, function(n, tRow){
                var row = '<tr><td>' + tRow.c + '</td><td>' + tRow.u + '</td><td>' + tRow.d + '</td></tr>';
                auctionObjects[aid]['bid-histories-tbody'].append(row);
            });

            auctionObjects[aid]['closes-on'].html(item.co);
            auctionObjects[aid]['bid-savings-percentage'].html(item.s.o);
            auctionObjects[aid]['bid-savings-price'].html(item.s.p);
        }

        if(auctionObjects[aid]['bid-flash'] && item.Message){
            auctionObjects[aid]['bid-flash'].html(item.Message.message).show(1).animate({opacity: 1.0}, 2000).hide(1);
        }
        auctionObjects[aid]['flash-elements'].effect("highlight", {}, 1500);
    }

    if(item.po == 1 && isPeakNow == 0){
        auctionObjects[aid]['countdown'].html('Paused');

        auctionObjects[aid]['bid-button-a'].hide();
        if(auctionObjects[aid]['bid-button-p'].html() == ''){
            auctionObjects[aid]['bid-button'].append('<p>Peak Only Auction</p>');
        }
    }else{
        if(item.tl > 0) {
            auctionObjects[aid]['countdown'][0].innerHTML = formatTimeLeft(item.tl);

            if(item.tl <= 10){
                auctionObjects[aid]['countdown'].css('color', '#ff0000');
            }else{
                auctionObjects[aid]['countdown'].removeAttr('style');
            }
        }

        if(auctionObjects[aid]['bid-button-p'].html()){
            auctionObjects[aid]['bid-button-a'].show();
            auctionObjects[aid]['bid-button-p'].remove();
        }
    }

    if(item.tl <= 0 && item.c == 1){
        auctionObjects[aid]['countdown'].html('Ended');
        auctionObjects[aid]['bid-button'].hide();
        auctionObjects[aid]['bid-bookbidbutler'].hide();
    }
    if(item.tl == 1 && item.c == undefined){
        auctionObjects[aid]['countdown'].html('Going...');
    }
    if(item.tl <= 0 && item.c == undefined){
        auctionObjects[aid]['countdown'].html('GOING...');
    }
}

function requestUpdate() {
    $.ajax({
        url: statusUrl,
        dataType: 'text',
        type: 'get',
        success: updateRequestSuccess
    });
}

function requestTime() {
    var gettime = '/gettime.php?' + new Date().getTime();
    $.ajax({
        url: gettime,
        success: function(data){
            bidOfficialTime.html(data);
        }
    });
}

function bidButtonClick() {
	if (bidClickable == true) {
		bidClickable = false;
	    var aid = parseInt($(this).attr('title'));
	
	    auctionObjects[aid]['bid-button'].hide(1);
	    auctionObjects[aid]['bid-loading'].show(1);
	
	    $.ajax({
	        url: $(this).attr('href') + '&ms=' + new Date().getTime(),
	        dataType: 'json',
	        success: bidSuccess
	    });
	
	    return false;
	}else{
		return false;
	}
}

function bidSuccess(data) {
	aid = parseInt(data.Auction.id);
    auctionObjects[aid]['bid-message'].html(data.Auction.message)
    	.show(1)
    	.animate({opacity: 1.0}, 2000)
    	.hide(1);
    auctionObjects[aid]['bid-button'].show(1);
	auctionObjects[aid]['bid-loading'].hide(1);
}

$(document).ready(function() {
	bidOfficialTime = $('.bid-official-time');
	bidBalance = $('.bid-balance');
	
    // Collecting auction data, the layer id and auction id
    $('.auction-item').each(function(){
        var auctionId = $(this).attr('title');
        var auctionSelector = '#auction_' + auctionId;

        if($(auctionSelector + ' .countdown').length){
            // collect the id for post data
            auctions.push(auctionId);

            // collect the object
            auctionObjects[auctionId]                           = $(auctionSelector);
            auctionObjects[auctionId]['flash-elements']         = $(auctionSelector + ' .countdown, ' + auctionSelector + ' .bid-price, ' + auctionSelector + ' .bid-bidder, ' + auctionSelector + ' .bid-savings-price, ' + auctionSelector + ' .bid-savings-percentage, ' + auctionSelector + ' .closes-on');
            auctionObjects[auctionId]['countdown']              = $(auctionSelector + ' .countdown');
            auctionObjects[auctionId]['closes-on']              = $(auctionSelector + ' .closes-on');
            auctionObjects[auctionId]['bid-bidder']             = $(auctionSelector + ' .bid-bidder');
            auctionObjects[auctionId]['bid-button']             = $(auctionSelector + ' .bid-button');
            auctionObjects[auctionId]['bid-button-a']           = $(auctionSelector + ' .bid-button a');
            auctionObjects[auctionId]['bid-button-p']           = $(auctionSelector + ' .bid-button p');
            auctionObjects[auctionId]['bid-price']              = $(auctionSelector + ' .bid-price');
            auctionObjects[auctionId]['bid-price-fixed']        = $(auctionSelector + ' .bid-price-fixed');
            auctionObjects[auctionId]['bid-loading']            = $(auctionSelector + ' .bid-loading');
            auctionObjects[auctionId]['bid-message']            = $(auctionSelector + ' .bid-message');
            auctionObjects[auctionId]['bid-flash']              = $(auctionSelector + ' .bid-flash');
            auctionObjects[auctionId]['bid-savings-price']      = $(auctionSelector + ' .bid-savings-price');
            auctionObjects[auctionId]['bid-savings-percentage'] = $(auctionSelector + ' .bid-savings-percentage');
            auctionObjects[auctionId]['bid-bookbidbutler']      = $(auctionSelector + ' .bid-bookbidbutler');

            auctionObjects[auctionId]['bid-histories']          = $('#bidHistoryTable' + auctionId);
            auctionObjects[auctionId]['bid-histories-p']        = $('#bidHistoryTable' + auctionId + ' p');
            auctionObjects[auctionId]['bid-histories-tbody']    = $('#bidHistoryTable' + auctionId + ' tbody');
        }
    });

    // Do the loop when auction available only
    if(auctions.length) {
    	statusUrlBase = '/g.php?i=' + auctions.join(',');
    	if(viewAuctionId) statusUrlBase += '&j=' + viewAuctionId;
    	updateGlobalVersion(0);
        setInterval(requestUpdate, 1000);
    } else {
        if(bidOfficialTime.length) setInterval(requestTime, 1000);
    }

    // Function for bidding
    $('.bid-button-link').click(bidButtonClick);

    // Function to check limit and change the icon whenever it's changed
    // Run only when bid icon available
    if($('.bid-limit-icon').length){
        setInterval(function(){
            var count = $('.bid-limit-icon').length
            if(count > 0){
                $.ajax({
                    url: '/limits/getlimitsstatus/?ms=' + new Date().getTime(),
                    dataType: 'json',
                    success: function(data){
                        if(data){
                            $('.bid-limit-icon').each(function(i){
                                if(data[i].image){
                                    $(this).attr('src', '/img/'+data[i].image);
                                }
                            });
                        }
                    }
                });
            }
        }, 30000);
    }

    if($('.productImageThumb').length){
        $('.productImageThumb').click(function(){
            $('.productImageMax').fadeOut('fast').attr('src', $(this).attr('href')).fadeIn('fast');
            return false;
        });
    }

    if($('#CategoryId').length){
        $('#CategoryId').change(function(){
            document.location = '/categories/view/' + $('#CategoryId option:selected').attr('value');
        });
    }

    if($('#myselectbox').length){
        $('#myselectbox').change(function(){
            document.location = '/categories/view/' + $('#myselectbox option:selected').attr('value');
        });
    }
});