/* 
 * AddressValidator prüft angegebenen Adressdaten auf Existenz und
 * kann zu übergebenen informationen möglichen Treffer liefern
 * @author Viktor Gumberg
 * @date 17.03.2010
 */

if(typeof brodos.addressvalidator === 'undefined') brodos.addressvalidator = {};
Ext.namespace("brodos.addressvalidator");

/*
 * @name  AddressValidator
 * @options configuration type Object
 * @configuration string gatewayURL : URL zur Schnittstelle (darf nicht leer sein)
 * @configuration object headerObject: Request Header Optionen (optional)
 * @example 	var validator = new brodos.address.AddressValidator({
		gatewayURL: brodos.config.get('WDIR') + '/index.php/mpath/services_deliveryaddresses',
		headerObject:{}
	});
 */
brodos.address.DHLAddressHandler = function (configuration)
{
    this.addEvents('requestsuccess');
    this.addEvents('requesterror');
    this.gatewayURL = configuration.gatewayURL;
    this.headerObject = Ext.isObject(configuration.headerObject) ? configuration.headerObject : {};
    this.cityTid = '';
    this.zipTid = '';
    this.districtTid = '';
    this.streetTid = '';
    this.housenoTid = '';
    this.isvalidTid = '';
    this.checkcityTid = '';
    this.checkzipTid = '';
    this.checkdistrictTid = '';
    this.checkstreetTid = '';
    this.checkhousenoTid = '';
    /*
     * @augments
     * @param paramObject: configurationsobject
     * @param self : Referenz auf sich selbst
     * @example startGatewayCommunication(paramsObject,this)
     */
        function startGatewayCommunication(paramsObject,self){
            try{
                var errormessage = paramsObject.noHitsError;
                var requestid ;
                delete(paramsObject.noHitsError);

                if(paramsObject.requestid != ""){
                    Ext.Ajax.abort(paramsObject.requestid);
                }
                
                requestid = Ext.Ajax.request({
                   url: self.gatewayURL,
                   success: function(response,b)
                            {
                                var result = Ext.decode(response.responseText);

                                if(result.status != '1' && result.status != '2' || Ext.isBoolean(result.status)){
                                    self.fireEvent('requestsuccess', result);
                                }
                                else if(result.status == 'ERROR'){
                                    self.fireEvent('requesterror', result);
                                    }
                                else{
                                    self.fireEvent('requestsuccess', errormessage);
                                }
                            },
                   failure: function (){self.fireEvent('requesterror',{status:'ERROR', msg:'Request Error pleas check the gatewayconnection!'});},
                   headers: self.headerObject,
                   params : paramsObject,
                   autoAbort:true
                });
                return requestid.tId;
            }
            catch(error){
                return error;
            }
        }

        /*
         * @name checkStreet
         * @configuration object
         */
        this.checkStreet = function (configuration){
            var config = {};
            config.action ='checkstreet';
            config.noHitsError = false;
            var count = 0;
            var important = 0;
            if (configuration.streetname != '' && configuration.streetname != null && configuration.streetname != 'undefined'){
                config.streetname = configuration.streetname;
                important++;
            }
            else this.fireEvent('requesterror', {success:false, msg:'no streetname is given'});
            if (configuration.zipcode != '' && configuration.zipcode != null && configuration.zipcode != 'undefined'){
                config.zipcode = configuration.zipcode;
                important++;
            }
            if (configuration.city != '' && configuration.city != null && configuration.city!= 'undefined'){
                config.city= configuration.city;
                important++;
            }
            if (configuration.district != '' && configuration.district != null && configuration.district != 'undefined'){
                config.district = configuration.district;
            }
            if (configuration.houseno != '' && configuration.houseno != null && configuration.houseno != 'undefined'){
                config.houseno = configuration.houseno;
            }
            if (configuration.alort != '' && configuration.alort != null && configuration.alort != 'undefined'){
                config.alort = configuration.alort;
                important++;
            }
            if(important > 1){
                config.requestid = this.checkstreetTid;
                this.checkstreetTid = startGatewayCommunication(config,this);
            }
            return this.fireEvent('requesterror', {success:false, msg:'not enough imortant data are given to check the street'});
        }
        this.checkZipcode = function (configuration){
            var config = {};
            config.action ='checkzipcode';
            config.noHitsError = false;
            var count = 0;
            var important = 0;
            if (configuration.streetname != '' && configuration.streetname != null && configuration.streetname != 'undefined'){
                config.streetname = configuration.streetname;
                count++;
                important++;
            }
            if (configuration.zipcode != '' && configuration.zipcode != null && configuration.zipcode != 'undefined'){
                config.zipcode = configuration.zipcode;
                count++;
                important++;
            }
            else return false;
            if (configuration.city != '' && configuration.city != null && configuration.city!= 'undefined'){
                config.city= configuration.city;
                count++;
                important++;
            }
            if (configuration.district != '' && configuration.district != null && configuration.district != 'undefined'){
                config.district = configuration.district;
                count++;
            }
            if (configuration.houseno != '' && configuration.houseno != null && configuration.houseno != 'undefined'){
                config.houseno = configuration.houseno;
                count++;
            }
            if(count > 1 && important > 1){
                config.requestid = this.checkzipTid;
                this.checkzipTid = startGatewayCommunication(config,this);
            }
            return false;
        }
        this.checkCity = function(configuration){
            var config = {};
            config.action ='checkcity';
            config.noHitsError = false;
            var count = 0;
            var important = 0;
            if (configuration.streetname != '' && configuration.streetname != null && configuration.streetname != 'undefined'){
                config.streetname = configuration.streetname;
                count++;
                important++;
            }
            if (configuration.zipcode != '' && configuration.zipcode != null && configuration.zipcode != 'undefined'){
                config.zipcode = configuration.zipcode;
                count++;
                important++;
            }
            if (configuration.city != '' && configuration.city != null && configuration.city!= 'undefined'){
                config.city= configuration.city;
                count++;
                important++;
            }
            else return false;
            if (configuration.district != '' && configuration.district != null && configuration.district != 'undefined'){
                config.district = configuration.district;
                count++;
            }
            if (configuration.houseno != '' && configuration.houseno != null && configuration.houseno != 'undefined'){
                config.houseno = configuration.houseno;
                count++;
            }
            if(count > 1 && important > 1){
                config.requestid = this.checkcityTid;
                this.checkcityTid = startGatewayCommunication(config,this);
            }
            return false;
        }
        this.checkDistrict = function (configuration){
            var config = {};
            config.action ='checkdistrict';
            config.noHitsError = false;
            var count = 0;
            var important = 0;
            if (configuration.streetname != '' && configuration.streetname != null && configuration.streetname != 'undefined'){
                config.streetname = configuration.streetname;
                count++;
                important++;
            }
            if (configuration.zipcode != '' && configuration.zipcode != null && configuration.zipcode != 'undefined'){
                config.zipcode = configuration.zipcode;
                count++;
                important++;
            }
            if (configuration.city != '' && configuration.city != null && configuration.city!= 'undefined'){
                config.city= configuration.city;
                count++;
                important++;
            }
            if (configuration.district != '' && configuration.district != null && configuration.district != 'undefined'){
                config.district = configuration.district;
                count++;
            }
            else return false;
            if (configuration.houseno != '' && configuration.houseno != null && configuration.houseno != 'undefined'){
                config.houseno = configuration.houseno;
                count++;
            }
            if(count > 1 && important > 1){
                config.requestid = this.checkdistrictTid;
                this.checkdistrictTid = startGatewayCommunication(config,this);
            }
            return false;
        }
        this.checkHouseno = function (configuration){
            var config = {};
            config.action ='checkhouseno';
            config.noHitsError = false;
            var count = 0;
            var important = 0;
            if (configuration.streetname != '' && configuration.streetname != null && configuration.streetname != 'undefined'){
                config.streetname = configuration.streetname;
                count++;
                important++;
            }
            if (configuration.zipcode != '' && configuration.zipcode != null && configuration.zipcode != 'undefined'){
                config.zipcode = configuration.zipcode;
                count++;
                important++;
            }
            if (configuration.city != '' && configuration.city != null && configuration.city!= 'undefined'){
                config.city= configuration.city;
                count++;
                important++;
            }
            if (configuration.district != '' && configuration.district != null && configuration.district != 'undefined'){
                config.district = configuration.district;
                count++;
            }
            if (configuration.houseno != '' && configuration.houseno != null && configuration.houseno != 'undefined'){
                config.houseno = configuration.houseno;
                count++;
            }
            else return false;
            if(count > 1 && important > 1){
                config.requestid = this.checkhousenoTid;
                this.checkhousenoTid = startGatewayCommunication(config,this);
            }
            return false;
        }
        this.isValidAddress = function (configuration){
            var config = {};
            config.action ='checkisvalidaddress';
            config.noHitsError = false;
            var count = 0;
            var important = 0;
            if (configuration.streetname != '' && configuration.streetname != null && configuration.streetname != 'undefined'){
                config.street = configuration.streetname;
                count++;
                important++;
            }
            if (configuration.zipcode != '' && configuration.zipcode != null && configuration.zipcode != 'undefined'){
                config.zipcode = configuration.zipcode;
                count++;
                important++;
            }
            else return false;
            if (configuration.city != '' && configuration.city != null && configuration.city!= 'undefined'){
                config.city= configuration.city;
                count++;
                important++;
            }
            else return false;
            if (configuration.district != '' && configuration.district != null && configuration.district != 'undefined'){
                config.district = configuration.district;
                count++;
            }
            if (configuration.houseno != '' && configuration.houseno != null && configuration.houseno != 'undefined'){
                config.houseno = configuration.houseno;
                count++;
            }
            if(count > 1 && important > 1){
                config.requestid = this.isvalidTid;
                this.isvalidTid = startGatewayCommunication(config,this);
            }
            return false;
        }
        this.getStreetFacility = function (configuration){
            var config = {};
            config.action ='getstreetfacility';
            config.noHitsError ={success:false, msg:'no hits for street name like \''+ configuration.streetname +'\' are found.'};
            var important = 0;
            if (configuration.streetname != '' && configuration.streetname != null && configuration.streetname != 'undefined'){
                config.streetname = configuration.streetname;
                important++;
            }
            else this.fireEvent('requesterror', {success:false, msg:'no street name is given.'});
            if (configuration.zipcode != '' && configuration.zipcode != null && configuration.zipcode != 'undefined'){
                config.zipcode = configuration.zipcode;
                important++;
            }
            if (configuration.city != '' && configuration.city != null && configuration.city != 'undefined'){
                config.location = configuration.city;
                count++;
                important++;
            }
            if (configuration.district != '' && configuration.district != null && configuration.district != 'undefined'){
                config.district = configuration.district;
            }
            if (configuration.houseno != '' && configuration.houseno != null && configuration.houseno != 'undefined'){
                config.houseno = configuration.houseno;
            }
            if (configuration.alort != '' && configuration.alort != null && configuration.alort != 'undefined'){
                config.alort = configuration.alort;
                important++;
            }
            if(important > 1){
                config.requestid = this.streetTid;
                this.streetTid = startGatewayCommunication(config,this);
            }
            else this.fireEvent('requesterror', {success:false, msg:'not enough imortant data are given to check the facilities'});
        }
        this.getZipFacility = function(configuration){
            var config = {};
            config.action ='getzipfacility';
            config.noHitsError = {success:false, msg:'no hits for zipcode like \''+ configuration.zipcode +'\' are found'};
            var count = 0;
            var important = 0;
            if (configuration.streetname != '' && configuration.streetname != null && configuration.streetname != 'undefined'){
                config.streetname = configuration.streetname;
                count++;
                important++;
            }
            if (configuration.maxcount != '' && configuration.maxcount != null && configuration.maxcount != 'undefined'){
                config.maxcount = configuration.maxcount;
            }
            if (configuration.zipcode != '' && configuration.zipcode != null && configuration.zipcode != 'undefined'){
                config.zipcode = configuration.zipcode;
                count += 2;
                important += 2;
            }
            else this.fireEvent('requesterror', {success:false, msg:'no zipcode is given'});
            if (configuration.city != '' && configuration.city != null && configuration.city != 'undefined'){
                config.location = configuration.city;
                count++;
                important++;
            }
            if (configuration.district != '' && configuration.district != null && configuration.district != 'undefined'){
                config.district = configuration.district;
                count++;
            }
            if (configuration.houseno != '' && configuration.houseno != null && configuration.houseno != 'undefined'){
                config.houseno = configuration.houseno;
                count++;
            }
            if(count > 1 && important > 1){
                config.requestid = this.zipTid;
                this.zipTid = startGatewayCommunication(config,this);
            }
            else this.fireEvent('requesterror', {success:false, msg:'not enough imortant data are given to check the facilities'});
        }
        this.getCityFacility = function(configuration){
            var config = {};
            config.action ='getcityfacility';
            config.noHitsError = {success:false, msg:'no hits for city name like \''+ configuration.city +'\' are found'};
            var count = 0;
            var important = 0;
            if (configuration.maxcount != '' && configuration.maxcount != null && configuration.maxcount != 'undefined'){
                config.maxcount = configuration.maxcount;
            }
            if (configuration.streetname != '' && configuration.streetname != null && configuration.streetname != 'undefined'){
                config.streetname = configuration.streetname;
                count++;
                important++;
            }
            if (configuration.zipcode != '' && configuration.zipcode != null && configuration.zipcode != 'undefined'){
                config.zipcode = configuration.zipcode;
                count++;
                important++;
            }
            if (configuration.city != '' && configuration.city != null && configuration.city != 'undefined'){
                config.city = configuration.city;
                count = 10;
                important ++;
            }
            if (configuration.district != '' && configuration.district != null && configuration.district != 'undefined'){
                config.district = configuration.district;
                count++;
            }
            if (configuration.houseno != '' && configuration.houseno != null && configuration.houseno != 'undefined'){
                config.houseno = configuration.houseno;
                count++;
            }
            if(count > 1 && important > 0){
                config.requestid = this.cityTid;
                this.cityTid = startGatewayCommunication(config,this);
            }
            else this.fireEvent('requesterror', {success:false, msg:'not enough imortant data are given to check the facilities'});
        }
        this.getDistrictFacitlity = function(configuration){
        var config = {};
        config.action ='getdistrictfacitlity';
        config.noHitsError = {success:false, msg:'no hits for the district like \''+ configuration.district +'\' are found'};
        var count = 0;
        var important = 0;
        if (configuration.streetname != '' && configuration.streetname != null && configuration.streetname != 'undefined'){
            config.streetname = configuration.streetname;
            count++;
            important++;
        }
        if (configuration.zipcode != '' && configuration.zipcode != null && configuration.zipcode != 'undefined'){
            config.zipcode = configuration.zipcode;
            count++;
            important++;
        }
        if (configuration.city != '' && configuration.city != null && configuration.city != 'undefined'){
            config.city= configuration.city;
            count++;
            important++;
        }
        if (configuration.district != '' && configuration.district != null && configuration.district != 'undefined'){
            config.district = configuration.district;
            count++;
        }
        else this.fireEvent('error', {success:false, msg:'no district name ist given'});
        return;
        if (configuration.houseno != '' && configuration.houseno != null && configuration.houseno != 'undefined'){
            config.houseno = configuration.houseno;
            count++;
        }
        if(count > 1 && important > 1){
            config.requestid = this.districtTid;
            this.districtTid = startGatewayCommunication(config,this);
        }
        else this.fireEvent('error', {success:false, msg:'not enough imortant data are given to check the facilities'});
    }
}
Ext.extend(brodos.address.DHLAddressHandler, Ext.util.Observable,
{
   /*
    * @name startGatewayCommunication
    * @visibility private
    * @usability  diese Methode schickt die Anfragen an die Schnittstelle
    * @params object paramsObject: ein Objet mit den Werten die als Parameter an die Schnittstelle geschickt werden
    */
    initComponent : function (config)
    {
        brodos.address.DHLAddressHandler.superclass.initComponent.apply(this, arguments);
    }
});
