﻿jQuery.fn.extend({
    everyTime: function(interval, label, fn, times, belay) {
        return this.each(function() {
            jQuery.timer.add(this, interval, label, fn, times, belay);
        });
    },
    oneTime: function(interval, label, fn) {
        return this.each(function() {
            jQuery.timer.add(this, interval, label, fn, 1);
        });
    },
    stopTime: function(label, fn) {
        return this.each(function() {
            jQuery.timer.remove(this, label, fn);
        });
    }
});

jQuery.event.special

jQuery.extend({
    timer: {
        global: [],
        guid: 1,
        dataKey: "jQuery.timer",
        regex: /^([0-9]+(?:\.[0-9]*)?)\s*(.*s)?$/,
        powers: {
            // Yeah this is major overkill...
            'ms': 1,
            'cs': 10,
            'ds': 100,
            's': 1000,
            'das': 10000,
            'hs': 100000,
            'ks': 1000000
        },
        timeParse: function(value) {
            if (value == undefined || value == null)
                return null;
            var result = this.regex.exec(jQuery.trim(value.toString()));
            if (result[2]) {
                var num = parseFloat(result[1]);
                var mult = this.powers[result[2]] || 1;
                return num * mult;
            } else {
                return value;
            }
        },
        add: function(element, interval, label, fn, times, belay) {
            var counter = 0;

            if (jQuery.isFunction(label)) {
                if (!times)
                    times = fn;
                fn = label;
                label = interval;
            }

            interval = jQuery.timer.timeParse(interval);

            if (typeof interval != 'number' || isNaN(interval) || interval <= 0)
                return;

            if (times && times.constructor != Number) {
                belay = !!times;
                times = 0;
            }

            times = times || 0;
            belay = belay || false;

            var timers = jQuery.data(element, this.dataKey) || jQuery.data(element, this.dataKey, {});

            if (!timers[label])
                timers[label] = {};

            fn.timerID = fn.timerID || this.guid++;

            var handler = function() {
                if (belay && this.inProgress)
                    return;
                this.inProgress = true;
                if ((++counter > times && times !== 0) || fn.call(element, counter) === false)
                    jQuery.timer.remove(element, label, fn);
                this.inProgress = false;
            };

            handler.timerID = fn.timerID;

            if (!timers[label][fn.timerID])
                timers[label][fn.timerID] = window.setInterval(handler, interval);

            this.global.push(element);

        },
        remove: function(element, label, fn) {
            var timers = jQuery.data(element, this.dataKey), ret;

            if (timers) {

                if (!label) {
                    for (label in timers)
                        this.remove(element, label, fn);
                } else if (timers[label]) {
                    if (fn) {
                        if (fn.timerID) {
                            window.clearInterval(timers[label][fn.timerID]);
                            delete timers[label][fn.timerID];
                        }
                    } else {
                        for (var fn in timers[label]) {
                            window.clearInterval(timers[label][fn]);
                            delete timers[label][fn];
                        }
                    }

                    for (ret in timers[label]) break;
                    if (!ret) {
                        ret = null;
                        delete timers[label];
                    }
                }

                for (ret in timers) break;
                if (!ret)
                    jQuery.removeData(element, this.dataKey);
            }
        }
    }
});

jQuery(window).bind("unload", function() {
    jQuery.each(jQuery.timer.global, function(index, item) {
        jQuery.timer.remove(item);
    });
});


$.fn.moneyFormat = function(mode) {
    return this.each(function() {
        var j = $(this).attr({ oncontextmenu: "return false;", onpaste: "return false;", style: "ime-mode:disabled;", maxlength: "13" }).clone().insertAfter(this);
        $(this).remove();
        if (mode == "Int") {
            j.keydown(function(event) {
                if (!(!event.shiftKey && event.keyCode > 47 && event.keyCode < 58 || event.keyCode > 95 && event.keyCode < 106 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 37 || event.keyCode == 39 || event.keyCode == 46)) {
                    $("仅允许输入整数数字，如100！").insertAfter(this).fadeOut(3000, function() { $(this).remove() });
                    return false;
                }
            }).change(function() { $(this).val(new Number($(this).val())); });
        } else if (mode == "Dec") {
            j.keydown(function(event) {
                if (!(!event.shiftKey && event.keyCode > 47 && event.keyCode < 58 || event.keyCode > 95 && event.keyCode < 106 || event.keyCode == 8 || event.keyCode == 9 || event.keyCode == 37 || event.keyCode == 39 || event.keyCode == 46 || event.keyCode == 110 || event.keyCode == 190)) {
                    $("仅允许输入数字和小数点，如100.00！").insertAfter(this).fadeOut(3000, function() { $(this).remove() });
                    return false;
                } else if (event.shiftKey || event.keyCode == 110 || event.keyCode == 190 && $(this).val().indexOf(".") >= 0) {
                    $("仅允许输入一个小数点！").insertAfter(this).fadeOut(3000, function() { $(this).remove() });
                    return false;
                }
            }).change(function() { $(this).val(new Number($(this).val()).toFixed(2)); });
        } else {
            alert("参数错误，请检查"); return false;
        }
    });
};

$.expr[':'].linkingToImage = function(elem, index, match) {
    // This will return true if the specified attribute contains a valid link to an image:
    return !!($(elem).attr(match[3]) && $(elem).attr(match[3]).match(/\.(gif|jpe?g|png|bmp)$/i));
};

function WebRequestInfo(url, callback, pars) {
    $.ajax({
        type: "POST",
        contentType: "application/json",
        url: url,
        data: pars,
        processData: false,
        success: function(msg) {
            callback(msg);
        },
        error: function(xml, status) {
            if (status == 'error') {
                try {
                    var json = eval('(' + xml.responseText + ')');
                    alert(json.Message + '\n' + json.StackTrace);
                }
                catch (e) { }
            } else {
                //alert(status);
            }
        }
    });
}

function WebRequestInfoSynchro(url, callback, pars) {
    $.ajax({
        async: false,
        type: "POST",
        contentType: "application/json",
        url: url,
        data: pars,
        success: function(msg) {
            callback(msg);
        },
        error: function(xml, status) {
            if (status == 'error') {
                try {
                    var json = eval('(' + xml.responseText + ')');
                    alert(json.Message + '\n' + json.StackTrace);
                }
                catch (e) { }
            } else {
                //alert(status);
            }
        }
    });
}

function ChangeStateByAjax() {
    $("#hidCountry").val($("#Country")[0].options[$("#Country")[0].selectedIndex].text);
    var Country = $("#hidCountry").val();
    WebRequestInfo("/WebServices/MyService.svc/GetState", function(obj) { ChangeStateByAjaxHandle(obj); }, JSON.stringify(Country));
}

function ChangeStateByAjaxHandle(objResult) {

    if (objResult) {
        var result = JSON.parse(objResult);
        
        var objState = $("#State");
        objState.length = 0;

        var allArray = result.split("|");
        var thisArray;
        for (var i = 0; i < allArray.length; i++) {
            thisArray = allArray[i].split(",");
            objState[0].options.add(new Option(thisArray[0].toString(), thisArray[1].toString()));
        }
    }
}

function ClickandView(StyleID) {
    WebRequestInfo("/WebServices/MyService.svc/ClickandView", function(obj) { }, JSON.stringify(StyleID));
}

function ClickRefresh() {
    $("#imgValidate").attr("src", "/Common/ValidateCode?time=" + new Date());
}

function ClickRefreshB() {
    $("#imgValidate").attr("src", "/Common/ValidateCodeB?time=" + new Date());
}

function AddActivityLog() {
    var strPageType = $("#hidPageType").val();
    var strPageURL = location.href;
    if (strPageType != "") {
        var data = JSON.stringify({ PageType: strPageType, PageURL: strPageURL });
        WebRequestInfoSynchro("/WebServices/MyService.svc/AddActivityLog", function(obj) { }, data);
    }
}

function ShowActivityLogTemplate() {
    var html = "";

    html += "<li>";
    html += "<table border=\"0\" width=\"100%\">";
    html += "<tr>";
    html += "<td valign=\"top\"><table border=\"0\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">";
    html += "<tr>";
    html += "<td>";
    html += "<img src=\"$UserPhoto$\" width=\"30px\" />";
    html += "</td>";
    html += "</tr>";
    html += "<tr>";
    html += "<td>";
    html += "<img src=\"$CountryFlag$\" width=\"30\" height=\"15\" />";
    html += "</td>";
    html += "</tr>";
    html += "</table></td>";
    html += "<td valign=\"top\"><table border=\"0\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">";
    html += "<tr>";
    html += "<td>";
    html += "<strong>$Action$</strong>";
    html += "</td>";
    html += "</tr>";
    html += "<tr>";
    html += "<td>";
    html += "$TimePeriods$";
    html += "</td>";
    html += "</tr>";
    html += "<tr>";
    html += "<td>";
    html += "$Result$";
    html += "</td>";
    html += "</tr>";
    html += "</table></td>";
    html += "</tr>";
    html += "</table>";
    html += "</li>";

    return html;
}

function ShowActivityLog() {
    //var data = JSON.stringify($("#hidPageType").val());
    WebRequestInfoSynchro("/WebServices/MyService.svc/GetActivityLog", function(obj) { ShowActivityLogHandle(obj) }, null);
}

function ShowActivityLogHandle(objResult) {

    if (objResult) {
        var result = JSON.parse(objResult);

        var htmlTemplate = ShowActivityLogTemplate();
        var htmlResult = "";
        var htmlTemp = "";

        for (var i = 0; i < result.length; i++) {
            htmlTemp = htmlTemplate;
            if (result[i].UserPhoto != null && result[i].UserPhoto.length > 0) {
                htmlTemp = htmlTemp.replace("$UserPhoto$", "/UploadFiles/MemberPhoto/" + result[i].UserPhoto);
            }
            else {
                htmlTemp = htmlTemp.replace("$UserPhoto$", "/images/usernophoto.jpg");
            }
            htmlTemp = htmlTemp.replace("$CountryFlag$", "/images/flags/" + result[i].CountryFlag + ".gif");
            htmlTemp = htmlTemp.replace("$Action$", result[i].Action);
            htmlTemp = htmlTemp.replace("$TimePeriods$", result[i].TimePeriods);
            htmlTemp = htmlTemp.replace("$Result$", "");

            htmlResult += htmlTemp;
        }

        $("#ActivityLog").html(htmlResult);
    }
}

$(document).ready(function() {
    AddActivityLog();

    if ($("#ActivityLog").attr("id") == "ActivityLog") {
        $('body').everyTime('10s', ShowActivityLog);
    }
});
