







var SC = (function () {
	var searchForStoreBindObj = null;

	function findLabelElm(forVal) {
		var labels=document.getElementsByTagName('label');
		for(var i in labels) {
			if(typeof(labels[i])!='object') continue;
			var forText = labels[i].getAttribute('for');
			if(forText && forVal == forText) {
				return labels[i];
			}
		}
		return null
	}

	return {
		niceLabelKeypressHandler: function(obj){
			var labelObj = findLabelElm( obj.id );
			dojo.html.setOpacity(labelObj, "0.0")
			dojo.html.hide(labelObj);
		}
		,niceLabelBlurHandler: function(obj){
			if (obj.value == "") {
				var labelObj = findLabelElm( obj.id );
				dojo.html.setOpacity(labelObj, "1")
				dojo.html.show(labelObj);
			}
		}
		,niceLabelFocusHandler: function(obj){
			var labelObj = findLabelElm( obj.id );
			dojo.html.setOpacity(labelObj, "0.25")
		}

		// Fix for IE global eval
		,my_eval: function(code) {
			var dj_global = this; // global scope reference
			if (window.execScript) {
				window.execScript(code); // eval in global scope for IE
				return null; // execScript doesn't return anything
			}
			return dj_eval(code);
		}

		,selectStore: function(index) {
			var store = storeArray[index];

			dojo.byId('review.store.storeName').value = store.title;
			dojo.byId('review.store.location.latitude').value = store.lat;
			dojo.byId('review.store.location.longitude').value = store.lng;
			dojo.byId('review.store.workAddress.addr1').value = store.address;
			dojo.byId('stateName').value = store.state;
			dojo.byId('cityName').value = store.city;

			// get google id
			var start = store.url.indexOf("cid=") + 4;
			var end = Math.max(store.url.indexOf("&", start),0) || store.url.length;
			var googleId = store.url.substring(start, end);
			dojo.byId('review.store.googleId').value = googleId;

			SC.hideStoreSelect();
		}

		,hideStoreSelect: function() {
			dojo.byId('storeSuggestDiv').innerHTML = "";
			dojo.html.hide(dojo.byId('storeSuggestDiv'));
		}

		// show spinner next to input field
		,toggleSpinner: function(obj, show) {
			var spinner = dojo.byId('spinnerDiv');
			//get obj position
			//show to the right of input field
			var newLeft = (dojo.html.getAbsoluteX(obj, true) +
				dojo.html.getBorderBox(obj).width -
				parseInt(dojo.html.getComputedStyle(obj, 'padding-right').match(/[0-9]*/)[0]) +10) +"px";

			dojo.html.setStyle(spinner, "left", newLeft)
			dojo.html.setStyle(spinner, "top", dojo.html.getAbsoluteY(obj, true)+"px")
			dojo.html.setStyle(spinner, "z-index", 999)

			if(show) dojo.html.show(spinner);
			else dojo.html.hide(spinner);
		}

		/**
		 * Search for store from Lucene
		 */
		,searchForStoreLimited: function(form){
			//gather values
			dojo.byId("searchForm").q.value = dojo.byId("review.store.storeName").value;
			var c = dojo.byId("cityId");
			var s = dojo.byId("stateId");
			var z = dojo.byId("zipId");

			dojo.byId("city").value = c.options[c.options.selectedIndex].text;
			dojo.byId("state").value = s.options[s.options.selectedIndex].text;
			//dojo.byId("zip").value = z.options[z.options.selectedIndex].text;

//			dojo.byId("city").value = dojo.byId("cityId").value;
//			dojo.byId("state").value = dojo.byId("stateId").value;
//			dojo.byId("zip").value = dojo.byId("zipId").value;

			//submit search
			var form = dojo.byId("searchForm");
			var kw = {
				mimetype: "text/plain",
				formNode: form,
				load: function(t, txt, e) {
					dojo.debug(txt);
					dojo.byId("searchResultsDiv").innerHTML = txt;
				},
				error: function(t, e) {
					dojo.debug("Error!... " + e.message);
				}
			};
			dojo.io.bind(kw);
			return false;
		}

		/**
		 * Search for store from g
		 */
		,searchForStore: function(obj){
			// clear timer if new event
			if (arguments.callee.timerId) dojo.lang.clearTimeout(arguments.callee.timerId);
			if (dojo.string.trim(obj.value) == "") return;

			this.toggleSpinner(obj, true);

			arguments.callee.timerId = dojo.lang.setTimeout( function(){
				// close store selector
				dojo.byId('storeSuggestDiv').innerHTML = "";

				if (searchForStoreBindObj && searchForStoreBindObj.abort) {
					searchForStoreBindObj.abort();
					searchForStoreBindObj = null;
				}

				searchForStoreBindObj = dojo.io.bind({
					url: "/localStoreSearch.action",
					content: {
		 				query: obj.value
		 			},
		 			error: function(type, data, evt){
		 				alert("error: " + evt);
		 			},
					load: function(type, data, evt) {
						SC.toggleSpinner(obj, false);

						//show new stores
						var displayDiv = dojo.byId('storeSuggestDiv');
						displayDiv.innerHTML = data;

						// eval code from ajax call
						if( displayDiv.getElementsByTagName("script").length > 0 ){
							var script = displayDiv.getElementsByTagName("script").item(0);
							dj_eval(script.innerHTML);
						}

						var newTop = (dojo.html.getAbsoluteY(obj, true) + dojo.html.getBorderBox(obj).height - parseInt(dojo.html.getComputedStyle(obj, 'padding-bottom').match(/[0-9]*/)[0])) +"px";

						dojo.html.setStyle(displayDiv, "left", dojo.html.getAbsoluteX(obj, true)+"px" )
						dojo.html.setStyle(displayDiv, "top", newTop)
						dojo.html.setStyle(displayDiv, "z-index", 999)

						dojo.html.show(displayDiv);
                        SC.searchForGoogleStore(obj);
					},
					mimeType: "text/html"
				});
			}, 150);
		}

        /**
         * Search for google store from google
         * FIXME: USE GlocalLocalSearchResults.jsp instead
         */
        ,searchForGoogleStore: function(obj){
            // clear timer if new event
            if (arguments.callee.timerId) dojo.lang.clearTimeout(arguments.callee.timerId);
            if (dojo.string.trim(obj.value) == "") return;

            this.toggleSpinner(obj, true);

            arguments.callee.timerId = dojo.lang.setTimeout( function(){

                if (searchForStoreBindObj && searchForStoreBindObj.abort) {
                    searchForStoreBindObj.abort();
                    searchForStoreBindObj = null;
                }

                searchForStoreBindObj = dojo.io.bind({
                    url: "/googleStoreSearch.action",
                    content: {
                         query: obj.value
                     },
                     error: function(type, data, evt){
                         alert("error: " + evt);
                     },
                    load: function(type, data, evt) {
                        SC.toggleSpinner(obj, false);

                        var stores = eval(data);

                        for(var i=0;i<stores.length;i++){
                            storeArray[storeArray.length] = stores[i];
                            var stag = "<div id=\"where_detect_result0\" class=\"where_detect_result\" style=\"display: block;\"><img id=\"where_detect_result0_img\" class=\"where_detect_result_img\" src=\""
+ stores[i].staticMapUrl +"\"/><div class=\"where_detect_result_info\"><div id=\"where_detect_result0_name\" class=\"where_detect_result_name\">"
+stores[i].title + "</div><div id=\"where_detect_result0_full_address\" class=\"where_detect_result_full_address\">"
+stores[i].address + "<br/>" + stores[i].city + "," + stores[i].state + "</div><ul class=\"where_detect_result_options\">" +
"<li class=\"where_detect_wrong_place\" id=\"where_detect_result0_wrong_place\"><a onclick=\"SC.selectStore('" + (storeArray.length - 1) +"'); return false;\" href=\"#\">Select</a>  </li>" +
"<li class=\"where_detect_dont_identify\" style=\"display: none;\"><a onclick=\"SC.where_detect_select('clear'); return false;\" href=\"#\">New Place</a></li>" +
"</ul></div></div>";
                           var ss = document.createElement("div");
                           ss.innerHTML = stag;
                           dojo.byId("storesTag").appendChild(ss);
                        }
                    },
                    mimeType: "text/json"
                });
            }, 150);
        }


		,addLikeAjax: function(obj) {
			var likeLink = dojo.byId(obj.id);
			var kw = {
				url: obj.href,
				load: function(type, data, evt) {
					//disable likeLink
					dojo.html.setClass(likeLink, "likeDisabled");
					//dojo.event.browser.removeListener(likeLink, "click", l);
					likeLink.onclick = function(){return false;};
					//change like text
					var rid = likeLink.id.split("_")[0];
					dojo.byId(rid + "-post-count-strong").innerHTML = (parseInt( dojo.byId(rid + "-post-count-strong").innerHTML )+1)+"";
				},
				error: function(t, e) {
					dojo.debug("Error!... " + e.message);
				}
			};
			dojo.io.bind(kw);

			//stop form submit
			return false;
		}

		,addCommentAjax: function(id) {
			var form = dojo.byId("addCommentsForm" + id);
			var kw = {
				formNode: form,
				load: function(type, data, evt) {
					dojo.debug(data);
					//show new comment
					var containingNode = dojo.byId('commentsDiv' + id);
					var node = dojo.doc().createElement("div");
					node.innerHTML = data;
					dojo.dom.insertAtIndex(node, containingNode, containingNode.childNodes.length);
					form["comment.comment"].value = "";  //clean out form
				},
				error: function(t, e) {
					dojo.debug("Error!... " + e.message);
				}
			};
			dojo.io.bind(kw);

			//stop form submit
			return false;
		}

		,showCommentsForm: function(id) {
			dojo.io.bind({
				url: "/showAddCommentAjax.action",
				content: {
	 				rid: id
	 			},
	 			error: function(type, data, evt){
	 				alert("error");
	 			},
				load: function(type, data, evt) {
					//shw new stores
					var displayDiv = dojo.byId('postComments' + id);
					displayDiv.innerHTML = data;

					// eval code from ajax call
					if( displayDiv.getElementsByTagName("script").length > 0 ){
						var script = displayDiv.getElementsByTagName("script").item(0);
						dj_eval(script.innerHTML);
					}

					dojo.html.show(displayDiv);
					//dojo.lfx.html.wipeIn("ripAdminDiv", 500).play();
					//dojo.lfx.html.highlight("storeSuggestDiv", [250,255,0], 750).play();
				},
				mimeType: "text/html"
			});
		}

		,setStarImage: function(obj){
			dojo.require("dojo.dom");
			dojo.require("dojo.html.style");
			var starWidth = obj.innerHTML * 25;
			var ul = dojo.dom.getFirstAncestorByTag(obj, "ul");
			var li1 = dojo.dom.firstElement(ul, "li");
			dojo.html.setStyle(li1, "width", starWidth);
			SC.disableStarImage(obj);
		}

		//remove the ability to change the stars
		,disableStarImage: function(obj){
			var ul = dojo.dom.getFirstAncestorByTag(obj, "ul");
			var li1 = dojo.dom.firstElement(ul, "li");
			var child = dojo.dom.getNextSiblingElement(li1, "li");
			//get each LI after the first one
			while(child) {
				//Remove the class of each LI
				dojo.html.setClass(child.firstChild, "")
				child = dojo.dom.getNextSiblingElement(child, "li");
			}
		}

		/**
		 * set the form input value
		 * update the star rating display
		 * @param obj The element clicked on
		 * @param inpt The name of the form input to update
		 */
		,updateRating: function(obj, inpt){
			var starWidth = parseInt(obj.text||obj.innerText) * 25;
			var ul = dojo.dom.getFirstAncestorByTag(obj, "ul");
			var li1 = dojo.dom.firstElement(ul, "li");
			dojo.html.setStyle(li1, "width", starWidth+"px");
			dojo.byId(inpt).value = obj.text;
		}

		,sendRating: function(obj, name, value){
			var urlS = "/addRating.action";
			var params = new Array();
			params['res'] = "xml";
			params['rating.rating'] = obj.text;
			params[name] = value;
			var kw = {
				url: urlS,
				content: params,
				load: function(type, data, evt){
					dojo.debug(data);
					//TODO update the display
				},
				error: function(t, e) {
					dojo.debug("Error!... " + e.message);
				}
			};
			dojo.io.bind(kw);
			SC.setStarImage(obj);
			return false;
		}

		,changeCitySelect: function(){
			var index = dojo.byId("stateId").options.selectedIndex;
			var sid = dojo.byId("stateId").options[index].value;
			var stext = dojo.byId("stateId").options[index].text;
			var d = new Date().getTime();
			var url = "/showCities.action";
			var params = new Array();
			params['stateId'] = sid;
			params['d'] = d;

			var cities = dojo.byId("cityId");
			var zips = dojo.byId("zipId");
			clearOptions( cities );
			clearOptions( zips );

			dojo.io.bind({
				url: url,
				content: params,
				load: function(type, data, evt){
					var cities = dojo.byId("cityId");
					clearOptions( cities );
					clearOptions( zips );
					addOption(cities, "", "");
					for(var key in data){
						addOption(cities, data[key][0], data[key][1]);
					}
				},
				mimetype: "text/json"
			});

			//alert(dojo.byId("stateId").options.selectedIndex);
			//state selectedIndex
			//get city data
			//replace update city select
		}
		,changeZipSelect: function(){
			var index = dojo.byId("cityId").options.selectedIndex;
			var cid = dojo.byId("cityId").options[index].value;
			var ctext = dojo.byId("cityId").options[index].text;
			var d = new Date().getTime();
			var url = "/showZips.action";
			var params = new Array();
			params['cityId'] = cid;
			params['d'] = d;

			var zips = dojo.byId("zipId");
			clearOptions( zips );

			dojo.io.bind({
				url: url,
				content: params,
				load: function(type, data, evt){
					var zips = dojo.byId("zipId");
					clearOptions( zips );
					for(var key in data){
						addOption(zips, data[key][0], data[key][1]);
					}
				},
				mimetype: "text/json"
			});

			//center map on city
			var index = dojo.byId("stateId").options.selectedIndex;
			var stext = dojo.byId("stateId").options[index].text;
		    var map =  dojo.widget.byId("mapTest").map;
			map.clearOverlays();
			showAddress(map, ctext +", "+ stext, 13);
		}

		,openChangeLocation: function(obj) {
			var openLink = dojo.byId(obj.id);
			var kw = {
				url: obj.href,
				load: function(type, data, evt) {
					var displayDiv = dojo.byId('locationChangeDiv');
					displayDiv.innerHTML = data;

					// eval code from ajax call
					if( displayDiv.getElementsByTagName("script").length > 0 ){
						var script = displayDiv.getElementsByTagName("script").item(0);
						dj_eval(script.innerHTML);
					}

					dojo.html.show(displayDiv);
					//dojo.lfx.html.wipeIn("ripAdminDiv", 500).play();
					dojo.lfx.html.highlight("locationChangeDiv", [250,255,0], 750).play();
				},
				error: function(t, e) {
					dojo.debug("Error!... " + e.message);
				},
				mimeType: "text/html"
			};
			dojo.io.bind(kw);

			//stop form submit
			return false;
		}
		
		,closeChangeLocation: function(){
			//TODO: save the new location
			//reload current page to get new location info
			var displayDiv = dojo.byId('locationChangeDiv');
			dojo.html.hide(displayDiv);
			displayDiv.innerHTML = "";
		}
		
	,openShareChoices: function(obj) {
		var btn = dojo.byId(obj.id);
		var divId = btn.id + "-shareDiv";
		//1
		var kw = {
			url: '/showShareAjax.action' + '?oid=' + btn.id,
			load: function(type, data, evt) {
				var displayDiv = dojo.byId(divId);
				displayDiv.innerHTML = data;

				// eval code from ajax call
				if( displayDiv.getElementsByTagName("script").length > 0 ){
					var script = displayDiv.getElementsByTagName("script").item(0);
					dj_eval(script.innerHTML);
				}

				dojo.html.show(displayDiv);
				dojo.lfx.html.highlight(divId, [250,255,0], 750).play();
			},
			error: function(t, e) {
				dojo.debug("Error!... " + e.message);
			},
			mimeType: "text/html"
		};
		dojo.io.bind(kw);

		//stop form submit
		return false;
	}

		//TODO: if mobile dont open in new window
		,twitterConnected: function(success, failure) {
			if (typeof(success) != 'function') { success = function(){}; }
			if (typeof(failure) != 'function') { failure = function(){}; }

			
			
			//open window - redirect to twitter login
			var modal = window.open('/showTwitterLogin.action', '_blank', 'height=400,width=800,left=300,top=200,resizable=yes', true);
			var wait  = function() {
				setTimeout(function() {
					if (modal == null) {
						failure(); // When does this happen?
						return;
					}
					if (modal.closed) {
						location.reload(); //reload so we pickup the new session and location
					}
					else {
						wait();
					}
				}, 25);
			};
			wait();
			
		}
		
		,searchForNewLocation: function(txt) {
			var kw = {
				url: "/searchChangeMyLocationAjax.action",
//				content: {searchText: dojo.byId("searchText").value},
				content: {searchText: txt},
				load: function(type, data, evt) {
					var displayDiv = dojo.byId('locationChoicesDiv');
					displayDiv.innerHTML = data;

					// eval code from ajax call
					if( displayDiv.getElementsByTagName("script").length > 0 ){
						var script = displayDiv.getElementsByTagName("script").item(0);
						dj_eval(script.innerHTML);
					}

					dojo.html.show(displayDiv);
					dojo.lfx.html.highlight("locationChangeDiv", [250,255,0], 750).play();
				},
				error: function(t, e) {
					dojo.debug("Error!... " + e.message);
				},
				mimeType: "text/html"
			};
			dojo.io.bind(kw);
		}

		,selectNewLocation: function(inputName) {
			//get the item from placeArray
			
			var kw = {
				url: "/chooseLocationAjax.action",
				content: placesArray[ dojo.byId(inputName).options.selectedIndex ],
				load: function(type, data, evt) {
					var displayDiv = dojo.byId('locationChoicesDiv');
					displayDiv.innerHTML = data;

					// eval code from ajax call
					if( displayDiv.getElementsByTagName("script").length > 0 ){
						var script = displayDiv.getElementsByTagName("script").item(0);
						dj_eval(script.innerHTML);
					}

					dojo.html.show(displayDiv);
					//dojo.lfx.html.wipeIn("ripAdminDiv", 500).play();
					dojo.lfx.html.highlight("locationChangeDiv", [250,255,0], 750).play();
				},
				error: function(t, e) {
					dojo.debug("Error!... " + e.message);
				},
				mimeType: "text/html"
			};
			dojo.io.bind(kw);
		}
		
		,selectCurrentLocation: function() {
			var kw = {
				url: "/chooseLocationAjax.action",
				content: {
					latitude: dojo.byId('latitudeSpan').innerHTML
					,longitude: dojo.byId('longitudeSpan').innerHTML
				},
				load: function(type, data, evt) {
					var displayDiv = dojo.byId('locationChoicesDiv');
					displayDiv.innerHTML = data;

					// eval code from ajax call
					if( displayDiv.getElementsByTagName("script").length > 0 ){
						var script = displayDiv.getElementsByTagName("script").item(0);
						dj_eval(script.innerHTML);
					}

					dojo.html.show(displayDiv);
					//dojo.lfx.html.wipeIn("ripAdminDiv", 500).play();
					dojo.lfx.html.highlight("locationChangeDiv", [250,255,0], 750).play();
				},
				error: function(t, e) {
					dojo.debug("Error!... " + e.message);
				},
				mimeType: "text/html"
			};
			dojo.io.bind(kw);
		}

		,getLocationForLatLon: function(lat, lon) {
			var kw = {
				url: "/showLocFromLatLon.action",
				content: {
					latitude: lat
					,longitude: lon
				},
				load: function(type, data, evt) {
					var displayDiv = dojo.byId('latLonLocDiv');
					displayDiv.innerHTML = data;

					dojo.html.show( dojo.byId("latLonDivPrnt") );
				},
				error: function(t, e) {
					dojo.debug("Error!... " + e.message);
				},
				mimeType: "text/html"
			};
			dojo.io.bind(kw);
		}

	};
}());


