﻿//MultiTier Section
var MTPref = "MULTI_TIER_";

function MTGetStem(MultiTierField)
{
  var id = (MultiTierField.name ? MultiTierField.name : MultiTierField.id);
   if (!id) return null;

   var Stem = id;
   if (Stem.length > MTPref.length && Stem.substring(0, MTPref.length) == MTPref)
    Stem = Stem.substring(MTPref.length, Stem.length);

   return Stem;
}

function SetUpDynamicMultiTier(MultiTierField)
{
    var Stem = MTGetStem(MultiTierField);
    if (!Stem) return;
    var StaticMultiTier = formHelper.GetElementById("MultiTier-Static-" + Stem);
    StaticMultiTier.style.display = "none";
    var DynamicMultiTier = formHelper.GetElementById("MultiTier-Dynamic-" + Stem);
    DynamicMultiTier.style.display = "inline";
}

function KeyDownMultiTier(btn, e)
{
   if (window.event) // IE
   {
      var key = window.event.keyCode;
      if (key == 13)
      {
         window.event.keyCode = 0;
         window.event.returnValue = false;
         if (btn) btn.click();
      }
   }
   else if (e != null && e.which) // Netscape/Firefox/Opera
   {
      var key = e.which;
      if (key == 13)
      {
         e.preventDefault();
         if (btn) btn.click();
      }
   }
}

function KeyUpMultiTier(btn, e, RefTierId, TierLevel, FieldName, PageKey)
{
   var buttonName = btn.id.toString();
   RefTier = document.getElementById(RefTierId).value;
  
   if (window.event) // IE
   {   
      var key = window.event.keyCode;
      
      //Enter key
      if (key == 13)
      {
         window.event.keyCode = 0;
         window.event.returnValue = false;
         if (buttonName.indexOf("Search") >= 0)            
            SelectType(RefTier, TierLevel, FieldName, PageKey);
         else if (buttonName.indexOf("Clear") >= 0)           
            ClearMultiTier(FieldName, PageKey);
      }
      
      //Up or Down key
      else if (key == 40 || key == 38)
      {
         window.event.keyCode = 0;
         window.event.returnValue = false;
         if (buttonName.indexOf("Search") >= 0)
            PopulateTierValues(RefTier, TierLevel, FieldName, PageKey);
      }
   }
      
   else if (e != null && e.which) // Netscape/Firefox/Opera
   {      
      var key = e.which;
      
      //Enter key
      if (key == 13)
      {
        e.preventDefault();
        if (buttonName.indexOf("Search") >= 0)
            SelectType(RefTier, TierLevel, FieldName, PageKey);
        else if (buttonName.indexOf("Clear") >= 0)            
            ClearMultiTier(FieldName, PageKey);
      }
      
      //Up or Down key
      else if (key == 40 || key == 38)
      {
        e.preventDefault();
        if (buttonName.indexOf("Search") >= 0)
            PopulateTierValues(RefTier, TierLevel, FieldName, PageKey);
      }
   }      
}

function ClearMultiTier(FieldName, PageKey)
{ 
    var nameField = document.getElementById(FieldName + "#" + PageKey);
    var nameSelect = document.getElementById(FieldName);
	var UnselectedValue = nameSelect.getAttribute("ismunselectedvalue")
	
	if (nameField != null) nameField.value = "";
    if (nameSelect != null) nameSelect.value = UnselectedValue;
    
	for (var i = 1; document.getElementById("MultiTier-Dynamic-" + FieldName + "_Tier_" + i.toString()); i++)
    {                    
        var node = document.getElementById("MultiTier-Dynamic-" + FieldName + "_Tier_" + i.toString());
        node.parentNode.removeChild(node);
    }	
}

//Multi Tier Profile
function PopulateTierValues(RefTier, TierLevel, FieldName, PageKey)
{   
    var InternetExplorer = false; 
    if (window.ActiveXObject || window.opera) InternetExplorer = true;
    
    var intTierLevel = parseInt(TierLevel);
        
    var DynamicDiv = document.getElementById("MultiTier-Dynamic-" + FieldName);
    
    for (var i = intTierLevel; document.getElementById("MultiTier-Dynamic-" + FieldName + "_Tier_" + i.toString()); i++)
    {                    
        var node = document.getElementById("MultiTier-Dynamic-" + FieldName + "_Tier_" + i.toString());
        node.parentNode.removeChild(node);
    }
    
    if (parseInt(RefTier) == 0 && intTierLevel == 2) return;

    var DataIsland = document.getElementById("SCHEMA_PROFILE_PARENT_CHILD_REF_" + PageKey);
    var XPath = "profile/row[@PARENT_REF='" + RefTier.toString() + "']";
    if (TierLevel > 1) XPath = XPath + "[@REF!='0']";
    
    var DataRows;    
    if (InternetExplorer)
        DataRows = DataIsland.selectNodes(XPath);
    else     
        DataRows = FireFoxXMLProcesser(XPath, DataIsland.innerHTML);

    if (DataRows.length > 0)
    {
        var NextTierList = document.createElement("select");       
        NextTierList.id = FieldName + "_Tier" + TierLevel + "_";
        NextTierList.size = "4";  
        NextTierList.attributes.setNamedItem(MakeAttribute("Class","Field-ListBox"));
        NextTierList.attributes.setNamedItem(MakeAttribute("tabindex","1"));           
        
        var NextTierDiv = document.createElement("div");       
        NextTierDiv.id = "MultiTier-Dynamic-" + FieldName + "_Tier_"  + TierLevel; 
        NextTierDiv.appendChild(NextTierList);        
        DynamicDiv.appendChild(NextTierDiv); 

        if (InternetExplorer)
        {
            NextTierDiv.attachEvent ('onclick', function(){PopulateTierValues(DynamicDiv.children[TierLevel].childNodes[0].value, (intTierLevel + 1).toString(),FieldName,PageKey);});
            NextTierDiv.attachEvent ('ondblclick', function(){SelectType(DynamicDiv.children[TierLevel].childNodes[0].value, (intTierLevel + 1).toString(),FieldName,PageKey);});
            NextTierList.attachEvent ('onkeyup', function() {KeyUpMultiTier(document.getElementById("MultiTier-BtnSearch-" + FieldName),event,DynamicDiv.children[TierLevel].childNodes[0].id , (intTierLevel + 1).toString(),FieldName ,PageKey);});
        }
        else
        {
            NextTierDiv.addEventListener('click',function(){PopulateTierValues(DynamicDiv.children[intTierLevel].childNodes[0].value, (intTierLevel + 1).toString(),FieldName,PageKey);},false);
            NextTierDiv.addEventListener('dblclick',function(){SelectType(DynamicDiv.children[intTierLevel].childNodes[0].value, (intTierLevel + 1).toString(),FieldName,PageKey);},false);        
            var AttributeValue = "KeyUpMultiTier(document.getElementById('MultiTier-BtnSearch-" + FieldName + "'),event,'" + DynamicDiv.children[TierLevel].childNodes[0].id + "', '" + (intTierLevel + 1).toString() + "', '" + FieldName + "', '" + PageKey + "')";
            NextTierList.attributes.setNamedItem(MakeAttribute("onkeyup",AttributeValue));                 
        }                            
                  
        for (var i = 0; i < DataRows.length; i++)
        {
            var Current = DataRows[i];            
            if (InternetExplorer)
                    NextTierList.options.add(CreateOption(Current.getAttribute("NAME"),Current.getAttribute("REF")));
                else
                    NextTierList.options.add(CreateOption(Current.getAttribute('name'),Current.getAttribute('ref')));            
        }        
    } 
}

function SelectType (RefTier, TierLevel, FieldName, PageKey)
{
    var InternetExplorer = false; 
    if (window.ActiveXObject || window.opera) InternetExplorer = true;
    var DataIsland = document.getElementById("SCHEMA_PROFILE_PARENT_CHILD_REF_" + PageKey);
    var XPath = "profile/row[@REF='" + RefTier.toString() + "']";
    var DataNode, CompositeRef, CompositeName;
    
    if (InternetExplorer)
    {
        DataNode = DataIsland.selectSingleNode(XPath);
        if (DataNode != null)
        {
            CompositeRef = DataNode.getAttribute("REF");
            CompositeName = DataNode.getAttribute("NAME_COMPOSITE");
        }
    }        
    else
    {
        var DataRows = FireFoxXMLProcesser(XPath, DataIsland.innerHTML);
        if (DataRows.length > 0)
        {
            DataNode = DataRows[0];
            CompositeRef = DataNode.getAttribute('ref');
            CompositeName = DataNode.getAttribute('name_composite');
        }
    }
    
    document.getElementById(FieldName).options.add(CreateOption(CompositeName,CompositeRef));
         
    document.getElementById(FieldName + "#" + PageKey).value = CompositeName;        
    document.getElementById(FieldName).value = CompositeRef;  
 
	for (var i = 1; document.getElementById("MultiTier-Dynamic-" + FieldName + "_Tier_" + i.toString()); i++)
    {                    
        var node = document.getElementById("MultiTier-Dynamic-" + FieldName + "_Tier_" + i.toString());
        node.parentNode.removeChild(node);
    }       
}

//Common functions
function FireFoxXMLProcesser(XPath, DataIsland)
{
    XPath = "//" + XPath.toLowerCase();   
    var parser = new DOMParser();
    var xmlDoc = parser.parseFromString(DataIsland,"text/xml");	
    var Evaluator = new XPathEvaluator();
    var Nodes = new Array;  
    var nodesSnapshot = Evaluator.evaluate(XPath, xmlDoc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
    for (var i=0 ; i < nodesSnapshot.snapshotLength; i++ )
        Nodes.push( nodesSnapshot.snapshotItem(i));   
    return Nodes;
}

function MakeAttribute(attributeName, attributeValue)
{
    var Attribute = document.createAttribute(attributeName);
    Attribute.value = attributeValue;
    return Attribute;
}

function CreateOption(Text, Value)
{
    var oOption = document.createElement("OPTION");
    oOption.text = Text;
    oOption.value = Value;
    return oOption;
}

function setReturnValue()
{

}


//Portal Categories Section - uses common functions
var numTiers = 3;

function SetUpDynamicSingleTier(SingleTierField)
{
    var Stem = MTGetStem(SingleTierField);
    if (!Stem) return;
    var StaticSingleTier = formHelper.GetElementById("SingleTier-Static-" + Stem);
    StaticSingleTier.style.display = "none";
    var DynamicSingleTier = formHelper.GetElementById("SingleTier-Dynamic-" + Stem);
    DynamicSingleTier.style.display = "inline";
    DetermineTierLevels(Stem);
    ShowHideSearch(Stem);
    ResultsPopulate(Stem);
}

function DetermineTierLevels(FieldName)
{
    numTiers = formHelper.GetElementById("MAX_TIER_LEVEL").value;
    var Tier;
    for(var i = parseInt(numTiers) + 1; Tier = formHelper.GetElementById("DIV_" + FieldName + "_" + i); i++)
    {
        Tier.style.display = "none";        
    }
}

function ShowHideSearch(FieldName)
{
    var InitialCat = formHelper.GetElementById(FieldName + "_1");
    var ShowButton = document.getElementById("BTN_SHOW_ITEMS");
    if (InitialCat.value == -2)
        ShowButton.attributes.setNamedItem(MakeAttribute("disabled","true"));
    else
        ShowButton.removeAttribute("disabled");       
}

function ResultsPopulate(FieldName)
{        
    for (var i = 2; i <= numTiers; i ++)
    {
        var CategoryList = formHelper.GetElementById(FieldName + "_" + i);
        if (CategoryList != null)
        {
            var CategoryValue = CategoryList.value;
            
            PopulateSingleTierValues(i-1, FieldName, "AR_" + FieldName, false);
            if (CategoryValue != null && CategoryValue != "" && CategoryList.length > 0)
            {
                CategoryList.options[0] = null;
                for (var j = 0; j < CategoryList.length; j++)
                {                    
                    if (CategoryList.options[j].value == CategoryValue) 
                    {
                        CategoryList.selectedIndex = j;
                        SelectCategory(CategoryValue, i, FieldName, "AR_" + FieldName);
                        break;
                    }
                }
            }
            else
                return;
        }
    }
}

function PopulateSingleTierValues(TierLevel, FieldName, PageKey, ClearOld)
{
    var InternetExplorer = false; 
    if (window.ActiveXObject || window.opera) InternetExplorer = true;
    
    var intTierLevel = parseInt(TierLevel);   
        
    var ShowButton = document.getElementById("BTN_SHOW_ITEMS");
    var CurrentDropDown = document.getElementById(FieldName + "_" + (TierLevel));
    var NextDropDown = document.getElementById(FieldName + "_" + (intTierLevel+1));
    var LastDropDown = document.getElementById(FieldName + "_" + (intTierLevel+2));
    
    var NextDivSection = document.getElementById("DIV_" + FieldName + "_" + (intTierLevel+1));
    var LastDivSection = document.getElementById("DIV_" + FieldName + "_" + (intTierLevel+2));
    
    var CategoryRef = CurrentDropDown.value;
    
    if (NextDropDown != null && intTierLevel+1 <= numTiers)
    {
        if(LastDropDown != null)
        {
            for (var i = 0; LastDropDown.length > 0 && ClearOld; i++)
            {                    
                LastDropDown.options[0] = null;
            }
            LastDropDown.attributes.setNamedItem(MakeAttribute("disabled","true"));
            LastDivSection.attributes.setNamedItem(MakeAttribute("Class","CatDisabled"));
            ShowButton.attributes.setNamedItem(MakeAttribute("disabled","true"));
        }
        for (var i = 0; NextDropDown.length > 0 && ClearOld; i++)
        {                    
            NextDropDown.options[0] = null;
        }
        
        var DataIsland = document.getElementById("SCHEMA_PROFILE_PARENT_CHILD_REF_" + PageKey);
        var XPath = "profile/row[@PARENT_REF='" + CategoryRef + "']";
        if (TierLevel > 1) XPath = XPath + "[@REF!='0']";
        
        var DataRows;    
        if (InternetExplorer)
            DataRows = DataIsland.selectNodes(XPath);
        else     
            DataRows = FireFoxXMLProcesser(XPath, DataIsland.innerHTML);   

        if (DataRows.length > 0)
        {      
            NextDropDown.options.add(CreateOption("All", "-2"));
            NextDropDown.removeAttribute("disabled"); 
            NextDivSection.attributes.setNamedItem(MakeAttribute("Class","CatEnabled")); 
            ShowButton.removeAttribute("disabled");      
            
             for (var i = 0; i < DataRows.length; i++)
             {
                var Current = DataRows[i];
                if (InternetExplorer)
                    NextDropDown.options.add(CreateOption(Current.getAttribute("NAME"),Current.getAttribute("REF")));
                else
                    NextDropDown.options.add(CreateOption(Current.getAttribute('name'),Current.getAttribute('ref')));
             }                        
        }
        else
        {
            NextDropDown.attributes.setNamedItem(MakeAttribute("disabled","true"));
            NextDivSection.attributes.setNamedItem(MakeAttribute("Class","CatDisabled"));
        }
    }    
    SelectCategory(CategoryRef, TierLevel, FieldName, PageKey);
    if(TierLevel == 1 && CategoryRef != -2)
        ShowButton.removeAttribute("disabled");
}

function SelectCategory(CategoryRef, TierLevel, FieldName, PageKey)
{
    var InternetExplorer = false; 
    if (window.ActiveXObject || window.opera) InternetExplorer = true;
    var DataIsland = document.getElementById("SCHEMA_PROFILE_PARENT_CHILD_REF_" + PageKey);
    var XPath = "profile/row[@REF='" + CategoryRef + "']";
    var DataNode, CategoryName;
    var intTierLevel = parseInt(TierLevel);
    
    if (InternetExplorer)
    {
        DataNode = DataIsland.selectSingleNode(XPath);
        if (DataNode != null)
        {
            CategoryRef = DataNode.getAttribute("REF");
            CategoryName = DataNode.getAttribute("NAME");
        }
    }        
    else
    {
        var DataRows = FireFoxXMLProcesser(XPath, DataIsland.innerHTML);
        if (DataRows.length > 0)
        {
            DataNode = DataRows[0];
            CategoryRef = DataNode.getAttribute('ref');
            CategoryName = DataNode.getAttribute('name');
        }
    }
    document.getElementById(FieldName).options.add(CreateOption(CategoryName,CategoryRef));
    if (CategoryRef == -2 && document.getElementById(FieldName + "_" + (intTierLevel-1)))
        document.getElementById(FieldName).value = document.getElementById(FieldName + "_" + (intTierLevel-1)).value;
    else    
        document.getElementById(FieldName).value = CategoryRef;            
}
