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);
        }
  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');
    }
}

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');
}

function switchSearchForm(now) {
    $('search_result_outer').hide();
    
    switch (now) {
    case 'addresses':
        $('search_form_address').show();
        $('search_form_parcel').hide();
        break;
    case 'parcels':
        $('search_form_address').hide();
        $('search_form_parcel').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);
        }
    }
}

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

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

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

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_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();

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

function clearCity() {
    $('search_address_dir_city').selectedIndex = 0;
    $('search_parcel_dir_city').selectedIndex = 0;

    $('search_address_street_outer').hide();
    //$('search_address_number_outer').hide();
    $('search_parcel_number_outer').hide();

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

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 = '';
}

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

