﻿var reqProvinces = createXmlHttpRequestObject();
var provinceURL = 'prog/xmlprovinces.ashx';
var regionURL = 'prog/xmlregions.ashx';
var debugMode = true;
var iTryAgain = 2000;
var numTries = 0;
var MAX_NUM_TRIES = 20;

function createXmlHttpRequestObject() 
{
    var xmlHttp;
    try
    {
        xmlHttp = new XMLHttpRequest();
    }
    catch(e)
    {
        var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0",
                            "MSXML2.XMLHTTP.5.0",
                            "MSXML2.XMLHTTP.4.0",
                            "MSXML2.XMLHTTP.3.0",
                            "MSXML2.XMLHTTP",
                            "Microsoft.XMLHTTP");
                            
        for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++) 
        {
            try 
            { 
            xmlHttp = new ActiveXObject(XmlHttpVersions[i]);
            } 
            catch (e) {}
        }
    }
    if (!xmlHttp)
        alert("Your browser does not support AJAX");
    else 
        return xmlHttp;
}

function callInProgress(req) 
{
    if (!req) 
    {
        return false;
    }
    if(req.readyState == 1 || req.readyState == 2 || req.readyState == 3)
        return true;
    else
        return false;
}

function abortOpenCall(req)
{
    if (callInProgress()) 
    {
		req.abort();
	}
}

function hasRegions(selCountry)
{
    if(selCountry == 1 || selCountry == 24) return true;
    else return false;
}

var ddCountry; var ddProvince; var ddRegion;
function onchange_countrydd(ddC, ddP, ddR)
{ 
    ddCountry = ddC;
    ddProvince = ddP;
    ddRegion = ddR;
        
    removeAllItems(ddRegion);
    setVisibleDD(ddRegion, false);
    
    sendRequestProvinces();
}

function onchange_countrydd2(ddC, ddP)
{ 
    ddCountry = ddC;
    ddProvince = ddP;
        
    sendRequestProvinces();
}

function sendRequestProvinces()
{    
    abortOpenCall(reqProvinces);
    removeAllItems(ddProvince);
    numTries = 0;
    
    if(reqProvinces)
    {
        try
        {
            if (reqProvinces.readyState == 4 || reqProvinces.readyState == 0) 
            {
                var selCountry = ddCountry[ddCountry.selectedIndex].value;
                reqProvinces.open("GET", provinceURL + "?c=" + selCountry, true);
                //reqProvinces.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                reqProvinces.onreadystatechange = handle_sendRequestProvinces;
                reqProvinces.send();
                //reqProvinces.send(params);
            }
        }
        catch(e)
        {
            displayError(e.toString());
        }
    }
}

function handle_sendRequestProvinces()
{
    //debugStatus(reqProvinces);
    //alert(reqProvinces.readyState);
    if (reqProvinces.readyState == 4) 
    {
        if (reqProvinces.status == 200) 
        {        
            var response = reqProvinces.responseText;
            var arrItems = response.split(';');
            var each;
            if(response == '' || arrItems.length <= 0)
            {
                ddProvince.options.add(new Option('---no regions---', 0));
                ddProvince.disabled = true;
                return;
            }
            
            ddProvince.disabled = false;
            var label = ddCountry[ddCountry.selectedIndex].text;
            ddProvince.options.add(new Option('---all ' + label + ' regions---', 0));            
            for(var i = 0; i<arrItems.length; i++)
            {
                each = arrItems[i].split(',');
                ddProvince.options.add(new Option(each[1], each[0]));
            }
        } 
        else if (reqProvinces.status == 12030 || reqProvinces.status == 12031) 
        { 
             if(numTries++ <= MAX_NUM_TRIES)
                setTimeout("sendRequestProvinces()", iTryAgain);
        }
        else
        {
            displayError(reqProvinces.statusText);
        }
    }
}

function onchange_provincedd(ddC, ddP, ddR)
{ 
    ddCountry = ddC;
    ddProvince = ddP;
    ddRegion = ddR;
    
    sendRequestRegions();
}

function sendRequestRegions()
{    
    abortOpenCall(reqProvinces);
    removeAllItems(ddRegion);
    numTries = 0;    
    if(reqProvinces)
    {
        try
        {
            if (reqProvinces.readyState == 4 || reqProvinces.readyState == 0) 
            {
                var params = "?p=" + ddProvince[ddProvince.selectedIndex].value;
                reqProvinces.open("GET", regionURL + params, true);
                //reqProvinces.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
                reqProvinces.onreadystatechange = handle_sendRequestRegions;
                reqProvinces.send();
                //reqProvinces.send(params);
            }
        }
        catch(e)
        {
            displayError(e.toString());
        }
    }
}

function handle_sendRequestRegions()
{
    if (reqProvinces.readyState == 4) 
    {
        if (reqProvinces.status == 200) 
        {        
            var response = reqProvinces.responseText;
            var arrItems = response.split(';');
            var each;
            if(response == '' || arrItems.length <= 0)
            {
                ddRegion.options.add(new Option('---no regions---', 0));
                //ddRegion.disabled = true;
                setVisibleDD(ddRegion, false);
                return;
            }
            
            //ddRegion.disabled = false;
            setVisibleDD(ddRegion, true);
            var label = ddProvince[ddProvince.selectedIndex].text;
            ddRegion.options.add(new Option('---all ' + label + ' counties---', 0));            
            for(var i = 0; i<arrItems.length; i++)
            {
                each = arrItems[i].split(',');
                ddRegion.options.add(new Option(each[1], each[0]));
            }
        } 
        else if (reqProvinces.status == 12030 || reqProvinces.status == 12031) 
        { 
             if(numTries++ <= MAX_NUM_TRIES)
                setTimeout("sendRequestRegions()", iTryAgain);
        }
        else
        {
            displayError(reqProvinces.statusText);
        }
    }
}

function setVisibleDD(drp, isvisible)
{
    var div = document.getElementById('idcounty');
    
    if(isvisible)
    {
        if(div) div.style.display = 'inline';
        drp.style.display = 'inline';
    }
    else
    {
        if(div) div.style.display = 'none';
        drp.style.display = 'none';
    }        
}

function removeAllItems(ddP)
{
    var i;
    for(i=ddP.options.length-1;i>=0;i--)
    {
        ddP.remove(i);
    }
}

function displayError(message)
{
    alert("Error: could not load regions " + (debugMode ? message : ""));
}

function debugStatus(req)
{
    if(req.readyState == 4)
    {
        if(req.status != 200)
            alert('status: ' + req.status);
    }
    if(req.readyState != 1 && req.readyState != 2 && req.readyState != 3 && req.readyState != 4)
    {
        alert('readyState: ' + req.readyState);
    }
}


