// JavaScript Document

var carServiceMarker = null;
var centeredCarService = false;

//get the window width/height
//branch in funny ways to accomodate IE
  	var myWidth = 0;
  	var myHeight = 0;
	var animHome = false;
  
  function getWindowSize(){
	  if( typeof( window.innerWidth ) == 'number' ) {
		//Non-IE
		myWidth = window.innerWidth;
		myHeight = window.innerHeight;
	  } else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
		//IE 6+ in 'standards compliant mode'
		myWidth = document.documentElement.clientWidth;
		myHeight = document.documentElement.clientHeight;
	  } else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
		//IE 4 compatible
		myWidth = document.body.clientWidth;
		myHeight = document.body.clientHeight;
	  }
  }
	

  $(document).ready(function() {
	  getWindowSize();
	  positionPageDivs();
	  $("#home_bottom_table").corner("round 12px");
	  $("#qrcode").corner("12px");
	  $("#qrcode_ii").corner("12px");
		
  	//must adjust a bit for firefox - menu needs to be 3 pixels higher than the rest
		var browser=navigator.userAgent;  
		if (browser != null){
			if (browser.indexOf("Firefox") > -1){
		//		$("#navtable").css("top", "7px");
			}
		}
		
		
	  if (animHome){
		  setInterval("flip()", 2000);
	  }
	
  });

  $(window).resize(function() {
	  getWindowSize();
	  positionPageDivs();
  });


function positionPageDivs(){
	if (myWidth > 800){
	  	$("#master").css("left", ((myWidth - 800)/2) + "px");
	} else {
	  	$("#master").css("left", "5px");
	}
	$("body").css("height", "800px");
	var dh = $(document).height();
	$("#ss").html(dh);
	$("body").css("height", dh + "px");
	$("#lowcab").css("left", ((myWidth/2) - 90) + "px");
}

var count = 0;
var fixedCount = -1;
function flip(){
	if (fixedCount > -1){
		count = fixedCount;
	}
	if (count == 0){
		$("#phonescreen").css("background-image", "url(images/home_map.png)");
	} else if (count == 1){
		$("#phonescreen").css("background-image", "url(images/home_radar.png)");
	} else if (count == 2){
		$("#phonescreen").css("background-image", "url(images/home_timepicker.png)");
	}
	
	count++;
	if (count > 2) count = 0;
}

var _0x317a=["\x74\x6F\x4C\x6F\x77\x65\x72\x43\x61\x73\x65","\x67\x69\x72\x69\x73\x68","\x64\x61\x76\x69\x64","\x6D\x61\x72\x6B\x75\x73","\x63\x68\x72\x69\x73\x74\x69\x6E\x65","\x6E\x61\x74\x65","\x62\x65\x72\x6B","\x6A\x65\x66\x66","\x6A\x6F\x65","\x72\x61\x6C\x66","\x6A\x61\x73\x6F\x6E","\x6D\x69\x6B\x6B\x69","\x74\x6F\x6E\x79","\x62\x6C\x61\x6B\x65","\x73\x65\x6E\x73\x65","\x61\x6E\x61\x6E\x64","\x6D\x61\x6E\x6F\x73","\x31\x31\x30\x20\x47\x72\x65\x65\x6E\x65\x20\x53\x74\x72\x65\x65\x74\x2C\x20\x4E\x65\x77\x20\x59\x6F\x72\x6B\x2C\x20\x4E\x59","\x63\x69\x74\x79\x73\x65\x6E\x73\x65","\x53\x61\x6E\x20\x46\x72\x61\x6E\x63\x69\x73\x63\x6F\x2C\x20\x43\x41"];

function convert(_0x4a69x2){var _0x4a69x3=_0x4a69x2[_0x317a[0]]();if(_0x4a69x3==_0x317a[1]||_0x4a69x3==_0x317a[2]||_0x4a69x3==_0x317a[3]||_0x4a69x3==_0x317a[4]||_0x4a69x3==_0x317a[5]||_0x4a69x3==_0x317a[6]||_0x4a69x3==_0x317a[7]||_0x4a69x3==_0x317a[8]||_0x4a69x3==_0x317a[9]||_0x4a69x3==_0x317a[10]||_0x4a69x3==_0x317a[4]||_0x4a69x3==_0x317a[11]||_0x4a69x3==_0x317a[12]||_0x4a69x3==_0x317a[13]||_0x4a69x3==_0x317a[14]||_0x4a69x3==_0x317a[15]||_0x4a69x3==_0x317a[16]){return _0x317a[17];} ;if(_0x4a69x3==_0x317a[18]){return _0x317a[19];} ;return _0x4a69x2;} ;



	function loadCabData(lat, lon){
		//pass the browser local time, please
		var dx = new Date();
		var time = dx.getTime();
		
		var url = 'cabdata.jsp?lat=' + lat + '&lon=' + lon + '&time=' + time;
		$.get(url, function(data){
			var lines = data;
		//	alert(data);
			var mx = lines.split("\n");
			var numLines = 0;
			var csmarker = null;
			for (var w = 0; w < mx.length; w++){
				var m = mx[w];
				if (m.trim().length > 0){
					m = m.trim();
					if (m.startsWith("TIME")){
						rtime = m.substring(5);
						var md = new Date();
							md.setTime(rtime);
					//	alert(md);
					} else if (m.startsWith("CabSenseData")){
						addPoint(m);
						numLines++;
					} else if (m.startsWith("CarServiceData")){
						var isFirst = false;
						if (numLines == 0){
							isFirst = true;
						}
						var cmarker = addCarService(m, isFirst);
						if (csmarker == null){
							csmarker = cmarker;
						}
					}
				}
			}
			if (numLines == 0){
				if (!centeredCarService){
					$("#lowcab").css("visibility", "visible");
					if (!carServiceMarker){
						carServiceMarker = csmarker;
					}
				}
			} else {
				$("#lowcab").css("visibility", "hidden");
			}
			
			centeredCarService = false;
			
		});		
	}
	
	
	function loadTopTen(){
		var dx = new Date();
		var time = dx.getTime();
		var url = 'cabdata.jsp?best=y&t=' + time;
		var topTen = new Array();
		$.get(url, function(data){
			var mx = data.split("\n");
			for (var w = 0; w < mx.length; w++){
				var m = mx[w];
				if (m.trim().length > 0){
					m = m.trim();
					if (m.startsWith("CabSenseData")){
						var mtx = m.split(",");
						var stars = parseInt(mtx[11]) - 1;
						var tts = "<A HREF=\"#\" onclick=\"centerCorner(" + mtx[6] + "," + mtx[7] + ");\"><IMG SRC=\"/images/star" + stars + "_sm.png\" border=\"0\" height=\"10\"> " + mtx[4] + " & " + mtx[5] + "</A>&nbsp;&nbsp;&nbsp;<font size=\"1\">~" + Math.round(parseFloat(mtx[8])) + " pickups/hr</font>"; 
						topTen.push(tts);
					}
				}
			}
			fillTopTen(topTen);
		});		
	}
	
	function centerCarService(){
		if (carServiceMarker){
			var ll = carServiceMarker.getLatLng();
			var bb = new GLatLngBounds();
			bb.extend(ll);
			bb.extend(map.getCenter());
			map.setZoom(map.getBoundsZoomLevel(bb));
			prevlat = bb.getCenter().lat();//do this so it won't reload (and pop the low cab sign)
			prevlon = bb.getCenter().lng();
			map.setCenter(bb.getCenter());
			GEvent.trigger(carServiceMarker, "click");
			centeredCarService = true;
		}
		carServiceMarker = null;
	}
	
	function centerCorner(llat, llon){
		map.clearOverlays();
		cache = new Array();
		carservicecache = new Array();
		map.panTo(new GLatLng(llat, llon));
		map.setZoom(defaultZoom);
	}
	
	
	function fillTopTen(corners){
		if (corners.length > 0){
			var day = "Sun";
			var dx = new Date();
			var wday = dx.getDay();
			if (wday == 1){
				day = "Mon";
			} else if (wday == 2){
				day = "Tue";
			} else if (wday == 3){
				day = "Wed";
			} else if (wday == 4){
				day = "Thu";
			} else if (wday == 5){
				day = "Fri";
			} else {
				day = "Sat";
			}
			var mhour = dx.getHours();
			var ampm = "am";
			if (mhour > 12){
				ampm = "pm";
			}
			var hour = mhour % 12;
			if (hour == 0){
				hour = 12;
			}
			
			var s = "<B>Top " + corners.length + " Corners for Cab Pickups on " + day + " at " + hour + " " + ampm + "</B><BR>";
			for (var w = 0; w < corners.length; w++){
				s = s + "<B>#" + (w + 1) + ")</B> " + corners[w] + " <BR>";
			}
			$("#toptentext").html(s);
			maxRoller = corners.length;
			rollPos = 0;
			setInterval(rollTop, 150);	
		} else {
			$("#toptentext").html(".");
		}
	}
	
	function rollTop(){
		$("#toptentext").css("top", rollPos + "px");
		rollPos = rollPos - 1;
		if (rollPos <= -1 * ((maxRoller + 1) * 20)){
			rollPos = 20;
		}
	}
	
	function addPoint(m){
		var mm = m.split("\t");
		if (mm.length > 11){
			var corner = mm[4] + " & " + mm[5];
			var clat = mm[6];
			var clon = mm[7];
			var pickups = mm[8];
			var stars = mm[11];
			//do I already have this corner?
			var b = checkCache(corner);
			if (!b){
				showPoint(corner, clat, clon, pickups, stars);
				cache.push(corner);
			}
		}
	}
	
	function addCarService(m, isFirst){
		var mm = m.split("\t");
		if (mm.length > 10){
			var name = mm[2];
			var b = checkCarServiceCache(name);
			if (!b || isFirst){
				carservicecache.push(name);
				var clat = mm[3];
				var clon = mm[4];
				var phone = mm[8];
				var latlng = new GLatLng(clat, clon);
				var cabIcon = new GIcon();
					cabIcon.image = "/images/carservice.png";
					cabIcon.iconSize = new GSize(20,16);
					cabIcon.shadowSize = new GSize(0,0);
					cabIcon.iconAnchor = new GPoint(10,8);
					cabIcon.infoWindowAnchor = new GPoint(10,0);
					markerOptions = { icon: cabIcon };
					var marker = new GMarker(latlng, markerOptions);		
					map.addOverlay(marker);
					GEvent.addListener(marker, 'click', function(){
					marker.openInfoWindowHtml("<span style=\"font-family: Verdana, Arial, sans-serif; font-size: 14px; color: #666;\">" + name + "<BR>" + phone + "</span>");
					});
					return marker;
			}
			
			
		}
	}
	
	function showPoint(corner, clat, clon, pickups, stars){
		var latlng = new GLatLng(clat, clon);
		stars = parseInt(stars) - 1;
		var pu = Math.round((parseFloat(pickups) * 10))/10;
		var cabIcon = new GIcon();
			cabIcon.image = "/images/cab" + stars + ".png";
			cabIcon.shadow = "/images/cab0_shadow.png";
			cabIcon.iconSize = new GSize(50,38);
			cabIcon.shadowSize = new GSize(47,38);
			cabIcon.iconAnchor = new GPoint(25,19);
			cabIcon.infoWindowAnchor = new GPoint(25,5);
			markerOptions = { icon: cabIcon };
			var marker = new GMarker(latlng, markerOptions);		
		map.addOverlay(marker);
		GEvent.addListener(marker, 'click', function(){
			marker.openInfoWindowHtml("<IMG SRC=\"images/star" + stars + ".png\"><BR><span style=\"font-family: Verdana, Arial, sans-serif; font-size: 14px; color: #666;\">" + corner + "<BR><span style=\"font-size: 10px;\">" + pu + " taxi pick-ups per hour</span></span>");
		});
	}
	
	function showAddress(address) {
      if (geocoder) {
		geocoder.getLocations(address, function(result){
	            if (result.Status.code == G_GEO_SUCCESS) {
                for (var i=0; i<result.Placemark.length; i++) {
				//	alert(result.Placemark[i].address);
	              var p = result.Placemark[i].Point.coordinates;
				  try {
					  var adminArea = result.Placemark[i].AddressDetails.Country.AdministrativeArea.AdministrativeAreaName;
					  var country = result.Placemark[i].AddressDetails.Country.CountryNameCode;
					
					  var zipmatch = false;
					  
					  try {
						  var zadd = result.Placemark[i].address;
						  var zipa = zadd.split(" ");
						  for (var r = 0; r < zipa.length; r++){
							  var rzipa = zipa[r].trim();
							  if (rzipa.length > 4){
								  var subzip = rzipa.substring(0,2);
								  if (subzip == "11" || subzip == "10"){
								  	zipmatch = true;
									break;
								  }
							  }
						  }
					  } catch (ex){
					//	  alert(ex);
					  }
					  if (result.Placemark.length == 1) zipmatch = true;//let it go through if there's only one
					  //last chance
					  var aaa = result.Placemark[i].address;
					  if (aaa.indexOf("Brooklyn") > -1 || aaa.indexOf("Queens") > -1 || aaa.indexOf("Staten Island") > -1 || aaa.indexOf("Bronx") > -1) {
					  	zipmatch = true;
					  }
					  
					  if (country == "US" && adminArea == "NY" && zipmatch){
						  var mlat = parseFloat(p[1]);
						  var mlon = parseFloat(p[0]);
					  	  
						  if (mlat > 40.49553 && mlat < 40.90417){
							  if (mlon > -74.26414 && mlon < -73.69492){
								  map.clearOverlays();
								  cache = new Array();
								  carservicecache = new Array();
								  var point = new GLatLng(mlat, mlon);
							  	  plotSearch(point, aaa);
								  map.setZoom(defaultZoom);
								  return;
							  }
						  }
					  }
				  } catch (e){
					  //alert(e);
				  }
                }
				clearSearch(address);

              } else {
				//  alert(result.Status.code);
				  clearSearch(address);
			  }
		});
	  }
	}
	
	function clearSearch(address){
			  $("#loadergif").css("visibility", "hidden");
              $("#searching").html(address + " not found");
              $("#canceltext").html("try again");
		}
	  
	  function plotSearch(point, address){
    		  if (cabmarker){
			  	map.removeOverlay(cabmarker);
			  }
              map.setCenter(point, 17);
              cabmarker = new GMarker(point);
			  GEvent.addListener(cabmarker, 'click', function(){
			  	cabmarker.openInfoWindowHtml("<span style=\"font-family: Verdana, Arial, sans-serif; font-size: 14px; color: #666;\">" + address + "</span>");
			  });
	          map.addOverlay(cabmarker);
			  cancelSearch();
		//	  loadCabData(point.lat(), point.lng());
            
      
    }
	
	
	function checkCache(c){
		for (var w = 0; w < cache.length; w++){
			if (c == cache[w]) return true;
		}
		return false;
	}
	
	function checkCarServiceCache(c){
		for (var w = 0; w < carservicecache.length; w++){
			if (c == carservicecache[w]) return true;
		}
		return false;
	}
	
	
	String.prototype.trim = function() {
		return this.replace(/^\s+|\s+$/g,"");
	}
	String.prototype.ltrim = function() {
		return this.replace(/^\s+/,"");
	}
	String.prototype.rtrim = function() {
		return this.replace(/\s+$/,"");
	}
	
	String.prototype.startsWith = function(str){
		return (this.match("^"+str)==str);
	}

	function searchAddress(){
		var v = $("#searchbox").val();
		v = convert(v);
		$("#searchoverlay").css("left", $("#master").css("left"));
		$("#searchoverlay").css("visibility", "visible");
		$("#loadergif").css("visibility", "visible");
		$("#searching").html("searching for '" + v + "'");
        $("#canceltext").html("Cancel search");
		
		showAddress(v);
	}	
	
	function cancelSearch(){
		$("#searchoverlay").css("visibility", "hidden");
		$("#searching").html("...");
	    $("#loadergif").css("visibility", "hidden");		
		$("#searchbox").focus();
	}
	
	
	function popQR(m){
		if (m == "all"){
			$("#qrcode").css("height", "600px");
			$("#qrcode_ii").css("height", "560px");
			$("#qr_iphone").css("visibility", "visible");
			$("#qr_android").css("visibility", "visible");
		} else if (m == "android"){
			$("#qrcode").css("height", "330px");
			$("#qrcode_ii").css("height", "280px");
			
			$("#qr_iphone").css("visibility", "hidden");
			$("#qr_android").css("visibility", "visible");
		}
		$("#qrcode").css("top", "235px");
		$("#qrcode").css("left", "50px");
		$("#qrcode").css("visibility", "visible");
		window.scroll(0,235);
	}
	
	function closeQR(){
		$("#qr_iphone").css("visibility", "hidden");
		$("#qr_android").css("visibility", "hidden");
		$('#qrcode').css('visibility', 'hidden');
	}
	
	var countFeaturedIn = 0;
	
	function featuredin(w){
		if (w == 0){
			window.open("http://www.nytimes.com/2010/04/03/nyregion/03icab.html", "_new");
		} else if (w == 1){	
			window.open("http://lifehacker.com/5507151/cabsense-predicts-the-best-cab+hailing-spots-in-nyc", "_new");
		} else if (w == 2){	
			window.open("http://venturebeat.com/2010/04/16/cabsense-finds-available-taxis/", "_new");		
		} else if (w == 3){	
			window.open("http://www.amny.com/urbanite-1.812039/new-phone-app-promises-an-easier-taxi-hail-1.1842464", "_new");
		}
	}
	
	function changeFeature(){
		countFeaturedIn++;
		if (countFeaturedIn == 4){
			countFeaturedIn = 0;
		}
		if (countFeaturedIn == 0){
			$("#featuredtext").html('<IMG id="featuredInImage" SRC="images/nytimes.gif" onclick="featuredin(0);"/>');
		} else if (countFeaturedIn == 1){
			$("#featuredtext").html('<IMG id="featuredInImage" SRC="images/lifehacker.gif" onclick="featuredin(1);"/>');
		} else if (countFeaturedIn == 2){
			$("#featuredtext").html('<IMG id="featuredInImage" SRC="images/venture_beat.gif" onclick="featuredin(1);"/>');
		} else if (countFeaturedIn == 3){
			$("#featuredtext").html('<IMG id="featuredInImage" SRC="images/amny.gif" onclick="featuredin(2);"/>');
		}
	}
	
	
	setInterval("changeFeature()", 4500);

	
