﻿Object.extend = function(destination, source) {
    for (var property in source)
        destination[property] = source[property];
    return destination;
};
Object.extend(String.prototype, {

    startsWith: function(pattern) {
        return this.indexOf(pattern) === 0;
    },

    endsWith: function(pattern) {
        var d = this.length - pattern.length;
        return d >= 0 && this.lastIndexOf(pattern) === d;
    },
    format: function() {
        var args = arguments;
        return this.replace(/\{(\d+)\}/g,
        function(m, i) {
            return args[i];
        });
    },
    trim: function() {
        return this.replace(/^\s+/g, "").replace(/\s+$/g, "");
    }
});

String.format = function(str) {
    var args = arguments;

    return str.replace(/\{(\d+)\}/g,
        function(m, i) {
            return args[parseInt(i) + 1];
        });
};

var g_staytime = 0;
var g_host = "http://" + window.location.host;
var mask = function(jobj, img) {
    var offset = jobj.offset();
    var xleft = offset.left;
    var xtop = offset.top;
    var xwidth = jobj.width();
    var xheight = jobj.height();
    if (!img) {
        img = "images/loading.gif";
    }

    var x_mask = $(String.format("#dv_mask_{0}", jobj.attr("id")));
    if (x_mask.length) {
        x_mask.remove();
    }
    else {
        var strMask = String.format("<div id=\"dv_mask_{0}\">loading...<br/><img src=\"{1}\" /></div>", jobj.attr("id"), img);
        jobj.after(strMask);
        x_mask = $(String.format("#dv_mask_{0}", jobj.attr("id")));
        x_mask.css("left", xleft).css("top", xtop).css("width", xwidth).css("height".xheight).css("z-index", "500").css("position", "absolute").css("background-color", "#fff"); //.css("filter", "Alpha(opacity=70);").css("opacity", "0.7");
    }
};

var json2str = function(o) {
    var arr = [];
    var fmt = function(s) {
        if (typeof s == 'object' && s != null) return json2str(s);
        return /^string$/.test(typeof s) ? "'" + s + "'" : s;
    }
    for (var i in o) arr.push(i + ":" + fmt(o[i]));
    return '{' + arr.join(',') + '}';
};

var g_ = {
    code: "handler/common.ashx",
    track: "handler/track.ashx",
    payment: "handler/payment.ashx",
    member: "handler/member.ashx"
};

//create a form and submit it
var createForm = function(obj, url) {
    var submitForm = document.createElement("FORM");
    document.body.appendChild(submitForm);
    submitForm.method = "POST";
    submitForm.target = "_self";
    for (var el in obj) {
        var newElement = document.createElement("input");
        newElement.name = el;
        newElement.type = "hidden";
        newElement.value = obj[el];
        submitForm.appendChild(newElement);
    }
    submitForm.action = url;
    submitForm.submit();
};


var validate = function(containerid) {
    var flag = true;
    $("input", $(containerid ? "#" + containerid : "$()")).each(function(index, el) {
        switch ($(el).attr("datatype")) {
            case "Require":
                $(".red", $(el).parent()).remove();
                if ($(el).val().trim().length < 1) {
                    $(el).after("<label class=\"red\">" + $(el).attr("msg") + "</label>");
                    flag = false;
                }
                break;
            case "Email":
                $(".red", $(el).parent()).remove();
                if ($(el).val().trim().length < 1 || !/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/.test($(el).val())) {
                    $(el).after("<label class=\"red\">" + $(el).attr("msg") + "</label>");
                    flag = false;
                }
                break;
            case "Repeat":
                $(".red", $(el).parent()).remove();
                if ($("#" + $(el).attr("to")).val() != $(el).val()) {
                    $(el).after("<label class=\"red\">" + $(el).attr("msg") + "</label>");
                    flag = false;
                }
                break;
            case "Number":
                $(".red", $(el).parent()).remove();
                if ($(el).val().trim().length < 1 || !/^\d+$/.test($(el).val())) {
                    $(el).after("<label class=\"red\">" + $(el).attr("msg") + "</label>");
                    flag = false;
                }
                break;
            case "Phone":
                $(".red", $(el).parent()).remove();
                if ($(el).val().trim().length < 1 || !/^[0-9()\-]+$/.test($(el).val())) {
                    $(el).after("<label class=\"red\">" + $(el).attr("msg") + "</label>");
                    flag = false;
                }
                break;
            case "CommonPassWord":
                $(".red", $(el).parent()).remove();
                if ($(el).val().trim().length < 6 || $(el).val().trim().length > 16) {
                    $(el).after("<label class=\"red\">" + $(el).attr("msg") + "</label>");
                    flag = false;
                }
                break;
            case "PassWord":
                $(".red", $(el).parent()).remove();
                if ($(el).val().trim().length > 0 && ($(el).val().trim().length < 6 || $(el).val().trim().length > 16)) {
                    $(el).after("<label class=\"red\">" + $(el).attr("msg") + "</label>");
                    flag = false;
                }
                break;
            case "PassWordRepeat":
                $(".red", $(el).parent()).remove();
                if ( $("#" + $(el).attr("to")).val() != $(el).val()) {
                    $(el).after("<label class=\"red\">" + $(el).attr("msg") + "</label>");
                    flag = false;
                }
                break;
            case "BornDate":
                $(".red", $(el).parent()).remove();
                if ($(el).val().trim().length > 0 && !$(el).val().match(new RegExp("^(\\d{1,2})([-./])(\\d{1,2})\\2((\\d{4})|(\\d{2}))$"))) {
                    $(el).after("<label class=\"red\">" + $(el).attr("msg") + "</label>");
                    flag = false;
                }
                break;
            case "PaypalEmail":
                $(".red", $(el).parent()).remove();
                if ($(el).val().trim().length > 0 && !/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+((\.[a-zA-Z0-9_-]{2,3}){1,2})$/.test($(el).val())) {
                    $(el).after("<label class=\"red\">" + $(el).attr("msg") + "</label>");
                    flag = false;
                }
                break;
            case "AccountName":
                $(".red", $(el).parent()).remove();
                if ($(el).val().trim().length < 6 || $(el).val().trim().length > 16) {
                    $(el).after("<label class=\"red\">" + $(el).attr("msg") + "</label>");
                    flag = false;
                }
                break;
        }
    });
    return flag;
};


var Site = new Object();
Site.getservers = function(game, cb) {
    if (game)
        $.getJSON(g_.code, { gid: game, quick: 1 }, cb);
};
Site.getgoldlist = function(server, game, cb) {
    if (server && server != 'undefined') {
        $.getJSON(g_.code, { sid: server, gid: game, quick: 1 }, cb);
    }
    else {
        cb();
    }
};
Site.lastgame = "";
Site.lastserver = "";
Site.lastquantity = 0;

$().ready(function() {
    if ($(".ul_faq").length) {
        var faq_current = "";
        $(".ul_faq>li").mouseover(function() {
            $(this).attr("class", "title_b");
        }).mouseout(function() {
            if (faq_current != $(this).attr("v")) {
                $(this).attr("class", "title_r");
            }
        }).click(function() {
            faq_current = $(this).attr("v");
            $(".ul_faq>li").attr("class", "title_r");
            $(this).attr("class", "title_b");
            $(".dv_faq_content>dl").hide();
            $(String.format("#dv_faq_{0}", $(this).attr("v"))).show();
        });
    }
    track();
}
);
var loadScript = function(src, callback) {
    var script = document.createElement("script");
    if (script.addEventListener)
        script.addEventListener("load", callback, false);
    else if (script.attachEvent)
        script.attachEvent("onreadystatechange", function() { loadScript.callbackIE(callback); });
    script.src = src;
    document.getElementsByTagName("head")[0].appendChild(script);
}
loadScript.callbackIE = function(callback) {
    var target = window.event.srcElement;
    if (target.readyState == "loaded")
        callback.call(target);
};
var getRefUrl = function() {
    var ref = '';
    if (document.referrer.length > 0) {
        ref = document.referrer;
    }
    try {
        if (ref.length == 0 && opener.location.href.length > 0) {
            ref = opener.location.href;
        }
    } catch (e) { }
    return ref;
};
var track = function() {
    //$.getScript("http://j.maxmind.com/app/geoip.js", null, function() { });
    loadScript("http://j.maxmind.com/app/geoip.js", function() {
        var country = "No Info";
        if (geoip_country_name() != "" && geoip_country_name() != null)
            country = geoip_country_name();
        $.post(g_.track, { url: window.location.href, refurl: getRefUrl(), country: country }, function(data) {
            window.setInterval(function() { g_staytime++ }, 1000);
        })
    });
};
window.onunload = function() {
    $.post(g_.track, { url: window.location.href, stay: g_staytime });
};

var addFavourite = function() {
    var title = document.title
    var url = document.location.href
    if (window.sidebar) window.sidebar.addPanel(title, url, "");
    else if (window.opera && window.print) {
        var mbm = document.createElement('a');
        mbm.setAttribute('rel', 'sidebar');
        mbm.setAttribute('href', url);
        mbm.setAttribute('title', title);
        mbm.click();
    }
    else if (document.all) window.external.AddFavorite(url, title);
};
var setHome = function(obj, vrl) {
    try {
        obj.style.behavior = 'url(#default#homepage)'; obj.setHomePage(window.location);
    }
    catch (e) {
        if (window.netscape) {
            try {
                netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
                var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefBranch);
                prefs.setCharPref('browser.startup.homepage', window.location);
            }
            catch (e) {
                alert("I'm sorry,the opration has be refused by your browser for security.\n You can press 'Control Key + D Key' directly Or try again after type 'about:config' in address bar ,press enter key .then set [signed.applets.codebase_principal_support] key to 'true'");
            }
        }
    }
}

/*member info*/
var signin = function() {
    if ($("#tb_username").val().trim().length && $("#tb_userpwd").val().length) {
        $.getJSON(g_.member, { m: "", action: "signin", loginname: escape($("#tb_username").val().trim()), loginpass: escape($("#tb_userpwd").val().trim()) }, function(data) {
            if (data) {
                $("#p_usrinfo").html(String.format("welcome {0},<a href=\"member-center.aspx\">member center</a> or <a href=\"javascript:signout();void(0);\">sign out</a>.",unescape(data.FullName)));
            }
            else {
                alert("invalid username or password!");
                $("#tb_username").val("");
                $("#tb_userpwd").val("");
            }
        });
    }
    else {
        alert("please fill full info for login!");
    }
};
var signout = function() {
    $.get(g_.member, { m: "", action: "signout" }, function(data) {
        if (parseInt(data)) {
            $("#p_usrinfo").html(String.format("mail:<input type=\"text\" id=\"tb_username\" /> pwd:<input type=\"password\" id=\"tb_userpwd\" /> <a href=\"javascript:signin();void(0);\">sign in</a> or <a href=\"member-register.aspx\">sign up</a>.", "guest"));
        }
    });
};

var signup = function() {
    if ($("#cb_usr_ads:checked").length) {
        if (validate("user_info") && $("#lbl_exits").css("display") == 'none') {
            $.getJSON(g_.member, { m: "", action: "signup", loginname: escape($("#tb_usr_mail").val().trim()), loginpass: escape($("#tb_usr_pass").val().trim()), character: escape($("#tb_usr_character").val().trim()), phone: escape($("#tb_usr_phone").val().trim()), mobile: escape($("#tb_usr_mobile").val().trim()), fullname: escape($("#tb_usr_fname").val().trim() + " " + $("#tb_usr_lname").val().trim()) }, function(data) {
                if (data) {
                    alert("Thanks for your register.now you can login in using new user info.");
                    window.location = "default.aspx";
                }
            });
        }
        else {
            window.scroll(100, 0);
        }
    }
    else {
        alert("You must read and accept our Terms and Conditions for Member Register.");
    }
};
var chkusr = function() {
    $.get(g_.member, { m: "", action: "chkusr", loginname: escape($("#tb_usr_mail").val().trim()) }, function(data) {
        if (parseInt(data)) {
            $("#lbl_exits").show();
        }
        else {
            $("#lbl_exits").hide();
        }
    });
};