AjaxPlugins.AgSearch = {
    handleResponse: function(pluginOutput) {
        if (pluginOutput.htmlCode.result) {
            $('search_result').innerHTML =  pluginOutput.htmlCode.result;
            $('search_result_outer').show();
            
            if (pluginOutput.variables.type != 'no_recenter') {
                recenterOn(pluginOutput.variables.id, pluginOutput.variables.type);
            }
        }
        if (pluginOutput.htmlCode.streets) {
            $('search_address_street_outer').replace(pluginOutput.htmlCode.streets);
        }
        if (pluginOutput.htmlCode.numbers) {
            $('search_address_number_outer').replace(pluginOutput.htmlCode.numbers);
        }
        /* IE can not handle result with string length bigger than 260459. If the result is larger
        it is split in pieces and we need to join them */
        if (pluginOutput.variables.partqtt && pluginOutput.variables.partqtt > 1) {
          parcelsResult = '';
          for (var i = 0;i < pluginOutput.variables.partqtt;i++) {
              parcelTarget = 'parcels'+i;
              parcelsResult += pluginOutput.htmlCode[parcelTarget];
          }
          $('search_parcel_number_outer').replace(parcelsResult);

        }
        if (pluginOutput.htmlCode.parcels) {
            $('search_parcel_number_outer').replace(pluginOutput.htmlCode.parcels);
        }
        
        //POI Suche
        if (pluginOutput.htmlCode.kategorie) {
            $('search_poi_kategorie_outer').replace(pluginOutput.htmlCode.kategorie);
        }
				if (pluginOutput.htmlCode.rubrik) {
            $('search_poi_rubrik_outer').replace(pluginOutput.htmlCode.rubrik);
        }
        if (pluginOutput.htmlCode.rubrikObj) {
            $('search_poi_rubrikObj_outer').replace(pluginOutput.htmlCode.rubrikObj);
        }

    setTimeout('displayOrderFeatureIni()', 500);
    }
};

AjaxPlugins.AgSearch.Actions = {
    onAfterAjaxCall: function(argObject) {
        AjaxPlugins.Common.doClearWaitingMessage = true;
    }
};

AjaxPlugins.AgSearch.Actions.fetchStreets = {
    buildPostRequest: function(argObject) {
        return 'city=' + $F('search_address_dir_city');
    }
}

AjaxPlugins.AgSearch.Actions.fetchStreetNumbers = {
    buildPostRequest: function(argObject) {
        return 'city=' + $F('search_address_dir_city') + 
               '&street=' + $F('search_address_dir_street');
    }
}

AjaxPlugins.AgSearch.Actions.fetchAddress = {
    buildPostRequest: function(argObject) {
        return 'city=' + $F('search_address_dir_city') + 
               '&street=' + $F('search_address_dir_street') + 
               '&number=' + $F('search_address_dir_number');
    }
}

AjaxPlugins.AgSearch.Actions.searchAddressKeywords = {
    buildPostRequest: function(argObject) {
        return 'city=' + $F('search_address_key_city') +
               '&street=' + $F('search_address_key_street') + 
               '&number=' + $F('search_address_key_number');
    }
}

AjaxPlugins.AgSearch.Actions.fetchParcelNumbers = {
    buildPostRequest: function(argObject) {
        return 'city=' + $F('search_parcel_dir_city');
    }
}

AjaxPlugins.AgSearch.Actions.fetchParcel = {
    buildPostRequest: function(argObject) {
        return 'parcel=' + $F('search_parcel_dir_number') + 
               '&city=' + $F('search_parcel_dir_city');
    }
}

AjaxPlugins.AgSearch.Actions.searchParcelKeywords = {
    buildPostRequest: function(argObject) {
        return 'parcel=' + $F('search_parcel_key_number') +
               '&city=' + $F('search_parcel_key_city');
    }
}

//POI Suche
AjaxPlugins.AgSearch.Actions.fetchKategorie = {
    buildPostRequest: function(argObject) {
        return 'city=' + $F('search_poi_dir_city');
    }
}

//POI Suche
AjaxPlugins.AgSearch.Actions.fetchRubrik = {
    buildPostRequest: function(argObject) {
        return 'city=' + $F('search_poi_dir_city') + 
               '&kategorie=' + $F('search_poi_dir_kategorie');
    }
}

//POI Suche
AjaxPlugins.AgSearch.Actions.fetchRubrikObj = {
    buildPostRequest: function(argObject) {
        return 'city=' + $F('search_poi_dir_city') + 
               '&kategorie=' + $F('search_poi_dir_kategorie') +
				       '&rubrik=' + $F('search_poi_dir_rubrik');
    }
}

//POI Suche
AjaxPlugins.AgSearch.Actions.fetchPOI = {
    buildPostRequest: function(argObject) {
				return 'city=' + $F('search_poi_dir_city') + 
               '&kategorie=' + $F('search_poi_dir_kategorie') + 
               '&rubrik=' + $F('search_poi_dir_rubrik') +
							 '&rubrikObj=' + $F('search_poi_dir_rubrikObj');			 
    }
}

//POI Suche
AjaxPlugins.AgSearch.Actions.searchPOIKeywords = {
    buildPostRequest: function(argObject) {
        return 'poi_name=' + $F('search_poi_key');
    }
}

function recenterOn(ids, layer) {

    AjaxPlugins.Common.doClearWaitingMessage = false;

    $('id_recenter_layer').value = layer + '_recentering';
    $('id_recenter_ids').value = ids;
    $('query_layer').value = layer + '_recentering';
    $('query_select').value = ids;
    $('query_hilight').value = 1;
    $('query_return_table').value = 0;

    CartoWeb.trigger('Location.Recenter');

    $('id_recenter_layer').value = '';
    $('id_recenter_ids').value = '';
    $('query_layer').value = '';
    $('query_select').value = '';
    $('query_hilight').value = '';
    $('query_return_table').value = '';

    return false;
}

function recenterOnCity(type) {
    city = $('search_' + type + '_dir_city').value;
		city = city.split('#');
    city = city[0];
	
	recenterOn(city, 'gemeinden');
}

//POI Suche
function switchSearchForm(now) {
    $('search_result_outer').hide();
    
    switch (now) {
    case 'addresses':
        $('search_form_address').show();
        $('search_form_parcel').hide();
        $('search_form_poi').hide()
        break;
    case 'parcels':
        $('search_form_address').hide();
        $('search_form_parcel').show();
        $('search_form_poi').hide()
        break;
    case 'poi':
        $('search_form_address').hide();
        $('search_form_parcel').hide();
        $('search_form_poi').show();
        break;
    }
}

function switchSubSearchForm(type, now) {

    if ($('content_search_form_' + type + '_' + now).visible()) {
        return false;
    } else {
        $('content_search_form_' + type + '_' + now).show();
        $('label_' + type + '_' + now).addClassName('selected');
        if (now == 'dir') {
            now = 'key';
        } else {
            now = 'dir';
        }
        $('content_search_form_' + type + '_' + now).hide();
        $('label_' + type + '_' + now).removeClassName('selected');
    }
    return false;
}

function submitSearchKeywords(type, event) {
    
    eventName = 'AgSearch.search' + 
                type.substr(0, 1).toUpperCase() + 
                type.substr(1, type.length) +
                'Keywords';
    if (event.type == "click" || event.keyCode == Event.KEY_RETURN) {
        clearCity();
    
        city = $('search_' +  type + '_key_city');
        $('search_address_key_city').value = city.value;
        $('search_parcel_key_city').value = city.value;

        CartoWeb.trigger(eventName);        
        if (event.keyCode == Event.KEY_RETURN) {
            Event.stop(event);
        }
    }
}

//POI Suche
function submitSearchKeywordsPOI(type, event) {

    eventName = 'AgSearch.search' + 
                type.substr(0, type.length).toUpperCase() + 
                'Keywords';
    if (event.type == "click" || event.keyCode == Event.KEY_RETURN) {
        CartoWeb.trigger(eventName);        
        if (event.keyCode == Event.KEY_RETURN) {
            Event.stop(event);
        }
    }
}

function changeStreetNumber() {
    $('search_result_outer').hide(); 
    
    CartoWeb.trigger('AgSearch.fetchAddress');
}

function changeStreet() {
    $('search_result_outer').hide(); 
    $('search_address_number_outer').hide();
    
    CartoWeb.trigger('AgSearch.fetchStreetNumbers');
}

function changeParcelNumber() {
    $('search_result_outer').hide(); 
    
    CartoWeb.trigger('AgSearch.fetchParcel');
}

//POI Suche
function changeKategorie() {
    $('search_result_outer').hide();
		$('search_poi_rubrik_outer').hide(); 
    
    CartoWeb.trigger('AgSearch.fetchRubrik');
}

//POI Suche
function changeRubrik() {
    $('search_result_outer').hide(); 
    $('search_poi_rubrikObj_outer').hide();
    
    CartoWeb.trigger('AgSearch.fetchRubrikObj');
}

//POI Suche
function changeRubrikObj() {
    $('search_result_outer').hide(); 
    
    CartoWeb.trigger('AgSearch.fetchPOI');
}

//POI Suche
function changeCity(type) {
    select = $('search_' + type + '_dir_city');
    option = select.options[select.selectedIndex];
    
    $('search_address_dir_city').selectedIndex = select.selectedIndex;
    $('search_parcel_dir_city').selectedIndex = select.selectedIndex;
    $('search_poi_dir_city').selectedIndex = select.selectedIndex;
    $('search_address_key_city').value = option.firstChild.data;
    $('search_parcel_key_city').value = option.firstChild.data;
    
    if (select.selectedIndex > 0) {
        $('search_address_city_link').show();
        $('search_parcel_city_link').show();
		$('search_poi_city_link').show();

        CartoWeb.trigger('AgSearch.fetchStreets');
        CartoWeb.trigger('AgSearch.fetchParcelNumbers');
		CartoWeb.trigger('AgSearch.fetchKategorie');
    } else {
        
        clearCity();
    }
    
    $('search_result_outer').hide();
}

//POI Suche
function clearCity() {
    $('search_address_dir_city').selectedIndex = 0;
    $('search_parcel_dir_city').selectedIndex = 0;
		$('search_poi_dir_city').selectedIndex = 0;

    $('search_address_street_outer').hide();
    $('search_address_number_outer').hide();
    $('search_parcel_number_outer').hide();
		$('search_poi_kategorie_outer').hide();
		$('search_poi_rubrik_outer').hide();
		$('search_poi_rubrikObj_outer').hide();

    $('search_address_city_link').hide();
    $('search_parcel_city_link').hide();
		$('search_poi_city_link').hide();
}

//POI Suche
function clearPOI() {
    $('search_poi_dir_kategorie').selectedIndex = 0;
    $('search_poi_KategorieObj_outer').hide();
}

//POI Suche
function clearAll() {
    clearCity();

    $('search_result_outer').hide();     

    $('search_address_key_city').value = '';
    $('search_address_key_street').value = '';
    $('search_address_key_number').value = '';
    $('search_parcel_key_city').value = '';
    $('search_parcel_key_number').value = '';
	$('search_poi_key').value = '';
}

//POI Suche
function initializeCity() {
    if ($('search_address_dir_city').selectedIndex > 0) {
        CartoWeb.trigger('AgSearch.fetchStreets');
        CartoWeb.trigger('AgSearch.fetchParcelNumbers');
				CartoWeb.trigger('AgSearch.fetchKategorie');
    }
}
Event.observe(window, 'load', initializeCity, true);
