/// CONSTANTS
var KNOCKED_COLOR = "#CCCCCC";
var NORMAL_COLOR = null;
var KNOCKED_FLAG = "yes";

var knockedProducts = 0;

// EVENT HANDLERS -----------------------------------------------------------

// Event handler handling kostatus change ProductSearchPage.
function gridKoStatusChangedHandler(e)
{
    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)
{
    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)
{
    var div = document.getElementById('ctl00_content_DisplayProductDetailsAll_divLeftHandContainer');
    var div2 = document.getElementById('ctl00_content_DisplayProductDetailsAll_divRightHandContainer');
    
    var knocked;
    
    if (span.attributes["overrideSolviansKO"] && span.attributes["overrideSolviansKO"].value == "true")
        knocked = true;
    else
        knocked = 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);
    
    div2.parentNode.style.border = knocked ? "3px solid #CC0000" : "0px solid #CC0000";
    
    var titleDiv = span.parentNode.parentNode;
    
    if (!knocked && titleDiv.firstChild.isFlag)
        titleDiv.removeChild(titleDiv.firstChild);
    
    if (knocked && !titleDiv.firstChild.isFlag)
        titleDiv.insertBefore(createFlagElement(), 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) {

    /// Color the knocked row...
    for (i = 0; i < rowElement.cells.length - 1; i++) {
        rowElement.cells[i].bgColor = knocked ? KNOCKED_COLOR : NORMAL_COLOR;
        rowElement.cells[i].style.borderBottom = rowElement.cells[i].style.borderTop = (knocked ? "2px solid #CC0000" : "0px solid Red");
        rowElement.cells[i].style.borderLeft = (knocked && i == 0 ? "2px solid #CC0000" : "0px solid Red");
        rowElement.cells[i].style.borderRight = (knocked && i == rowElement.cells.length - 2 ? "2px solid #CC0000" : "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);
        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 = 'Yellow';  
    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);
}

