﻿// Copyright MarketVelocity 2008
// All rights are reserved. Reproduction or transmission in whole or in part, in
// any form or by any means, electronic, mechanical or otherwise, is prohibited
// without the prior written consent of the copyright owner.
//      Date           Dev            Comments
//		----------     ----------     --------------------------------------------------------------
//      11-Aug-08      US            File created.Contains javascript only related to autosugest control
//      14-Aug-2008    US            ESC key handle in  CheckTabKeyPressed to fix PT issue # 3117
      pnlDatabaseEntryId = "";   
      gvwDatabaseEntryId  = "";        
      txtSearchId = "";   
      textboxId = ""; 
      textBoxClId =   ""; 
      hidPanelStatusId = ""; 
      hidtxtSearchCtrlId = ""; 
      hiddenSelectedIndexRequiredId = "";
      hidSearchTextId = ""; 
      mainUCDivId = ""; 
      btnItemChangedId = ""; 
      gridId = "";        
      gridDivId = ""; 
      gridTableId = "";//"grdProduct";     
      tdGridId ="";  //"AutoSuggestDropDown1_tdGrid";
      trMsgId = "";//"AutoSuggestDropDown1_trMsg";
      ucCtrlId = "";
      hidtxtSearchCtrlId= '<%= hidtxtSearchId.ClientID %>';
      hidePanel = true;
      hidtxtSearchNameId = "";
      hidPageSizeId = "";
      pageBarId = "";      
      //Called when user type in control to search data
    function SearchWord(pressevent,keyValue,textBoxId,hidSearchId)
    {          
          var charCode = (pressevent.which)? pressevent.which : (event.keyCode);                                            
          
          if((charCode >= 48 && charCode <= 57) || (charCode >=65 && charCode <=90) || (charCode >= 96 && charCode <=122) || charCode == 8 || charCode == 48 || charCode == 46 || charCode == 222)
           {                
              setTimeout("FilterData();", 1000);
           }
           if(charCode == 40)
           {  
              if(document.getElementById(0))
              {
                hidePanel = false;
                hideWaterMark = 'false';
                SelectRow(document.getElementById(0), 0,gridId);
              }
           }              
    }
    //On tab keypressed hide list panel
    function CheckTabKeyPressed(pressevent)
    {
         var charCode = (pressevent.which)? pressevent.which : (event.keyCode);                       
          if(charCode == 9)// if Tab is pressed hide panel
          {
             HidePanel(); 
          }
          else if(charCode == 13 || charCode == 27)
          {
            return false;
          }
          
    }
    //Called client call back to receive item list
    function FilterData()
    {
         var text = document.getElementById(textBoxClId); 
         var objHid = document.getElementById(hidSearchTextId);      
         if(objHid.value != text.value)  
         { 
           objHid.value =  text.value;         
           if(ucCtrlId == 'cboProductAutosuggest')
           {
             objLoadingimg = document.getElementById('imgPageLoad');
             if(objLoadingimg)
             objLoadingimg.style.display = 'inline';
               
             pageIndex = 0;
             ctl00_ContentPlaceHolder_cboProductAutosuggestCallServer(text.value,'');
           }           
         }
        //Sys.WebForms.PageRequestManager.getInstance()._doPostBack(txtSearchId, '');    
    }
    
    //Handles list paging
    function GoToPage(pageNumber,pageCount)
    {   
        var text = document.getElementById(textBoxClId);  
        var tempText = text.value       
         if(pageNumber == 'Next')
         {
           pageIndex = pageIndex+1
           tempText = tempText+'~'+pageIndex;
         }
         else if(pageNumber == 'Previous')
         {
            pageIndex = pageIndex-1;
            tempText = tempText+'~'+pageIndex;
         }
         else if(pageNumber == 'First')
         {
            pageIndex = 0;
            tempText = tempText+'~'+pageIndex;
         }
         else if(pageNumber == 'Last')
         {  
            pageIndex = pageCount-1
            tempText = tempText+'~'+ pageIndex;  
                  
         }
//         hidObj = document.getElementById(hidtxtSearchCtrlId);              
//         if(hidObj && hidObj.value != "-1" )
//         {  
//             tempText = ''+'~'+pageIndex;;
//         }  
          
       if(ucCtrlId == 'cboProductAutosuggest')
       {      
          objLoadingimg = document.getElementById('imgPageLoad');
             if(objLoadingimg)
             objLoadingimg.style.display = 'inline';         
             
         ctl00_ContentPlaceHolder_cboProductAutosuggestCallServer(tempText,''); 
                    
       }        
    }
    
    this.document.onclick = OnDocumentClick;
    //Hide item list on document click
    function OnDocumentClick()
    {  
        HidePanel(); 
        if(isFocusOnTextBox =='false')
        {
           AddRemoveText('Remove');
        }          
    }
   
   //Hide item list panel or no records found panel
    function HidePanel()
    { 
        if(hidePanel)
        {
           objtr =   document.getElementById(trMsgId);         
          if(objtr)
          {
            objtr.className  = "AvailableRecMsg";
            objtr.style.height ="0px";
            objDiv = document.getElementById(gridDivId);
            if(objDiv)
             objDiv.style.display ="none";
          }           
          objgridTable = document.getElementById(gridTableId);       
             if(objgridTable && objgridTable.style.display != "none" )
             {
//                document.getElementById(gridTableId).style.display = "none";
//                objDiv = document.getElementById(gridDivId);
//                if(objDiv)
//                 objDiv.style.display ="none";
                 HideItemListNPaging();
                
             }           
        }
        else
        {
          hidePanel = true;
        }
    }

  //Hide item list panel
   function HideItemListNPaging()
   {    
     objgridTable = document.getElementById(gridTableId);       
     if(objgridTable && objgridTable.style.display != "none" )
     {
       document.getElementById(gridTableId).style.display = "none";
        objDiv = document.getElementById(gridDivId);
        if(objDiv)
         objDiv.style.display ="none";
        objPagingDiv = document.getElementById(pageBarId);
        if(objPagingDiv)
        objPagingDiv.style.display = "none";
     }   
   }
   
   //Hide and show panel on arrow button click
    function HideShowPanel()
    {    
         objgridTable = document.getElementById(gridTableId);   
         objDiv = document.getElementById(gridDivId);  
         
         if(objDiv && objDiv.style.display == "inline")
         {
            objDiv.style.display ="none";   
            HideItemListNPaging();        
         }
         else
         {                
             if(ucCtrlId == 'cboProductAutosuggest')
             {
              
               var text = document.getElementById(textBoxClId);  
               var tempText = text.value;
               document.getElementById('imgPageLoad').style.display = 'inline'; 
               objLoadingimg = document.getElementById('imgPageLoad');
               if(objLoadingimg)
               objLoadingimg.style.display = 'inline'; 
               if(oldResponse != "")
                 RecieveServerData(oldResponse.replace("<br>YES","<br>NO"));  
               else if(oldResponse == "" && tempText != "")  
               {
                    ctl00_ContentPlaceHolder_cboProductAutosuggestCallServer(tempText,''); 
               }                          
               else
               {              
                 ctl00_ContentPlaceHolder_cboProductAutosuggestCallServer('','');                      
                 pageIndex = 0;              
               }
             }             
             //if(objDiv)
            // objDiv.style.display = "inline";             
           
            /* if(objgridTable == null || objgridTable.rows.length <= 0)
             {
                objDiv.style.display ="none";
                HideItemListNPaging();
             }*/
         } 
        
         return false;
    }
    
    //Handel client callback response
    var oldResponse = "";
    function RecieveServerData(response) 
    {  
        if(response != "")
        { 
             objDiv = document.getElementById(gridDivId);
             if(objDiv)
             objDiv.style.display ="inline"; 
                          
             objValid = document.getElementById('ctl00_ContentPlaceHolder_cboProductAutosuggest_vldSearchableddl');
             if(objValid)
             {                
                objValid.style.display ="none"; 
             }
             
             if(document.getElementById(tdGridId))
             { 
               ctrlContainer = response.split('<br>');                           
               document.getElementById(tdGridId).innerHTML = ctrlContainer[0];  
               hidePanel = false;             
               if(ctrlContainer.length > 1)
               {
                 objDivPaging = document.getElementById(pageBarId);
                 if(objDivPaging)
                 {   
                  objDivPaging.innerHTML = ctrlContainer[1];   
                  if(ctrlContainer.length > 2)  
                  { 
                    if(ctrlContainer[2] == "YES") 
                    {  
                     objDiv.style.display = "none";                      
                     objDivPaging.style.display = "none";
                    }
                    else
                    {
                     objDiv.style.display ="inline";  
                     objDivPaging.style.display ="inline";  
                    }
                  }
                  else
                  {
                    objDiv.style.display ="inline";  
                    objDivPaging.style.display ="inline";  
                  }
                 }
               }
                 //document.getElementById(tdGridId).innerHTML = response;                
             }
             
             SetDivHeightWidth();
             objLoadingimg = document.getElementById('imgPageLoad');
             if(objLoadingimg)
             objLoadingimg.style.display = 'none';  
             oldResponse =  response;                
        }
        else
        {
             objLoadingimg = document.getElementById('imgPageLoad');
             if(objLoadingimg)
             objLoadingimg.style.display = 'none';
        }
    }
     
     //Set controls client side id on texbox focus or on click of arrow button image
    function SetCtrlId(ucCtrlClsID,grdProductClsId,txtDdlTextClsId,hidPanelStatusClsId,hidtxtSearchClsId,hiddenSelectedIndexRequiredClsId,hidSearchTextClsId,btnItemChangedClsId,gridDivClsId,tblGridClsId,tdGridClsId,trMsgClsId,hidSearchName,hidPageSizeClsId,pageBarClsId)
    {
      if(ucCtrlId != ucCtrlClsID)
      {  
         hidePanel = true;
         HidePanel();
      }
      textBoxClId =   txtDdlTextClsId; 
      hidPanelStatusId = hidPanelStatusClsId; 
      hidtxtSearchCtrlId = hidtxtSearchClsId; 
      hiddenSelectedIndexRequiredId = hiddenSelectedIndexRequiredClsId;
      hidSearchTextId = hidSearchTextClsId; 
      btnItemChangedId = btnItemChangedClsId;        
      gridDivId = gridDivClsId; 
      gridTableId = grdProductClsId;//"grdProduct";      
      tdGridId =tdGridClsId;  //"AutoSuggestDropDown1_tdGrid";
      trMsgId = trMsgClsId;
      LowerBound = 0;
      SelectedRowIndex = -1; 
      ucCtrlId = ucCtrlClsID;
      hidtxtSearchNameId = hidSearchName;
      hidPageSizeId = hidPageSizeClsId;
      pageBarId = pageBarClsId;
    }

   //Required field validation for user control
    function ValidateAutoSuggest(sender, args)
    {   
        var blnResult = true;    
        ctrlClsIdPrefix = "";
        ucCtrlSenderId = sender.id.split('_');         
      
        if(ucCtrlSenderId.length > 0)
         { 
           for(i=0;i<ucCtrlSenderId.length-1;i++)
           {
             ctrlClsIdPrefix += ucCtrlSenderId[i]+"_";
           }           
         } 
        vldHidValidationRequired = ctrlClsIdPrefix+"hidValidationRequired";
        hidObjVldReq = document.getElementById(vldHidValidationRequired);         
        if(hidObjVldReq && hidObjVldReq.value.toLowerCase() == "true")
        {
            vldHidtxtSearchCtrlId = ctrlClsIdPrefix+"hidtxtSearchId";
            vldtextBoxCtrlId = ctrlClsIdPrefix+"txtDdlText";
            
            hidObj = document.getElementById(vldHidtxtSearchCtrlId);  
            objTxtbox = document.getElementById(vldtextBoxCtrlId); 
            objHidProdName = document.getElementById( ctrlClsIdPrefix+"hidtxtSearchName");                   
            if((hidObj && hidObj.value == "-1") || (objTxtbox && objTxtbox.value.replace(/^\s+|\s+$/g,"") == "") || (objHidProdName && objHidProdName.value != objTxtbox.value))
            {
              hidObj.value = "-1"
              blnResult = false;
              objTxtbox.style.width = 160 +"px";
            }
        } 
       args.IsValid = blnResult;      
       return ;
    } 

    var SelectedRow = null;
    var SelectedRowIndex = -1;
    var UpperBound = null;
    var LowerBound = 0;
    var pageIndex = 0;
    var hideWaterMark = 'true';
    var isFocusOnTextBox ='false';
   /* window.onload = function()
    {  
        LowerBound = 0;
        SelectedRowIndex = -1; 
    }*/    
   //Arrow key up/down handler
    function SelectRow(CurrentRow, RowIndex)
    {  
        hidePanel = false;       
        tableElement = document.getElementById(gridTableId);  
        
        UpperBound = tableElement.rows.length - 1;   
          
        if(SelectedRow == CurrentRow || RowIndex > UpperBound || RowIndex < LowerBound) return;
        
        if(SelectedRow != null)
        {
            SelectedRow.style.backgroundColor = SelectedRow.originalBackgroundColor;
            SelectedRow.style.color = SelectedRow.originalForeColor;
        }
        
        if(CurrentRow != null)
        {
            CurrentRow.originalBackgroundColor = CurrentRow.style.backgroundColor;
            CurrentRow.originalForeColor = CurrentRow.style.color;
            CurrentRow.style.backgroundColor = '#316AC5';
            CurrentRow.style.color = 'white';
        } 
        
        SelectedRow = CurrentRow;
        SelectedRowIndex = RowIndex;
        setTimeout("SelectedRow.focus();",0);             
    }

    //Selected index changed handler
    function GridSelectedEventChanged(pressevent,productId,productName)
    { 
      var charCode = (pressevent.which)? pressevent.which : (event.keyCode);            
      isMouseClick = false;
      if(charCode == '0' && navigator.appName =="Microsoft Internet Explorer")
        isMouseClick = true;
      else if(charCode == '1' && navigator.appName !="Microsoft Internet Explorer")
         isMouseClick = true;
      
      if(isMouseClick || charCode == '13')
      {              
        objTxtbox = document.getElementById(textBoxClId);
        if(objTxtbox)
          objTxtbox.value = productName;
        objHidProdName = document.getElementById(hidtxtSearchNameId);
        if(objHidProdName)
        objHidProdName.value = productName;
        objHidProdId = document.getElementById(hidtxtSearchCtrlId);
        if(objHidProdId)
         objHidProdId.value = productId;        
       
        //objPanel = document.getElementById(pnlDatabaseEntryId);        
    //       objhidden = document.getElementById(hidPanelStatusId);
    //        if(objPanel)
    //        {
    //           objPanel.style.visibility = 'hidden';            
    //           if(objhidden)
    //           objhidden.value = "visibility:hidden";        
    //        }  
         HideItemListNPaging();
//         objgridTable = document.getElementById(gridTableId);       
//         if(objgridTable)
//         {
//            //document.getElementById(gridTableId).style.display = "none";
//            objDiv = document.getElementById(gridDivId);          
//            if(objDiv)
//             objDiv.style.display ="none";
//         }
        
        txtWidth = 120;
        
        if (objTxtbox.value.length  > 15)
        {
            txtWidth = objTxtbox.value.length * 8;
        }
    
        if (txtWidth > 300)
            objTxtbox.style.width = '300px';
        else
        {
            objTxtbox.style.width = txtWidth+"px";
        }
        //Reset old response and paging 
        oldResponse = "";  
        pageIndex = 0; 
        objHidSelectedIndexRequired = document.getElementById(hiddenSelectedIndexRequiredId);    
        if(navigator.appName !="Microsoft Internet Explorer")
        objTxtbox.focus(); 
        if(objHidSelectedIndexRequired.value.toLowerCase() == 'true')
        {  
          
          Sys.WebForms.PageRequestManager.getInstance()._doPostBack(btnItemChangedId, '');        
    //          if(charCode == '13' && navigator.appName =="Microsoft Internet Explorer")
    //          {
    //            document.forms[0].submit();
    //          }
          if(navigator.appName !="Microsoft Internet Explorer")
          objTxtbox.focus(); 
          return false;
        }
        else
        {
          return false;
        }
      }
      else
      {
        return false;
      }
    }

   //Set height and width after receiving client callback response.
    function SetDivHeightWidth()
    {  
      objTable = document.getElementById(gridTableId);      
      objDiv = document.getElementById(gridDivId);
      objTextBox = document.getElementById(textBoxClId);
    
     if(objTable == null) 
       {
          objtr =   document.getElementById(trMsgId);        
          if(objtr)
          {
            objtr.className  = "NoRecMsg";
            objDiv.style.height = 30 +"px";            
            objDiv.style.width = 181 +"px";
            objTextBox.style.width = 160 +"px";
            objDiv.style.overflow ="hidden";
            objDiv.style.overflowX ="hidden";
          }
       }
       else
       {
         objtr =   document.getElementById(trMsgId);         
          if(objtr)
          {
            objtr.className  = "AvailableRecMsg";
          }        
       }
     
      if(objDiv && objTable )
      {
         if(objTable)
         {
            objPageSize = document.getElementById(hidPageSizeId);
            pageSize = 15;
            if(objPageSize && objPageSize.value !="")
              pageSize = objPageSize.value;
              
            divheight = objTable.rows.length * 17;
            pageHeight = pageSize * 17;
            if(divheight > pageHeight)
            {
              objDiv.style.height = (pageSize * 17)+"px"; 
              objDiv.style.overflow ="auto";          
            }
            else
            {
//             if(divheight < pageHeight)
//             {
//                divheight= objTable.rows.length * 17;               
//             }
             
               objDiv.style.height = pageHeight+17+"px";
               objDiv.style.overflow ="hidden";           
            
            }
                        
            objPageBar = document.getElementById('ucProductTable');
            if(objPageBar)
            {
                 objPageBar.style.position = "relative";
                 if(navigator.appName =="Microsoft Internet Explorer")
                 {
                   objPageBar.style.top = (pageHeight+17-2)+"px";             
                 }
                 else
                 {
                   objPageBar.style.top = (pageHeight+17-2)+"px";                 
                 }
            }
            
            maxNumChar = 20;     
           
            for(i=0;i<objTable.rows.length-1;i++)
            { 
              numChar = objTable.rows[i].cells[1].innerHTML.length;           
              if (numChar > maxNumChar)
               {
                    maxNumChar = numChar;
               }              
            }
                
            divMaxWidth = (maxNumChar * 7.75);          
            if(divMaxWidth > 300)
            {
              divMaxWidth = 300;
              objDiv.style.overflowX = "auto";             
              if (objDiv.clientWidth <= objDiv.scrollWidth) 
                {
                  objDiv.style.height = pageHeight+"px";
                  if(objPageBar)
                  {
                    objPageBar.style.position = "relative";
                    objPageBar.style.top = (pageHeight-2)+"px";
                  }  
                }             
            }
            else 
            { 
              
              objDiv.style.height = pageHeight+"px";           
              if(objPageBar)
              {
                objPageBar.style.position = "relative";
                objPageBar.style.top = (pageHeight-2)+"px";
              }             
              divMaxWidth = 300;
            }
           
            divMaxWidth = 300 + 7;
            objDiv.style.width = divMaxWidth +"px";   
            
            if(objPageBar)
            {
              objPageBar.style.width = (divMaxWidth+2) +"px"; 
            }
            if(navigator.appName =="Microsoft Internet Explorer")
            {
               objTextBox.style.width = (divMaxWidth - 21) +"px";               
//              Code to hide horizontal scroll on IE 6                                            
//               if(parseInt(navigator.appVersion) <= 6.5)  
//               {
//                 objDiv.style.overflowX ="hidden"; 
//               }
            }
            else
            {
                objTextBox.style.width = (divMaxWidth - 20) +"px";                
            }         
                  
         }  
        
         objtblGridId = document.getElementById(gridTableId);   
         if(objtblGridId) 
         {
           if(divheight > pageHeight)
           {
             objtblGridId.style.width = (divMaxWidth - 19) +"px";                                          
           }
           else
           {
             objtblGridId.style.width = (divMaxWidth - 1) +"px";
           }           
         }
         
      }
      //alert(objDiv.style.height+":"+objDiv.clientWidth +"<="+ objDiv.scrollWidth+"||"+objTextBox.style.width);
    }

    // Add/remove wark mark i.e. Select Product on focus in/out of text box
    function AddRemoveText(action)
    {  
        if(hideWaterMark == 'true')
        {
            obj = document.getElementById(textBoxClId);
            hidObj = document.getElementById(hidtxtSearchCtrlId);
            //alert(action);
           /* if(obj && action == "Add" && obj.value == "Select Product")
            {
                obj.value = "";       
            }
            else if(obj && action == "Remove")
            {
                hidObj = document.getElementById(hidtxtSearchCtrlId); 
                if(hidObj && hidObj.value == "-1")
                {
                  obj.value = "Select Product";
                }
            }*/
            if(obj && obj.value == "" && hidObj.value == "-1")
            {
                obj.value = "Select Product";
            }
            
            if(obj && action == "Add" && obj.value == "Select Product")
            {
                obj.value = "";       
            }
        }
    }
    
    //This function must replace the original microsoft function "WebForm_CallbackComplete"
    function WebForm_CallbackComplete_SyncFixed() {
    // SyncFix: the original version uses "i" as global thereby resulting in javascript errors when "i" is used elsewhere in consuming pages
    for (var i = 0; i < __pendingCallbacks.length; i++) {
    callbackObject = __pendingCallbacks[i];
    if (callbackObject && callbackObject.xmlRequest && (callbackObject.xmlRequest.readyState == 4)) {
    // The callback should be executed after releasing all resources
    // associated with this request.
    // Originally if the callback gets executed here and the callback
    // routine makes another ASP.NET ajax request then the pending slots and
    // pending callbacks array gets messed up since the slot is not released
    // before the next ASP.NET request comes.
    // FIX: This statement has been moved below
    // WebForm_ExecuteCallback(callbackObject);
     if (!__pendingCallbacks[i].async) {
       __synchronousCallBackIndex = -1;
     }
     __pendingCallbacks[i] = null;

     var callbackFrameID = "__CALLBACKFRAME" + i;
     var xmlRequestFrame = document.getElementById(callbackFrameID);
     if (xmlRequestFrame) {
       xmlRequestFrame.parentNode.removeChild(xmlRequestFrame);
     }

     // Fix: the following statement has been moved down from above;
     WebForm_ExecuteCallback(callbackObject);
    }
    }
    }


    //this methot will be called automatically at startup
    function WebForm_CallbackComplete_AutoFix()
    {
    if (typeof (WebForm_CallbackComplete) == "function") {
      // set the original version with fixed version
      WebForm_CallbackComplete = WebForm_CallbackComplete_SyncFixed;
    }
    }



    //attach automatically at startup
    if (window.addEventListener) 
    { // Non-IE browsers
    window.addEventListener('load', WebForm_CallbackComplete_AutoFix, false);        
    } 
    else if (window.attachEvent) 
    { // IE 6+
    window.attachEvent('on' + 'load', WebForm_CallbackComplete_AutoFix);
    } 
    else 
    { // Older browsers 
    var currentEventHandler = window['on' + 'load'];
    if (currentEventHandler == null) 
    {
    window['on' + 'load'] = WebForm_CallbackComplete_AutoFix;
    } 
    else 
    {
    window['on' + 'load'] = function(e) { currentEventHandler(e); WebForm_CallbackComplete_AutoFix(e); }
    }
    }
