function $(id){
    if(typeof id == 'Object') return id;
    return document.getElementById(id) || null;
}

function sortMenu(data)
{
    this.data = data;
    this.selected = data.selected;
    this.newInit();
    return this;
}
function inArray(arr, item)
{
    var i = 0;
    var length = arr.length;
    for (i; i < length; i++){
        if (arr[i] === item){
            return true;
        }
    }
}

sortMenu.prototype = {
    newInit:function()
    {
        if(this.data.selected ==''){
            this.selected = [0];
        } 
        
        var self = this
        for(var o=0;o<this.data.objs.length;o++)
        {
            if(o==2) break;
            $(this.data.objs[o]).onchange = function(){
                self.updateChild(this.id);
            }
        }
        
        var selected = false;

        for(var j=0;j< this.data.objs.length;j++)
        {
            if(j==0)
            {
                var data = this.data.data[0]
            }else if(j==3)
            {
                var data = this.getChildren(this.data.data,this.selected[1],j);
            }else{
                var data = this.getChildren(this.data.data,this.selected[j-1],j);
            }

            if(data==undefined)
            {
                return
            }
            
            for(var k in data)
            {
                if(this.selected[j] == data[k].id)
                {
                    selected = 'selected'
                }else
                {
                    selected = '';
                }
                this.addOption($(this.data.objs[j]), data[k], selected);
            }
        }
    },
    getChildren:function(data,i,j)
    {
        var data = data[j];
        if(i == '' || i == undefined) return;
        var children = new Array();
        for(var o in data)
        {
            if(data[o].parent == i || (typeof i == 'object' && inArray(i, data[o].parent)))
            {
                children.push(data[o])
            }
        }
        return children;
    },
    
    updateChild:function(id)
    {
        var self = this;
        var i=0;
        for(var i=0;i<this.data.objs.length;i++)
        {
            if(this.data.objs[i] == id)
            {
                for(var j=0;j<this.data.objs.length;j++)
                {
                    if(j>i)
                    {
                        this.reset($(this.data.objs[j]))
                    }
                }
                break;
            }
        }

        var data = this.getChildren(this.data.data,this.getMultipleValue(id),i+1);
        if(data==undefined)
        {
            return
        }

        for(var j=i+1;j< this.data.objs.length;j++)
        {
            for(var k in data)
            {
                this.addOption($(this.data.objs[j]), data[k]);
            }
            //data = this.getChildren(this.data.data,this.getAllValue(this.data.objs[j]),j+1);
            data = this.getChildren(this.data.data,$(this.data.objs[j]).value,j+1);

            if(data==undefined)
            {
                break;
            }
            if(i > 1) 
            {
                self.updateChild(this.data.objs[j]);
            }
            //if($(this.data.objs[j]).innerHTML=='') this.reset($(this.data.objs[j]))
        }
        if(i==1)
        {
            this.updateNeighborhood(this.getMultipleValue(id), this.selected[4]);
            return;
        }
    },
    getMultipleValue:function(id)
    {
        o = $(id);
        var intvalue = []
        for(i=0;i<o.length;i++){  
            if(o.options[i].selected){
                intvalue.push(o.options[i].value)
            }
        }
        if(intvalue.length == 1) return intvalue[0];
        return intvalue;
    },
    getAllValue:function(id)
    {
        o = $(id);
        var intvalue = []
        for(i=0;i<o.length;i++){
            if(o.options[i].value == '') continue;
            intvalue.push(o.options[i].value)
        }
        if(intvalue.length == 1) return intvalue[0];
        return intvalue;
    },
    reset:function(obj)
    {
        var option = document.createElement('option');
        obj.innerHTML = '';
        option.value="";
        option.text=option.innerHTML="Select";
        //option.disabled = true
        obj.appendChild(option);
    },
    addOption:function(obj, data, selected)
    {
        var option = document.createElement('option');
        option.value=data.id
        option.text=option.innerHTML=data.name
        option.selected=selected
        obj.appendChild(option);
    },
    updateNeighborhood:function(marketareaId, selected)
    {

        if(!this.data.objs[3]) return false
        var data = this.data.data[3];
        var neighborhood = $(this.data.objs[3]);

        for(var o in data)
        {
            if(marketareaId != data[o].parent) continue;
            if(selected == data[o].id){
                this.addOption(neighborhood, data[o], 'selected');
            }else{
                this.addOption(neighborhood, data[o]);
            }
        }
    }
}
