    
    if (defaultOptionID == null) var defaultOptionID = '0';
    if (defaultOptionName == null) var defaultOptionName = " ------- None ------- ";
    if (rootUrl == null) var rootUrl = "/";

    /**
     * On City select change Event Handler
     */
    function on_CountryChange(countryId)
    {
        if (countryId == 0)
        {
            document.getElementById('ddlCity').innerHTML = "";
            document.getElementById('ddlCity').disabled = true;
            document.getElementById('txtCitySearchPattern').value = "";
            document.getElementById('citySearchPanel').style.display = "none";
            document.getElementById('ddlState').innerHTML = "";
            document.getElementById('ddlState').disabled = true;
            
            return false;
        }
        
        serverResponse = new AjaxRequest(rootUrl + "wsdl/country.xml.php");
        serverResponse.add("action", 'getCountryData');
        serverResponse.add("country", countryId);
        serverResponse.setHandler(on_CountryDataXMLPosted);
        
        
        /**
         * On start Loading Data
         */
        document.getElementById('cityDataLoading').style.display = "";
        document.getElementById('ddlCity').innerHTML = "";
        document.getElementById('ddlCity').disabled = true;
        document.getElementById('txtCitySearchPattern').value = "";
        document.getElementById('ddlState').innerHTML = "";
        document.getElementById('ddlState').disabled = true;
        // --- End of start Loading Data --- //
        
        response = serverResponse.execute();
    }
    
    // --- On state Change Area --- //
    /**
     * On State select change Event Handler
     */
    function on_StateChange(stateId)
    {
        serverResponse = new AjaxRequest(rootUrl + "wsdl/country.xml.php");
        serverResponse.add("action", 'getStateData');
        serverResponse.add("state", stateId);
        serverResponse.setHandler(on_CityDataXMLPosted);
        
        /**
         * On start Loading Data
         */
        document.getElementById('cityDataLoading').style.display = "";
        document.getElementById('ddlCity').innerHTML = "";
        document.getElementById('ddlCity').disabled = true;
        document.getElementById('txtCitySearchPattern').value = "";
        // --- End of start Loading Data --- //
        
        response = serverResponse.execute();
    }
    
    var currentCityPattern = '';
    
    /**
     * Event on City Search Pattern change
     */
    function on_CityPatternChange()
    {
        if (currentCityPattern == document.getElementById('txtCitySearchPattern').value)
        {
            return false;
        }
        else
        {
            currentCityPattern = document.getElementById('txtCitySearchPattern').value;
            document.getElementById('txtCitySearchPattern').disabled = true;
        }
        
        serverResponse = new AjaxRequest(rootUrl + "wsdl/country.xml.php");
        serverResponse.add("action", 'getCitiesByName');
        serverResponse.add("country", document.getElementById('ddlCountry').value);
        serverResponse.add("state", document.getElementById('ddlState').value);
        serverResponse.add("cityName", currentCityPattern);
        serverResponse.setHandler(on_CityDataXMLPosted);
        
        // --- Start loading city Data --- //
        document.getElementById('cityDataLoading').style.display = "";
        document.getElementById('ddlCity').innerHTML = "";
        document.getElementById('ddlCity').disabled = true;
        
        response = serverResponse.execute();
        
        // alert(document.getElementById('txtCitySearchPattern').value);
        
    }
    
    function on_CountryDataXMLPosted(currentObject)
    {
        var resultXML = currentObject.resultXML;
        
        statesData = resultXML.getElementsByTagName('States')[0];
        if ((statesData != undefined) && (typeof(statesData) == "object"))
        {
            loadStatesData(statesData);
        }
        else
        {
            citiesData = resultXML.getElementsByTagName('Cities')[0];
            if ((citiesData != undefined) && (typeof(citiesData) == "object"))
            {
                on_CityDataXMLPosted(currentObject);
            }
        }
        
        /**
         * On end loading data 
         */
        document.getElementById('cityDataLoading').style.display = "none";
            
        return true;
    }
    
    function loadStatesData(statesData)
    {
        statesList = statesData.getElementsByTagName('State');
        statesControl = document.getElementById('ddlState');
        
            /**
             * Loading empy cell for city
             */
            var tmpOption = document.createElement("OPTION");
            tmpOption.value = defaultOptionID;
            tmpOption.text = defaultOptionName;
            statesControl.options.add(tmpOption);
            
        for(i=0; i < statesList.length; i++)
        {
            if ((statesList[i].firstChild != null) && (statesList[i].firstChild.data != null))
            {
                var tmpOption = document.createElement("OPTION");
                tmpOption.value = statesList[i].getAttribute('StateID');
                tmpOption.text = statesList[i].firstChild.data;
                statesControl.options.add(tmpOption);
            }
                
        }
        
        /**
         * Enabling States List and Disabling Cities List
         */
        statesControl.disabled = false;
        document.getElementById('ddlCity').innerHTML = "";
        document.getElementById('ddlCity').disabled = true;
        document.getElementById('citySearchPanel').style.display = "none";
    }
    
    // --- City --- //
    
    function on_CityDataXMLPosted(currentObject)
    {
        resultXML = currentObject.resultXML;
        
        var citiesCount = 0;
        var allCitiesCount = 0;
        var searchedCitiesCount = 0;
        var searchedValue = document.getElementById('txtCitySearchPattern').value;
        citiesData = resultXML.getElementsByTagName('Cities')[0];
        if ((citiesData != undefined) && (typeof(citiesData) == "object"))
        {
            // --- Reloading cities count data --- //
            var allCitiesCount = citiesData.getAttribute('AllRecordsCount');
            var searchedCitiesCount = citiesData.getAttribute('SearchedRecordsCount');
            var citiesCount = citiesData.getAttribute('Count');
            var stateId = citiesData.getAttribute('StateID');
            
            citiesList = citiesData.getElementsByTagName('City');
            citiesControl = document.getElementById('ddlCity');
            for(i = 0; i < citiesList.length; i++)
            {
                if ((citiesList[i].firstChild != null) && (citiesList[i].firstChild.data != null))
                {
                    var tmpOption = document.createElement("OPTION");
                    tmpOption.value = citiesList[i].getAttribute('CityID');
                    tmpOption.text = citiesList[i].firstChild.data;
                    citiesControl.options.add(tmpOption);
                }
            }
            
            // --- Clearing Search Control --- //
            // if (stateId > 0) document.getElementById('txtCitySearchPattern').value = "";
            
        }
        
            /**
             * Loading empy cell for city
             */
            var tmpOption = document.createElement("OPTION");
            tmpOption.value = defaultOptionID;
            tmpOption.text = defaultOptionName;
            document.getElementById('ddlCity').options.add(tmpOption);
        
        // --- End loading Data --- //
        document.getElementById('cityDataLoading').style.display = "none";
        currentTopCitiesCount = ((searchedCitiesCount > 0) || searchedValue) ? searchedCitiesCount : allCitiesCount;
        if (0 < (allCitiesCount - citiesCount))
        {
            document.getElementById('citySearchPanel').style.display = "inline";
            document.getElementById('txtCitySearchPattern').disabled = false;
            document.getElementById('txtCitySearchPattern').focus();
            document.getElementById('citiesCount').innerHTML = citiesCount;
            document.getElementById('allCitiesCount').innerHTML = currentTopCitiesCount;
        }        
        else
        {
            document.getElementById('citySearchPanel').style.display = "none";
        }
        
        //alert ((allCitiesCount - citiesCount) + " " + allCitiesCount + typeof(allCitiesCount) + " - " + citiesCount + typeof(citiesCount) + " - " + searchedCitiesCount);
        
        if (citiesCount > 0) 
        {
            document.getElementById('ddlCity').disabled = false;
        }
        // --- End loading Data --- //
        
        /**/
            
        return true;
    }