﻿var index = true;
var is_bid = false;

function doBid(id) {
    $.ajax({
        type: "GET",
        url: "/bid.aspx",
        data: "bid=" + id + "&id2=" + Math.random(),
        success: function (msg) {
            var controlChar = msg.substring(0, 1);

            if (controlChar == "x") {
                var bidcount = msg.substring(1);
                $("#userBids").html(bidcount);
                // alert("Váš bid byl akceptován.");
            } else {
                alert(msg);
            }
            is_bid = true;
        }
    });
}

function doBidFunc(id) {
    if (id) {

        var auctionId = id.id.match(/button(\d+)/);

        doBid(auctionId[1]);
    }
}

function doAutobid(id, amount) {
    $.ajax({
        type: "GET",
        url: "/autobid.aspx",
        data: "id=" + id + "&amount=" + amount + "&id2=" + Math.random(),
        success: function (msg) {
            var controlChar = msg.substring(0, 1);

            if (controlChar == "x") {
                var bidcount = msg.substring(1);
                $("#userBids").html(bidcount);
                alert("Váš autobid byl akceptován.");
            } else {
                alert(msg);
            }
        }
    });
}

function auctionRegister(id) {
    if (id) {

        var auctionId = id.id.match(/button(\d+)/);

        $.ajax({
            type: "GET",
            url: "/AuctionVIPRegistration.aspx",
            data: "AuctionId=" + auctionId[1] + "&id2=" + Math.random(),
            success: function (msg) {
                alert(msg);
            }
        });
    }
}

function dummy() {
    $.ajax({
        type: "GET",
        url: "/dummy.aspx",
        data: "",
        success: function (msg) {
        }
    });
    setTimeout("dummy()", 180000);

    if (!ACD.Data.ActivityCheck()) {
        window.location.reload();
    }
}

function buyNow(id) {

    var cnt = $('#buyNowCount');
    if (!cnt) {
        return;
    }

    if (cnt.val() && cnt.val() != '' && cnt.val() > 0) {
        $.ajax({
            type: "GET",
            url: "/buyNowDiscount.aspx",
            data: "bid=" + id + "&cnt=" + cnt.val() + "&id2=" + Math.random(),
            success: function (msg1) {

                var resp = "Chyba systému";
                var obj = null;
                try {
                    obj = eval("(" + msg1 + ")");
                } catch (err) {
                    obj = null;
                }

                if (obj != null) {
                    if (!obj.message && obj.price) {
                        resp = null;
                        if (confirm("Cena je " + obj.price + " Kč. Opravdu chcete koupit produkt(y)?")) {
                            $.ajax({
                                type: "GET",
                                url: "/buyNow.aspx",
                                data: "bid=" + id + "&cnt=" + cnt.val() + "&id2=" + Math.random(),
                                success: function (msg) {
                                    alert(msg);
                                }
                            });
                        }

                    } else {
                        if (obj.message) {
                            resp = obj.message;
                        }
                    }
                }

                if (resp)
                    alert(resp);
            }
        });
    } else {
        alert('Zadali jste chybný počet kusů pro Kup teď!');
    }
}

/* ***** ACD ***** */

var ACD = {
    TimeFotmatUseUTC: false,
    RequestTime: 0,
    UpdateTime: 0,
    IsDetail: 0,
    Queue: {
        Events: [],
        AddEvUnique: function (index, fnc, scheduleAt) {
            this.RemoveEv(index);

            var time = scheduleAt - (+new Date);
            time = time > 0 ? time : 0;

            //hck ugl
            if (index == 'update_req' && time < 11) {
                time += 1000;
            }

            this.Events[index] = {
                Run: true,
                Timer: setTimeout(fnc, time)
            };
        },
        AddEvTry: function (index, fnc, scheduleAt) {
            if (!this.IsIn(index)) {
                this.AddEvUnique(index, fnc, scheduleAt);
            }
        },
        RemoveEv: function (index) {
            if (this.Events[index]) {
                clearTimeout(this.Events[index].Timer);
                this.Events[index] = null;
            }
        },
        IsIn: function (index) {
            return (this.Events[index] ? true : false);
        }
    },
    Data: {
        Auctions: { empty: 1 },
        UpdateA: function (a) {
            if (a && a.id && this.Auctions[a.id]) {
                if (a.st > this.Auctions[a.id].st) {
                    if (a.finish_time != this.Auctions[a.id].finish_time
                    || a.actual_winner != this.Auctions[a.id].actual_winner
                    || a.status != this.Auctions[a.id].status
                    || a.locked != this.Auctions[a.id].locked) {
                        var mya = this.Auctions[a.id];
                        mya.finish_time = a.finish_time;
                        var t = ACD.Now();
                        mya.c_finish_time = (a.finish_time * 1) + (t - a.st);
                        mya.current_price = a.current_price;
                        mya.status = a.status;
                        mya.locked = a.locked;
                        mya.actual_winner = a.actual_winner;
                        mya.bids = a.bids;
                    }
                }
            }
        },
        Update: function (a) {
            if (a) {
                if (this.Auctions.empty) {
                    this.RecalcFinishTimeAx(a.auctions);
                    this.Auctions = a.auctions;
                }

                for (var key in a.auctions) {
                    if (key == '') continue;
                    this.UpdateA(a.auctions[key]);
                }
            }
        },
        UpdateTime: function () {
            var times = $('.time');
            for (var i = 0; i < times.length; i++) {
                var id = times[i].id.replace('time', '');
                if (ACD.Data.Auctions[id]) {
                    if (!ACD.Data.CheckLockA(ACD.Data.Auctions[id])) {
                        var fin = ACD.Data.Auctions[id].c_finish_time - ACD.Now();
                        times[i].innerHTML = (ACD.ParseTime(fin < 0 ? 0 : fin));

                        ACD.Data.UpdateClientA(id, fin);
                    }
                }
            }

            ACD.Queue.RemoveEv('update_time');
        },
        CheckLockA: function (a) {
            if (a.locked == 1) {
                $('#time' + a.id).html("Uzamčená");
                return true;
            } else {
                return false;
            }
        },
        RecalcFinishTimeAx: function (a) {
            for (var key in a) {
                if (key == '') continue;
                var t = ACD.Now();
                a[key].c_finish_time = (a[key].finish_time * 1) + (t - a[key].st);
            }
        },
        UpdateClientA: function (a, fin) {
            // TODO: AFDfds

            if ($('#time' + a).html() < 31) {
                $('#time' + a).addClass('red');
            } else {
                $('#time' + a).removeClass('red');
            }

            $('#price' + a).html(ACD.Data.Auctions[a].current_price);
            $('#username' + a).html(ACD.Data.Auctions[a].actual_winner == '' ? 'Přihoď první' : ACD.Data.Auctions[a].actual_winner);

            if (ACD.IsDetail == true && ACD.Data.Auctions[a].bids) {
                var res = ACD.Data.Auctions[a].bids;
                $("#resultTable" + a).html("<tr><th>Čas</th><th>Cena</th><th>Uživatel</th><th>&nbsp;</th></tr>");
                var htmlAdd = "<tr><th style=\"text-align: center;\">Čas</th><th style=\"text-align: center;\">Cena</th><th style=\"text-align: right;\">Uživatel</th><th>&nbsp;</th></tr>";
                for (j = 0; j < res.length; j++) {
                    if (res[j] == null) break;

                    var row = res[j];
                    if (j == 0) {
                        act_price = row.new_price;
                        act_winner = row.login;
                        act_auto = row.is_autobid;
                        htmlAdd = htmlAdd + "<tr style=\"font-weight: bold;\">";
                    }
                    else {
                        htmlAdd = htmlAdd + "<tr>";
                    }

                    if (row.is_autobid == "0") {
                        auto = "";
                    } else {
                        auto = ""; // "A";
                    }

                    htmlAdd = htmlAdd + "<td style=\"text-align: center;\">" + row.time + "</td><td style=\"text-align: center;\">" + row.new_price + "</td><td style=\"text-align: right;\">" + row.login + "</td><td>" + (row.smiley != "" ? "<img src=\"/img/smiley/" + row.smiley + ".png\" alt=\"smiley\" /> " : "") + auto + "</td></tr>";
                }

                $("#resultTable" + a).html(htmlAdd);
            }

            // crp
            var auction = ACD.Data.Auctions[a];
            var id = a;
            if (fin < 1) {
                $("#time" + id).text("00:00:00");

                if (auction.status == 1) {
                    $("#bid" + id).removeClass();
                    $("#bid" + id).addClass('submitOveruji');
                }
                if (auction.status == 2) {
                    $("#bid" + id).removeClass();
                    $("#bid" + id).addClass('submitProdano');
                }
            } else {
                $("#bid" + id + " input").unbind('click');
                $("#bid" + id + " input").click(function () { doBidFunc(this); });
                $("#bid" + id).removeClass();
                $("#bid" + id + " input").removeAttr('disabled');
                $("#bid" + id).addClass('submitPrihodit');
            }
        },
        ActivityCheck: function () {
            var t = ACD.Now() + 210;
            for (var key in ACD.Data.Auctions) {
                if (!key || key == '') continue;
                if (ACD.Data.Auctions[key].c_finish_time < t) {
                    return true;
                }
            }
            return false;
        }
    },
    Request: function () {
        $.get('/itemslist.aspx', {}, this.RequestSuccess, 'json');

        this.Queue.AddEvUnique('update_req', 'ACD.Request()', (+new Date) + ACD.GetSheduleTime(this.RequestTime));

        this.Queue.AddEvTry('update_time', 'ACD.Data.UpdateTime()', (+new Date));
    },
    RequestError: function (a, b) {
        // log, json format wrong or internal page error
    },
    RequestSuccess: function (a, b) {
        if (a) {
            // ACD.Log('request_duration: ' + ((+new Date) - a.ct) + ';server_diff: ' + a.server_diff);
            ACD.Data.Update(a);
        }
    },
    Now: function () {
        return Math.round((+new Date) / 1000);
    },
    ParseTime: function (d) {
        d = (+d);
        var e = d % 60;
        d = (d - e) / 60;
        var c = d % 60;
        var a = (d - c) / 60;
        var b = [];
        //    if (a < 10) {
        //        b.push("0")
        //    }
        b.push(a);
        b.push(":");
        if (c < 10) {
            b.push("0")
        }
        b.push(c);
        b.push(":");
        if (e < 10) {
            b.push("0")
        }
        b.push(e);
        return b.join("");
    },
    GetSheduleTime: function (onEachSec) {
        var sched = onEachSec - ((+new Date) % 1000);
        return (sched < 0 ? sched + 1000 : sched);
    },
    ReloadPage: function () {
        window.location.reload();
    },
    Init: function (isDetail) {
        $.ajaxSetup({
            cache: false,
            error: ACD.RequestError,
            timeout: 700
        });

        this.RequestTime = (+new Date) % 1000;
        this.UpdateTime = (this.RequestTime - 100) < 0 ? (this.RequestTime + 900) : (this.RequestTime - 100);
        this.IsDetail = isDetail;

        setTimeout("dummy()", 180000);
        this.Request();
    },
    Log: function (msg) {

        if (window.console && console.log) {
            window.console.log(msg);
        }
    }
};
