/// CONSTANTS
//var KNOCKED_COLOR = "#CCCCCC";
var KNOCKED_COLOR = "#EFEFEF";
var NORMAL_COLOR = null;
var KNOCKED_FLAG = "1";
var KNOCKED_BORDER_STYLE = "2px solid #CC0000";

var knockedProducts = 0;

// EVENT HANDLERS -----------------------------------------------------------

// Event handler handling kostatus change ProductSearchPage.
function gridKoStatusChangedHandler(e) {
    cbcm.console.info('gridKoStatusChangedHandler');
    var parentRow = e.relatedNode ? e.relatedNode.parentNode.parentNode : e.srcElement.parentNode.parentNode;
    var sourceSpan = e.relatedNode ? e.relatedNode : e.srcElement;

    markKnockedRow(parentRow, sourceSpan);
}

// Event handler handling Kostatus change on ProductDetailPage.
function detailKoStatusChangedHandler(e) {
    cbcm.console.info('detailKoStatusChangedHandler');
    markKnockedInDetail(e.relatedNode ? e.relatedNode : e.srcElement);
}


// HELPER FUNCTIONS ---------------------------------------------------------

/// Marks product as knocked in ProductDetail page. Changes background to different color. 
/// TODO: Refactor this method...
function markKnockedInDetail(span, pKnocked) {
    //var div = document.getElementById('ctl00_content_DisplayProductDetailsAll_divLeftHandContainer');
    //var div2 = document.getElementById('ctl00_content_DisplayProductDetailsAll_divRightHandContainer');

    var div = document.getElementById(CBCMScreenControls.ProductDetailsPage_KnockedFlagContainer);
    var div2 = document.getElementById(CBCMScreenControls.ProductDetailsPage_RightHandContainer);

    var knocked;

    if (span.attributes["overrideSolviansKO"] && span.attributes["overrideSolviansKO"].value == "true")
        knocked = true;
    else {
        knocked = pKnocked != null ? pKnocked : span.innerHTML == KNOCKED_FLAG;
    }

    /*
    div2.parentNode.style.backgroundColor = (knocked ? KNOCKED_COLOR : NORMAL_COLOR);
    div.style.backgroundColor = (knocked ? KNOCKED_COLOR : NORMAL_COLOR);
    div2.style.backgroundColor = (knocked ? KNOCKED_COLOR : NORMAL_COLOR);
    span.parentNode.parentNode.parentNode.style.backgroundColor = (knocked ? KNOCKED_COLOR : NORMAL_COLOR);
    */

    if (knocked) {
        div.style.display = "block";
    }

    var titleDiv = span.parentNode.parentNode;

    if (!knocked && titleDiv.firstChild.isFlag)
        titleDiv.removeChild(titleDiv.firstChild);

    var linkDiv = document.getElementById("divKnockoutLinks");

    linkDiv.style.display = knocked ? "block" : "none";
}

/// Marks supplied row (respectively product displayed in supplied row) as knocked. Changes its 
/// background color and adds flag signalling knocked status...
function markKnockedRow(rowElement, hiddenSpan) {
    if (rowElement == null || hiddenSpan == null)
        return;

    var knocked;

    if (hiddenSpan.attributes["overrideSolviansKO"] && hiddenSpan.attributes["overrideSolviansKO"].value == "true")
        knocked = true;
    else
        knocked = hiddenSpan.innerHTML == KNOCKED_FLAG;

    ChangeStyleKnockedRow(rowElement, hiddenSpan, knocked);
}

function ChangeStyleKnockedRow(rowElement, hiddenSpan, knocked) {
    if (knocked) {
        //rowElement.style.background = "url('../images/gradients/red_cell_18h_KO.jpeg') repeat-x";

        //rowElement.cells[0].style.background = "url('../images/gradients/red_cell_18h.jpeg') repeat-x";
        //        rowElement.cells[0].style.background = "#DD0000";

        //rowElement.style.background = '#FFAAAA';
        /* Border restyling
        for (i = 0; i < rowElement.cells.length; i++) {

            rowElement.cells[i].style.borderBottom = rowElement.cells[i].style.borderTop = (knocked ? KNOCKED_BORDER_STYLE : "0px solid Red");

            if ( (knocked && i == 0 ) )
        {
        rowElement.cells[i].style.borderLeft = KNOCKED_BORDER_STYLE;
        }

            rowElement.cells[i].style.borderRight = (knocked && i == rowElement.cells.length - 1 ? KNOCKED_BORDER_STYLE : "0px solid Red");
        }
        */
    }
    /// Check if received value is YES (product has been knocked) and add Knocked symbol to first column
    if (knocked && !rowElement.cells[0].firstChild.isFlag) {
        rowElement.cells[0].insertBefore(createFlagElement(), rowElement.cells[0].firstChild);
        //rowElement.cells[0].innerHtml += createFlagElement();
        knockedProducts++;
    }

    /// If new value is NO - this situation should not occur - means some kind of error...
    if (!knocked && rowElement.cells[0].firstChild.isFlag) {
        rowElement.cells[0].removeChild(rowElement.cells[0].firstChild);
        knockedProducts--;
    }

    ShowKnockoutInfoLink();
}
function ShowKnockoutInfoLink() {
    var container = document.getElementById("knockouTimesContainer");

    if (container == null || container == undefined)
        return;

    container.style.display = knockedProducts ? "block" : "none";
}

// Creates element used to indicate that product has been knocked - image, span...
function createFlagElement() {
    var knockedFlag = document.createElement('span');

    knockedFlag.innerHTML = 'KO';
    knockedFlag.style.color = '#300';
    knockedFlag.style.fontWeight = 'bold'

    knockedFlag.style.border = '1px solid #333';
    knockedFlag.style.padding = '1px 3px 1px 3px';
    knockedFlag.style.backgroundColor = '#EE0000';

    knockedFlag.isFlag = true;
    knockedFlag.title = "Knocked Out";

    return knockedFlag;
}

/// TEST METHODS ----------------------------------------------------------

// Only testing function for pretending Knocking
function testKnockout(e, spanElement) {
    spanElement.innerHTML = (spanElement.innerHTML == KNOCKED_FLAG ? 'no' : KNOCKED_FLAG);
}

