﻿   var LoadingMsg, ErrorMsg, WorldWide;
   var Constant = 
   {
        "Audiences" : "audiences",
        "Audiences_DD" : "audiences_DD",
        "Lang" : "lang",
        "Lang_DD" : "lang_DD",
        "ProductFamily": "ProductFamily",
        "ProductFamily_DD": "ProductFamily_DD",
        "ProductVersion": "ProductVersion",
        "ProductVersion_DD": "ProductVersion_DD",
        "ProductEdition": "ProductEdition",
        "ProductEdition_DD": "ProductEdition_DD",
        "Country" : "country",
        "Country_DD" : "country_DD",
        "State" : "state",
        "State_DD" : "state_DD",
        "Level" : "level",
        "Level_DD" : "level_DD"
   }
   
 
   function AdvancedSearch()
   {
        this.defaultCountry = this.defaultLang = this.defaultState = "";
        this.reloadFilter = false;
        this.ddFilterColl = null;
        this.RetrieveStates = function(elem, reset)
            {
                var outer = this;
                if ((elem.options[elem.selectedIndex].value).length == 0 || (elem.options[elem.selectedIndex].value) == WorldWide)
                {
                    $(Constant.State).innerHTML = "<select></select>";
                    $(Constant.State).disabled = true;
                    return;
                }
                else
                {
                    $(Constant.State).innerHTML = "<select ><option>" + LoadingMsg + "</option></select>";
                    $(Constant.State).disabled = false;
                }
                    
                 var culture     = $("as").getAttribute("locale");
                 var params      =       "language=" + culture.split("-")[0] + 
                                        "&country=" + culture.split("-")[1] +
                                         "&selectedcountry=" + elem.options[elem.selectedIndex].value ;
                 var req = buildRequest("Handlers/GetStates.ashx",true,params); //read from config, add auth
                 req.onreadystatechange = function(){
			    if (req.readyState == 4 && req.status == 200)
			    {
				    var status_code;
				    var status_text;
				    try
				    {
					    status_code = req.status;
					    status_text = req.statusText;
				    }
				    catch(e) {
				        reportException(e,target.id);
				    }
				    if (status_code == 200 && req.responseText && req.responseText.indexOf("Error.aspx") == -1)
				    {
				        if(req.responseXML)
				        {
				           var asData = req.responseXML; 
				           var stateNodes = asData.selectNodes("/root/states/item");
  		                   LoadDropDown(Constant.State, stateNodes, (stateNodes.length > 0) ? as.RetainDDStr : "disabled='disabled'");
  		                   if (reset)
  		                   {
  		                        var stateDD = $(Constant.State_DD);
  		                        outer.defaultState = outer.GetDefaultValue(asData, "/root/states/item[@default='true']");
  		                        stateDD.selectedIndex = outer.GetDefaultSI(stateDD.options, outer.defaultState);
  		                   }
				        }
		            }
		            else
		            {
		                alert(ErrorMsg);
		            }
		          }
                
                }
       		    req.send(params);

            }   
            
            this.InitializeDD = function()
            {
                $(Constant.Audiences).innerHTML =
                $(Constant.Lang).innerHTML =
                $(Constant.ProductFamily).innerHTML = 
                $(Constant.ProductVersion).innerHTML = 
                $(Constant.ProductEdition).innerHTML = 
                $(Constant.Country).innerHTML =
                $(Constant.Level).innerHTML =
                $(Constant.State).innerHTML = "<select><option>" + LoadingMsg + "</option></select>";
            }
            
           this.HookupEvents = function()
           {
              var evtId = $("evtID");
              if (evtId != null)
              {
                evtId.onblur = as.ValidateEventId;
                evtId.onkeypress = as.AcceptNumbersOnly;
              }
           }
           this.RetainDDStr = "onchange='as.RetainDD(this);'";            
           
           this.LoadASearch = function()
            {
                 var ret = search.geturlcookie('', true, true); 
                 if (!ret){ $('dynSearchDiv').style.visibility = 'visible';} 
                 as.InitializeASearch();     
            }
            
            this.InitializeASearch = function()
            {
                var outer = this;
                as.HookupEvents();
                 cal.HookupEvents();
                 var countryDD = "";
                 
                 if(location.href.toLowerCase().indexOf("interactivecalendar.aspx") > -1)
                 {
                     var hash = location.hash;
                     var ddFilter = getRealCookie("ddFilter");
                     if (hash && hash.indexOf(";s=1") < 0 && ddFilter)
                     {
                        this.reloadFilter = true;
                        var splitter = ddFilter.split(";");
                        this.ddFilterColl = new Array();
                        for (var i=0;i<splitter.length;i++)
                        {
                            var nv = splitter[i].split("=");
                            if (nv && nv.length >= 2)
                            {
                                this.ddFilterColl[nv[0]] = nv[1];
                                createCookie(nv[0]+"CAL", nv[1]);
                            }
                        }
                     }
                 }
                 countryDD = this.GetDropDown(Constant.Country_DD);
                 
                 as.InitializeDD();
                 var culture     = $("as").getAttribute("locale");
                 var params      =       "language=" + culture.split("-")[0] + 
                                        "&country=" + culture.split("-")[1];

                 if (countryDD != null)
                 {  
                    params += "&countryDD=" + countryDD;
                 }
                 
                 //get values of product dropdown from cookie
                 var productFamilyCookie = this.GetDropDown(Constant.ProductFamily_DD);
                 var productVersionCookie = this.GetDropDown(Constant.ProductVersion_DD);
                 var productEditionCookie = this.GetDropDown(Constant.ProductEdition_DD);
                 
                 if (productFamilyCookie > 0)
                 {  
                    params += "&productFamily=" + productFamilyCookie;
                 }
                 
                 if (productFamilyCookie > 0 && productVersionCookie > 0)
                 {  
                    params += "&productVersion=" + productVersionCookie;
                 }
                
                 var req = buildRequest("Handlers/AdvSearch.ashx",true,params); //read from config, add auth
                 
                 req.onreadystatechange = function(){
                 if (req != null)
                 
			    if (req.readyState == 4 && req.status == 200)
			    {
				    var status_code;
				    var status_text;
				    try
				    {
					    status_code = req.status;
					    status_text = req.statusText;
				    }
				    catch(e) {
				        reportException(e,target.id);
				    }

				    if (status_code == 200 && req.responseText && req.responseText.indexOf("Error.aspx") == -1)
				    {
				        if(req.responseXML)
				        {
				           var asData = req.responseXML; 
				           var audienceNodes = asData.selectNodes("/root/audience/item");
				           var languageNodes = asData.selectNodes("/root/languages/item");
				           var productFamilyNodes = asData.selectNodes("/root/fproducts/item");
				           var countryNodes = asData.selectNodes("/root/countries/item");
				           var stateNodes = asData.selectNodes("/root/states/item");
                           var postcode = asData.selectNodes("/root/postcode");
                           var productversionNodes = asData.selectNodes("/root/productversion/item");
                           var producteditionNodes = asData.selectNodes("/root/productedition/item");
                           var eventLevelNodes = asData.selectNodes("/root/eventLevel/item");
                         
                           outer.defaultCountry = outer.GetDefaultValue(asData, "/root/countries/item[@default='true']");
                           outer.defaultState = outer.GetDefaultValue(asData, "/root/states/item[@default='true']");
                           outer.defaultLang = outer.GetDefaultValue(asData, "/root/languages/item[@default='true']");

				           LoadDropDown(Constant.Audiences, audienceNodes, (audienceNodes.length > 0) ? as.RetainDDStr : "disabled='disabled'", outer.ddFilterColl);
				           LoadDropDown(Constant.Lang, languageNodes, (languageNodes.length > 0) ? as.RetainDDStr : "disabled='disabled'", outer.ddFilterColl);
				           LoadDropDown(Constant.ProductFamily, productFamilyNodes,  (productFamilyNodes.length > 0) ? "onchange=\"as.RetrieveProducts(this,'ProductVersion','version');as.RetainDD(this);\"" : " disabled='disabled'", outer.ddFilterColl);
				           LoadDropDown(Constant.ProductVersion, productversionNodes, (productversionNodes.length > 1) ? "onchange=\"as.RetrieveProducts(this,'ProductEdition','edition');as.RetainDD(this);\"" : " disabled='disabled'", outer.ddFilterColl);
				           LoadDropDown(Constant.ProductEdition, producteditionNodes, (producteditionNodes.length > 1) ? as.RetainDDStr : " disabled='disabled'", outer.ddFilterColl);
				           LoadDropDown(Constant.Country, countryNodes,  (countryNodes.length > 0) ? "onchange='as.RetrieveStates(this);as.RetainDD(this);'" : " disabled='disabled'", outer.ddFilterColl);
				           LoadDropDown(Constant.State, stateNodes, (stateNodes.length > 0) ? as.RetainDDStr : "disabled='disabled'", outer.ddFilterColl);
				           LoadDropDown(Constant.Level, eventLevelNodes, (eventLevelNodes.length > 0) ? as.RetainDDStr : "disabled='disabled'", outer.ddFilterColl);
				           
				           var postaltext = $("postaltext");
				           if (postcode.length > 0 && postaltext != null && postaltext != undefined)
				                postaltext.value = postcode[0].getAttribute("value");
				        }
		            }
		            else
		            {
		                alert(ErrorMsg);
		            }
		        }
		    }
		    req.send(params);
        }
        
        this.GetDefaultValue = function(asData, expr)
        {
            var s = asData.selectSingleNode(expr)
            if (s)
                return s ? s.getAttribute("id") : null;               
        }
        
        this.AcceptNumbersOnly = function()
        {
            var key = get_eventkey();
            
            if ((key >= '48' && key <= '57'))
            {
                return;
            }
            else
            {
                event.returnValue = false;
            }
        }   
        this.ValidateEventId = function()
        {
        
            var eId =  $("evtID");
            if (eId != null)
            {
                var eIdVal = eId.value.trim();

                if ((eIdVal.length > 0) && isNaN(eIdVal))
                {
                    eId.focus();
                    eId.className = "lg";
                    $("eiderr").style.display = "block";
                    return false;
                }
                else
                {
                    eId.className = "wbg";
                    $("eiderr").style.display = "none";
                    return true;
                }   
            }
            else return true;
            
        }   
            
        this.Search = function(event1,form)
        {
           var scrollTo = "evtID";
           var calpage = $("calpage");
           ret = as.ValidateEventId();
           
           if (ret && (calpage == null || calpage == undefined))
           {
               scrollTo = "chkST";
               ret = cal.ValidateCalendar();
           }
           
           if (ret == true)
           {
                var eventTypes = extractEventTypes(form);
                if (eventTypes == null || eventTypes.length == 0)
                    eventTypes = "0";
                    
                search.gather.invoke(event1,'afterSearch',this, null, null, null, null, null,eventTypes , null, null, null, null, 'true')
           }
           else
           {
                window.scrollTo(0, $(scrollTo).offsetTop);
           }
        }
      
        this.RetainDD = function(elem)
        {        
            if (elem != null && elem.id != null)
            {
                if (location.href.toLowerCase().indexOf("interactivecalendar.aspx") > -1)
                createCookie(elem.id+"CAL",elem.options[elem.selectedIndex].value);
                else
                createCookie(elem.id,elem.options[elem.selectedIndex].value);
            }
        }
        
        this.CheckPage = function(url)
        {
            if (search.advanced.style.display.equals("block"))
            {
                return url
            }
            return "";
        }
        
        this.RetrieveProducts = function(elem,drpProduct,relationshipName)
            {
                if ((elem.options[elem.selectedIndex].value).length == 0)
                {
                    $(drpProduct).innerHTML = "<select disabled='disabled' class='pdd'></select>";
                    $(drpProduct).disabled = true;
                    
                    if(drpProduct== Constant.ProductVersion)
                    {
                        $(Constant.ProductEdition).innerHTML = "<select disabled='disabled' class='pdd'></select>";
                        removeCookie(Constant.ProductEdition_DD);
                    }
                    return;
                }
                else
                {
                    $(drpProduct).innerHTML = "<select><option>" + LoadingMsg + "</option></select>";
                    $(drpProduct).disabled = false;
                    if(drpProduct== Constant.ProductVersion)
                    {
                        $(Constant.ProductEdition).innerHTML = "<select disabled='disabled' class='pdd'></select>";
                        removeCookie(Constant.ProductVersion_DD);
                        removeCookie(Constant.ProductEdition_DD);
                    }
                }
                    
                 var culture     = $("as").getAttribute("locale");
                 var params      =       "language=" + culture.split("-")[0] + 
                                        "&country=" + culture.split("-")[1] +
                                         "&parentProductId=" + elem.options[elem.selectedIndex].value + 
                                         "&relationshipName=" + relationshipName;
                 var req = buildRequest("Handlers/GetDomains.ashx",true,params); //read from config, add auth
                 req.onreadystatechange = function(){
			    if (req.readyState == 4 && req.status == 200)
			    {
				    var status_code;
				    var status_text;
				    try
				    {
					    status_code = req.status;
					    status_text = req.statusText;
				    }
				    catch(e) {
				        reportException(e,target.id);
				    }
				    if (status_code == 200 && req.responseText && req.responseText.indexOf("Error.aspx") == -1)
				    {
				        if(req.responseXML)
				        {
				           var asData = req.responseXML; 
				           var productNodes = asData.selectNodes("/root/products/item");
				           
				           if(drpProduct== Constant.ProductEdition)
				            LoadDropDown(drpProduct, productNodes, (productNodes.length > 0) ? "onchange=\"as.RetainDD(this);\"" : "disabled='disabled'");
				           else
    		                LoadDropDown(drpProduct, productNodes,  (productNodes.length > 0) ? "onchange=\"as.RetrieveProducts(this,'ProductEdition','edition');as.RetainDD(this);\"" : " disabled='disabled'");
				        }
		            }
		            else
		            {
		                alert(ErrorMsg);
		            }
		          }
                
                }
       		    req.send(params);

            }   
            
            this.ClearFilter = function(evt, form)
            {
                var as = $("as");
                if (!as) return;
                
                var select = as.getElementsByTagName("select");
                this.ResetDropDown(select);
                removeCookie(Constant.State_DD+"CAL");
                var input = as.getElementsByTagName("input")
                this.ResetInput(input);
                removeRealCookie("calfilter");
                removeRealCookie("ddfilter");
                search.gatherInfo.invoke(evt,'afterSearch',this, null, null, null, null, null, extractEventTypes(form), null, null, null, null, 'true')
            }
            
            this.SaveAndSearch = function(evt, form)
            {
                var as = $("as");
                var select = as.getElementsByTagName("select");
                var cookie="";
                var exp = 1000*24*60*60*1000;
                
                if (!select) return;
                for (var i=0; i < select.length; i++)
                {
                    if (select[i].value.length > 0)
                    {
                        cookie += select[i].id + "=" + select[i].value + ";";
                    }
                }
                
                createRealCookie("ddfilter", escape(cookie), exp);
               
                var nparams = "";
                var params = search.gatherInfo(evt,'afterSearch',null, this, null, null, null, null, null, extractEventTypes(form), null, null, null, null, 'true');
                if (params)
                {
                    var splitted = params.split(';');
                    for(var i=0;i<splitted.length;i++)
                    {
                        var nv = splitted[i].split('=');
                        if (nv.length == 2)
                        {
                            if (nv[0].toLowerCase() != "startdate" &&
                                 nv[0].toLowerCase() != "culture" && 
                                nv[0].toLowerCase() != "enddate" && 
                                nv[0].toLowerCase() != "s" &&
                                nv[0].toLowerCase() != "calview")
                            {
                                nparams += nv[0] + "=" + nv[1]+";";
                            }
                        }
                    }
                    createRealCookie("calfilter", escape(nparams), exp);
                }
                this.Search(evt, form);
            }
            
            this.GetDefaultSI = function(option, def)
            {
                 if (!option) return;
                 var index = 0;
                  for (var j=0; j<option.length; j++)
                 {
                   if (option[j].value == def)
                   {
                        index = j;
                        break;
                   }
                 }
                 return index;
            }
            
            this.ResetDropDown = function(select)
            {
                if (!select) return;
                for (var i=0; i < select.length; i++)
                {
                    if (select[i].id.length == 0) continue;
                    removeCookie(select[i].id+"CAL");
                    switch(select[i].id)
                    {
                        case Constant.Country_DD:
                             select[i].selectedIndex = this.GetDefaultSI(select[i].options, this.defaultCountry);
                             this.RetrieveStates($(Constant.Country_DD), true);
                             break;
                        case Constant.Lang_DD:
                            select[i].selectedIndex = this.GetDefaultSI(select[i].options, this.defaultLang);
                            break;
                        case Constant.ProductFamily_DD:
                            select[i].selectedIndex = 0;
                            this.RetrieveProducts($(Constant.ProductFamily_DD),'ProductVersion','version')
                             break;
                        default:
                            select[i].selectedIndex = 0;
                            break;
                    }
                        
                }
            }

            this.GetDropDown = function(elem)
            {
                if (this.reloadFilter && this.ddFilterColl)
                {
                    setCookie(elem+"CAL", this.ddFilterColl[elem]);
                    return (this.ddFilterColl[elem]);
                }
                else
                    return  (location.href.toLowerCase().indexOf("interactivecalendar.aspx") > -1) ? getCookie(elem+"CAL") : getCookie(elem);
            }
            
            this.ResetInput = function(input)
            {
                if (!input)return;
                for (var i =0; i< input.length; i++)
                {   
                    if(input[i].type == "text")
                        input[i].value = "";
                    if (input[i].type == "checkbox")
                        input[i].checked = "checked";
                }
        }
            
    }
   

