/* Config */
var report_box_id = 'rbox';
var report_bg_id = 'rbox_bg';
var report_content_id = 'rbox_content';
var report_form_id = 'report_form';
var report_sumbit_url = '/report';

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

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

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

    mk_window_bg(report_bg_id);
    if(!mk_popup_box(report_box_id, Zorpia_Reporter)) return;

	/* static rbox */
    var report_interval_id = setInterval("setBoxTop()", 400);

	/* attach: close box */
	document.getElementById('img_zbox_closer').onclick = function() {
		close_popup_box(report_box_id, report_bg_id);
		clearInterval(report_interval_id);
	};

	/* check if the item has been reported ( from cookie ) */
	if(is_reported(ot, obj)) {
        var msg_a = from_block_user ? ZORPIA_JS_LANG.BLOCKED_BEFORE : ZORPIA_JS_LANG.REPORTED_BEFORE;
		show_msg_box(report_content_id, msg_a);
		return;
	}

	/* ---------------------- */
	set_report_form(report_content_id);

    if(from_block_user) {
        document.getElementById('pre-msg').innerHTML = msg_block_user;
    }

	/* fillin request data to the report form */
	var f = document.getElementById(report_form_id);
	f.zorpiasid.value = zorpiasid; //from global var
	f.object_type.value = ot;
	f.obj.value = obj;

    var text_ot = tos_type.replace(/_/g, ' '); // for english
    if(text_ot.match(/comment/)) text_ot = 'comment';

    if(document.getElementById('span_rp_obj_type'))
	    document.getElementById('span_rp_obj_type').innerHTML = obj_type[text_ot];
	document.getElementById('span_rp_obj_type2').innerHTML = obj_type[text_ot];

	/* differnt object_type, different tos list */
	if(typeof(HTML_TOS) != 'undefined') {
		document.getElementById('report_form_tos').innerHTML = HTML_TOS[tos_type];
	}

	if(show_tos_non_headshot) {
		var nhs_box = document.getElementById('report_tos_nhs');
		nhs_box.style.display = '';
		nhs_box.style.width = '100%';
	}
	/* ---------------------- */

}

function setBoxTop() {
	staticTop(document.getElementById(report_box_id)); 
};

/*  Fillin the popup box with the HTML of report form */
function set_report_form(contentID) {

	var html_form = '\
<form id="' + report_form_id + '" name="'+ report_form_id +
	'" method="post">\
	<input type="hidden" name="zorpiasid" value="" />\
	<input type="hidden" name="object_type" value="" />\
	<input type="hidden" name="obj" value="" />' + Report_form;

	document.getElementById(contentID).innerHTML = html_form;
}

/* Extra js for the report form */
function submit_report(f, clkObj) {
	if(!valid_report_form(f)) return;
	clkObj.onclick = function() {};
	clkObj.innerHTML = Submitting;

	/* Submit with AJAX (USE tw-sack.js) */
	if(!typeof(sack) == 'function') return;

	var x = new sack();
	x.requestFile = report_sumbit_url;
	x.method = 'POST';
	x.setVar('zorpiasid', f.zorpiasid.value);
	x.setVar('ot', f.object_type.value);
	x.setVar('o', f.obj.value);
	x.setVar('reason', getSelVal(f.reason));
	x.setVar('add_info', f.add_info.value);

    x.onCompletion = function() { 
			whenSubmited(x, f.object_type.value, f.obj.value) };

    x.onError = function() { whenSubmitError(x) };
    x.runAJAX();
}

function whenSubmited(ajax, object_type, item) {
	var msg = '';

    var text_object_type = object_type.replace(/_/g, ' '); // for english
    if(text_object_type.match(/comment/)) text_object_type = 'comment';

	switch(ajax.response) {
		case 'NEED_LOGIN':
			msg = ZORPIA_JS_LANG.NOT_LOGINED;
			document.location.href = '/login';
			break;

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


			msg = ZORPIA_JS_LANG.REPORT_OK;
			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/, text_object_type);

	show_msg_box(report_content_id, msg);
}

function show_msg_box(content_id, msg) {
	msg = '<div id="report_msg_box" class="warn_info info_2line"><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="document.getElementById(\'img_zbox_closer\').onclick()">' + btn_Close + '</a></span>';
	msg += '<span class="icons"><a class="icons" href="/report/my_report">' + My_Reports + '</a></span></div>';

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

function whenSubmitError(ajax) {
	var msg = '\
		<div id="report_msg_box">\
			Sorry, but it seems that there is an error in the server.\
			Please try again later.\
		</div>\
	';

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

/* 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_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 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 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;
}

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;
}

function show_tos(sel_obj) {
    hide_all_tos(sel_obj);
    if(!sel_obj.value) return;
    document.getElementById('tos_' + sel_obj.value).style.display = 'block';
}

function hide_all_tos(sel_obj) {
    for(var i=0; i<sel_obj.options.length; i++) {
		var val = sel_obj.options[i].value;
        if(val) {
			var div = document.getElementById('tos_' + val);
			if(div) div.style.display = 'none';
		}
    }
}

/* UI */
function mk_window_bg(bgID) {
	if(document.getElementById(bgID)) return;

    var win_bg = document.createElement('div');
    win_bg.id = bgID;

	var s = win_bg.style;
	s.position = 'absolute';
	s.left = 0;
	s.top = 0;
	s.width = '100%';
    s.height = document.body.scrollHeight + 'px';
	s.backgroundColor = '#000';
	s.textAlign = 'center';
	s.zIndex = 999000;
    s.filter = 'alpha(opacity=60)';
    s.opacity = 0.6;

	document.body.appendChild(win_bg);	
}


function mk_popup_box(boxID, title) {
	if(document.getElementById(boxID)) return;

    var box = document.createElement('div');
    box.id = boxID;

    box.className = 'popupWrap';

	var s = box.style;
	s.position = 'absolute';
	s.backgroundColor = 'transparent';
	s.zIndex = 999001;
    s.top = '20px';

	document.body.appendChild(box);

	// fillin the top/bottom corner and content wrapper
	var contentID = boxID + '_content';
	var html = '<style type="text/css"> .popup table, .popup tr, .popup td, .popup p, .popup li, .popup div, .popup span{ font-size:12px;}</style> \
	<div class="popup" style="background:#fff; top:20px">\
		<div class="popup_title">' + title 
		+'<span><img src="http://img.zorpia.com/popup/icon_close.gif" id="img_zbox_closer" style="cursor:pointer" /></span></div>\
			<div id="' + contentID + '" class="popup_content"></div>\
		</div>\
	';

	box.innerHTML = html;

	/* fix img loading in IE */
	if(navigator.appVersion.indexOf('MSIE') != -1) {
		setTimeout('\
			(function() {\
				document.getElementById("img_zbox_closer").src = "http://img.zorpia.com/popup/icon_close.gif";\
				var img = new Image();\
				img.src = "http://img.zorpia.com/popup/popup_03.jpg";\
			})()\
		', 10);
	}

    /* hide windowed elements: select box & flash  */
    show_hide_tag('select', 0);
    show_hide_tag('object', 0);
    show_hide_tag('embed', 0);

	return contentID;
}

function close_popup_box(boxID, bgID) {
	var box = document.getElementById(boxID);
	var bg = document.getElementById(bgID);

	if(box) document.body.removeChild(box);
	if(bg) document.body.removeChild(bg);

    show_hide_tag('select', 1);
    show_hide_tag('object', 1);
    show_hide_tag('embed', 1);
}

/* utils */
function staticTop(obj) {
    // NOT for IE
	if(navigator.appVersion.indexOf('MSIE') == -1) {
//        obj.style.MarginTop = obj.offsetHeight/2 + 'px';
        obj.style.top = getClientHeight() / 2 - obj.offsetHeight/2 + 'px';
        return;
    }

    // For IE
    var theTop = getScrollTop() + getClientHeight() / 2 - obj.offsetHeight/2;

    if(document.all) obj.style.pixelTop=theTop;
    else if(document.getElementById) obj.style.top= theTop + 'px';
    else if(document.layers) eval(obj.top=theTop);
}

function getScrollTop(){
    var scrollTop;
    if(window.pageYOffset){
        scrollTop=window.pageYOffset;
    }else if(document.documentElement&&document.documentElement.scrollTop){
        scrollTop=document.documentElement.scrollTop;
    }else if(document.body){
        scrollTop=document.body.scrollTop;
    }
    return scrollTop;
}
function getClientHeight() {
    var theY;
    if(window.innerHeight){
        theY=window.innerHeight;
    }else if(document.documentElement&&document.documentElement.clientHeight){
        theY=document.documentElement.clientHeight;
    }else if(document.body){
        theY=document.body.clientHeight;
    }
    return theY;
}

function show_hide_tag(tagName, show){
    var selects = document.getElementsByTagName(tagName);

    if(!selects.length) return;
    if(show) {
        for (i = 0; i < selects.length; i++) {
            if(selects[i].vsChanged) selects[i].style.visibility = 'visible';
        }
    }
    else {
        for (i = 0; i < selects.length; i++) {
            if(selects[i].style.visibility != 'hidden') {
                selects[i].style.visibility = 'hidden';
                selects[i].vsChanged = 1;
            }
        }
    }
}

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;
}

