AjaxPlugins.KogisSearch = {
    handleResponse: function(pluginOutput) {
        if (pluginOutput.htmlCode.search_results) {
            $('ivs_search_result_div').innerHTML = pluginOutput.htmlCode.search_results;
        }
        if (pluginOutput.variables.search_result_count) {
            $('ivs_search_result_count').innerHTML = "(" + pluginOutput.variables.search_result_count +")";
        }

        if (pluginOutput.htmlCode.cities) {
            populateSelect('search_addresses_city', pluginOutput.htmlCode.cities);
            $('search_addresses_city').style.visibility = "visible";
        }

        if (pluginOutput.htmlCode.streets) {
            populateSelect('search_addresses_street', pluginOutput.htmlCode.streets);
            $('search_addresses_street').style.visibility = "visible";
        }
    }
};


AjaxPlugins.KogisSearch.Actions = {};
AjaxPlugins.KogisSearch.Actions.bySwissnames = {
    buildPostRequest: function(argObject) {
        return 'searchname=swissnames&searchpost=1&lstName=' + argObject.search_type +
        '&txtName=' + argObject.search_text;
    }
}

AjaxPlugins.KogisSearch.Actions.byCity = {
    buildPostRequest: function(argObject) {
        return 'searchname=city&searchpost=1&lstName=' + argObject.lstName +
        '&txtName=' + argObject.txtName + '&mode=' + argObject.mode;
    }
}

AjaxPlugins.KogisSearch.Actions.byAddresses = {
    buildPostRequest: function(argObject) {
        return 'searchname=addresses&searchpost=1&canton=' + argObject.canton +
        '&city=' + argObject.city + '&street=' + argObject.street +
        '&mode=' + argObject.mode;
    }
}


AjaxPlugins.KogisSearch.Actions.fetchCities = {
    buildPostRequest: function(argObject) {
        return 'searchname=foobar&canton=' + argObject.canton;
    },
    onBeforeAjaxCall: function(argObject) {
        $('search_addresses_street').style.visibility = "hidden";
    }
}

AjaxPlugins.KogisSearch.Actions.fetchStreets = {
    buildPostRequest: function(argObject) {
        return 'searchname=foobar&city=' + argObject.city;
    }
}

function submitSwissnames(event) {
    if (event.type == "click") {
        CartoWeb.trigger('KogisSearch.bySwissnames', null,
                {search_type: $F('search_swissnames_search_type'),
            search_text: $F('search_swissnames_text')});
    } else {
        if (event.keyCode == Event.KEY_RETURN) {
            CartoWeb.trigger('KogisSearch.bySwissnames', null,
                    {search_type: $F('search_swissnames_search_type'),
                search_text: $F('search_swissnames_text')});
	    Event.stop(event);
        }
    }
}

function submitCity(event) {
  
    if (event.type == "click") {
        CartoWeb.trigger('KogisSearch.byCity', null,
            {mode: 'keyword',
                   lstName: $F('search_city_search_type'),
                   txtName: $F('search_city_text')});
    } else {
        if (event.keyCode == Event.KEY_RETURN) {
            CartoWeb.trigger('KogisSearch.byCity', null,
            {mode: 'keyword',
                   lstName: $F('search_city_search_type'),
                   txtName: $F('search_city_text')});
            Event.stop(event);
        }
    }
}

function recenterXY(x, y, scale) {
    $('recenter_doit').value = 1;
    $('recenter_x').value = x;
    $('recenter_y').value = y;
    $('recenter_scale').value = scale;
    $('show_crosshair').value = 'on';

    CartoWeb.trigger('Location.Recenter');

    $('recenter_x').value = '';
    $('recenter_y').value = '';

    return false;
}

function recenterId(layer, ids) {

    $('id_recenter_layer').value = layer;
    $('id_recenter_ids').value = ids;

    CartoWeb.trigger('Location.Recenter');

    $('id_recenter_layer').value = '';
    $('id_recenter_ids').value = '';

    return false;
}

function clearSelect(element) {
    var e = $(element);

    while (e.childNodes.length > 0) {
        e.removeChild(e.childNodes[0]);
    }
}

function populateSelect(element, content) {
    var element = $(element);
    var options = eval('(' + content + ')');
    var indexSelected = 0;

    clearSelect(element);

    options.each(function (o, i) {
        var opt = document.createElement('option');
        opt.value = o.code;
        opt.text = o.value;

        opt.selected = o.selected ? 'selected' : '';  // firefox
        indexSelected = o.selected == 1 ? i : 0;

        // IE HACK
        try {
            element.add(opt);        // IE
        } catch (e) {
            element.add(opt, null);  // W3C
        }
    });
    
    //element.selectedIndex = indexSelected; // dont work ...
}

