// common ops
function elem(obj) { return typeof(obj)=='string'?document.getElementById(obj):obj; }
function hideElem(id) { elem(id).style.display = "none"; }
function showElem(id) { elem(id).style.display = "block"; }
function elemClass(action, elem, cls) {
    switch(action) {
    case 'has': return (new RegExp('\\b'+cls+'\\b')).test(elem.className);break;
    case 'add': if (!elemClass('has', elem, cls)) {elem.className += elem.className?' '+cls:cls;};break;
    case 'del': var r = elem.className.match(' '+cls)?' '+cls:cls; elem.className = elem.className.replace(r, ''); break;
    }
}
function setSelectVal(e, v) {
    var ops = e.childNodes;
    for (var i=0; i<ops.length; i++) {
        if (ops[i].value==v) {
            ops[i].selected = true;
            break
        }
    }
}
// index functions
var customRadio = (function() {
    function r() { this.allElems = {}; this.selected = undefined; }
    r.prototype = {
        'add': function(id) { 
            var e = elem(id), r = this, old = e.onclick?e.onclick:function(){}; 
            if (!e) return false;
            this.allElems[id] = e;
            e.onclick = function() {
                r.select(id);
                old.apply(this, arguments);         // run old onclick after selected
            };
            return true;
        },
        'select': function(id) {
            var selected = this.allElems[id];
            if (!selected) return '';
            if (this.selected) elemClass('del', this.selected, 'selected');
            this.selected = selected;
            elemClass('add', selected, 'selected');
            return id;
        }
    };
    return r;
})();
var pointRadio = new customRadio();
var cardRadio = new customRadio();
function setProduct(product_type) { elem("product_type").value = product_type; }
function setAmount(amount) { elem("amount").value = amount; }
function setPayMethod(pay_method, other_bank) { 
    elem("pay_method").value=pay_method; 
    elem("other_bank").disabled = other_bank?false:true;
}
function showPointBlock() { hideElem("cardBlock"); hideElem("consignBlock"); synPoint(); showElem("pointBlock"); }
function showConsignBlock() { hideElem("pointBlock"); hideElem("cardBlock"); synConsign(); showElem("consignBlock"); }
function showCardBlock() { hideElem("pointBlock"); hideElem("consignBlock"); synCard(); showElem("cardBlock"); }
function synPoint() {   // syn to hidden input
    var e = elem("pointAmount"), p = pointProduct, par = p['par'], n = parseInt(parseInt(e.value, 10)/par);
    setProduct(p["id"]);
    if (isNaN(n) || (n*par).toString() != e.value || n <= 0 || n > maxPointAmout || n % pointSaleBase != 0) {
        setAmount('');
        elem("pointPrice").innerHTML = elem("pointSave").innerHTML = "0.00";
        elem("pointBonus").innerHTML = "0";
        return;
    }
    setAmount(n);
    var price = n*p["sale_price"], save = n*p["origin_price"]-price, bonus = n*p["par"];
    elem("pointPrice").innerHTML = price.toFixed(2).toString();
    elem("pointSave").innerHTML = save.toFixed(2).toString();
    elem("pointBonus").innerHTML = bonus.toString();
}

function synConsign() {   // syn to hidden input
    var e = elem("consignAmount"), p = pointProduct, par = p['par'], n = parseInt(parseInt(e.value, 10)/par);
    setProduct(p["id"]);
    if (isNaN(n) || (n*par).toString() != e.value || n <= 0 || n > maxPointAmout || n % pointSaleBase != 0) {
        setAmount('');
        elem("consignPrice").innerHTML = elem("consignSave").innerHTML = "0.00";
        elem("consignBonus").innerHTML = "0";
        return;
    }
    setAmount(n);
    var price = n*p["sale_price"], save = n*p["origin_price"]-price, bonus = n*p["par"];
    elem("consignPrice").innerHTML = price.toFixed(2).toString();
    elem("consignSave").innerHTML = save.toFixed(2).toString();
    elem("consignBonus").innerHTML = bonus.toString();
}

function synCard() {    // syn to hidden input
    var ok = 0;
    var e = elem("cardAmount"),  n = parseInt(e.value, 10);
    if (!isNaN(n) && n.toString() == e.value && n > 0 && n <= maxCardAmount) {
        setAmount(n); 
        ok++;
    } else
        setAmount('');
    var p = elem(cardRadio.selected);
    if (p) { 
        p = cardProducts[p.getAttribute("product_type_id")]; 
        setProduct(p["id"]); 
        ok++;
    } else 
        setProduct('');
    
    if (ok != 2) {
        elem("cardPrice").innerHTML = elem("cardSave").innerHTML = "0.00";
        elem("cardBonus").innerHTML = "0";
        return;
    }
    var price = n*p["sale_price"], save = n*p["origin_price"]-price, bonus = n*p["par"];
    elem("cardPrice").innerHTML = price.toFixed(2).toString();
    elem("cardSave").innerHTML = save.toFixed(2).toString();
    elem("cardBonus").innerHTML = bonus.toString();
}
function inputPointAmount(amount) {
    var e = elem("pointAmount");
    if (amount) { e.disabled = true; e.value = amount*pointProduct["par"]; }
    else { e.disabled = false; elem("pointAmount").select(); }
    synPoint();
}
function checkForm() {
    if (!elem("amount").value) { alert("请输入适合的购买数量！"); return false; }
    else if (!elem("product_type").value) { alert("请选择要购买的点卡类型！"); return false; }
    else if (!logined && !elem("user_name").value) { alert("请输入格式正确的网易通行证账号！"); return false; }
    else if (!logined && !elem("pwd").value) { alert("请输入您的通行证账号密码！"); return false; }
    else if (!logined && enableCaptcha && !elem("captcha_ans").value) { alert("请输入验证码！"); return false; }
    elem("ecard_bill").submit();
    return true;
}

function refresh_vcode() {
    var vcode_id = 'ecard'+parseInt(Math.random()*10000000000);
    try {
        elem("vcode_img").src = "/cgi-bin/get_vcode.fcgi?ec_captcha_id=" + vcode_id;
        elem("captcha_id").value = vcode_id;
        elem("captcha_ans").value = "";
    } catch(e) {
    }
}
