function loadSelection(){
        var checkedIds = init_array();
        get_array('Checked_Ids', checkedIds);
    checkboxes = document.odds.category_ids;
    for (i = 0; i < checkboxes.length; i++){
        checkbox = checkboxes[i];
        var _checked = false;
        var idsLength = next_entry(checkedIds);
        for (j = 1; j < idsLength; j++){
            if (checkbox.value == checkedIds[j]){
                _checked = true;
                break;
            }
        }
        checkbox.checked = _checked;
    }
}

function saveSelection(){
    var timeToKeep = 6000000; // one hundred minutes
    var expires = new Date();
    expires.setTime(expires.getTime() + timeToKeep);
    checkboxes = document.odds.category_ids;
    var checkedIds = init_array();
    var index = 1;
    for (i = 0; i < checkboxes.length; i++){
        checkbox = checkboxes[i];
        if (checkbox.checked){
            checkedIds[index++]=checkbox.value;
            if (index > 200){
                break;
            }
        }
    }
    set_array("Checked_Ids", checkedIds, expires);
}

function clearSelection(){
    checkboxes = document.odds.category_ids;
    for (i = 0; i < checkboxes.length; i++){
        checkbox = checkboxes[i];
        checkbox.checked = false;
    }
    saveSelection();
}

function isIE() {
    return navigator.appName.indexOf("Microsoft") != -1;
}

function hot_keys(event){
    event = (event) ? event : ((window.event) ? event : null);
    if (event){
        var KEY_ESC = 27;
        var KEY_ENTER = 13;
        var KEY_F2 = 113;
        var code = (event.charCode) ? event.charCode : ((event.which) ? event.which : event.keyCode);
        if (code == KEY_F2 || code == KEY_ENTER){
            var active = event.srcElement? event.srcElement : event.target;
            if (active == document.getElementById('query') ||
                active == document.getElementById('searchbyname')){
                document.getElementById('searchbyname').click();
            }else if (active == document.getElementById('ending') ||
                 active == document.getElementById('selectbytime')){
                document.getElementById('selectbytime').click();
            }else if (document.getElementsByName('continue').length > 0)
                document.getElementById('continue').click();
            if (isIE() && code == KEY_ENTER)
                // IE hack: the IE browser treats the Enter key as a system key: submit
                // the default form. After the calling click() above, it will return
                // the second odds page, and then IE browser will apply the system
                // key "Enter" in the return page. So we need to cancel the key event
                // for browser.
                // Warning: event.returnValue is not supported by FF and W3C, and only
                //          works for IE5+
                event.returnValue = false;
        }
        else if (code == KEY_ESC && document.odds != null){
            clearSelection();
        }
    }
}

function getOCMap(ocs_id, player_id) {
    if(player_id == undefined) { return; }

    var oc_map = scorecast_data[ocs_id];
    var selected_oc_id_player = undefined;
    if (typeof(oc_map) != "undefined") {
        selected_oc_id_player = oc_map[player_id];
    }
    return selected_oc_id_player;
}

function chooseFirstPlayer(selector_name) {
    var selector = e$(selector_name);
    if (selector != undefined) {
        var li = selector.getElementsByTagName("li")[0];
        if (li != undefined)
            li.onclick();
    }
}

function getTableDataFromSelectorItem(element) {
    var dropdownlist_div = element.parentNode.parentNode.parentNode;
    var nobr = dropdownlist_div.parentNode.parentNode;
    return nobr.parentNode;
}

function filterScorecastScores(li, update_odds) {
    var td = getTableDataFromSelectorItem(li);
    var id_tokens = td.id.split('_');
    var prefix = id_tokens[0] + '_' + id_tokens[1];

    var player_id = findElement(td, "input", new RegExp(prefix + "_player_.*")).value;
    var score_input = findElement(td, "input", new RegExp(prefix + "_score_.*"));

    adjustScorecastScores(player_id, id_tokens[3], score_input, update_odds);
}

function adjustScorecastScores(player_id, ocs_id, score_input, update_odds) {
    var player_oc_map = getOCMap(ocs_id, player_id);
    var initial_score = score_input.value;
    var menu = findElement(score_input.parentNode.parentNode, "div", score_input.id + "_menu");

    var first_valid_index = -1;
    var initialize = false;

    if(menu != undefined && player_oc_map != undefined) {
        var selectors = menu.getElementsByTagName("li");
        for(var i = 0; i < selectors.length; i++) {
            var is_valid = player_oc_map[selectors[i].id] != undefined;
            selectors[i].style.display = is_valid ? "" : "none";
            if(is_valid && first_valid_index == -1 ) {
                first_valid_index = i;
            }
            if(initial_score == selectors[i].id) {
                var initial_index = i;
                if(!is_valid) initialize = true;
            }
        }
        if(initialize || update_odds) {
            var li = first_valid_index == -1 ?
                    selectors[initial_index] : selectors[first_valid_index];
            setMenuSize(menu, score_input.id + "_selector");
            li.onclick();
        }
    }
}

function selectScorecastOC(sender) {
    var td = getTableDataFromSelectorItem(sender);
    var id_tokens = td.id.split('_');
    var ocs_id = id_tokens[3];
    var prefix = id_tokens[0] + '_' + id_tokens[1];
    var score_input = findElement(td, "input", new RegExp(prefix + "_score_.*"));
    var player_input = findElement(td, "input", new RegExp(prefix + "_player_.*"));
    var score = score_input.value;

    if(ocs_id == undefined) { return; }

    var selected_oc_id_player = getOCMap(ocs_id, player_input.value);
    var selected_oc_data = selected_oc_id_player != undefined ? selected_oc_id_player[score] : undefined;
    var tr = td.parentNode;
    var link = findElement(tr, "a", new RegExp("bet_link.*"));
    var message = findElement(tr, "span", new RegExp("no_oc_message_.*"));
    var odds_no_option = findElement(tr, "span", new RegExp("odds_eq_1_.*"));
    var hide_className = "odds display_hidden"
    var show_className = "odds display_block"

    link.href = "#";
    link.style.display = "none";
    odds_no_option.className = hide_className;
    message.className = hide_className;

    if (selected_oc_data == undefined) {
        message.className = show_className;
    } else {
        if (selected_oc_data["clickable"]) {
            link.href = selected_oc_data["link"];
            link.style.display = "block";
        } else {
            odds_no_option.className = show_className;
        }
    }
    for(var i = 0; i < link.childNodes.length; i++) {
        var node = link.childNodes[i];
        if (node.id == undefined) {
            continue;
        }
        var node_odds_style = node.id.substr(node.id.indexOf("_") + 1);
        node_odds_style = node_odds_style.substr(0, node_odds_style.indexOf("_"));
        node.id = node.id.substr(0, node.id.lastIndexOf("_") + 1)
                      + (selected_oc_data ? selected_oc_data["id"] : "");
        var odds = selected_oc_data ? selected_oc_data.odds[node_odds_style] : "";
        node.innerHTML = "<div class='odds_left'></div><div class='odds_middle'>" + odds + "</div><div class='odds_right'></div>";
    }
}

function showSMSPopup(season_id, game_id) {
    var popup = e$("sms_popup");
    if(game_id) {
        var param = '?game_id=' + game_id;
        popup.className = "sms_popup_game";
    } else if(season_id) {
        var param = '?season_id=' + season_id;
        popup.className = "sms_popup_season";
    } else {return;}

    var request = getHttpRequest();
    request.onreadystatechange = function() {
        if(request.readyState == 4) {
            var resp;
            if(request.status == 200)
                resp = request.responseText;
            else {
                alert(getDefaultErrorMessage());
                return;
            }
            if(resp.indexOf('invalid_mobile', 0) != -1) {
                hidePopups();
                resp = eval("("+resp+")");
                var modify_phone_num = confirm(resp.invalid_mobile);
                if (modify_phone_num === true)
                    window.location = "user";
                else
                    return;
            } else if(resp.indexOf('err_msg', 0) != -1) {
                hidePopups();
                resp = eval("("+resp+")");
                alert(resp.err_msg);
                return;
            } else {
                e$('sms_resp').innerHTML = resp;
                e$("sms_waitting_load").style.display = "none";
                e$("sms_resp").style.display = "block";
                hidePopups();
                /* To fix the IE6 defect, a div with white background will be added under the popup div, but popup div here has a transparent png background, so we will not use the IE6 hack part here. */
                showCentralizedPopupWithoutIE6Fix(popup);
            }
        }
    }
    request.open("GET", '/livescore_sms_subscription' + param, true);
    request.send(null);
}

function subscribeSMS(what) {
    var form = e$('sms_form_'+what);
    var radios = form.sms_result;
    var service_id = null;
    for(i=0; i<radios.length; i++) {
        if(radios[i].checked) {
            service_id = radios[i].value;
            break;
        }
    }
    if(!service_id) {return; }
    var params = "cmd=subscribe&service_id=" + service_id + "&" + what + "_id=" + form[what+'_id'].value;
    e$("sms_resp").style.display = "none";
    e$("sms_waitting_load").style.display = "block";
    var request = getHttpRequest();
    request.onreadystatechange = function() {
        if(request.readyState == 4) {
            var resp;
            if(request.status == 200)
                resp = request.responseText;
            else {
                alert(getDefaultErrorMessage());
                return;
            }
            if(resp.indexOf('invalid_mobile', 0) != -1) {
                hidePopups();
                resp = eval("("+resp+")");
                var modify_phone_num = confirm(resp.invalid_mobile);
                if (modify_phone_num === true)
                    window.location = "user";
                else
                    return;
            } else if(resp.indexOf('err_msg', 0) != -1) {
                hidePopups();
                resp = eval("("+resp+")");
                alert(resp.err_msg);
                return;
            } else {
                e$('sms_resp').innerHTML = resp;
                e$("sms_waitting_load").style.display = "none";
                e$("sms_resp").style.display = "block";
            }
        }
    }
    request.open("POST", '/livescore_sms_subscription', true);
    request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    request.send(params);
}

/* howtoplay popup functions for odds how to play
* need common.js
* need howtoplay_popup.tpl
*/
function showHowToPlayPopup() {
   var popup = e$("howtoplay_popup");
   var howtoplay_content = e$("howtoplay_content");

   var request = getHttpRequest();
   request.onreadystatechange = function() {
       if(request.readyState == 4) {
           var resp;
           if(request.status == 200)
               resp = request.responseText;
           else
               alert(getDefaultErrorMessage());
           if(resp.indexOf('internalservererror', 0) != -1) {
               hidePopups();
               alert(getDefaultErrorMessage());
               return;
           }
           howtoplay_content.innerHTML = resp;

           hidePopups();
           showCentralizedPopup(popup);
           popup = null;
           request = null;
       }
   }
   var url = "/selection/how_to_play_doc_only.html"

   request.open("GET", url, true);
   request.send(null);
}

function adjustSelectionBodyHeight(no_scroll_bar, adjust_width) {
    if (e$("selections-body") == undefined || e$("selections-scroll-area") == undefined) {
        return;
    }

    var old_class = e$("selections-scroll-area").className;
    if (no_scroll_bar) {
        e$("selections-scroll-area").style.height = 'auto';
        var new_class = old_class.replace('enable-scrollbar', 'disable-scrollbar');
        e$("selections-scroll-area").className = new_class;
    } else {
        var new_class = old_class.replace('disable-scrollbar', 'enable-scrollbar');
        e$("selections-scroll-area").className = new_class;
        var margins = 220;
        var client_height = 900;
        var content_height;
        if(typeof(window.innerWidth) == 'number') {
            //Non-IE
            client_height = window.innerHeight;
        } else if(document.documentElement && (document.documentElement.clientWidth
                     || document.documentElement.clientHeight)) {
            //IE 6+ in 'standards compliant mode'
            client_height = document.documentElement.clientHeight;
        } else if(document.body && (document.body.clientWidth
                     || document.body.clientHeight)) {
            //IE 4 compatible
            client_height = document.body.clientHeight;
        }
        content_height = e$("selections-body").scrollHeight;
        var mini_height = 220;    //minimal height for selections-scroll-area
        if (client_height - margins < mini_height) {
            e$("selections-scroll-area").style.height = mini_height + 'px';
        } else if (client_height - margins > content_height) {
            e$("selections-scroll-area").style.height = content_height + 'px';
        } else {
            e$("selections-scroll-area").style.height = (client_height - margins) + 'px';
        }
    }

    if (adjust_width) {
        var client_width = e$("selections-scroll-area").clientWidth;
        e$("selections-body").style.width = client_width + 'px';
    }
}

function iecompattest(){
return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body;
}

function showProgress(){
    if (e$("result_message")) {
        e$("result_message").style.display="none";
    }
    var ns = (navigator.appName.indexOf("Netscape") != -1) || window.opera;
    var barObj = document.getElementById("updating");
    var x = 0;
    var y = ns ? pageYOffset : iecompattest().scrollTop;
    barObj.style.left = x+"px";
    barObj.style.top = y+"px";
    barObj.style.display="block";
}

function hideProgress(no_scroll_bar, adjust_width){
    var updating = document.getElementById("updating");
    if(updating) {
        updating.style.display="none";
    }

    adjustSelectionBodyHeight(no_scroll_bar, adjust_width);
    hideById("label_crumbs_box");
}

function showAjaxMessage(err_msg){
    if (err_msg) {
        document.getElementById("result_message").innerHTML=err_msg;
    }
    document.getElementById("result_message").style.display="block";
    hideProgress();
    if (typeof(ajax_result_message)!="undefined")
    {
        ajax_result_message = err_msg;
    }
}

/* functions for draw drop down list begin */
function hideMenu(menu_name) {
    //use a jQuery selector to hide the possible multiple menus, as the homepage
    //may contain multiple widgets of the same type
    jQuery("//[id="+menu_name+"]").hide();
}

function closeOtherMenu(menu_name) {
    var menu_list = document.getElementsByClassAndTagName("menu", "div");
    for (var i = 0; i < menu_list.length; i++) {
        if (menu_list[i].id != menu_name) {
            hideMenu(menu_list[i].id);
        }
    }
}

var MAXHEIGHT = 260;

function setMenuSize(menu, selector_name) {
    var selector = findElement(menu, "ul", selector_name);
    var visible_div = menu.parentNode.getElementsByTagName("div")[0];
    var min_width = visible_div.scrollWidth;
    var width;
    var height;

    width = menu.scrollWidth < min_width ? min_width : menu.scrollWidth;
    var selector_width = width;

    height = menu.scrollHeight > MAXHEIGHT ? MAXHEIGHT : menu.scrollHeight;
    if (selector.scrollHeight > MAXHEIGHT) {
        width += 17;
    }
    menu.style.height = height.toString() + "px";
    menu.style.width = width.toString() + "px";
    selector.style.width = selector_width.toString() + "px";
}

function setSelectedItem(first_item, selector) {
    var value_selected = first_item.innerHTML;
    var li_list = selector.getElementsByTagName("li");
    for (var i = 0; i < li_list.length; i++) {
        if (li_list[i].innerHTML.strip() == value_selected.strip()) {
            li_list[i].className = "selected";
            break;
        }
    }
}

function showBorder(first_item_name) {
    var selectbar = e$(first_item_name);
    selectbar.className = "selectedbar";
}

function switchMenu(field_name, value_div) {
    var menu_name = field_name + "_menu";
    var selector_name = field_name + "_selector";
    var first_item_name = field_name + "_item0";

    var menu = findElement(value_div.parentNode, "div", menu_name);
    if (menu.style.display == "none") {
        menu.style.display = "block";
        setMenuSize(menu, selector_name);
        var selector = findElement(menu, "ul", selector_name);
        setSelectedItem(findElement(value_div, "div", first_item_name), selector);
        showBorder(first_item_name);
        closeOtherMenu(menu_name);
    } else {
        menu.style.display = "none";
    }
}

function chooseItem(field_name, li) {
    var menu_div = li.parentNode.parentNode;
    var visible_div = menu_div.parentNode.getElementsByTagName("div")[0];
    var input = findElement(visible_div, "input", field_name);
    var first_item = findElement(visible_div, "div", field_name + "_item0");

    if (input != undefined) input.value = li.id;
    if (first_item != undefined) first_item.innerHTML = li.innerHTML;
    hideMenu(menu_div.id);
}

function hoverColor(selector, li) {
    var li_list = e$(selector).getElementsByTagName("li");
    for (var i = 0; i < li_list.length; i++) {
        li_list[i].className = "";
    }
    li.className = "selected";
}

function normalColor(li) {
    li.className = "unselected";
}

var closeMenuOnBlur = function(e) {
    var onblur = true;
    if (e.target) {
        targ = e.target;     // W3C/Netscape
    } else if (e.srcElement) {
        targ = e.srcElement; // Microsoft
    }
    var bar = document.getElementsByClassAndTagName("bar", "div");
    for (var i = 0; i < bar.length; i++) {
        if (targ.parentNode == bar[i]) {
            onblur = false;
            break;
        }
    }
    if (onblur) {
        var menu_list = document.getElementsByClassAndTagName("menu", "div");
        for (var i = 0; i < menu_list.length; i++) {
            hideMenu(menu_list[i].id);
        }
    }
};

if (document.addEventListener) {
    document.addEventListener("click", closeMenuOnBlur, false);
} else if (document.attachEvent) {
    document.attachEvent("onclick", closeMenuOnBlur);
}

/* functions for draw drop down list end */

/* extra function for new fo begin */
function setScoreCastOdds(sender_id, ocs_id) {
    var id_items = sender_id.split("_");
    var player_node = e$(id_items[0] + "_" + id_items[1] + "_player_" + id_items[3]);
    var player_id = player_node.value;
    var score_id = id_items[0] + "_" + id_items[1] + "_score_" + id_items[3];
    var score_node = e$(score_id);

    if(ocs_id == undefined) {
        return;
    }

    if (id_items[2] == 'player') {
        adjustScorecastScores(player_id, ocs_id, score_node, false);
    }
    var score = score_node.value;

    var oc_map = scorecast_data[ocs_id];
    var selected_oc_id_player = undefined;
    if (typeof(oc_map) != "undefined") {
        selected_oc_id_player = oc_map[player_id];
    }
    var selected_oc_data = selected_oc_id_player != undefined ? selected_oc_id_player[score] : undefined;
    var link = e$("bet_link_" + id_items[3] + "_" + id_items[1]);
    var message = e$("no_oc_message_" + id_items[1] + "_" + id_items[3]);
    var odds_no_option = e$("odds_eq_1_" + id_items[1] + "_" + id_items[3]);
    var hide_className = "odds display_hidden"
    var show_className = "odds display_block"

    link.href = "#";
    link.style.display = "none";
    odds_no_option.className = hide_className;
    message.className = hide_className;

    if (selected_oc_data == undefined) {
        message.className = show_className;
    } else {
        if (selected_oc_data["clickable"]) {
            link.href = selected_oc_data["link"];
            link.style.display = "block";
        } else {
            odds_no_option.className = show_className;
        }
    }
    for(var i = 0; i < link.childNodes.length; i++) {
        var node = link.childNodes[i];
        if (node.id == undefined) {
            continue;
        }
        var node_odds_style = node.id.substr(node.id.indexOf("_") + 1);
        node_odds_style = node_odds_style.substr(0, node_odds_style.indexOf("_"));
        node.id = node.id.substr(0, node.id.lastIndexOf("_") + 1)
                      + (selected_oc_data ? selected_oc_data["id"] : "");
        var odds = selected_oc_data ? selected_oc_data.odds[node_odds_style] : "";
        node.innerHTML = "<div class='odds_left'></div><div class='odds_middle'>" + odds + "</div><div class='odds_right'></div>";
    }
}

function switchSidebetsOptionsTable(option_type, game_id, ocset_show_type) {
    var normal_sidebets_options = e$("normal_sidebets_options_"+game_id+"_"+ocset_show_type);
    var popular_sidebets_options = e$("popular_sidebets_options_"+game_id+"_"+ocset_show_type);
    if (option_type == "normal") {
        if (popular_sidebets_options) {
            popular_sidebets_options.style.display = "none";
        }
        normal_sidebets_options.style.display = "block";
    }
    else {
        normal_sidebets_options.style.display = "none";
        popular_sidebets_options.style.display = "block";
    }
}

function switchLivebetIcon(sender, game_start) {
    var d = new Date();
    var current_date_utc_string = d.toUTCString();
    var time_out = game_start*1000 - Date.parse(current_date_utc_string); 
    if (time_out <= 1800000) {
        /* only when game will start in 30 min, need change live icon to live
         * now icon */
        setTimeout(function(){_switchLivebetIcon(sender);}, time_out);
    }
}

function _switchLivebetIcon(sender) {
    if (sender.parentNode.className == "livebet_logo") {
        sender.parentNode.className = "livebet_now_logo";
        sender.src = "/common/images/livebet_now_icon.png";
    } 
}

/* extra function for new fo end */
