if (dashboard.location == null || dashboard.location == undefined) {
	dashboard.location = new Object();
}

if (dashboard.location.DistrictAction == null || dashboard.location.DistrictAction == undefined) {
	dashboard.location.DistrictAction = new Object();
}

dashboard.location.DistrictAction.init = function(options) {
    var stateSelect = dashboard.extract.obj(options);
    var districtSelect = dashboard.extract.obj(options,2);
    var productSelect = dashboard.extract.obj(options,3);
    var type = "type" in options ? options.type : "default";
    var exclude = "exclude" in options ? options.exclude : null;
    var loadAll = "loadAll" in options && productSelect === null ? options.loadAll : false;
    
    var render = function(list, state) {
        if (loadAll) {
            if (exclude === null || exclude != "Y") {
                for (var i = 0; i < list.length; i++) {
                    dashboard.html.addOption( { obj : districtSelect, value : list[i][0] + "$sep;" + list[i][2], label : list[i][1], type : type, cssClass : state } );
                }
            } else {
                for (var i = 0; i < list.length; i++) {
                    dashboard.html.addOption( { obj : districtSelect, value : list[i][0], label : list[i][1], type : type, cssClass : state } );
                }
            }
        } else {        
            if (exclude === null || exclude != "Y") {
                for (var i = 0; i < list.length; i++) {
                    dashboard.html.addOption( { obj : districtSelect, value : list[i][0] + "$sep;" + list[i][2], label : list[i][1], type : type } );
                }
            } else {
                for (var i = 0; i < list.length; i++) {
                    dashboard.html.addOption( { obj : districtSelect, value : list[i][0], label : list[i][1], type : type } );
                }
            }
        }
    }
    
    var createStateChange = function() {
        stateSelect.change(function () {
            var option = $(this).find("option:selected").val();
            var option2 = null;
            if (loadAll) {
                districtSelect.find(".option").hide();
                if (option !== "") {
                    districtSelect.find("." + option).show();
                }
                dashboard.call(options,null);
            } else {
                if (productSelect !== null) {
                    option2 = productSelect.val();
                }
                
                if ("exclude" in options) {
                    option3 = "Y";
                }
                
                dashboard.json( 
                    { className : "com.xperts.dashboard.action.location.DistrictAction",
                      state : option,
                      product : option2,
                      exclude : exclude }, 
                    function(data) {
                        dashboard.call(options,data, "preEmpty");
                        var list = eval(data);                  
                        districtSelect.empty();
                        dashboard.call(options,data, "preLoad");        
                        render(list);
                        dashboard.call(options,data);
                    });
            }
        }); 
    }
    
    if (loadAll) {
        var count = stateSelect.find(".option").size();
        var currentNum = 0;
        stateSelect.find(".option-val").each(function() {
            var state = $(this).val();
            if (state !== "") {
                dashboard.json( 
                    { className : "com.xperts.dashboard.action.location.DistrictAction",
                      state : state,
                      exclude : exclude }, 
                    function(data) {
                        var list = eval(data);                        
                        render(list, state);
                        currentNum++;
                        if (currentNum == count) {
                            createStateChange();
                            dashboard.call(options,null,"postLoad");                    
                        }                    
                    });
            } else {
                currentNum++;
            }
        });
    } else {    
        if (productSelect !== null) {
            productSelect.change(function() {
                var option = $(this).find("option:selected").val();
                var option2 = stateSelect.find("option:selected").val();
                dashboard.json( 
                    { className : "com.xperts.dashboard.action.location.DistrictAction",
                      state : option2,
                      product : option }, 
                    function(data) {
                        dashboard.call(options,data, "preEmpty");
                        var list = eval(data);                  
                        districtSelect.empty();
                        dashboard.call(options,data, "preLoad");        
                        render(list);
                        dashboard.call(options,data);
                    });           
            });
        } 
        createStateChange();   
    }  
}