function DataProviderError()
{
    this.Message;
    this.HasError = false;
    
    this.set_error = function(mess) {
        this.HasError = true;
        this.Message = mess;
    }
    
    this.parseXml = function(xml){
        var dataNode = xml.getElementsByTagName('data')[0];
        if(dataNode == null)
        {
            this.set_error("Invalid xml");
            return;
        }
        
        var errorNode = dataNode.childNodes[0];
        if(errorNode.nodeName == "error")
        {
            this.set_error(errorNode.firstChild.nodeValue);
        }
    }
}

function ArrayListItemCollections(groupNodeName)
{
    this.groupNodeName = ((groupNodeName == null || groupNodeName == 'undefined') ? "itemList" : groupNodeName);
    this.Valid = false;
    this.items = null;
    this.parseXml = function(xml){
        var dataNode = xml.getElementsByTagName('data')[0];
        if(dataNode == null)
        {
            alert("Invalid xml");
            return;
        }
        
        var itemArrayNode = dataNode.childNodes[0];
        if(itemArrayNode.nodeName == this.groupNodeName)
        {
            this.items = new Array();
            var itemsNodeList = itemArrayNode.childNodes;
            var item;
            for(var i = 0 ; i < itemsNodeList.length ; i++)
            {
                item = new ListItemCollection();
                item.parseNode(itemsNodeList[i], false);
                this.items.push(item);
            }
        }
        
        this.Valid = true;
     }
}

function ListItemCollection()
{
    this.Valid = false;
    this.items = null;
    
    this.parseNode = function(xmlNode)  {
        if(xmlNode.nodeName == "items")
        {
            this.items = new Array();
            var itemNodeList = xmlNode.childNodes;
            var item;
            for(var i = 0 ; i < itemNodeList.length ; i++)
            {
                item = new ListItem();
                item.parseXml(itemNodeList[i]);
                this.items.push(item);
            }
        }
        
        this.Valid = true;
    };
    
    this.parseXml = function(xml, hasData){
        var itemsNode;
        if(hasData != null && hasData != 'undefined' && hasData == true)
        {
            var dataNode = xml.getElementsByTagName('data')[0];
            if(dataNode == null)
            {
                alert("Invalid xml");
                return;
            }
            
            itemsNode = dataNode.childNodes[0];
        }
        else
        {
            itemsNode = xml.getElementsByTagName('items')[0];
        }
        
        this.parseNode(itemsNode);
        
    };
    
    this.Fill = function(select, clear){
        if(this.Valid)
        {
            var option;
            if(clear)
            {
                while(select.options.length > 0)
                {
                    select.options.remove(0);
                }
            }
            
            for(var i = 0 ; i < this.items.length ; i++)
            {
                option = this.items[i].createOption();
                select.options.add(option);
            }
        }
    };
}

function ListItem() {
    this.value;
    this.text;
    
    this.parseXml = function(xmlNode) {
        this.value = this.getNodeValue(xmlNode, "value");
        this.text = this.getNodeValue(xmlNode, "text");
    };
    
    this.createOption = function() {
        var oOption = document.createElement("OPTION");
        oOption.value = this.value;
        oOption.text = this.text;
        return oOption;
    };
    
    this.getNodeValue = function(xmlNode, nodeName) {
        var ret = "";
        var x = xmlNode.getElementsByTagName(nodeName);
        if(x != null)
        {
            if(x[0] != null)
            {
                if(x[0].firstChild != null)
                {
                    if(x[0].firstChild.nodeValue != null)
                        ret = x[0].firstChild.nodeValue;
                }
            }
        }
        
        return ret;
    };
}


function DisableControl(controlID)
{
    var control = document.getElementById(controlID);
    if(control != null)
    {
        control.disabled = true;
    }
}

function EnableControl(controlID)
{
    var control = document.getElementById(controlID);
    if(control != null)
        control.disabled = false;
}
