
/* Config */
var REPORT_SUMBIT_URL = '/report';

/* Interface */
function zReport(ot, obj, show_tos_non_headshot, alert_banned) {

    var ot2 = ot;
    if(ot2.match(/^comment_/)) { // XXX
        ot2 = 'comment';
    }

    /* check loggined */
    if(!current_user) {
        /* fixed ie6 bug */
        setTimeout('(function(){window.location="/login"})()', 10);
        return;
    }

    /* build and show popup box */

    var sel_opts = '';
    var arr_tos = TOS_OF_OBJECT_TYPE[ot2];

    if(show_tos_non_headshot) {
        var has_A3 = 0;
        for(var i=0;i<arr_tos.length;i++) {
            if(arr_tos[i]=='A3') {
                has_A3 = 1;
                break;
            }
        }
        if(!has_A3) arr_tos.push('A3'); 
    }

    for(var i=0;i<arr_tos.length;i++) {
        var t = arr_tos[i];
        sel_opts += '<option value="'+ t +'">'+ TOS[t] + ' (TOS: '+ t +')</option>'; 
    }

    var box_html = '\
<div class="popupBg" id="popup_bg_report" style="display:none; "></div>\
<div id="popup_wrap_report" class="popupWrap" style="display:none; ">\
    <div class="popup3" style="width:650px;">\
        <div class="popTop"><p class="rt"></p><p class="lt"></p><p class="cen"></p></div>\
        <div class="pop_conWrap">\
            <a href="javascript:void(null);" onclick="showPopupBox(\'popup_wrap_report\', \'popup_bg_report\',60)" class="pop_close"></a>\
            <div id="report_msg_container" class="popup_content" style="display:none"></div>\
            <div id="report_form_container" class="popup_content">\
                <form id="report_form" name="report_form" action="" method="post" class="form_style">\
                <input type="hidden" name="zorpiasid" value="' + zorpiasid + '" />\
                <input type="hidden" name="object_type" value="' + ot + '" />\
                <input type="hidden" name="obj" value="' + obj + '" />\
                    <h1>'+ LNG_REPORT['report_abuse'] +'</h1>\
                    <h4></h4>\
                        <ul>\
                            <li class="pos_relative">\
                                <label for="report_reason"><span class="c_red">* </span>'+LNG_REPORT['violation_type']+':</label>\
                                <select id="report_reason" name="reason" onchange="show_tos(this)" style="width:300px;">\
                                    <option value="">- ' + LNG_REPORT['select_one'] + ' -</option>'+ sel_opts + '</select>\
                                <p id="tos_detail_content" style="margin-left:160px;"></p>\
                                <div class="form_tips_erro form_tips_erro2" style="display:block;"></div>\
                            </li>\
                            <li class="pos_relative">\
                                <label for="report_add_info"><span class="c_red">* </span>'+LNG_REPORT['Remark']+':</label>\
                                <textarea id="report_add_info" rows="" cols="" name="add_info" class="inputTextarea"  style="width:295px;height:100px;"></textarea>\
                                <div class="form_tips_erro form_tips_erro2" style="display:block;"></div>\
                            </li>\
                        </ul>\
                        <div class="form_button">\
                            <input type="button" value="'+ LNG_REPORT['report_abuse']  + '" onclick="submit_report(this)" /> \
                        </div>\
                </form>\
            </div>\
        </div>\
        <div class="popBottom"><p class="rb"></p><p class="lb"></p><p class="cen"></p></div>\
    </div>\
</div>';

    document.getElementById('report_box_container').innerHTML = box_html;

    showPopupBox('popup_wrap_report', 'popup_bg_report',60);

    /* check if the item has been reported ( from cookie ) */
    if(is_reported(ot, obj)) {
        show_msg_box('report_form_container', ZORPIA_JS_LANG.REPORTED_BEFORE);
        return;
    }

    if(alert_banned) {
        show_msg_owner_banned();
    }
}

function show_msg_box(content_id, msg, is_ok) {
    var cssClass = is_ok ? 'succ_info' : 'warn_info';
    msg = '<div id="report_msg_box" class="'+ cssClass +'"><p class="bg_cue"><span class="bg_cue">'+ msg +'</span></p></div>';
    msg += '<div class="bt_black"><span class="icons"><a class="icons" href="javascript://" onclick="showPopupBox(\'popup_wrap_report\', \'popup_bg_report\',60)">' + LNG_REPORT['btn_Close'] + '</a></span>';
    msg += '<span class="icons"><a class="icons" href="/report/my_report">' + LNG_REPORT['My_Reports'] + '</a></span></div>';

    document.getElementById(content_id).innerHTML = msg;
}

function show_msg_owner_banned() {
    var msg = '<div>'
        + '<h1>'+ LNG_REPORT['report_abuse'] +'</h1><h4></h4><div id="report_msg_box" class="warn_info info_2line"><p class="bg_cue"><span class="bg_cue">'
        + LNG_REPORT['msg_owner_banned'] + '</span></p></div>'
        + '<div class="lb_sendBt clearfix">\
            <div class="float_right"><div class="bt_orange_big" style="display: inline-block;"><span><a href="javascript://" onclick="document.getElementById(\'report_msg_container\').style.display=\'none\';document.getElementById(\'report_form_container\').style.display=\'block\'">'+ LNG_REPORT['send_report'] + '</a></span>'
        + '<span><a href="javascript://" onclick="showPopupBox(\'popup_wrap_report\', \'popup_bg_report\',60); document.getElementById(\'report_msg_container\').style.display=\'none\'">'+ LNG_REPORT['cancel'] + '</a></span></div></div>'
        + '</div></div>';

    var mc = document.getElementById('report_msg_container');
    mc.innerHTML = msg;
    mc.style.display = 'block';
    document.getElementById('report_form_container').style.display = 'none';
}

function show_tos(sel_obj) {
    var v = sel_obj.value;
    var box = document.getElementById('tos_detail_content');
    box.innerHTML = v ? TOS_DETAIL[v] : '';
}

function submit_report(clkObj) {
    var f = document.forms['report_form'];
    if(!valid_report_form(f)) return;
    clkObj.onclick = function() {};
    clkObj.value = LNG_REPORT['Submitting'];

    jQuery.ajax({
        type: "POST",
        url: REPORT_SUMBIT_URL,
        cache: false,
        data: {
            'zorpiasid': f.zorpiasid.value,
            'ot': f.object_type.value,
            'o': f.obj.value,
            'reason': getSelVal(f.reason),
            'add_info': f.add_info.value
        },
        dataType: 'text',
        success: function(data, textStatus, xhr) { 
            whenSubmited(data, textStatus, xhr, f.object_type.value, f.obj.value);
        },
        error: function(xhr) { whenSubmitError(xhr) }
    });
}

function whenSubmited(data, textStatus, xhr, object_type, item) {
    var msg = '';
    var is_ok = 0;

    if(object_type.match(/^comment_/)) { // XXX 
        object_type = 'comment';
    }

    switch(data) {
        case 'NEED_LOGIN':
            msg = ZORPIA_JS_LANG.NOT_LOGINED;
            window.location = '/login';
            break;

        case 'REPORT_OK':
            store_reported_to_client(object_type, item);

            msg = ZORPIA_JS_LANG.REPORT_OK;
            is_ok = 1;
            break;

        case 'REACH_REPORT_LIMIT':
            msg = ZORPIA_JS_LANG.REACH_REPORT_LIMIT;
            break;

        case 'SEVER_ERROR':
            msg = ZORPIA_JS_LANG.ENCOUTER_SOME_ERROR;
            break;

        case 'REPORTED_BEFORE':
            store_reported_to_client(object_type, item);

            msg = ZORPIA_JS_LANG.REPORTED_BEFORE;
            break;

        case 'OBJECT_NOT_EXIST':
            msg = ZORPIA_JS_LANG.OBJECT_NOT_EXIST;
            break;

        case 'OBJECT_BANNED':
            msg = ZORPIA_JS_LANG.OBJECT_BANNED;
            break;

        case 'OBJECT_USER_DELETED':
            msg = ZORPIA_JS_LANG.OBJECT_USER_DELETED;
            break;

        case 'OBJECT_CLOSED':
            msg = ZORPIA_JS_LANG.OBJECT_CLOSED;
            break;

        case 'NOT_ALLOW_REPORT_MY_OWN':
            msg = ZORPIA_JS_LANG.NOT_ALLOW_REPORT_MY_OWN;
            break;

        case 'OBJECT_NULL':
        case 'OBJECT_TYPE_NULL':
        case 'REASON_UNVALID':
            msg = ZORPIA_JS_LANG.LOGIN_AGAIN;
            break;

        case 'TEXT_TOO_LONG':
            msg = ZORPIA_JS_LANG.TEXT_TOO_LONG;
            break;

        case 'BAD_REQUEST':
        default:
            msg = ZORPIA_JS_LANG.LOGIN_AGAIN;
    }

    msg = msg.replace(/text_object_type/, obj_type[object_type]);

    show_msg_box('report_form_container', msg, is_ok);
}

function whenSubmitError(xhr) {
    var msg = '<div id="report_msg_box" class="erro_info"><p class="bg_cue"><span class="bg_cue">'
        + LNG_REPORT['server_err'] +'</span></p></div>';
    document.getElementById('report_form_container').innerHTML = msg;
}

function valid_report_form(f) {

    var reason = getSelVal(f.reason);
    if(!reason) {
        alert(ZORPIA_JS_LANG.SELECT_TOS);
        return false;
    }

    /* For some selected tos, add. info. is required. */
    var add_info = f.add_info.value;
    if(!add_info || add_info.match(/^\s+$/)) {
        var TOS_REQ_INFO = { 'B1' :1, 'B2' :1 , 'B5' :1 ,
            'B6' :1, 'B7' :1, 'B8' :1, 'B9' :1,
            'A2' :1, 'Copyright_music' :1 };

        if(TOS_REQ_INFO[reason]) {
            alert(ZORPIA_JS_LANG.ADDITIONAL_REQUIRED);
            return false;
        }
    }

    return true;
}

/* Deal with reported items in  window object & cookie */
function get_reported_from_window(object_type) {
    var val_str = window['reported_'+object_type] || '';
    if(!val_str) return new Array();
    return val_str.split(',');
}
function get_reported_from_cookie(object_type) {

    if(typeof cookie == 'undefined') return;

    var cookie_name = 'reported_' + object_type;
    var val_str = cookie.read(cookie_name) || '';
    if(!val_str) return new Array();
    return  val_str.split(',');
}

function store_reported_to_client(object_type, item) {
    var items_arr = store_reported_to_window(object_type, item);
    store_reported_to_cookie(object_type, items_arr);
}
function store_reported_to_window(object_type, item) {
    var val_arr = get_reported_from_window(object_type);
    val_arr.push(item);
    val_str = val_arr.join(',');
    window['reported_'+object_type] = val_str;
    return val_arr;
}
function store_reported_to_cookie(object_type, items_arr) {

    if(typeof cookie == 'undefined') return;

    var val_arr = get_reported_from_cookie(object_type);
    if(val_arr.length > 150) val_arr.shift();   // max 150 items
    val_arr = val_arr.concat(items_arr);

    var val_str = val_arr.join(',');

    var cookie_name = 'reported_' + object_type;
    cookie.remove(cookie_name);
    cookie.write(cookie_name, val_str, '+1d'); // for 1 day
}

function is_reported(object_type, item) {
    /* Check from window obj first */
    var val_arr = get_reported_from_window(object_type);
    for(var i=0; i < val_arr.length; i++) {
        if(val_arr[i] && val_arr[i] == item) return true;
    }

    /* Check from cookie */
    val_arr = get_reported_from_cookie(object_type);
    if(!val_arr) return false;

    for(var i=0; i < val_arr.length; i++) {
        if(val_arr[i] && val_arr[i] == item) return true;
    }

    return false;
}

/* Utils */
function getSelVal(elem) {
    if(!elem) return;

    switch(elem.type || elem[0].type) {
        case 'select-one':
            if(elem.selectedIndex == -1) return;
            return elem.options[elem.options.selectedIndex].value;
            break;

        case 'radio':
            if(elem.checked) {
                return elem.value;
            }
            else {
                for(var i=0; i<elem.length; i++)
                    if(elem[i].checked)
                        return elem[i].value;
            }
            break;

        case 'hidden':
            return elem.value;
    }

    return;
}

