/* AMEXSearchForm
 * Controls and stores the information about the search form
 */
/*********************************************************************************
 *
 *      DO NOT EDIT BELOW THIS LINE
 *
 *********************************************************************************/
var AMEXSearchForm = Class.create({
	initialize: function() {
		// search radius information
		this.radius;
		this.kmInMiles;
		this.radiusOptions = { 'mi': { r1:1, r2:5, r3:10, r4:25, r5:50 }};
		this.radiusUnits = 'mi';
		this.updateRadiusSelect(this.radiusUnits);
		$('opt_radius').observe('change', function(event) {
		    this.radius = Number($('opt_radius').getValue());
		}.bind(this));

		this.setFormFromCurrent(false);
        if($('SRHeading')) {
            $('SRHeading').select('button').invoke('observe', 'click', function(event) {
                event.stop();
            });
        }
        if($('ReviseSearch').hasClassName('directions')) {
            $('ReviseSearch').select('button').invoke('observe', 'click', function(event) {
                event.stop();
            });
     		$('ReviseSearch').select('input').invoke('observe', 'keypress', function(event) {
    			if (event.keyCode == Event.KEY_RETURN) {
    			    event.stop();
    				document.fire('search:submit');
    			}
    		});
       } else {
    		$('ReviseSearch').select('input').invoke('observe', 'keypress', function(event) {
    			if (event.keyCode == Event.KEY_RETURN) {
    			    if(!$('ReviseSearch').hasClassName('landing')) {
    			        event.stop();
    			    }
    				document.fire('search:submit');
    			}
    		});
        }
        $('ReviseSearch').select('button').invoke('observe', 'click', function(event) {
		    document.fire('search:submit');
		});
	},
	setFormFromCurrent: function(clear) {
		$('searchSingle').setStyle({ display: 'block' });
		if(clear) {
			$$('#searchSingle input').invoke('setValue', '');
		}		
	},
	getFormValues: function() {
		return Form.serializeElements(Form.getInputs($('searchSingle')));
	},
	getRadiusInMiles: function() {
		if(this.radiusUnits == 'km') {
			return Math.round(this.radius/1.609344);
		} else {
			return this.radius;
		}
		//return this.radius * ((this.radiusUnits == 'km') ? this.kmInMiles : 1);
	},
	getMilesInKm: function(distance) {
		return Math.round((distance*1.609344)*10)/10;
	},
	getRadiusOptionsAsHTML: function(unit) {
		var str = '';
		var obj = this.radiusOptions[unit];
		for (var key in obj) { str += '<option value="'+obj[key]+'">' + obj[key] + ' miles</option>'; }
		return str;
	},
	updateRadiusSelect: function(unit) {
		$('opt_radius').stopObserving('change');
		$('opt_radius').replace(
			'<select id="opt_radius" name="opt_radius">' + this.getRadiusOptionsAsHTML(unit) + '</select>'
		);
		$('opt_radius').setValue(this.radiusOptions[this.radiusUnits]['r3']);
		this.radius = this.radiusOptions[this.radiusUnits]['r3'];
		$('opt_radius').observe('change', function(event) {
		    this.radius = Number($('opt_radius').getValue());
		}.bind(this));
	},
	isValidSearch: function() {
        if($$('.saddress')[0].getValue().blank()) {
            return false;
        } else { return true; }
	},
	setValuesFromQuery: function(query) {
		g_query = query;
		this.setFormFromCurrent(true);
		
        var singleInput = '';
        if(query.getStreet()) singleInput += query.getStreet()+', ';
        if(query.getCity()) singleInput += query.getCity()+', ';
        if(query.getState()) singleInput += query.getState()+' ';
        if(query.getPostalCode()) singleInput += query.getPostalCode();

        $$('.saddress')[0].setValue(singleInput);
	},
	setValuesFromParams: function(query) {
		this.setFormFromCurrent(true);
		// each query key must match the id of the input field
		var queryKeys = Object.keys(query);
		queryKeys.each(function(key) {
			if($(key)) { $(key).value = query[key]; }
		});
	},
    getSearchRequest: function() {
      var resultsfor, sstreet;

      sstreet = $$('.saddress')[0].getValue();

      if(sstreet.toLowerCase() == 'nyc' || sstreet.toLowerCase() == 'new york') {
      	sstreet = 'new york city';
      }

      var address = new MQSingleLineAddress();
      address.setAddress(sstreet);
      address.setCountry('USA');

      if(sstreet != '') { sstreet += ', '; }

      resultsfor = sstreet+'USA';
      return { address: address, resultstring: resultsfor }
    }
});

AMEXSearchForm.init = function() { AMEXSearchForm.instance = new AMEXSearchForm(); };
document.observe('dom:loaded', AMEXSearchForm.init);

