var dealsAC = function() {
	 var oDS = new YAHOO.util.XHRDataSource("dealsAC.do"); 
	 oDS.responseType = YAHOO.util.XHRDataSource.TYPE_JSON; 
     oDS.responseSchema = { 
  		resultsList : "RESPONSE.RESULTS",
        fields: [
			{ key: "NAME" },
			{ key: "ID" }
		] 
	 };
     oDS.maxCacheEntries = 5;  

     // Instantiate the AutoComplete
     var oAC = new YAHOO.widget.AutoComplete("whereTextBox", "whereContainer", oDS);
     oAC.prehighlightClassName = "yui-ac-prehighlight";
     oAC.useShadow = true;
     
     oAC.forceSelection = false;
     oAC.animVert = false;
     oAC.useIFrame = true; 
     oAC.maxResultsDisplayed = 20;
     
     var anywhere = "Anywhere";
     var anywhereCampaign = "";
     var noDeals = "No deals available.";
     var noDealSelected = "No deal selected.";
     var noDealsCampaign = -1;
     
     var lastValidDestination = anywhere;
     var lastValidCampaignId = anywhereCampaign;
     var destinationChanged = false;
     
     var destinationTextField = document.getElementById("whereTextBox");
     var campaignHiddenField = document.getElementById("where");
     
    oAC.itemSelectEvent.subscribe(function (e, args) {
    	campaignHiddenField.value = args[2][1];
        
    	lastValidDestination = destinationTextField.value;
        lastValidCampaignId = campaignHiddenField.value;	
    });  
    
    oAC.textboxFocusEvent.subscribe(function (e, args) {
    	normalColorScheme();
    	
    	campaignHiddenField.value = "";
        destinationTextField.value = "";
        destinationChanged = false;
    });
    
    oAC.textboxBlurEvent.subscribe(function (e, args) {
    	if (! destinationChanged) {
    		normalColorScheme();
    		//Set fields to last valid value
    		campaignHiddenField.value = lastValidCampaignId;
    	    destinationTextField.value = lastValidDestination;
    	}
    	if (campaignHiddenField.value == "" && destinationTextField.value != anywhere) {
    		destinationTextField.value = noDealSelected;
    		campaignHiddenField.value = noDealsCampaign;
    		errorColorScheme();
    	}
    	
    });
    
    oAC.unmatchedItemSelectEvent.subscribe(function(e, args) {
    	errorColorScheme();
    	
    	destinationTextField.value = noDeals;
    	campaignHiddenField.value = noDealsCampaign;
    	
        lastValidDestination = anywhere;
        lastValidCampaignId = anywhereCampaign;
    });
    
    oAC.textboxKeyEvent.subscribe(function(e, args) {
    	destinationChanged = true;
    });
    
    oAC.dataReturnEvent.subscribe(function (oSelf , sQuery ) {
    	if (sQuery[2].length == 0) {
    		errorColorScheme();
    	} else {
    		normalColorScheme();
    	}
    });
    
    
    var errorColorScheme = function() {
    	destinationTextField.style.color = "white";
    	destinationTextField.style.background = "red";
    };
    
    var normalColorScheme = function() {
    	destinationTextField.style.color = "black";
    	destinationTextField.style.background = "white";
    };
    
    var validate = function() {
    	if (destinationTextField.value == noDeals || destinationTextField.value == noDealSelected
    			|| campaignHiddenField.value == noDealsCampaign) {
    		alert("The destination you have chosen does not have any available deals.  Please choose a different destination.");
    		return false;
    	}
    	
    	return true;
    };
    
    return {
    	validate: validate,
    	oDS: oDS,
        oAC: oAC
    };
}();

