function SelectRow(idRow, idForm, bShowMoveButtons, event)
{
    if (!event) event = window.event;

    var bFromCheckBox = (idRow.split("_")[0] == "cb") ? true : false;

    if (bFromCheckBox)
    {
        if (event.stopPropagation)
        {
            event.stopPropagation();
        }
       
        event.cancelBubble = true;
    }
    
    // extracting nesessary data
    var ParsedButtonIDArray = idRow.split("_");

    var ListItemID = ParsedButtonIDArray[1];

    var ListID = ParsedButtonIDArray[2];

    var Recipe = ( idForm == 'fRecipe' ) ? ("_" + ParsedButtonIDArray[3]) : "";

    var oCheckBox = (bFromCheckBox) ? GEBI(idRow) : GEBI("cb_" + ListItemID + "_" + ListID + Recipe);

    // getting row object
    var oRow = (bFromCheckBox) ? GEBI("tr_" + ListItemID + "_" + ListID + Recipe) : GEBI(idRow);
    
    // getting TD object
    var oControlButtonTD = GEBI("tdRecord_" + ListItemID + "_ControlButtons");
    
    if (event)
    {
        CloseSpanMessage();
    
        var ctrlKey = (bIsSafari) ? event.metaKey : event.ctrlKey;

        if (bFromCheckBox)
        {
            if (idForm == "fCurrentLists")
            {
                // unselect previous selected row
                if (PrevSelectedRowID)
                {
                    UnSelectRowAllSelectedRows(idForm);
                }
            }
            else
            {
                if (IsRowSelected(oRow.id))
                {
                    // extracting nesessary data
                    var ParsedPrevButtonIDArray = oRow.id.split("_");

                    var PrevListItemID = ParsedPrevButtonIDArray[1];

                    // getting TD object
                    var oPrevControlButtonTD = GEBI("tdRecord_" + PrevListItemID + "_ControlButtons");

                    UnSelectRow(oRow.id, oPrevControlButtonTD, oCheckBox);

                    return;
                }
            }
        }
        else
        {
            if (!ctrlKey)
            {
                if (!event.shiftKey)
                {
                    // unselect previous selected row
                    if (PrevSelectedRowID)
                    {
                        UnSelectRowAllSelectedRows(idForm);
                    }
                }
                else
                {
                    if (idForm == "fCurrentLists")
                    {
                        // unselect previous selected row
                        if (PrevSelectedRowID)
                        {
                            UnSelectRowAllSelectedRows(idForm);
                        }
                    }
                    else
                    {
                        // unselect previous selected row
                        if (PrevSelectedRowID)
                        {
                            RangeSelect(idForm, oRow.id);
                            PrevSelectedRowID = oRow.id;
                            return;
                        }
                        else
                        {
                            UnSelectRowAllSelectedRows(idForm);
                        }
                    }
                }
            }
            else
            {
                if (idForm == "fCurrentLists")
                {
                    // unselect previous selected row
                    if (PrevSelectedRowID)
                    {
                        UnSelectRowAllSelectedRows(idForm);
                    }
                }
                else
                {
                    if (IsRowSelected(oRow.id))
                    {
                        // extracting nesessary data
                        var ParsedPrevButtonIDArray = oRow.id.split("_");

                        var PrevListItemID = ParsedPrevButtonIDArray[1];

                        // getting TD object
                        var oPrevControlButtonTD = GEBI("tdRecord_" + PrevListItemID + "_ControlButtons");

                        UnSelectRow(oRow.id, oPrevControlButtonTD, oCheckBox);

                        return;
                    }
                }
            }
        }
    }

    if (oRow)
    {
        // selecting row ""cell-by-cell"
        if (oRow.hasChildNodes())
        {
            // check linked checkbox
            if (oCheckBox)
            {
                oCheckBox.checked = true;
            }
        
            oRow.className = "Selected";

            if (oControlButtonTD)
            {
                switch (idForm)
                {
                    case "fMasterList":
                        {
                            // add control buttons
                            oControlButtonTD.innerHTML =
                             "<table border=\"0\" cellspacing=\"0\" cellpadding=\"2\"> <tr valign=\"middle\"> <td style=\"border-bottom: 0px;\"> <div id=\"bnEdit_ListItemID_" + ListItemID + "_ML\" class=\"dbbutton20\" onClick=\"SubmitForm( '" + idForm + "', this.id );\" onMouseDown=\"db_pos(this,'-42px');\" onMouseUp=\"db_pos(this,'-21px');\" onMouseOver=\"db_pos(this,'-21px');\" onMouseOut=\"db_out();\" onselectstart=\"return false;\"><div class=\"dblittlebuttext\" style=\"background: url(images/edit.gif) 4px 3px no-repeat;\"></div></div></td>" +
                             "<td style=\"border-bottom: 0px;\"><div id=\"bnConfirmDeleteDialog_ListItemID_" + ListItemID + "_ML\" class=\"dbbutton20\" onClick=\"SubmitForm( '" + idForm + "', this.id );\" onMouseDown=\"db_pos(this,'-42px');\" onMouseUp=\"db_pos(this,'-21px');\" onMouseOver=\"db_pos(this,'-21px');\" onMouseOut=\"db_out();\" onselectstart=\"return false;\"><div class=\"dblittlebuttext\" style=\"background: url(images/delete.gif) 4px 3px no-repeat;\"></div></div></td></tr></table>";
                        }
                        break;

                    case "fCurrentList":
                        {
                            // sequence sort mode
                            if (bShowMoveButtons)
                            {
                                // add control buttons
                                oControlButtonTD.innerHTML =
                                 "<table border=\"0\" cellspacing=\"0\" cellpadding=\"2\"> <tr valign=\"middle\">" +
                                 "<td style=\"border-bottom: 0px; display:none;\"> <div id=\"bnEdit_ListItemID_" + ListItemID + "_" + ListID + "\" class=\"dbbutton20\" onClick=\"SubmitForm( '" + idForm + "', this.id );\" onMouseDown=\"db_pos(this,'-42px');\" onMouseUp=\"db_pos(this,'-21px');\" onMouseOver=\"db_pos(this,'-21px');\" onMouseOut=\"db_out();\" onselectstart=\"return false;\"><div class=\"dblittlebuttext\" style=\"background: url(images/edit.gif) 4px 3px no-repeat;\"></div></div></td>" +
                                 "<td style=\"border-bottom: 0px;\"><div id=\"bnSeqUp_ListItemID_" + ListItemID + "_" + ListID + "\" class=\"dbbutton20\" onClick=\"MoveRecord('fCurrentList', this.id);\" onMouseDown=\"db_pos(this,'-42px');\" onMouseUp=\"db_pos(this,'-21px');\" onMouseOver=\"db_pos(this,'-21px');\" onMouseOut=\"db_out();\" onselectstart=\"return false;\"><div class=\"dblittlebuttext\" style=\"background: url(images/arrow_up.gif) 4px 3px no-repeat;\"></div></div></td>" +
                                 "<td style=\"border-bottom: 0px;\"><div id=\"bnSeqDown_ListItemID_" + ListItemID + "_" + ListID + "\" class=\"dbbutton20\" onClick=\"MoveRecord('fCurrentList', this.id);\" onMouseDown=\"db_pos(this,'-42px');\" onMouseUp=\"db_pos(this,'-21px');\" onMouseOver=\"db_pos(this,'-21px');\" onMouseOut=\"db_out();\" onselectstart=\"return false;\"><div class=\"dblittlebuttext\" style=\"background: url(images/arrow_down.gif) 4px 3px no-repeat;\"></div></div></td>" +
                                 "</tr></table>";
                            }
                            else
                            {
                                // add control buttons
                                oControlButtonTD.innerHTML =
                                 "<table border=\"0\" cellspacing=\"0\" cellpadding=\"2\"> <tr valign=\"middle\">" +
                                 " <td style=\"border-bottom: 0px; display:none;\"> <div id=\"bnEdit_ListItemID_" + ListItemID + "_" + ListID + "\" class=\"dbbutton20\" onClick=\"SubmitForm( '" + idForm + "', this.id );\" onMouseDown=\"db_pos(this,'-42px');\" onMouseUp=\"db_pos(this,'-21px');\" onMouseOver=\"db_pos(this,'-21px');\" onMouseOut=\"db_out();\" onselectstart=\"return false;\"><div class=\"dblittlebuttext\" style=\"background: url(images/edit.gif) 4px 3px no-repeat;\"></div></div></td>" +
                                 "</tr></table>";
                            }
                        }
                        break;

                    case "fCurrentLists":
                        {
                            // add control buttons
                            oControlButtonTD.innerHTML =
                             "<table border=\"0\" cellspacing=\"0\" cellpadding=\"2\"> <tr valign=\"bottom\"> <td style=\"border-bottom: 0px;\"> <div id=\"bnListEdit_ListID_" + ListItemID + "\" class=\"dbbutton20\" onClick=\"SubmitForm( '" + idForm + "', this.id );\" onMouseDown=\"db_pos(this,'-42px');\" onMouseUp=\"db_pos(this,'-21px');\" onMouseOver=\"db_pos(this,'-21px');\" onMouseOut=\"db_out();\" onselectstart=\"return false;\"><div class=\"dblittlebuttext\" style=\"background: url(images/edit.gif) 4px 3px no-repeat;\"></div></div></td>" +
                             "<td style=\"border-bottom: 0px;\"></div><div id=\"bnConfirmListDeleteDialog_ListID_" + ListItemID + "\" class=\"dbbutton20\" onClick=\"SubmitForm( '" + idForm + "', this.id ); strSrcAction = 'DELETING_ITEM'; \" onMouseDown=\"db_pos(this,'-42px');\" onMouseUp=\"db_pos(this,'-21px');\" onMouseOver=\"db_pos(this,'-21px');\" onMouseOut=\"db_out();\" onselectstart=\"return false;\"><div class=\"dblittlebuttext\" style=\"background: url(images/delete.gif) 4px 3px no-repeat;\"></div></div></td></tr></table>";
                        }
                        break;
                        
                    case "fRecipes":
                        {
                            // add control buttons
                            oControlButtonTD.innerHTML =
                             "<table border=\"0\" cellspacing=\"0\" cellpadding=\"2\"> <tr valign=\"bottom\"> <td style=\"border-bottom: 0px;\"> <div id=\"bnEditRecipe_RecipeID_" + ListItemID + "_RC\" class=\"dbbutton20\" onClick=\"SubmitForm( '" + idForm + "', this.id );\" onMouseDown=\"db_pos(this,'-42px');\" onMouseUp=\"db_pos(this,'-21px');\" onMouseOver=\"db_pos(this,'-21px');\" onMouseOut=\"db_out();\" onselectstart=\"return false;\"><div class=\"dblittlebuttext\" style=\"background: url(images/edit.gif) 4px 3px no-repeat;\"></div></div></td>" +
                             "<td style=\"border-bottom: 0px;\"></div><div id=\"bnConfirmRecipeDeleteDialog_RecipeID_" + ListItemID + "\" class=\"dbbutton20\" onClick=\"SubmitForm( '" + idForm + "', this.id ); strSrcAction = 'DELETING_ITEM'; \" onMouseDown=\"db_pos(this,'-42px');\" onMouseUp=\"db_pos(this,'-21px');\" onMouseOver=\"db_pos(this,'-21px');\" onMouseOut=\"db_out();\" onselectstart=\"return false;\"><div class=\"dblittlebuttext\" style=\"background: url(images/delete.gif) 4px 3px no-repeat;\"></div></div></td></tr></table>";
                        }
                        break;
                        
                    case "fRecipe":
                        {
                            // add control buttons
                            oControlButtonTD.innerHTML =
                             "<table border=\"0\" cellspacing=\"0\" cellpadding=\"2\"> <tr valign=\"bottom\"> <td style=\"border-bottom: 0px;\"> <div id=\"bnEditRecipeItem_ItemID_" + ListItemID + "_" + ListID + "\" class=\"dbbutton20\" onClick=\"SubmitForm( '" + idForm + "', this.id );\" onMouseDown=\"db_pos(this,'-42px');\" onMouseUp=\"db_pos(this,'-21px');\" onMouseOver=\"db_pos(this,'-21px');\" onMouseOut=\"db_out();\" onselectstart=\"return false;\"><div class=\"dblittlebuttext\" style=\"background: url(images/edit.gif) 4px 3px no-repeat;\"></div></div></td>" +
                             "<td style=\"border-bottom: 0px;\"></div><div id=\"bnConfirmRecipeItemDeleteDialog_ItemID_" + ListItemID + "\" class=\"dbbutton20\" onClick=\"SubmitForm( '" + idForm + "', this.id ); strSrcAction = 'DELETING_ITEM'; \" onMouseDown=\"db_pos(this,'-42px');\" onMouseUp=\"db_pos(this,'-21px');\" onMouseOver=\"db_pos(this,'-21px');\" onMouseOut=\"db_out();\" onselectstart=\"return false;\"><div class=\"dblittlebuttext\" style=\"background: url(images/delete.gif) 4px 3px no-repeat;\"></div></div></td></tr></table>";
                        }
                        break;

                    case "fCoupons":
                        {
                            // add control buttons
                            oControlButtonTD.innerHTML =
                             "<table title=\"Add coupon to cart\" border=\"0\" cellspacing=\"0\" cellpadding=\"2\"> <tr valign=\"bottom\"> <td style=\"border-bottom: 0px;\"> <div id=\"bnAddCouponToCart_CouponID_" + ListItemID + "_CO\" class=\"dbbutton20\" onClick=\"SubmitForm( '" + idForm + "', this.id );\" onMouseDown=\"db_pos(this,'-42px');\" onMouseUp=\"db_pos(this,'-21px');\" onMouseOver=\"db_pos(this,'-21px');\" onMouseOut=\"db_out();\" onselectstart=\"return false;\"><div class=\"dblittlebuttext\" style=\"background: url(images/cart.gif) 2px 3px no-repeat;\"></div></div></td></tr></table>";
                        }
                        break;
                }
            }
            // storing selected row id
            PrevSelectedRowID = oRow.id;
        }
    }
}
//-----------------------------------------------------------------
function UnSelectRow(idRow, oControlButtonTD, oLinkedChechBox)
{
    var oRow = GEBI(idRow);

    if (oRow)
    {
        if (oRow.hasChildNodes())
        {
            oRow.className = "";

            if (oControlButtonTD)
            {
                oControlButtonTD.innerHTML = "&nbsp;";
            }
        }
    }
    if ( oLinkedChechBox )
    {
        oLinkedChechBox.checked = false;
    }

    UncheckSelectAllCheckbox();

}
//-----------------------------------------------------------------
function UnSelectRowAllSelectedRows(idForm)
{
    var oForm = GEBI(idForm);

    if (oForm)
    {
        var oTRCol = oForm.getElementsByTagName("TR");

        if (oTRCol)
        {
            for (i = 0; i < oTRCol.length; i++)
            {
                var oTR = oTRCol[i];
                if (oTR)
                {
                    if (oTR.className == "Selected")
                    {
                        // extracting nesessary data
                        var ButtonIDArray = oTR.id.split("_");

                        var ListItemID = ButtonIDArray[1];

                        var Recipe = (idForm == 'fRecipe') ? ("_" + ButtonIDArray[3]) : "";

                        // getting TD object
                        var oControlButtonTD = GEBI("tdRecord_" + ListItemID + "_ControlButtons");

                        oTR.className = "";

                        if (oControlButtonTD)
                        {
                            oControlButtonTD.innerHTML = "&nbsp;";
                        }
                        // uncheck linked checkbox
                        var oCheckBox = GEBI("cb_" + ButtonIDArray[1] + "_" + ButtonIDArray[2] + Recipe);
                        
                        if ( oCheckBox )
                        {
                            oCheckBox.checked = false;
                        }
                    }
                }
            }
        }
    }
    UncheckSelectAllCheckbox();

}
//-----------------------------------------------------------------
function RangeSelect(idForm, idRow)
{
    var oForm = GEBI(idForm);

    var iFrom = GetRowIndexByID(oForm, PrevSelectedRowID), iTo = GetRowIndexByID(oForm, idRow), iTmp = 0;

    if (iFrom > iTo)
    {
        iTmp = iFrom;
        iFrom = iTo;
        iTo = iTmp;
    }

    if (oForm)
    {
        var oTRCol = oForm.getElementsByTagName("TR");

        if (oTRCol)
        {
            for (i = iFrom; i <= iTo; i++)
            {
                var oTR = oTRCol[i];
                if (oTR)
                {
                    if (oTR.id.length > 0)
                    {
                        oTR.className = "Selected";

                        var Recipe = (idForm == 'fRecipe') ? ("_" + oTR.id.split("_")[3]) : "";

                        // uncheck linked checkbox
                        var oCheckBox = GEBI("cb_" + oTR.id.split("_")[1] + "_" + oTR.id.split("_")[2] + Recipe);
                        
                        if (oCheckBox)
                        {
                            oCheckBox.checked = true;
                        }
                    }
                }
            }
        }
    }
}
//-----------------------------------------------------------------
function GetRowIndexByID(oForm, idRow)
{
    var iRetIndex = -1;
    if (oForm)
    {
        var oTRCol = oForm.getElementsByTagName("TR");

        if (oTRCol)
        {
            for (i = 1; i < oTRCol.length; i++)
            {
                var oTR = oTRCol[i];
                if (oTR)
                {
                    if (oTR.id.toLowerCase().indexOf(idRow.toLowerCase()) != -1)
                    {
                        iRetIndex = i;
                        break;
                    }
                }
            }
        }
    }
    return iRetIndex;
}
//-----------------------------------------------------------------
function IsRowSelected(idRow)
{
    var oRow = GEBI(idRow);
    if (oRow)
    {
        return (oRow.className == "Selected") ? true : false;
    }

    return false;
}
//-----------------------------------------------------------------
function MoveRecord(idParentForm, idButton)
{
    var oForm = GEBI(idParentForm);

    // extracting nesessary data
    var ParsedButtonIDArray = idButton.split("_");

    var ActualButtonID = ParsedButtonIDArray[0];

    var ListItemID = ParsedButtonIDArray[2];

    var ListID = ParsedButtonIDArray[3];

    // switch item action
    switch (ActualButtonID)
    {
        case "bnSeqUp":
            {
                ProcessRequest("default.aspx", "action=DirectPOST&Form=" + encodeURIComponent ( idParentForm ) + "&ListID=" + encodeURIComponent ( ListID ) + "&PostAction=paMoveRecordUp&RecordID=" + encodeURIComponent ( ListItemID ), "MOVE_RECORD_UP", "");
            }
            break;

        case "bnSeqDown":
            {
                ProcessRequest("default.aspx", "action=DirectPOST&Form=" + encodeURIComponent ( idParentForm ) + "&ListID=" + encodeURIComponent ( ListID ) + "&PostAction=paMoveRecordDown&RecordID=" + encodeURIComponent ( ListItemID ), "MOVE_RECORD_DOWN", "");
            }
            break;
    }
}
//-----------------------------------------------------------------
function GetSelectedRowsCount(idForm)
{
    var oForm = GEBI(idForm);
    var iSelectedItemsCount = 0;
    if (oForm)
    {
        var oTRCol = oForm.getElementsByTagName("TR");
        if (oTRCol)
        {
            for (i = 0; i < oTRCol.length; i++)
            {
                var oTR = oTRCol[i];
                if (oTR)
                {
                    if (oTR.className == "Selected")
                    {
                        iSelectedItemsCount++;
                    }
                }
            }
        }
    }

    return iSelectedItemsCount;
}
//-----------------------------------------------------------------
function SelectAll( oCheckBox, idForm, bShowMoveButtons, event )
{
    try
    {
       var oForm = GEBI(idForm);
       
       if ( oForm && oCheckBox )
       {
           var oTRCol = oForm.getElementsByTagName("TR");

           if (oTRCol)
           {
               for (i = 0; i < oTRCol.length; i++)
               {
                   var oTR = oTRCol[i];
                   
                   if (oTR)
                   {
                       if (oTR.id.length > 0)
                       {
                           if (!PrevSelectedRowID)
                           {
                               PrevSelectedRowID = oTR.id;
                           }

                           oTR.className = (oCheckBox.checked) ? "Selected" : "";

                           var Recipe = (idForm == 'fRecipe') ? ("_" + oTR.id.split("_")[3]) : "";
                           
                           // uncheck linked checkbox
                           var oTmpCheckBox = GEBI("cb_" + oTR.id.split("_")[1] + "_" + oTR.id.split("_")[2] + Recipe);

                           // getting TD object
                           var oControlButtonTD = GEBI("tdRecord_" + oTR.id.split("_")[1] + "_ControlButtons");

                           if (oTmpCheckBox)
                           {
                               oTmpCheckBox.checked = oCheckBox.checked;

                               if (oControlButtonTD)
                               {
                                   oControlButtonTD.innerHTML = "&nbsp;";
                               }
                           }
                       }
                   }
               }

           }
       }
    }
    catch ( e ) {}
}
//-----------------------------------------------------------------
function UncheckSelectAllCheckbox()
{
    try
    {
        var oCB = GEBI("cbSelectAll");

        if (oCB)
        {
            oCB.checked = false;
        }
   }
   catch (e) { }
}
//-----------------------------------------------------------------
