$(document).ready(function() {    
    if (!window.inArray) {
        function inArray(what, where) {
           for (var i = 0; i < where.length; i++) {
                if (what == where[i]) {
                    return true;
                }
            }
            return false;
        }
    }
    
    /**
     * Single location selection component
     */
    var countriesDropDownSelector = $(".singleLocationSelector tbody tr:eq(0) div select");

    var regionsDropDownSelector = $(".singleLocationSelector tbody tr:eq(1) div select");
    var regionsDropDownSelectorLable = regionsDropDownSelector.parent().find("label:eq(0)");

    var locationsDropDownSelector = $(".singleLocationSelector tbody tr:eq(2) div select");
    var locationsDropDownSelectorLable = locationsDropDownSelector.parent().find("label:eq(0)");

    var regionCurrentValueSelector = $(".singleLocationSelector tbody tr:eq(3) input:eq(0)");
    var locationCurrentValueSelector = $(".singleLocationSelector tbody input:eq(1)");

    var singleDefaultOptionValue = $(".singleLocationSelector tbody tr:eq(3) input:eq(2)").val();
    var singleDefaultOptionText = $(".singleLocationSelector tbody tr:eq(3) input:eq(3)").val();
    
    countriesDropDownSelector.change(function() {
        var countryId = $(this).val();
        if (countryId == "0") {
            /**
             * Clean and hide regions and locations lists
             */
            regionsDropDownSelector.find("option").remove();
            regionsDropDownSelector.parent().parent().parent().hide();
            locationsDropDownSelector.find("option").remove();
            locationsDropDownSelector.parent().parent().parent().hide();
            return;
        }
        $.post("ajax",
               {
                   func: "loadRegionsList",
                   country_id: countryId
               },
               function(data){
                   var len = data.length;
                   if (len > 0) {
                       var regionId = regionCurrentValueSelector.val();
                       var options = '<option value="' + singleDefaultOptionValue + '">' + singleDefaultOptionText + '</option>';
                       for (var i = 0; i < data.length; i++) {
                           if (data[i]['id'] == regionId) {
                               options += '<option value="' + data[i]['id']+ '" selected="yes">';
                           } else {
                               options += '<option value="' + data[i]['id']+ '">';
                           }
                           options += data[i]['title'] + '</option>';
                       }
                       regionsDropDownSelector.html(options);
                       regionsDropDownSelectorLable.html(singleDefaultOptionText);
                       regionsDropDownSelector.parent().parent().parent().show();
                   } else {
                       regionsDropDownSelector.find("option").remove();
                       regionsDropDownSelector.parent().parent().parent().hide();
                   }
                   regionsDropDownSelector.change();
               },
               "json"
        );
    });
    regionsDropDownSelector.change(function() {
        var regionId = $(this).val();
        if (regionId == "0") {
            locationsDropDownSelector.find("option").remove();
            locationsDropDownSelector.parent().parent().parent().hide();
            return;
        }
        $.post("ajax",
               {
                   func: "loadLocationsList",
                   region_id: regionId
               },
               function(data){
                   var len = data.length;
                   if (len > 0) {
                       var mainLocationId = locationCurrentValueSelector.val();
                       var options = '<option value="' + singleDefaultOptionValue + '">' + singleDefaultOptionText + '</option>';
                       for (var i = 0; i < data.length; i++) {
                           if (data[i]['id'] == mainLocationId) {
                               options += '<option value="' + data[i]['id']+ '" selected="yes">';
                           } else {
                               options += '<option value="' + data[i]['id']+ '">';
                           }
                           options += data[i]['title'] + '</option>';
                       }
                       locationsDropDownSelector.html(options);
                       locationsDropDownSelectorLable.html(singleDefaultOptionText);
                       locationsDropDownSelector.parent().parent().parent().show();
                   } else {
                       locationsDropDownSelector.find("option").remove();
                       locationsDropDownSelector.parent().parent().parent().hide();
                   }
                   locationsDropDownSelector.change();
               },
               "json"
        );
    });
    countriesDropDownSelector.change();

    /**
     * Single region selection component
     */
    var countriesDropDownSelector1 = $("div.singleRegionSelector > div:eq(0) > div.formFieldCon select");
    var regionsDropDownSelector1 = $("div.singleRegionSelector > div:eq(1) > div.formFieldCon select");

    var regionCurrentValueSelector1 = $("div.singleRegionSelector input:eq(0)");

    var singleDefaultOptionValue1 = $("div.singleRegionSelector input:eq(1)").val();
    var singleDefaultOptionText1 = $("div.singleRegionSelector input:eq(2)").val();
    countriesDropDownSelector1.change(function() {
        var countryId = $(this).val();
        if (countryId == "0") {
            regionsDropDownSelector1.find("option").remove();
            regionsDropDownSelector1.parent().parent().hide();
            
            return;
        }
        $.post("ajax",
               {
                   func: "loadRegionsList",
                   country_id: countryId
               },
               function(data){
                   var len = data.length;
                   if (len > 0) {
                       var regionId = regionCurrentValueSelector1.val();
                       var options = '<option value="' + singleDefaultOptionValue1 + '">' + singleDefaultOptionText1 + '</option>';
                       for (var i = 0; i < data.length; i++) {
                           if (data[i]['id'] == regionId) {
                               options += '<option value="' + data[i]['id']+ '" selected="yes">';
                           } else {
                               options += '<option value="' + data[i]['id']+ '">';
                           }
                           options += data[i]['title'] + '</option>';
                       }
                       regionsDropDownSelector1.html(options);
                       regionsDropDownSelector1.parent().parent().show();
                   } else {
                       regionsDropDownSelector1.find("option").remove();
                       regionsDropDownSelector1.parent().parent().hide();
                   }
               },
               "json"
        );
    });
    countriesDropDownSelector1.change();

    /**
     * Locations multiple selection
     */
    var countriesListBoxSelector = $(".multiLocationSelector tbody tr:eq(0) div select");
    var regionsListBoxSelector = $(".multiLocationSelector tbody tr:eq(1) div select");
    var locationsListBoxSelector = $(".multiLocationSelector tbody tr:eq(2) div select");

    var regionsCurrentValueSelector = $(".multiLocationSelector tbody input:eq(0)");
    var locationsCurrentValueSelector = $(".multiLocationSelector tbody input:eq(1)");

    var multiDefaultOptionValue = $(".multiLocationSelector  tbody input:eq(2)").val();
    var multiDefaultOptionText = $(".multiLocationSelector tbody input:eq(3)").val();
    countriesListBoxSelector.change(function() {
        var countryId = $(this).val();
        if (countryId == "0") {
            /**
             * Clean and hide regions and locations lists
             */
            regionsListBoxSelector.find("option").remove();
            regionsListBoxSelector.parent().parent().parent().hide();
            locationsListBoxSelector.find("option").remove();
            locationsListBoxSelector.parent().parent().parent().hide();
            return;
        }
        $.post("ajax",
               {
                   func: "loadRegionsList",
                   country_id: countryId
               },
               function(data){
                   var len = data.length;
                   if (len > 0) {
                       var regionIds = regionsCurrentValueSelector.val().split(",");
                       var options = "";
                       for (var i = 0; i < data.length; i++) {
                           if (inArray(data[i]['id'], regionIds)) {
                               options += '<option value="' + data[i]['id']+ '" selected="yes">';
                           } else {
                               options += '<option value="' + data[i]['id']+ '">';
                           }
                           options += data[i]['title'] + '</option>';
                       }
                       regionsListBoxSelector.html(options);
                       regionsListBoxSelector.parent().parent().parent().show();
                   } else {
                       regionsListBoxSelector.find("option").remove();
                       regionsListBoxSelector.parent().parent().parent().hide();
                   }
                   regionsListBoxSelector.change();
               },
               "json"
        );
    });
    regionsListBoxSelector.change(function(){
        var regionIds = $(this).val();
        if (regionIds == []) {
            locationsListBoxSelector.find("option").remove();
            locationsListBoxSelector.parent().parent().parent().hide();
            return;
        }
        $.post("ajax",
               {
                   'func': "loadLocationsList",
                   'region_id[]': regionIds
               },
               function(data){
                   var len = data.length;
                   if (len > 0) {
                       var locationIds = $(locationsCurrentValueSelector).val().split(",");
                       var options = "";
                       for (var i = 0; i < data.length; i++) {
                           if (inArray(data[i]['id'], locationIds)) {
                               options += '<option value="' + data[i]['id']+ '" selected="yes">' + data[i]['title'] + '</option>';
                           } else {
                               options += '<option value="' + data[i]['id']+ '">' + data[i]['title'] + '</option>';
                           }
                       }
                       locationsListBoxSelector.html(options);
                       locationsListBoxSelector.parent().parent().parent().show();
                   } else {
                       locationsListBoxSelector.find('option').remove();
                       locationsListBoxSelector.parent().parent().parent().hide();
                   }
               },
               "json"
        );
    });
    countriesListBoxSelector.change();

    var selectAllLocationsLink = $(".multiLocationSelector tbody tr:eq(3) a");
    selectAllLocationsLink.click(function() {
        locationsListBoxSelector.find('option').attr('selected', "yes");
        return false;
    });
});
