﻿<!--

// JScript file of functions for ajaxSearch
var ajaxSearchUtil = {
    hello : function()
    {
        alert('hello');
    }    
    ,   
    //responsible for setting up two things, search and checking max number of waste types 
    wireItUp : function(options)
    {           
        var selectedValuesList = '';// Declare a variable to store the selected wastetypes
        var selectedValuesListWithNames='';
        var opt = { minLength: 3,
                    maxWasteTypes: 10
        };
        $.extend(opt, options);    
                    
        $('#ctl00_MainContent_ctl00_wasteTypes_searchEntry').show();
        $('#searchResults').show();
         $('#searchBoxRes').show();
    
        $('#ctl00_MainContent_ctl00_wasteTypes_searchT')            
            .keyup( function (event) { doSearch(event, $(this)); } )
            .submit(function () {return false;} )
            .focus();
            
        $('#ctl00_MainContent_wasteTypes_searchT')            
            .keyup( function (event) { doSearch(event, $(this)); } )
            .submit(function () {return false;} )
            .focus();
        
        $('.wastetypes :checkbox')
            .click( function(){  
                matchChecked($(this), '#s' + this.id);
            });         

            var hdselect = $('#ctl00_MainContent_ctl00_wasteTypes_hdSelectedWasteTypeValues');
            if(hdselect.length >0)
            {           
                PersistPreviousData();
            }
            else
            {
               var hdsel = $('#ctl00_MainContent_wasteTypes_hdSelectedWasteTypeValues');                 
                PersistPreviousData();
            }
            
            
//            $('#ctl00_MainContent_wasteTypes_ImgNext')
//              .click(function(){             
//            CheckSelectedWasteTypesCount();
//            });

            
        //Called when search text is modified
        //Either clears existing results or makes new ajax call    
        function doSearch(event, callerContext){
           searchText(event,callerContext.val() || "");
        }
        
        function searchText(event,value)
        {         
           //var searchText = callerContext.val() || "";            
           var searchText = value;           
            
            if(searchText.length < opt.minLength){
                $('#searchResultsDiv').remove();
            }
            else {                                        
                var x = $.getJson2(true,
                                 'handlers/SearchWasteTypes.ashx', 
                                 {searchString: searchText},                       
                                 function(request) { 
                                    $('#ajaxMsg').text('');
                                    $('#ajaxMsg').hide();                                    
                                 },
                                 function(data) {                                  
                                    processSearchResults(event, data);
                                 },
                                 function(request,error) {                                  
                                    if (error == "timeout") {
                                        $("#ajaxMsg").text("");                               
                                    }
                                    else {
                                        $("#ajaxMsg").text("There was a problem retrieving the Waste Types from the server.");
                                        $("#ajaxMsg").addClass("error");
                                    }
                                    $('#ajaxMsg').show();                                    
                                 }
                                 ,2000
                );
            }          
        }
        //process the data returned from ajax call. 
        function processSearchResults(event, searchResultsDataArray){         
            //The results are in one of two JSON formats
            //If all went well we just have an array of id/text values
            //If the C# processing failed we get an object which 
            //contains error information. This object can be identified 
            //by it having a msgType=failure.
            
            var results = searchResultsDataArray;
            
            if(results && results.msgType=='failure')
            {
                $('#searchResultsDiv').remove();

                $("#ajaxMsg").text(results.generalMessage);
                $('#ajaxMsg').show();                                                    
            }
            else
            {        
                //We create a div containing a list of checkboxes, one checkbox
                //for each waste type that was returned. We set a click event 
                //handler on each checkbox that makes sure that changing a search 
                //result checkbox state changes the corresponding checkbox in the 
                //main list of waste types.
                //Note that IE is fussy, and parents must be attached to the DOM
                //before creating child checkboxes. Firefox didn't compain.
                
                var searchResultsDiv = $('<div></div>').attr('id', 'searchResultsDiv');  
                searchResultsDiv
                    .addClass('searchResultsFlyout')
                    //.css({position: 'absolute', display: 'none'})
                    .closable({ 
                            closeHandler: function(e) {
                                            searchResultsDiv.remove();
                                          },
                            imageUrl: "images/button-close.gif"
                     });

                $('#searchResultsDiv').remove();
                searchResultsDiv.appendTo('#searchResults'); 
                
                if(results.length > 0)
                {
                    var ul = $('<ul></ul>').appendTo(searchResultsDiv);           
                        
                    //create checkbox and handler for each waste type
                    $.each(results,function(index, wasteTypeData){              
                        var li = $('<li></li>').appendTo(ul);    
                        
                        var mainChkId = '#' +wasteTypeData.id; //the id of the corresponding checkbox in the main list of checkboxes
                        var mainChkIsChecked = $(mainChkId).is(':checked');
                                 
                        var chk = $('<input type="checkbox" />').attr('id', 's' + wasteTypeData.id).appendTo(li); //id is as per main checkbox but with an 's' prefix
                        chk.attr('checked', mainChkIsChecked); //IE is fussy, cannot set checked when element is created
                        
                        var lblHtml = '<label for="s' + wasteTypeData.id + '">' + wasteTypeData.text + '</label>';
                        var lbl = $(lblHtml).insertAfter(chk);      

                        chk.click( function() { AddSelectedData($(this), mainChkId); } ); 
                       
                    });
                    
                    if(results.length > 0)
                    {  
                      searchResultsDiv.show();
                    }
                    else
                    {
                       searchResultsDiv.hide();
                    }
               }          
               else
               {              
                    var lblNoRecords = '<label for="lblNoRecords">' + "No Records Found" + '</label>';
                    $(lblNoRecords).appendTo(searchResultsDiv);                    
               }
            }
        } 
        
        function PersistPreviousData()
        {        
            var searchvalTest ='';
            
            if($('#ctl00_MainContent_ctl00_wasteTypes_hdSelectedWasteTypeValues').length >0)
            {
                searchvalTest = $('#ctl00_MainContent_ctl00_wasteTypes_hdSelectedWasteTypeValues').val();
            }
            else
            {
                searchvalTest = $('#ctl00_MainContent_wasteTypes_hdSelectedWasteTypeValues').val();
            }
            
                           
            if(searchvalTest.length >0)
              {              
                 var searchBoxResultsDivTest = $('<div></div>').attr('id', 'searchBoxResultsDiv');
                 searchBoxResultsDivTest.appendTo('#searchBoxRes'); 
                 var ull = $('<ul></ul>').appendTo(searchBoxResultsDivTest); 
                                 
                 var arrSearchTest = searchvalTest.split(',');
                 $.each(arrSearchTest,function(index, storedValueTest)
                 {                 
                     var arrSplitValue = storedValueTest.split('|');               
                     
                     var lii = $('<li></li>').attr('id', 'lWT' + arrSplitValue[0]).appendTo(ull); 
                                    
                     var chkkTest = $('<input type="checkbox" />').attr('id', 'WT'+ arrSplitValue[0]).appendTo(lii); 
                     chkkTest.attr('checked', 'checked'); //IE is fussy, cannot set checked when element is created
                   
                     var lbllHtmlTest = '<label for="' + 'WT'+ arrSplitValue[0] + '">' + arrSplitValue[1] + '</label>';
                     var lbllTest = $(lbllHtmlTest).insertAfter(chkkTest);                          
                     chkkTest.click( function() { Removelist($(this), $('#sWT' + arrSplitValue[0])); } );
                     
                     var valTest = arrSplitValue[0];
                     //var valTestNames = valTest.substr(1,(targetChkId.length-1))
                     if(selectedValuesList.length == 0)
                     {                    
                       selectedValuesList += ',' + valTest.substr(2,(valTest.length-1)); 
                       selectedValuesListWithNames += ',' + valTest + '|' + arrSplitValue[1];
                                                                  
                     }
                     else
                     {
                         selectedValuesList += ',' + valTest.substr(2,(valTest.length-1)) ;
                         selectedValuesListWithNames += ',' + valTest + '|' + arrSplitValue[1];
                     }                                                
                 });
                
                if(selectedValuesList.length > 0)
                {
                    AddSelectedValuesList();
                    
                    //$('#ctl00_MainContent_ctl00_wasteTypes_hdValue').val(selectedValuesList);
                     searchBoxResultsDivTest.show();  
                }
              }
        }
        
        function AddSelectedData(sourceChkJQ, targetChkId)
        {                
          if(sourceChkJQ.is(':checked'))
          {        
               var ull = '';
               var searchBoxResultsDiv = '';
          
               if($('#searchBoxResultsDiv').length > 0)
               {
                 searchBoxResultsDiv = $('#searchBoxResultsDiv');
                 ull = $('#searchBoxResultsDiv ul');   
           
                  var isavailable = $(targetChkId);
                  if(isavailable.length > 0)
                  {
                     var checkid = isavailable.attr('id');
                     if($(sourceChkJQ).attr('id') == 's' + checkid)
                      {              
                         alert('Item already exists');
                         sourceChkJQ.attr('checked', false);
                         return false;           
                      }
                  }
               }
               else
               {                        
                  searchBoxResultsDiv = $('<div></div>').attr('id', 'searchBoxResultsDiv');
                  searchBoxResultsDiv.appendTo('#searchBoxRes'); 
                  ull = $('<ul></ul>').appendTo(searchBoxResultsDiv);                
               }          
                 
                 var lii = $('<li></li>').attr('id', 'l' + targetChkId.substr(1,(targetChkId.length-1))).appendTo(ull); 
                                
                 var chkk = $('<input type="checkbox" />').attr('id', targetChkId.substr(1,(targetChkId.length-1))).appendTo(lii); 
                    chkk.attr('checked', sourceChkJQ.is(':checked')); //IE is fussy, cannot set checked when element is created
                
                 var labelCont = 'label[for=' + sourceChkJQ.attr('id') + ']';
                 var sourcenamee = $(labelCont);
                 var lbllHtml = '<label for="' + targetChkId.substr(1,(targetChkId.length-1)) + '">' + sourcenamee.text() + '</label>';
                 var lbll = $(lbllHtml).insertAfter(chkk);                          
                 chkk.click( function() { Removelist($(this), sourceChkJQ); } );
                 
                 var val = targetChkId.substr(5,(targetChkId.length-1));
                 var valNames = targetChkId.substr(3,(targetChkId.length-1));
                 if(selectedValuesList.length == 0)
                 {                    
                   selectedValuesList += ',' + val;
                   selectedValuesListWithNames += ',' + valNames + '|' + sourcenamee.text();
                 }
                 else
                 {
                     selectedValuesList += ',' + val ;
                     selectedValuesListWithNames += ',' + valNames + '|' + sourcenamee.text();
                 }
                 
                AddSelectedValuesList();
                    
                 //$('#ctl00_MainContent_ctl00_wasteTypes_hdValue').val(selectedValuesList);
                 
                 searchBoxResultsDiv.show();                 
        
                 var selectedSett = $('#searchBoxRes :checkbox:checked');  
                    if(selectedSett.size() > opt.maxWasteTypes && sourceChkJQ.is(':checked'))
                     {            
                        var namess = ''; //the waste type names of the checked checkboxes
                        selectedSett.each(function(){
                        var selectorr = 'label[for=' + this.id + ']';
                        var lbll = $(selectorr);                        
                        if(lbll) { namess += '\t' + lbll.text() + '\n'; }
                     });
                
                 alert ('You may only select up to ' + opt.maxWasteTypes + ' waste types.\nYou have selected ' + selectedSett.size() + '...\n' + namess);
                 sourceChkJQ.attr('checked', false);                
                 $(targetChkId).attr('checked', false);                
                 $('#hiddenWTExceeded').val('true');
                
                 var isTargetavailable = $(targetChkId);
                 var removeliControl = '#l' + isTargetavailable.attr('id');
                 $(removeliControl).remove();
                }  
              }
              else
              {                 
                 var isTargetavailable = $(targetChkId);
                 var removeliControl = '#l' + isTargetavailable.attr('id');
                 
                 var labCont = 'label[for=' + sourceChkJQ.attr('id') + ']';
                 var lblsourcename = $(labCont);
                 
                 $(removeliControl).remove();
                 
                 var rem = isTargetavailable.attr('id');
                 //alert(rem.substr(2,(rem.length-1)));
                 
                 
                 selectedValuesList = selectedValuesList.replace(',' + rem.substr(4,(rem.length-1)),'');
                 //alert(selectedValuesList.replace(',' + rem.substr(2,(rem.length-1)),''));
                
                
                 selectedValuesListWithNames = selectedValuesListWithNames.replace(',' + rem.substr(2,(rem.length-1)) + '|' + lblsourcename.text(),'');
                 
                 AddSelectedValuesList();
                 //$('#ctl00_MainContent_ctl00_wasteTypes_hdValue').val(selectedValuesList);
              }
        
        }
        function AddSelectedValuesList()
        {
            if($('#ctl00_MainContent_ctl00_wasteTypes_hdValue').length >0)
            {
                $('#ctl00_MainContent_ctl00_wasteTypes_hdValue').val(selectedValuesList);
                $('#ctl00_MainContent_ctl00_wasteTypes_hdValueWithNames').val(selectedValuesListWithNames);
            }
            else
            {
                $('#ctl00_MainContent_wasteTypes_hdValue').val(selectedValuesList);
            }
        }
        function Removelist(sourceChkJQ, targetChkId)
        {       
            $(targetChkId).attr('checked', sourceChkJQ.is(':checked') );
            var removeliControl = '#l' + sourceChkJQ.attr('id');
            
             var labCont = 'label[for=' + sourceChkJQ.attr('id') + ']';
             var lblsourcename = $(labCont);
             
            $(removeliControl).remove();
            
            var remvalue =  sourceChkJQ.attr('id');
            selectedValuesList = selectedValuesList.replace(',' + remvalue.substr(4,(remvalue.length-1)),'');
            selectedValuesListWithNames = selectedValuesListWithNames.replace(',' + remvalue.substr(2,(remvalue.length-1)) + '|' + lblsourcename.text(),'');
            
            AddSelectedValuesList();
            //$('#ctl00_MainContent_ctl00_wasteTypes_hdValue').val(selectedValuesList);
        }             

        //Given a jquery instance of the source checkbox
        //make the checkbox with the id of targetChkId
        //take the same checked state.
        //Then see if too many waste types have been selected,
        //if so uncheck both checkboxes.
        //Note that the targetChkId may not exist in the case
        //that user clicked on checkbox in the main display
        //and it isn't in the search results.
        function matchChecked (sourceChkJQ, targetChkId)
        {
            $(targetChkId).attr('checked', sourceChkJQ.is(':checked') );
        
            var selectedSet = $('.wastetypes :checkbox:checked');  
            if(selectedSet.size() > opt.maxWasteTypes && sourceChkJQ.is(':checked')){
                var names = ''; //the waste type names of the checked checkboxes
                selectedSet.each(function(){
                        var selector = 'label[for=' + this.id + ']';
                        var lbl = $(selector);                        
                        if(lbl) { names += '\t' + lbl.text() + '\n'; }
                    });
            
                alert ('You may only select up to ' + opt.maxWasteTypes + ' waste types.\nYou have selected ' + selectedSet.size() + '...\n' + names);
                sourceChkJQ.attr('checked', false);                
                $(targetChkId).attr('checked', false);                
                $('#hiddenWTExceeded').val('true');
            }  
        }       
    }  
}

    function CheckSelectedWasteTypesCount()
     {
//       if($('#searchBoxResultsDiv').length >0)
//        {            
//            var selectedSett = $('#searchBoxRes :checkbox:checked');  
//             if(selectedSett.size() == 0)
//              {
//                alert("Please select at least one waste type");
//                return true;
//              }
//        }
//        else 
//        { 

            if($('#ctl00_MainContent_wasteTypes_divWasteTypes').length >0)
                {      
                     var iCount = $('.wastetypes :checkbox:checked').size();      
                     if(iCount == 0)
                     {              
                        alert("Please select at least one waste type");
                        return false;
                     }
                     else
                     {      
                       // this is for the custom waste types search one.
                       // this is used in order to avoid looping of the waste types in the selectwastetypes.ascx.cs file method name ProcessSearchData().               
                         var checkValues = [];
                          $(' .wastetypes input[type=checkbox]:checked').each(function () {
                            var cbValue = $(this).attr('id');        
                               checkValues.push(cbValue.substr(31,(cbValue.length-1)));
                           });            
                           var checkSegmentValues = checkValues.join(",");                           
                           $('#ctl00_MainContent_wasteTypes_hdCustomSearchValues').val(checkSegmentValues);                           
                     }
                }
        //}
     } 
     
     function ClearAllCheckBoxes()
     {
        var iCount = $('.wastetypes :checkbox:checked').size();            
         if(iCount > 0)
         {        
            $('.wastetypes :checkbox').attr('checked', false);
         }  
     }     
    
-->

 




