//this file depends on some constants and functions in tab.js

function getStartTag(tag){
    return tag_prefix + start_tag + tag + tag_suffix;
}

function getEndTag(tag){
    return tag_prefix + end_tag + tag + tag_suffix;
}

function removeLineBreak(html){
    var re = new RegExp("\n|\r", "g");
    return html.replace(re, "");
}

function getScorecastSelectState(parent)
{
    // This function is used to save the state of the select boxes
    // that are used to choose the player and score for a scorecast outcomeset.
    // The values can be restored later using setScorecastSelectState by
    // passing it the value returned from this function.
    // parent should be the currently selected tab on the selection page
    var state = {};
    var selects = parent.getElementsByTagName("select");
    for(var i = 0; i < selects.length; i++)
    {
        var select = selects[i];
        if(select.name.indexOf("scorecast") == 0)
        {
            state[select.name] = select.selectedIndex;
        }
    }
    return state;
}

function setScorecastSelectState(state, parent)
{
    var selects = parent.getElementsByTagName("select");
    for (var i=0; i < selects.length; i++) {
        var select = selects[i];
        if (state[select.name] != undefined) {
            select.selectedIndex = state[select.name];
        } else {
            select.selectedIndex = 0;
            select.onchange();
        }
    }
}

function showExtra(seasonId, gameId){
    showProgress();
    if(use_ajax_selection) {
        setTimeout("_showExtraInAjax(\""+seasonId+"\",\""+gameId+"\")", loadingDelay);
    } else {
        setTimeout("_showExtra(\""+seasonId+"\",\""+gameId+"\")", loadingDelay);
    }
    return false;
}

function _showExtra(seasonId, gameId){
    if (! loaded) return;
    var tabobjlinks = collecttablinks(seasonId);
    if (tabobjlinks.length>=1){
        var allObject = getContent(tabobjlinks[0]);
        var currentObject = getCurrent(seasonId, tabobjlinks);
        var html = "";
        var stateParent = undefined;
        if (allObject.style.display == "block"){
            html = allObject.innerHTML;
            stateParent = allObject;
        }else{
            html = currentObject.innerHTML;
            stateParent = currentObject;
            for (var i=1; i<tabobjlinks.length; i++){
                getContent(tabobjlinks[i]).style.display="none";
            }
            allObject.style.display="block";
            if (allObject.blur)
                allObject.blur();
       }
       var state = getScorecastSelectState(stateParent);
       var gameHtml = getGameHtml(currentObject, tabobjlinks, seasonId, gameId);
       html = changeStyleInsert(html, seasonId, gameId, gameHtml);
       allObject.innerHTML = html;
       setScorecastSelectState(state, allObject);
    }

    hideProgress();
}

function hideExtra(seasonId, gameId){
    showProgress();
    setTimeout("_hideExtra(\""+seasonId+"\",\""+gameId+"\")", loadingDelay);
    return false;
}

function _hideExtra(seasonId, gameId){
    if (! loaded) return;
    var tabobjlinks = collecttablinks(seasonId);
    if (tabobjlinks.length>=1){
        var allObject = getContent(tabobjlinks[0]);
        var html = allObject.innerHTML;
        var extra_start_tag = getStartTag(open_extra_tag + gameId);
        var extra_end_tag = getEndTag(open_extra_tag + gameId);
        html = removeLineBreak(html);
        var re = new RegExp(extra_start_tag+".*"+extra_end_tag);
        html = html.replace(re, "");
        html = revertGameExtra(html, seasonId, gameId);

        var title_start_tag = getStartTag(title_tag + gameId);
        var title_end_tag = getEndTag(title_tag + gameId);
        var re = new RegExp(title_start_tag+".*"+title_end_tag);
        var titles = html.match(re);
        if ((titles!=null)&&(titles.length==1)){
            var title = titles[0];
            var originalTitle = changeStyle(title, openedTitleStyles, originalTitleStyles);
            html = html.replace(title, originalTitle);
        }
        var state = getScorecastSelectState(allObject);
        allObject.innerHTML = html;
        setScorecastSelectState(state, allObject);
    }
    hideProgress();
}

function getCurrent(seasonId, tabobjlinks){
    var currentObject = currentTabContent[seasonId];
    if ((currentObject == null)&&(tabobjlinks.length>1)){
        currentObject = getContent(tabobjlinks[1]);
        currentTabContent[seasonId] = currentObject;
    }
    return currentObject;
}

function getGameHtml(currentObject, tabobjlinks, seasonId, gameId){
    var gameHtml = "";
    for (var i=1; i<tabobjlinks.length; i++){
        var contentObj = getContent(tabobjlinks[i]);
        if (contentObj != currentObject){
            var typeHtml = contentObj.innerHTML;
            typeHtml = removeLineBreak(typeHtml);
            typeHtml = typeHtml.replace(table_header, "");
            typeHtml = typeHtml.replace(table_footer, "");
            typeHtml = filterGame(typeHtml, gameId);
            typeHtml = removeGameExtra(typeHtml, seasonId, gameId, false);
            gameHtml += typeHtml;
        }
    }
    return gameHtml;
}

function changeStyleInsert(html, seasonId, gameId, gameHtml){
    html = removeLineBreak(html);
    var title_start_tag = getStartTag(title_tag + gameId);
    var title_end_tag = getEndTag(title_tag + gameId);
    var re = new RegExp(title_start_tag+".*"+title_end_tag);
    var titles = html.match(re);
    var extraStyles = extraDarkStyles;
    if ((titles!=null)&&(titles.length==1)){
        var title = titles[0];
        var openTitle = changeStyle(title, originalTitleStyles, openedTitleStyles);
        var light_regex = new RegExp(style_start_tag+".*light.*"+style_end_tag, "i");
        if (light_regex.test(openTitle)){
            extraStyles = extraLightStyles;
        }
        html = html.replace(title, openTitle);
    }
    html = removeGameExtra(html, seasonId, gameId, true);
    gameHtml = gameHtml + extra_bottom;
    gameHtml = changeStyle(gameHtml, originalStyles, extraStyles);
    html = insertGame(html, seasonId, gameId, gameHtml);
    return html;
}

function insertGame(html, seasonId, gameId, gameHtml){
    var game_end_tag = getEndTag(gameId);
    var segments = html.split(game_end_tag);
    if ((segments!=null)&&(segments.length>0)){
        var afterHtml = segments[segments.length-1];
        afterHtml = getStartTag(open_extra_tag+gameId) + gameHtml + getEndTag(open_extra_tag+gameId) + afterHtml;
        segments[segments.length-1] = afterHtml;
        html = segments[0];
        for (var i=1;i<segments.length;i++){
            html += game_end_tag;
            html += segments[i];
        }
    }
    return html;
}

function removeGameExtra(html, seasonId, gameId, addClose){
    var extra_start_tag = getStartTag(extra_tag + gameId);
    var extra_end_tag = getEndTag(extra_tag + gameId);
    var re = new RegExp(extra_start_tag+"(.*?)"+extra_end_tag+'', "g");
    var closeTag = "";
    if (addClose){
        var image_name = "eci_"+seasonId+"_"+gameId;
        var click_tag = "onClick=\"return hideExtra('"+seasonId+"','"+gameId+"')\"";
        var over_tag = "onMouseOver=\"document."+image_name+".src='"+extra_close_image_over+"'\"";
        var out_tag = "onMouseOut=\"document."+image_name+".src='"+extra_close_image+"'\"";
        var all_tag = click_tag+" "+over_tag+" "+out_tag+" style=\"cursor:pointer;cursor:hand\"";
        var original_tag = tag_prefix+"$1"+ tag_suffix;
        closeTag = extra_start_tag+"<img name=\""+image_name+"\"src=\""+extra_close_image+"\" "+all_tag+" />"+original_tag+extra_end_tag;
    }
    return html.replace(re, closeTag);
}

function revertGameExtra(html, seasonId, gameId){
    var extra_start_tag = getStartTag(extra_tag + gameId);
    var extra_end_tag = getEndTag(extra_tag + gameId);
    var re = new RegExp(extra_start_tag+".*<!--(.*)-->"+extra_end_tag);
    return html.replace(re, extra_start_tag+"$1"+extra_end_tag);
}

function filterGame(html, gameId){
    var game_start_tag = getStartTag(gameId);
    var game_end_tag = getEndTag(gameId);
    var re = new RegExp(game_start_tag+".*"+game_end_tag, "g");
    var outcomes = html.match(re);
    var game_value = "";
    if ((outcomes != null)&&(outcomes.length > 0)){
        game_value = getHeader(html);
        for (var i=0; i<outcomes.length; i++){
            game_value += outcomes[i];
        }
    }
    return game_value;
}

function getHeader(html){
    var re = new RegExp(header_start_tag+".*"+header_end_tag);
    var header = html.match(re);
    var result = "";
    if ((header!=null)&&(header.length > 0)){
        result = header[0];
    }
    result = result.replace(header_start_tag, "");
    result = result.replace(header_end_tag, "");
    return result;
}

function changeStyle(html, originalStyles, alteredStyles){
    for (var i=0; i<originalStyles.length; i++){
        var regex = new RegExp(style_start_tag+originalStyles[i]+style_end_tag, "ig");
        html = html.replace(regex, extra_style_start_tag+alteredStyles[i]+extra_style_end_tag);
    }
    return html;
}

function _showExtraInAjax(seasonId, gameId){
    var tabobjlinks = collecttablinks(seasonId);
    if (tabobjlinks.length<1){
        showAjaxMessage("Sorry, no more outcomes.");
        return true;
    }
    var allObject = getContent(tabobjlinks[0]);
    var currentObject = getCurrent(seasonId, tabobjlinks);
    var sidebet_type = currentObject.id.replace(seasonId+"_", "")
    var url = "/selection?cmd=chooseInAjax&show_extra=true&season_id=" + seasonId + "&game_id=" + gameId + "&sidebet_type=" + sidebet_type;
    var request = getHttpRequest();
    request.onreadystatechange = function() {
        if(request.readyState == 4) {
            var resp = "";
            if(request.status == 200) {
                resp = request.responseText;
            } else {
                showAjaxMessage("Sorry, we can't get any information now. Please try it later.");
                return;
            }
            if(resp.indexOf('err_msg=', 0) != -1) {
                showAjaxMessage(resp.substring(8));
                return;
            } else {
                if (tabobjlinks.length>=1){
                    var html = "";
                    var stateParent = undefined;
                    if (allObject.style.display == "block"){
                        html = allObject.innerHTML;
                        stateParent = allObject;
                    } else {
                        html = currentObject.innerHTML;
                        stateParent = currentObject;
                        for (var i=1; i<tabobjlinks.length; i++) 
                        {
                            getContent(tabobjlinks[i]).style.display="none";
                        }
                        allObject.style.display="block";
                        if (allObject.blur)
                            allObject.blur();
                    }
                    var state = getScorecastSelectState(stateParent);
                    var gameHtml = getGameHtmlAjax(resp, seasonId, gameId)
                    html = changeStyleInsert(html, seasonId, gameId, gameHtml);
                    allObject.innerHTML = html;
                    setScorecastSelectState(state, allObject);
                    executeJsStr(resp);
                }
                hideProgress();
            }
        }
    }
    request.open("GET", url, true);
    request.send(null);
}

function getGameHtmlAjax(gameAllHtml,  seasonId, gameId){
    var typeHtml = gameAllHtml;
    typeHtml = removeLineBreak(typeHtml);
    typeHtml = typeHtml.replace(new RegExp(table_header, "g"), "");
    typeHtml = typeHtml.replace(new RegExp(table_footer,"g"), "");
    typeHtml = removeGameExtra(typeHtml, seasonId, gameId, false);
    return typeHtml;
}
