StoreSelector = Class.create();StoreSelector.prototype = {		stateDictionary: null,		states: [],		locationSelector: [],	storeSelector: [],	submitButton: false,	cookiedLocation: false,	cookiedStore: false,	activateButton: false,		// linkType options: genius, procare, business, personal, promo, workshop, and store.	initialize: function(country, locationSelector, storeSelector, submitButton, linkType, delegate) {				this.locationSelector = locationSelector;		this.storeSelector = storeSelector;		this.submitButton = submitButton;		this.linkType = linkType;		this.delegate = delegate;				if(Cookie.get('retail_storenumb')) this.cookiedStore = Cookie.get('retail_storenumb');				this.stores = this.createStores(country);		this.showStores(this.stores);		if(this.cookiedStore && this.submitButton) this.submitButton.addClassName('active');						Event.observe(this.storeSelector, 'change', function(event) {			var selectedIndex = this.storeSelector.selectedIndex;			var selectedStore = this.storeSelector.getElementsByTagName('option')[selectedIndex];						if (typeof(selectedStore.value) != 'undefined' && selectedIndex != 0) {				if(!this.submitButton) {					if(Cookie.get('retail_storenumb')) Cookie.erase('retail_storenumb');					Cookie.set('retail_storenumb', selectedStore.getAttribute('name'), 14);										window.location = selectedStore.value;				} else { 					this.submitButton.addClassName('active');				}			} else {				if(this.submitButton) this.submitButton.removeClassName('active');			}					}.bindAsEventListener(this));				if(this.submitButton && this.linkType != 'phone') {			Event.observe(this.submitButton, 'click', function(event) {				Event.stop(event);								var selectedIndex = this.storeSelector.selectedIndex;				var selectedStore = this.storeSelector.getElementsByTagName('option')[selectedIndex];								if(this.submitButton.hasClassName('active') && typeof(selectedStore.value) != 'undefined') {					if(Cookie.get('retail_storenumb')) Cookie.erase('retail_storenumb');					Cookie.set('retail_storenumb', selectedStore.getAttribute('name'), 14);										window.location = selectedStore.value;				} else {					if(typeof(selectedStore.value) == 'undefined') this.locationSelector.focus();					else this.storeSelector.focus();				}			}.bindAsEventListener(this));		}				if(this.submitButton && this.linkType == 'phone') {			Event.observe(this.submitButton, 'click', function(event) {				Event.stop(event);												var selectedIndex = this.storeSelector.selectedIndex;				var selectedStore = this.storeSelector.getElementsByTagName('option')[selectedIndex];								if(this.submitButton.hasClassName('active') && typeof(selectedStore.value) != 'undefined') {					if(Cookie.get('retail_storenumb')) Cookie.erase('retail_storenumb');					Cookie.set('retail_storenumb', selectedStore.getAttribute('name'), 14);										this.sendReq($H({'store':selectedStore.value}));				} else {					if(typeof(selectedState.value) == 'undefined') this.locationSelector.focus();					else this.storeSelector.focus();				}							}.bindAsEventListener(this));						Event.observe($('phoneToggle'), 'click', this.phoneToggleClicked.bindAsEventListener(this));		}			},		phoneToggleClicked: function(event) {				if(event) Event.stop(event);				var element = $('phoneResults');				if(element) {					element.hide();				}				element = $('phoneFields');				if(element) {					element.show();				}				//this.changeOverlayHeight($('phoneFields'));			} ,		sendReq: function(params) {		// send request for store workshops with the R#		var send = new Ajax.Request('/retail/scripts/storewidget.php', {			method: 'POST', 			parameters: params,			onComplete: this.acknowledgeComplete.bind(this)		})	},		acknowledgeComplete: function(request) {		var jsonText = request.responseText;		var result = this.scopedEval(jsonText);		if(result) {			var storeInfo = result[0];			this.setStoreInfo(storeInfo);			$('phoneFields').hide();			$('phoneResults').show();			//this.changeOverlayHeight($('phoneResults'));		}	},		changeOverlayHeight: function(content) {		var locationOverlay = $$('.overlay.locationoverlay')[0];		var locationOverlayShadow = $$('.overlayshadow.locationoverlay')[0];		var overlayHeight = AC.OverlayPanel.overlay.height();		var resultsHeight = content.getHeight();		AC.OverlayPanel.overlay.setHeight(resultsHeight);	},		scopedEval: function(stringValue) {		try {			//alert(stringValue);			return (function() {return eval("("+stringValue+")");})();		}		catch(e) {			//alert('Error: '+e);			return null;		}	},		setStoreInfo: function(storeInfo) {		var phoneResults = $('phoneResults');		phoneResults.down('.fn').innerHTML = storeInfo.storeName;		phoneResults.down('.street-address').innerHTML = storeInfo.address1;		phoneResults.down('.extended-address').innerHTML = storeInfo.address2;		phoneResults.down('.locality').innerHTML = storeInfo.city;		phoneResults.down('.region').innerHTML = storeInfo.state;		phoneResults.down('.postal-code').innerHTML = storeInfo.zip;		phoneResults.down('.tel').innerHTML = storeInfo.phone;	},		populateLocationsWithin: function(country) {				this.states = country.getElementsByTagName('state');				this.storeSelector.getElementsByTagName('option')[0].innerHTML = "";		var myDelegate = this.delegate;		var hasShouldAddState = myDelegate && (typeof myDelegate.shouldAddStateNamed === "function");		var shouldAddState = true;				for (var i = 0; i < this.states.length; i++) {			var state = this.states[i];						var stateCode = state.getAttribute('name');			var stateName = this.stateDictionary[state.getAttribute('name')].name;						shouldAddState = true;			if(hasShouldAddState) {				shouldAddState = myDelegate.shouldAddStateNamed(stateName);			}			if(!shouldAddState) continue;			var selected = (stateCode == this.cookiedLocation) ? true : false;			var stateOption = this.createOption(stateCode, stateName, selected, '');			this.locationSelector.appendChild(stateOption);			this.stateDictionary[stateCode].stores = this.createStores(state);			if(selected) {				this.showStores(this.stateDictionary[stateCode].stores);				this.storeSelector.getElementsByTagName('option')[0].innerHTML = "Select a Store";			}		}				this.locationSelector.getElementsByTagName('option')[0].innerHTML = "Select a State";		this.locationSelector.removeAttribute('disabled');			},			showStores: function(stores) {		if(this.submitButton) this.submitButton.removeClassName('active');				this.storeSelector.innerHTML = '';				if(typeof(stores) == 'undefined') {			this.storeSelector.setAttribute('disabled', 'disabled');			return;		}				if(stores.length > 0) {						this.storeSelector.appendChild(this.createOption('', 'Select a Store', false, ''));					for (var i = 0; i < stores.length; i++) {				this.storeSelector.appendChild(stores[i].cloneNode(true));			}					this.storeSelector.removeAttribute('disabled');		}			},		createStores: function(state) {		var storeOptions = [];		var shouldAddStore = true		var myDelegate = this.delegate;		var hasShouldAddStore = myDelegate && (typeof myDelegate.shouldAddStoreWithConciergeIdForStateNamed === "function");		var hasStoreLink = myDelegate && (typeof myDelegate.storeLinkForStoreWithConciergeIdStateNamed === "function");		var stores = state.getElementsByTagName('store');		for(var i = 0; i < stores.length; i++ ) {			var store = stores[i];			var storeCode = store.getElementsByTagName('appleid')[0].firstChild.nodeValue;			var storeName = store.getElementsByTagName('city')[0].firstChild.nodeValue + ', ' + store.getElementsByTagName('name')[0].firstChild.nodeValue;			var selected = (storeCode == this.cookiedStore) ? true : false;			switch(this.linkType) {				case 'genius':					var storeLink = 'http://concierge.apple.com/store/' + storeCode;					break;				case 'procare':					var storeLink = 'http://concierge.apple.com/procare/store/' + storeCode;					break;				case 'business':					var storeLink = 'http://concierge.apple.com/biz/' + storeCode;					break;				case 'personal':					var storeLink = 'http://concierge.apple.com/ps/' + storeCode;					break;				case 'promo':					var storeLink = 'http://concierge.apple.com/promo/store/' + storeCode;					break;				case 'workshop':					var storeLink = 'http://concierge.apple.com/workshops/' + storeCode;					break;				case 'phone':					var storeLink = storeCode;					break;				case 'store':					var storeLink = store.getElementsByTagName('link')[0].firstChild.nodeValue;					break;				default:					var storeLink = store.getElementsByTagName('link')[0].firstChild.nodeValue;					break;			}						shouldAddStore = true;			if(hasShouldAddStore) {				var stateName = this.stateDictionary[state.getAttribute('name')].name;				shouldAddStore = myDelegate.shouldAddStoreWithConciergeIdForStateNamed(storeCode, stateName);			}			if(!shouldAddStore) continue;			if(hasStoreLink) {				storeLink = myDelegate.storeLinkForStoreWithConciergeIdStateNamed(storeCode, stateName);			}						var storeOption = this.createOption(storeLink, storeName, selected, storeCode);			if(selected) {				this.storeSelector.getElementsByTagName('option')[0].innerHTML = "Select a Store";			}			storeOptions.push(storeOption);		}				return storeOptions;	},	createOption: function(value, name, selected, storeCode) {		var option = $(document.createElement('option'));		if(storeCode != '') option.setAttribute('name', storeCode);		option.setAttribute('value', value);		if(selected) option.setAttribute('selected', 'selected');		option.appendChild(document.createTextNode(name));		return option;	}	};// Cookievar Cookie = {  set: function(name, value, daysToExpire) {    var expire = '';    if (daysToExpire != undefined) {      var d = new Date();      d.setTime(d.getTime() + (86400000 * parseFloat(daysToExpire)));      expire = '; expires=' + d.toGMTString();	  path = '; path=/';    }    return (document.cookie = escape(name) + '=' + escape(value || '') + expire + path);  },  get: function(name) {    var cookie = document.cookie.match(new RegExp('(^|;)\\s*' + escape(name) + '=([^;\\s]*)'));    return (cookie ? unescape(cookie[2]) : null);  },  erase: function(name) {    var cookie = Cookie.get(name) || true;    Cookie.set(name, '', -1);    return cookie;  },  accept: function() {    if (typeof navigator.cookieEnabled == 'boolean') {      return navigator.cookieEnabled;    }    Cookie.set('_test', '1');    return (Cookie.erase('_test') === '1');  }};