﻿/// <reference name="MicrosoftAjax.debug.js" />
/// <reference path="Common.js" />
/// <reference path="JSHashtable.js" />
/// <reference path="ProductMain.js" />

// pclm constants which must match up with ids in db
var PCLM_DESKTOP_APP = 1;
var PCLM_DESKTOP_OS = 2;
var PCLM_SERVERS_OS = 3;
var PCLM_SERVERS_CAL = 4;
var PCLM_SERVERS_PROC = 5;
var PCLM_DEV_TOOLS = 6;
var PCLM_SERVERS_MAN_SERVERS = 7;
var PCLM_SERVERS_SPEC_SERVERS = 8;
var PCLM_SERVERS_ONLINE_SERVICES = 9;

// css constants
var CONST_DISPLAY_NONE = "displayNone";
var CONST_SELECTED = "selected";

function clickCheck(sourceId, sourceValue, sourceChecked)
{   
  var ulEmptyPclm = $get('ulEmptyPclm');
  var ulProducts = $get('ulProducts');
  
  if(Sys.Browser.agent !== Sys.Browser.InternetExplorer)
    cleanWhitespace(ulProducts);
 
  // if we are turning off
  if(!sourceChecked)
  {
      $get('chkPCLMSelectAll').checked = false;
    
    if(!areAnyPclmsChecked())
    {        
        // we need to adjust this so it checks if any products are selected
        var spnProdCount = $get('spnProductCount');
        if(Sys.Browser.agent !== Sys.Browser.InternetExplorer)
            cleanWhitespace(spnProdCount);
            
        var prodCount = rtrim(spnProdCount.innerHTML);        
        if(prodCount === "0")
        {                                
            // make products div invisible
            if(!Sys.UI.DomElement.containsCssClass(ulProducts, CONST_DISPLAY_NONE))
            {
                Sys.UI.DomElement.addCssClass(ulProducts, CONST_DISPLAY_NONE);
            }
            
            // make empty div visible
            if(Sys.UI.DomElement.containsCssClass(ulEmptyPclm, CONST_DISPLAY_NONE))
            {
                Sys.UI.DomElement.removeCssClass(ulEmptyPclm, CONST_DISPLAY_NONE);
            }
        }
        
    }
  }
  else
  {
    // make show selected products only unchecked
    //$get('chkShowSelectedOnly').checked = false;
    
    // if we haven't the products visible make it so
    // make empty div invisible
    if(!Sys.UI.DomElement.containsCssClass(ulEmptyPclm, CONST_DISPLAY_NONE))
    {
        Sys.UI.DomElement.addCssClass(ulEmptyPclm, CONST_DISPLAY_NONE);
    }
    
    // make products div visible
    if(Sys.UI.DomElement.containsCssClass(ulProducts, CONST_DISPLAY_NONE))
    {
        Sys.UI.DomElement.removeCssClass(ulProducts, CONST_DISPLAY_NONE);
    }                    
  }

  makePclmsProductsVisibleInvisible(sourceValue, sourceChecked, sourceId);
}

function makePclmsProductsVisibleInvisible(iPclmid, bMakeVisible)
{
  // we go through turning on/off displayNone css class on li  
  var products = $get('ulProducts');  
  
  if(Sys.Browser.agent !== Sys.Browser.InternetExplorer)
    cleanWhitespace(products);
  
  // loop through all the product child nodes (li)
  for(var i=0; i < products.childNodes.length; i++)  
  {
    // get the li        
    var liProductItem = products.childNodes.item(i);
    
    // the child of the li has 2 input nodes - we want the first one
    // which gets us the pclmid when we retrieve the value
    var delProdPclm = new String(liProductItem.childNodes.item(0).value);           
    if( delProdPclm.indexOf(iPclmid.toString()) !== -1 )
    {
      var bInvisible = Sys.UI.DomElement.containsCssClass(liProductItem, CONST_DISPLAY_NONE);
      if(bMakeVisible)
      {
        // make visible if invisible                 
        if( bInvisible )      
          Sys.UI.DomElement.removeCssClass(liProductItem, CONST_DISPLAY_NONE);                           
      }
      else
      {
        // make invisible if visible
        if( !bInvisible )      
        {
          // we do not make invisible if this product is also a member of another
          // pclm which is selected          
          if(! hasProductPclmSelected(delProdPclm))
          {                  
            // only remove if not selected
            if(!Sys.UI.DomElement.containsCssClass(liProductItem, CONST_SELECTED))          
              Sys.UI.DomElement.addCssClass(liProductItem, CONST_DISPLAY_NONE);                                               
          }          
        }
      }  
    }        
  }      
}

function areAnyPclmsChecked()
{
    // loop through all the pclms
    for(var i=1; i<10; i++)
    {
        if($get('chkPclm_' + i.toString()).checked === true)
        {
            return true;
        }
    }
    return false;
}

function hasProductPclmSelected(delProdPclm)
{        
    // loop through all the pclms
    for(var i=1; i<10; i++)
    {
        if($get('chkPclm_' + i.toString()).checked === true)
        {
            if(delProdPclm.indexOf(i) !== -1)
              return true;
        }
    }

    return false;
}

function clearAllProducts()
{
  $get('chkPCLMSelectAll').checked = false;
  var bShowSelectedProductsChecked = $get('chkShowSelectedOnly').checked;
  // we go through turning on/off displayNone css class on li  
  var products = $get('ulProducts');  
  if(Sys.Browser.agent !== Sys.Browser.InternetExplorer)
    cleanWhitespace(products);
  // loop through all the product child nodes (li)
  for(var i=0; i < products.childNodes.length; i++)  
  {
    // get the li        
    var liProductItem = products.childNodes.item(i);
    if(Sys.UI.DomElement.containsCssClass(liProductItem, CONST_SELECTED))
    {
      Sys.UI.DomElement.removeCssClass(liProductItem, CONST_SELECTED);   
      liProductItem.childNodes.item(1).checked = false;      
      gHashProds.update_item(liProductItem.childNodes.item(2).value, "-1");
      
      // if pclm is not selected remove from list
      // the pclm is in the product value
      var strPclm = liProductItem.childNodes.item(1).value;
      if((bShowSelectedProductsChecked === true) || !isPclmSelected(strPclm))
      {
        if(!Sys.UI.DomElement.containsCssClass(liProductItem, CONST_SELECTED))
            Sys.UI.DomElement.addCssClass(liProductItem, CONST_DISPLAY_NONE);
      }                        
    }
  }
  var spnProdCount = $get('spnProductCount');
  if(Sys.Browser.agent !== Sys.Browser.InternetExplorer)
    cleanWhitespace(spnProdCount);
  spnProdCount.childNodes.item(0).nodeValue = "0 ";  


  var ulEmptyPclm = $get('ulEmptyPclm');
  var ulProducts = $get('ulProducts');

    
  if(!areAnyPclmsChecked())
  {        
      // make products div invisible
      if(!Sys.UI.DomElement.containsCssClass(ulProducts, CONST_DISPLAY_NONE))
      {
          Sys.UI.DomElement.addCssClass(ulProducts, CONST_DISPLAY_NONE);
      }
    
      // make empty div visible
      if(Sys.UI.DomElement.containsCssClass(ulEmptyPclm, CONST_DISPLAY_NONE))
      {
          Sys.UI.DomElement.removeCssClass(ulEmptyPclm, CONST_DISPLAY_NONE);
      }
    
  }
}


function togglePclms_All() {
    var chkSelectAll = $get('chkPCLMSelectAll');
    
    if (chkSelectAll!=null)
    {
        if (chkSelectAll.checked)
            togglePclms(true);
        else {
            clearAllProducts();
            togglePclms(false);
        }
    }
}

function togglePclms(bOn)
{
    // if bOn = true - turn them all on                  
    for(var i=1; i<10; i++)
    {
      $get('chkPclm_' + i.toString()).checked = bOn;
    }        
 
    var ulProducts = $get('ulProducts');
    var ulEmptyPclm = $get('ulEmptyPclm');
    var spnProductCount = rtrim($get('spnProductCount').innerText);
    if(!bOn && spnProductCount === "0")
    {
        // make products invisible        
        if(!Sys.UI.DomElement.containsCssClass(ulProducts, 'displayNone'))
        {
            Sys.UI.DomElement.addCssClass(ulProducts, 'displayNone');
        }
        
        // show emptyproducts div        
        if(Sys.UI.DomElement.containsCssClass(ulEmptyPclm, 'displayNone'))
        {
            Sys.UI.DomElement.removeCssClass(ulEmptyPclm, 'displayNone');
        }                        
    }
    else
    {      
          
        // hide emptyproducts div (if we need to)
        if(!Sys.UI.DomElement.containsCssClass(ulEmptyPclm, 'displayNone'))
        {
            Sys.UI.DomElement.addCssClass(ulEmptyPclm, 'displayNone');
        }                        
        
        // make products visible (if we need to)
        if(Sys.UI.DomElement.containsCssClass(ulProducts, 'displayNone'))
        {
            Sys.UI.DomElement.removeCssClass(ulProducts, 'displayNone');
        }
    }
    
    
    
    
    var products = $get('ulProducts');
    if(Sys.Browser.agent !== Sys.Browser.InternetExplorer)
        cleanWhitespace(products);
    
    // loop through all the product child nodes (li)
    for(var i=0; i < products.childNodes.length; i++)  
    {
      // get the li        
      var liProductItem = products.childNodes.item(i);
    
      var bInvisible = Sys.UI.DomElement.containsCssClass(liProductItem, CONST_DISPLAY_NONE);
      if(bOn)
      {
        // turn all invisible off
        if(bInvisible)
            Sys.UI.DomElement.removeCssClass(liProductItem, CONST_DISPLAY_NONE);
      }
      else
      {
        // if not invisible - make invisible
        if(!bInvisible)
        {
            // make invisible only if not selected
            if(!Sys.UI.DomElement.containsCssClass(liProductItem, CONST_SELECTED))            
                Sys.UI.DomElement.addCssClass(liProductItem, CONST_DISPLAY_NONE);
        }
      }      
    }
}

function selectDeselectProduct(source)
{       
  var strTagName = new String(source.tagName);
  if(strTagName.toLowerCase() === 'label')  
  {
    var sourceCheckParent = source.parentNode;
    if(Sys.Browser.agent !== Sys.Browser.InternetExplorer)
    {
        cleanWhitespace(sourceCheckParent);
    }
    source = sourceCheckParent.childNodes[1];        
    source.checked = !source.checked;
  }
  
  var spnProdCount = $get('spnProductCount');
  if(Sys.Browser.agent !== Sys.Browser.InternetExplorer)
    cleanWhitespace(spnProdCount);

  var productCountEl = trim(spnProdCount.childNodes.item(0).nodeValue);
  var iAmount = parseInt(productCountEl);  

  if(source.checked) // we are selecting product
  { 
    // if we are selecting product - a  product can have more than 1 pclm
    // pick the first pclm that is selected for product    
    var strPclms = source.parentNode.firstChild.value;
    var arrPclms = strPclms.split(',');    
    for(var i=0; i<arrPclms.length; i++)
    {     
        // add the first selected pclm
        if(isPclmSelected(arrPclms[i]) === true)
        {            
            source.parentNode.childNodes.item(1).value = arrPclms[i];
        }              
    }   
       
    Sys.UI.DomElement.addCssClass(source.parentNode, CONST_SELECTED);   
    iAmount++;     
    gHashProds.update_item(source.parentNode.childNodes.item(2).value, 
                    source.parentNode.childNodes.item(1).value);              
  }
  else // we are deslecting product
  {
    Sys.UI.DomElement.removeCssClass(source.parentNode, CONST_SELECTED);
    iAmount--;
    gHashProds.update_item(source.parentNode.childNodes.item(2).value, -1);              
  }  
  
  spnProdCount.childNodes.item(0).nodeValue = iAmount.toString() + " ";
  gInitProdCount = iAmount;
  updateEnabling();
  
  // if the pclmid is no longer selected we should remove it from list    
  
  
  // if we have chkAntigen
  // we need to convert to liAntigen
  var checkboxName = source.name;
  var string = new String(checkboxName)
  var newString = 'li' +  string.substring(3);
  
  if(source.checked === false)
  {  
    var liProductItem = $get(newString);
    var iProdPclm = parseInt(liProductItem.childNodes.item(1).value);
    
    if($get('chkPclm_' + iProdPclm.toString()).checked === false)
    {
        Sys.UI.DomElement.addCssClass(liProductItem, CONST_DISPLAY_NONE);
    }
        
  }// end if
      
} // end function

function isPclmSelected(pclmid)
{
    var iPclmId = parseInt(pclmid);
    return $get('chkPclm_' + iPclmId.toString()).checked;           
}

function toggleShowSelectedProductsOnly(bChecked)
{
  var products = $get('ulProducts');  
  
  if(Sys.Browser.agent !== Sys.Browser.InternetExplorer)
    cleanWhitespace(products);
  
  if(bChecked === true)
  {
    // make invisible all visible products that aren't selected            
    for(var i=0; i < products.childNodes.length; i++)  
    {
      // get the li        
      var liProductItem = products.childNodes.item(i);
      if(!Sys.UI.DomElement.containsCssClass(liProductItem, CONST_DISPLAY_NONE))
      {
        if(liProductItem.childNodes.item(1).checked != true)
        {
          // remove it
          Sys.UI.DomElement.addCssClass(liProductItem, CONST_DISPLAY_NONE);
        }
      }
    }
  }
  else
  {
    // make visible all invisible products that are in our selected pclms    
    for(var i=0; i < products.childNodes.length; i++)  
    {      
      // get the li        
      var liProductItem = products.childNodes.item(i);
      if(Sys.UI.DomElement.containsCssClass(liProductItem, CONST_DISPLAY_NONE))
      {        
        // the child of the li has 2 input nodes - we want the first one
        // which gets us the pclmid when we retrieve the value                
        var arrPclms = liProductItem.childNodes.item(0).value.split(',');
                
        var iPclm = -1;
        for(var j=0; j<arrPclms.length; j++)
        {
            if(isPclmSelected(arrPclms[j]))
            {        
                iPclm = parseInt(arrPclms[j]);
                break;
            }
        }
                
        if(iPclm !== -1)
        {
            if($get('chkPclm_' + iPclm.toString()).checked === true)            
                Sys.UI.DomElement.removeCssClass(liProductItem, CONST_DISPLAY_NONE);                              
        }
      }
    }
  }
}

function isProductSelected()
{  
  for(var strKey in gHashProds.get_items())
  {
    if(gHashProds.get_item(strKey) != '-1')
        return true;        
  }
  return false;
}

function writeProductsToJson()
{  
  $get('hidSelectedProds').value = Sys.Serialization.JavaScriptSerializer.serialize(gHashProds);
}

function writePclmsToJson()
{
  var strPclms = new String();

  var arrVals = new Array();
  arrVals.push('');
  arrVals.push($get('chkPclm_1').checked);
  arrVals.push($get('chkPclm_2').checked);
  arrVals.push($get('chkPclm_3').checked);
  arrVals.push($get('chkPclm_4').checked);
  arrVals.push($get('chkPclm_5').checked);
  arrVals.push($get('chkPclm_6').checked);
  arrVals.push($get('chkPclm_7').checked);
  arrVals.push($get('chkPclm_8').checked);
  arrVals.push($get('chkPclm_9').checked);
  
  var bFirst = true;
  for(var i=1; i<=arrVals.length; i++)
  {
    if(arrVals[i] === true)
    {
        if(bFirst === true)
        {
            strPclms = strPclms + i.toString();
            bFirst = false;
        }
        else
        {
            strPclms = strPclms + ',' + i.toString();
        }
    }
  }
  $get('hidSelectedPclms').value = strPclms;
}

function updateProductCount()
{
  $get('spnProductCount').childNodes.item(0).nodeValue = gInitProdCount.toString() + " ";  
  updateEnabling();
}

function updateEnabling()
{

}

function applyHashProdsToGrid()
{
  var products = $get('ulProducts');  
  if(Sys.Browser.agent !== Sys.Browser.InternetExplorer)
    cleanWhitespace(products);
    
  // loop through products
  for(var i=0; i < products.childNodes.length; i++)  
  {
    // get the li        
    var liProductItem = products.childNodes.item(i);  
    
    // get the id    
    var theId = liProductItem.childNodes.item(2).value;
    
    // is it selected?    
    var item = gHashProds.get_item(theId);
    if(item !== '-1')
    {
        Sys.UI.DomElement.addCssClass(liProductItem, 'selected');        
        liProductItem.childNodes.item(1).checked = true;
    } 
    else
    {
        Sys.UI.DomElement.removeCssClass(liProductItem, 'selected');
        liProductItem.childNodes.item(1).checked = false;
    }
    if(Sys.UI.DomElement.containsCssClass(liProductItem, CONST_SELECTED))
        Sys.UI.DomElement.removeCssClass(liProductItem, CONST_DISPLAY_NONE);      
  }
}

if( typeof(Sys) !== 'undefined' )
  Sys.Application.notifyScriptLoaded();