﻿var AuctionList = new Array();
var AuctionData = new Array();
var ServerTime = new Date();
var ServerTimeShift = 0;
var DataAvailable = false;
var DetailID = -1;

AuctionStatus = { Inactive: 0, Soon: 1, Announced: 2, Started: 3, Running: 4, Paused: 5, Finished: 6 }

function ActiveButtonVisibility(Auction) {
    switch (Auction.Data.Status) {
		case AuctionStatus.Running:
		case AuctionStatus.Started:
		    return "";
		default:
			return "display:none";
	}
}

function InactiveButtonVisibility(Auction) {
    switch (Auction.Data.Status) {
        case AuctionStatus.Soon:
        case AuctionStatus.Announced:
        case AuctionStatus.Finished:
        case AuctionStatus.Paused:
			return "";
		default:
			return "display:none";
	}
}

function ButtonLabel(Auction) {
    switch (Auction.Data.Status) {
        case AuctionStatus.Started:
        case AuctionStatus.Running:
            return CurrentUserName!="" && Auction.Data.CurrentWinnerName!=null && CurrentUserName==Auction.Data.CurrentWinnerName 
                ? CommonLabels.YouWinButtonLabel : CommonLabels.BidButtonLabel;
        case AuctionStatus.Soon:
        case AuctionStatus.Announced:
            return CommonLabels.SoonButtonLabel;
        case AuctionStatus.Finished:
            return CommonLabels.FinishedButtonLabel;
        case AuctionStatus.Paused:
            return CommonLabels.PausedButtonLabel;
        default:
            return "";
    }
}

function SymbolsVisibility(Auction) {
    switch (Auction.Data.Status) {
		//case AuctionStatus.Soon:
		//	return "display:none";
		default:
			return "";
	}
}

function CurrentWinnerVisibility(Auction) {
    if (Auction.Data.Status == AuctionStatus.Finished || Auction.Data.CurrentWinnerName == null) return "display:none";
	else return "";
}

function WinnerVisibility(Auction) {
    if (Auction.Data.Status != AuctionStatus.Finished) return "display:none";
    else return "";
}

function InfoPopupVisibility(Auction) {
    if (Auction.Data.Status != AuctionStatus.Running ||
        ((Auction.Data.CountingDirection == -1 || Auction.Data.NextRoundChangePrice <= Auction.Data.CurrentPrice) && (Auction.Data.CountingDirection == 1 || Auction.Data.NextRoundChangePrice >= Auction.Data.CurrentPrice)))
		return "display:none";
	else return "";
}

function CounterLabel(Auction) {
    switch (Auction.Data.Status) {
		case AuctionStatus.Soon:
		case AuctionStatus.Running:
		case AuctionStatus.Paused:
			return CommonLabels.RemainingTimeLabel + ":";
		case AuctionStatus.Announced:
		    return CommonLabels.AnnouncedClockLabel + ":";
		case AuctionStatus.Started:
		    return CommonLabels.StartedClockLabel + ":";
		case AuctionStatus.Finished:
		    return CommonLabels.FinishedClockLabel + ":";
		default:
			return "";
	}
}

function ClockLine1Style(Auction) {
    switch (Auction.Data.Status) {
		case AuctionStatus.Announced:
		    return "date-anounced";
		case AuctionStatus.Finished:
		    return "date-finished";
		default:
			return "";
	}
}

function ClockLine1Content(Auction) {
    switch (Auction.Data.Status) {
		case AuctionStatus.Announced:
		case AuctionStatus.Finished:
		    return $.format.date(Auction.Data.CountdownTo, AppSettings.DateFormat);
		default:
			return "";
	}
}

function ClockLine2Style(Auction) {
    switch (Auction.Data.Status) {
		case AuctionStatus.Soon:
		case AuctionStatus.Paused:
		    return "time-valid";
		case AuctionStatus.Announced:
			return "time-anounced";
		case AuctionStatus.Started:
			return "time-started";
		case AuctionStatus.Running:
		    var delta = GetRemainingTime(Auction) + 300;
		    if (Auction.Data.Status == AuctionStatus.Running &&
		        (delta > Auction.Data.CurrentRoundLength * 1000)) delta = Auction.Data.CurrentRoundLength * 1000;
		    return delta <= AppSettings.HotTime * 1000 ? "time-running-hot" : "time-running";
		case AuctionStatus.Finished:
		    return "time-finished";
		default:
			return "";
	}
}

function ClockLine2Content(Auction) {
    switch (Auction.Data.Status) {
		case AuctionStatus.Soon:
		case AuctionStatus.Paused:
		    return "00:00";
		case AuctionStatus.Announced:
		case AuctionStatus.Finished:
		    var a = Auction.Data.CountdownTo.toLocaleTimeString().split(':');
		    a.pop();
		    return a.join(':');
		case AuctionStatus.Started:
		    var delta = GetRemainingTime(Auction) + 1000;
		    if (delta < 1000) delta = 1000;
		    return TimeSpanToString(delta);
		case AuctionStatus.Running:
		    var delta = GetRemainingTime(Auction) + 1300;
		    if (delta < 1000 || delta > Auction.Data.CurrentRoundLength * 1000) delta = Auction.Data.CurrentRoundLength * 1000;
		    return TimeSpanToString(delta);
		default:
			return "";
	}
}

function TimeSpanToString(Time) {
    var days = Math.floor(Time / (1000 * 60 * 60 * 24));
    Time -= days * 1000 * 60 * 60 * 24;
    var hours = Math.floor(Time / (1000 * 60 * 60));
    Time -= hours * 1000 * 60 * 60;
    var minutes = Math.floor(Time / (1000 * 60));
    Time -= minutes * 1000 * 60;
    var seconds = Math.floor(Time / 1000);
    var res = new Array();
    res[0] = days == 0 ? "" : ("<small>" + days.toString() + " " + CommonLabels.CountdownDayLabel + " </small> ");
    res[1] = days == 0 && hours == 0 ? "" : ((hours < 10 ? "0" : "") + hours.toString() + ":");
    res[2] = (minutes < 10 ? "0" : "") + minutes.toString() + ":";
    res[3] = (seconds < 10 ? "0" : "") + seconds.toString();
    return res.join("");
}

function GetRemainingTime(Auction) {
    var Timestamp = new Date();
//    var speed;
//    if (Auction.Data.Status == AuctionStatus.Running)
//        speed = (Auction.Data.CurrentRoundLength * 1000) / (Auction.Data.CurrentRoundLength * 1000 - 00);
//    else speed = 1;
    return Auction.Data.CountdownTo.getTime() - Auction.ServerTimestamp.getTime()
        - (Timestamp.getTime() - Auction.LocalTimestamp.getTime());
//    return Math.round(res);
}

function TimerTick() {
    var Timestamp = new Date();
    var STime = new Date();
    STime.setTime(Timestamp.getTime() - ServerTimeShift);
    $('#ServerTime').html(STime.toLocaleTimeString());

    if (!DataAvailable) return;
    
    for (var ID in AuctionData) {
        $('#AuctionPanel' + ID + ' .time-left').children('p:eq(0)').html(CounterLabel(AuctionData[ID]));
        $('#AuctionPanel' + ID + ' .time-left').children('p:eq(1)').attr('class',ClockLine1Style(AuctionData[ID]));
        $('#AuctionPanel' + ID + ' .time-left').children('p:eq(1)').text(ClockLine1Content(AuctionData[ID]));
        $('#AuctionPanel' + ID + ' .time-left').children('p:eq(2)').attr('class', ClockLine2Style(AuctionData[ID]));
        var clockline = ClockLine2Content(AuctionData[ID]);
        if (ClockLine2Style(AuctionData[ID]) != 'time-running-hot') {
            $('#AuctionPanel' + ID + ' .time-left').children('p:eq(2)').html(clockline);
            $('#AuctionPanel' + ID + ' .time-left').children('p:eq(2)').css({ opacity: 1 });
        } else {
            if (AuctionData[ID].LastClockLine != clockline) {
                AuctionData[ID].LastClockLine = clockline;
                //ora szinvaltas
                $('#AuctionPanel' + ID + ' .time-left .time-running-hot').css('display', 'inline');
                $('#AuctionPanel' + ID + ' .time-left .time-running-hot').animate({ opacity: 1 }, 700);
                $('#AuctionPanel' + ID + ' .time-left .time-running-hot').animate({ opacity: 0 }, 100);
                $('#AuctionPanel' + ID + ' .time-left').children('p:eq(2)').html(clockline);
            }
        }
        
        if (AuctionData[ID].Changed) {
            AuctionData[ID].Changed = false;
            $('#AuctionPanel' + ID + ' .BidButton a:first').removeAttr('style').attr('style', ActiveButtonVisibility(AuctionData[ID]));
            $('#AuctionPanel' + ID + ' .BidButton a:first').text(ButtonLabel(AuctionData[ID]));
            $('#AuctionPanel' + ID + ' .BidButton p:first').removeAttr('style').attr('style', InactiveButtonVisibility(AuctionData[ID]));
            $('#AuctionPanel' + ID + ' .BidButton p:first').text(ButtonLabel(AuctionData[ID]));
            $('#AuctionPanel' + ID + ' .symbols:first').removeAttr('style').attr('style', SymbolsVisibility(AuctionData[ID]));
            $('#AuctionPanel' + ID + ' .last-bid:first').removeAttr('style').attr('style', CurrentWinnerVisibility(AuctionData[ID]));
            $('#AuctionPanel' + ID + ' .last-bid .CurrentWinner:first').text(AuctionData[ID].Data.CurrentWinnerName);
            $('#AuctionPanel' + ID + ' .CurrentPrice').text(AuctionData[ID].Data.CurrentPrice.toFixed(2));
            $('#AuctionPanel' + ID + ' .info-popup:first').removeAttr('style').attr('style', InfoPopupVisibility(AuctionData[ID]));
            $('#AuctionPanel' + ID + ' .winner:first').removeAttr('style').attr('style', WinnerVisibility(AuctionData[ID]));
            $('#AuctionPanel' + ID + ' .winner .WinnerName:first').text(AuctionData[ID].Data.CurrentWinnerName);
            //animations
            if (AuctionData[ID].LastPrice != AuctionData[ID].Data.CurrentPrice) {
                // price animate
                var priceWidth = $('#AuctionPanel' + ID + ' .current-price .large').width();
                $('#AuctionPanel' + ID + ' .current-price-animate-box').width(priceWidth + 5);
                $('#AuctionPanel' + ID + ' .current-price-animate-box').css('display', 'block');
                $('#AuctionPanel' + ID + ' .current-price-animate-box').css('opacity', 0);
                $('#AuctionPanel' + ID + ' .current-price-animate-box').animate({ opacity: 0.3 }, 200);
                $('#AuctionPanel' + ID + ' .current-price-animate-box').animate({ opacity: 0 }, 200);
            }
            AuctionData[ID].LastPrice = AuctionData[ID].Data.CurrentPrice;
            if (AuctionData[ID].LastWinnerName != AuctionData[ID].Data.CurrentWinnerName) {
                // lastbid animate
                var nicknameWidth = $('#AuctionPanel' + ID + ' .last-bid p span').width();
                $('#AuctionPanel' + ID + ' .last-bid-animate-box').width(nicknameWidth + 5);
                $('#AuctionPanel' + ID + ' .last-bid-animate-box').css('display', 'block');
                $('#AuctionPanel' + ID + ' .last-bid-animate-box').css('opacity', 0);
                $('#AuctionPanel' + ID + ' .last-bid-animate-box').animate({ opacity: 0.3 }, 200);
                $('#AuctionPanel' + ID + ' .last-bid-animate-box').animate({ opacity: 0 }, 200);
            }
            AuctionData[ID].LastWinnerName = AuctionData[ID].Data.CurrentWinnerName;
            if (ID == DetailID) {
                $('#AuctionPanel' + ID + ' span.LastNMinBidders').text(AuctionData[ID].LastNMinBidders);
                for (var i = 0; i < AuctionData[ID].BiddingHistory.length; i++) {
                    if (AuctionData[ID].BiddingHistory[i].UserName == null)
                        $('#AuctionPanel' + ID + ' ul.LastNBids li.r' + i.toString()).hide();
                    else 
                        $('#AuctionPanel' + ID + ' ul.LastNBids li.r' + i.toString()).show();
                    $('#AuctionPanel' + ID + ' ul.LastNBids li.r' + i.toString() + ' p').text(AuctionData[ID].BiddingHistory[i].UserName);
                    $('#AuctionPanel' + ID + ' ul.LastNBids li.r' + i.toString() + ' img').attr('src', 'images/symbol-' +
                        (AuctionData[ID].BiddingHistory[i].BidType == 'M' ? 'manual' : 'auto') + '.png');
                    $('#AuctionPanel' + ID + ' ul.LastNBids li.r' + i.toString() + ' span').text(AuctionData[ID].BiddingHistory[i].When.toLocaleTimeString());
                }
                $('#AuctionPanel' + ID + ' span.Savings').text((AuctionData[ID].RetailPrice - AuctionData[ID].Data.CurrentPrice).toFixed(2));
                $('#AuctionPanel' + ID + ' span.BidsSpent').text(AuctionData[ID].BidsSpent);
                $('#AuctionPanel' + ID + ' span.Discount').text((AuctionData[ID].BidsSpent * AppSettings.BidUnitPrice).toFixed(2));
                $('#AuctionPanel' + ID + ' span.PriceInclBidsSpent').text((AuctionData[ID].RetailPrice - AuctionData[ID].BidsSpent * AppSettings.BidUnitPrice).toFixed(2));
                $('#AuctionPanel' + ID + ' div#full-auction-description div#tab1 div.auction_tab_col1 ul li:first p span.CurrentRoundLength').text(AuctionData[ID].Data.CurrentRoundLength);

                //$('#AuctionPanel' + ID + ' input.ABPriceLimitFromTB:first').val(AuctionData[ID].ABPriceLimitFrom.toFixed(2));
                //$('#AuctionPanel' + ID + ' span.ABPriceLimitFromLB').text(AuctionData[ID].ABPriceLimitFrom.toFixed(2));
                //$('#AuctionPanel' + ID + ' input.ABPriceLimitToTB:first').val(AuctionData[ID].ABPriceLimitTo.toFixed(2));
                //$('#AuctionPanel' + ID + ' span.ABPriceLimitToLB').text(AuctionData[ID].ABPriceLimitTo.toFixed(2));
                //$('#AuctionPanel' + ID + ' input.ABMaxBidCountTB:first').val(AuctionData[ID].ABMaxBidCount);
                $('#AuctionPanel' + ID + ' span.ABMaxBidCountLB').text(AuctionData[ID].ABBidsRemaining);
                if (AuctionData[ID].Data.Status == AuctionStatus.Running || AuctionData[ID].Data.Status == AuctionStatus.Started) {
                    if (AuctionData[ID].HasAutobidder) {
                        $('#AuctionPanel' + ID + ' .ABStart').hide();
                        $('#AuctionPanel' + ID + ' .ABStop').show();
                    } else {
                        $('#AuctionPanel' + ID + ' .ABStart').show();
                        $('#AuctionPanel' + ID + ' .ABStop').hide();
                    }
                } else {
                    $('#AuctionPanel' + ID + ' .ABStart').hide();
                    $('#AuctionPanel' + ID + ' .ABStop').hide();
                }
            }
        }
    }
}

function ABPanelSwap(ID) {
    $('#AuctionPanel' + ID + ' span.ABPriceLimitToLB').text($('#AuctionPanel' + ID + ' input.ABPriceLimitToTB:first').val());
    $('#AuctionPanel' + ID + ' span.ABPriceLimitFromLB').text($('#AuctionPanel' + ID + ' input.ABPriceLimitFromTB:first').val());
}

function AuctionServiceSuccess(Result, UserContext, MethodName) {
    switch (MethodName) {
        case "Bid":
            if (Result.Result == 3) {
                window.location = '/Content.aspx?page=BiddingDisabledWarning';
                return;
            } else if (Result.Result == 4) {
                window.location = '/MemberArea/BidBuy.aspx';
                return;
            } else if (Result.Result == -1) {
                window.location = '/Home.aspx';
                return;
            }
            Result = Result.AuctionData;
        case "GetData":
        case "CreateAutobidder":
        case "RemoveAutobidder":
            if (CurrentUserName != "" && !Result.LoggedIn || Result.Data == null) {
                window.location.reload();
                return;
            }
            var Timestamp = new Date();
            if (ServerTime > Result.CurrentTime) return;
            ServerTime = Result.CurrentTime;
            ServerTimeShift = Timestamp.getTime() - ServerTime.getTime();
            for (i = 0; i < Result.Data.length; i++) {
                if (Result.Data[i].Status != AuctionStatus.Inactive) {
                    AuctionData[Result.Data[i].ID].Data = Result.Data[i];
                    AuctionData[Result.Data[i].ID].Changed = true;
                    AuctionData[Result.Data[i].ID].LocalTimestamp = Timestamp;
                    AuctionData[Result.Data[i].ID].ServerTimestamp = ServerTime;
                    if (Result.Data[i].ID == DetailID) {
                        AuctionData[Result.Data[i].ID].LastNMinBidders = Result.LastNMinBidders;
                        AuctionData[Result.Data[i].ID].BiddingHistory = Result.BiddingHistory;
                        AuctionData[Result.Data[i].ID].BidsSpent = Result.BidsSpent;
                        //AuctionData[Result.Data[i].ID].ABPriceLimitFrom = Result.ABPriceLimitFrom;
                        //AuctionData[Result.Data[i].ID].ABPriceLimitTo = Result.ABPriceLimitTo;
                        //AuctionData[Result.Data[i].ID].ABMaxBidCount = Result.ABMaxBidCount;
                        AuctionData[Result.Data[i].ID].ABBidsRemaining = Result.ABBidsRemaining;
                        AuctionData[Result.Data[i].ID].HasAutobidder = Result.HasAutobidder;
                    }
                }
                if (Result.Data[i].Status == AuctionStatus.Finished || Result.Data[i].Status == AuctionStatus.Inactive) {
                    var j = 0;
                    while (j < AuctionList.length && AuctionList[j] != Result.Data[i].ID) j++;
                    if (j < AuctionList.length) AuctionList.splice(j, 1);
                }
            }
            $("#UserBids").text(Result.UserBids);
            $("#UserGiftBids").text(Result.UserGiftBids);
            $("#UserWinsInMonth").text(Result.UserWinsInMonth);
            if (MethodName == "GetData" && AuctionList.length != 0)
                setTimeout("ServiceClient.GetData(AuctionList, DetailID, ServerTime, ServerTime.getTimezoneOffset())", Result.NextRefresh);
            DataAvailable = true;
            if (MethodName == "Bid" || MethodName == "CreateAutobidder" || MethodName == "RemoveAutobidder")
                TimerTick();
            break;
        case "UPBid":
            if (Result.Result == 4) {
                window.location = '/MemberArea/BidBuy.aspx';
                return;
            } else if (Result.Result == 0) {
                window.location = '/Content.aspx?page=UniPressItemSold';
                return;
            }

            $('#AuctionPanel' + Result.ID + ' .CurrentPrice').text(Result.Price.toFixed(2));
            $('#AuctionPanel' + Result.ID + ' .price-drop p:eq(0)').text(CommonLabels.UniPressRunsLabel);
            $('#AuctionPanel' + Result.ID + ' .price-drop-large').html(String.format(CommonLabels.UniPressRuns, Math.floor(Result.RunningFor / 24), Result.RunningFor % 24));
            $('#AuctionPanel' + Result.ID + ' .bid-count p span:eq(0)').text(CommonLabels.SavingsLabel);
            $('#AuctionPanel' + Result.ID + ' .bid-count p span:eq(1)').text(Result.Savings.toFixed(0) + ' %');
            $('#AuctionPanel' + Result.ID + ' .buy a').css('display', 'block');
            $('#AuctionPanel' + Result.ID + ' .buy p').hide();
            $("#UserBids").text(Result.UserBids);
            break;
    }
}

function AuctionServiceFail(Error, UserContext, MethodName) {
    if (MethodName == "GetData")
        setTimeout("ServiceClient.GetData(AuctionList, DetailID, ServerTime, ServerTime.getTimezoneOffset())", 300);
}

