YUI().use('yui2-calendar','yui2-connection','yui2-container','yui2-autocomplete', 'yui2-button','io-base','json', 'node', function(Y) {
	var YAHOO = Y.YUI2;
	YAHOO.namespace("appt.req"); 
	var initPanelData = function(){
		var date = new Date();
		var year = date.getYear();
		if (year < 1900) {
			year = year + 1900;
		}
		var dateStr = (date.getMonth()+1) + "/" + date.getDate() + "/" + year;
		YAHOO.appt.req.cal1 = new YAHOO.widget.CalendarGroup("cal1","calendar", {PAGES:1, mindate:dateStr});
		YAHOO.appt.req.cal1.render();
		
		var phoneTypeFunctions = {
		 	success : function(id, o, args) {
			  	phoneTypeArray =(Y.JSON.parse(o.responseText)).data;
			   	var oDSLookupPhones = new YAHOO.util.XHRDataSource("/Scheduler/webservice/lookup/phoneTypes.php");
			   	oDSLookupPhones.responseType = YAHOO.util.XHRDataSource.TYPE_JSON;
		    	oDSLookupPhones.responseSchema = {resultsList : "data",fields : ["description", "id"]};
			   	var oACPhone1 = new YAHOO.widget.AutoComplete("phone1Type", "phone1Container", oDSLookupPhones);
			    oACPhone1.generateRequest = function(sQuery) {
		           	var query = "?query=" + sQuery;
		           	return query;
		       	};
			    oACPhone1.queryMatchSubset = true;
			    oACPhone1.maxResultsDisplayed = 20;
			    oACPhone1.itemSelectEvent.subscribe(acHandler);
			    oACPhone1.relatedID = "phone1TypeId";
			    oACPhone1.defaultQuery = "default";
				var phone1Toggler = YAHOO.util.Dom.get("togglePhone1");
				var phone1Button = new YAHOO.widget.Button({container:phone1Toggler, id:"phone1Button"});
				YAHOO.util.Event.addListener("phone1Button", "click", openList, oACPhone1);
				oACPhone1.containerCollapseEvent.subscribe(function(){YAHOO.util.Dom.removeClass(phone1Toggler, "open")});
	
			   	var oACAgentPhone1 = new YAHOO.widget.AutoComplete("agentPhone1Type", "agentPhone1Container", oDSLookupPhones);
			    oACAgentPhone1.generateRequest = function(sQuery) {
		           	var query = "?query=" + sQuery;
		           	return query;
		       	};
			    oACAgentPhone1.queryMatchSubset = true;
			    oACAgentPhone1.maxResultsDisplayed = 20;
			    oACAgentPhone1.itemSelectEvent.subscribe(acHandler);
			    oACAgentPhone1.relatedID = "agentPhone1TypeId";
			    oACAgentPhone1.defaultQuery = "default";
				var agentPhone1Toggler = YAHOO.util.Dom.get("toggleAgentPhone1");
				var agentPhone1Button = new YAHOO.widget.Button({container:agentPhone1Toggler, id:"agentPhone1Button"});
				YAHOO.util.Event.addListener("agentPhone1Button", "click", openList, oACAgentPhone1);
				oACAgentPhone1.containerCollapseEvent.subscribe(function(){YAHOO.util.Dom.removeClass(agentPhone1Toggler, "open")});
			}
		}
		
		var openList = function(e, cb) {
			//YAHOO.util.Event.stopEvent(e);
			if(!YAHOO.util.Dom.hasClass(e.currentTarget, "open")) {
				YAHOO.util.Dom.addClass(e.currentTarget, "open")
			}
			
			// Is open
			if(cb.isContainerOpen()) {
				cb.collapseContainer();
			}
			// Is closed
			else {
				try {
					cb.getInputEl().focus(); // Needed to keep widget active
					if (cb.defaultQuery) {
						setTimeout(function() { // For IE
							cb.sendQuery(cb.defaultQuery);
							},0);
					} else {
						setTimeout(function() { // For IE
							cb.sendQuery("");
							},0);
					}
				} catch (e) {
					alert(e);
				}
			}
		}
	     var oConfigs = {
			 queryDelay: 0,
			 minQueryLength: 0
		} 
	
		var acHandler = function(sType, aArgs) {
			if ((aArgs[2])[1]) {
				YAHOO.util.Dom.get(aArgs[0].relatedID).value = (aArgs[2])[1];
			} else {
				YAHOO.util.Dom.get(aArgs[0].relatedID).value = (aArgs[2])[0];
			}
			
			if ((aArgs[2])[2]) {
				YAHOO.util.Dom.get(aArgs[0].price).value = (aArgs[2])[2];
				calcPrice();
			}
	    };
		
	    var saveFunctions = {
	 		success : function(id, o, args) {
				var str = o.responseText;
				var index = str.indexOf("success:");
				if (index < 0) {
					alert("Technical Error, please call the office to schedule your appointment.");
				} else {
					YAHOO.util.Dom.get("transmitSuccess").style.display = "";
		    		YAHOO.util.Dom.get("apptRequestSection").style.display = "none";
				}
			},
			failure: function(id, o, args) {
		 		alert("Save Failed");
		 	}
		};
	    
		var save = function() {
			var error = false;
			resetWarnings();

			if (YAHOO.util.Dom.get("customerName").value == "") {
				YAHOO.util.Dom.get("customerNameWarning").style.display = '';
				error = true;
			}
			
			if (YAHOO.util.Dom.get("customerContact").checked) {
		
				if (YAHOO.util.Dom.get("phone1").value == "" || invalidPhonePattern(YAHOO.util.Dom.get("phone1").value)) {
					YAHOO.util.Dom.get("customerNumberWarning").style.display = '';
					error = true;
				}
			} else {
				if (YAHOO.util.Dom.get("agentName").value == "") {
					YAHOO.util.Dom.get("agentNameWarning").style.display = '';
					error = true;
				}
		
				if (YAHOO.util.Dom.get("agentPhone1").value == "" || invalidPhonePattern(YAHOO.util.Dom.get("agentPhone1").value)) {
					YAHOO.util.Dom.get("agentNumberWarning").style.display = '';
					error = true;
				}
			}
			
			if (YAHOO.util.Dom.get("inspectorId").value == "") {
				YAHOO.util.Dom.get("inspectorWarning").style.display = '';
				error = true;
			}
	
			YAHOO.util.Dom.get("description").value = "";
			YAHOO.util.Dom.get("description").value = "Agent: " + YAHOO.util.Dom.get("agentName").value + " " 
												+ ", Phone: " + YAHOO.util.Dom.get("agentPhone1").value + " ";
												+ ", Type: " + YAHOO.util.Dom.get("agentPhone1Type").value;
			var cfg = {
				on: {
					success: saveFunctions.success, failure: saveFunctions.failure
				}
			};		
			var date = '';
	        if (YAHOO.appt.req.cal1.getSelectedDates().length > 0) {
	
	            var selDate = YAHOO.appt.req.cal1.getSelectedDates()[0];
	
	            // Pretty Date Output, using Calendar's Locale values: Friday, 8 February 2008
	            var dStr = selDate.getDate();
	            var mStr = selDate.getMonth() + 1;
	            var yStr = selDate.getFullYear();
	
	            date = '&date=' + yStr + "-"+ mStr + "-" + dStr;
	        } else {
	    		YAHOO.util.Dom.get("timeWarning").style.display = '';
				error = true;
	        }

	        if (error) {
				return;
			}

	        if (YAHOO.util.Dom.get("mornTime").checked) {
				YAHOO.util.Dom.get("startMinutesId").value="00";
				YAHOO.util.Dom.get("startHoursId").value="09";
				YAHOO.util.Dom.get("endMinutesId").value="00";
				YAHOO.util.Dom.get("endHoursId").value="11";
	        } else if (YAHOO.util.Dom.get("noonTime").checked) {
				YAHOO.util.Dom.get("startMinutesId").value="00";
				YAHOO.util.Dom.get("startHoursId").value="12";
				YAHOO.util.Dom.get("endMinutesId").value="00";
				YAHOO.util.Dom.get("endHoursId").value="14";
	        } else if (YAHOO.util.Dom.get("afterNoonTime").checked) {
				YAHOO.util.Dom.get("startMinutesId").value="00";
				YAHOO.util.Dom.get("startHoursId").value="15";
				YAHOO.util.Dom.get("endMinutesId").value="00";
				YAHOO.util.Dom.get("endHoursId").value="17";
	        } else {
				YAHOO.util.Dom.get("startMinutesId").value="00";
				YAHOO.util.Dom.get("startHoursId").value="05";
				YAHOO.util.Dom.get("endMinutesId").value="0";
				YAHOO.util.Dom.get("endHoursId").value="05";
	        }

			
			Y.io("/Scheduler/webservice/update/updateLead.php?" + getFormValues(YAHOO.util.Dom.get("apptRequestForm")) + date, cfg);
		}
	
		Y.io("/Scheduler/webservice/lookup/phoneTypes.php",{on: {success: phoneTypeFunctions.success}});
		Y.on("click", save, "#submitRequest");
	    var oDS = new YAHOO.util.XHRDataSource("/Scheduler/webservice/lookup/inspector.php");
	    oDS.responseType = YAHOO.util.XHRDataSource.TYPE_JSON;
	    oDS.responseSchema = {resultsList : "data", fields : ["first_name", "id"]};
	    var oAC = new YAHOO.widget.AutoComplete("inspector", "inspectorContainer", oDS);
	    oAC.queryMatchSubset = true;
	    oAC.maxResultsDisplayed = 20;
	    oAC.itemSelectEvent.subscribe(acHandler);
	    oAC.relatedID = "inspectorId";
	    oAC.defaultQuery = "default";
		var inspectorToggler = YAHOO.util.Dom.get("toggleInspector");
		var oPushButtonB = new YAHOO.widget.Button({container:inspectorToggler, id:"oPushButtonB"});
		YAHOO.util.Event.addListener("oPushButtonB", "click", openList, oAC);
		oAC.containerCollapseEvent.subscribe(function(){YAHOO.util.Dom.removeClass(inspectorToggler, "open")});
		
		clearForm();
		apptRequestPanel.cfg.setProperty("visible",true);
	}
		
	var panelCfg = {
			draggable: true,
			close: true,
			modal: true,
			fixedCenter: false,
			xy: [25, 25],
			visible: false,
			zindex:7000
		};
	
	var apptRequestPanel = new YAHOO.widget.Panel("apptRequest", panelCfg);
	apptRequestPanel.renderEvent.subscribe(initPanelData);
	
	var openRequestPanel = function(){
		var getRequestFunctions = {
	 		success : function(id, o, args) {
				var classText = document.body.className;
				if(classText.indexOf("yui-skin-sam")<0){
					document.body.className = classText + "yui-skin-sam";
				}
				apptRequestPanel.setHeader("Request Appointment");
				apptRequestPanel.setBody(o.responseText);
				apptRequestPanel.render();
			},
			failure: function(id, o, args) {
		 		alert("Save Failed");
		 	}
		};
		Y.io("/Scheduler/request.html",{on: {success: getRequestFunctions.success}});
	}
	YAHOO.util.Event.addListener("initiateAppointmentRequest", "click", openRequestPanel);
	
	var resetWarnings = function(){
		YAHOO.util.Dom.get("customerNameWarning").style.display = 'none';
		YAHOO.util.Dom.get("agentNameWarning").style.display = 'none';
		YAHOO.util.Dom.get("customerNumberWarning").style.display = 'none';
		YAHOO.util.Dom.get("agentNumberWarning").style.display = 'none';
		YAHOO.util.Dom.get("timeWarning").style.display = 'none';
		YAHOO.util.Dom.get("inspectorWarning").style.display = 'none';
    }
	
	var clearForm = function(){
		YAHOO.util.Dom.get("transmitSuccess").style.display = "none";
		YAHOO.util.Dom.get("apptRequestSection").style.display = "";
		resetWarnings();
		YAHOO.util.Dom.get("customerName").value="";
		YAHOO.util.Dom.get("phone1").value="";
		YAHOO.util.Dom.get("phone1Type").value="";
		YAHOO.util.Dom.get("phone1TypeId").value="";
		YAHOO.util.Dom.get("agentName").value="";
		YAHOO.util.Dom.get("agentPhone1").value="";
		YAHOO.util.Dom.get("agentPhone1Type").value="";
		YAHOO.util.Dom.get("agentPhone1TypeId").value="";
		YAHOO.util.Dom.get("addressLine1").value="";
		YAHOO.util.Dom.get("addressLine2").value="";
		YAHOO.util.Dom.get("city").value="";
		YAHOO.util.Dom.get("state").value="";
		YAHOO.util.Dom.get("zip").value="";
		YAHOO.util.Dom.get("zipExt").value="";
		
		YAHOO.util.Dom.get("startMinutesId").value="";
		YAHOO.util.Dom.get("startHoursId").value="";
		YAHOO.util.Dom.get("endMinutesId").value="";
		YAHOO.util.Dom.get("endHoursId").value="";

		YAHOO.appt.req.cal1.select(null);
    	YAHOO.appt.req.cal1.cfg.setProperty("pagedate", "");
    	YAHOO.appt.req.cal1.render();
	}
});
