var map = null;
var geocoder = null;
var marker = null;

function initialize() {
  if (GBrowserIsCompatible()) {
		setupLocation(getPhone().lat, getPhone().lon);
		setupPresence(getPhone().presence);
		setInterval("updateSMS();", 5000);
  }
};

function checkPresence(){
	var value = false;
	if($("#presence_status").text() == "Online"){
		value = true;
	}		 
	return value;	
}

function setupPresence(presence){
	setPresenceText(presence);
	$("#presence").attr("checked", presence).click(function(){
		updatePresence(getPhone().id,!checkPresence());
	});	
}

function updatePresence(phone_id, value){
	$("#presence_loader").show();
	$.ajax({
    type: "POST",
    url: "/devSandbox/phones/" + phone_id + "/presence",
    data:{presence: value},
    dataType: "json",
    success: function(data){
      if(data["error"] == undefined){
				setPresenceText(data["presence"]);
      } else{
         // reset Point
         console.debug("error" + returnVar);
      }
    },
		complete: function(){$("#presence_loader").hide();}
  });	
}

function setPresenceText(value){
	var status = "Online";
	var SMS_msg = "SMS Enabled";
	var loc_msg = "Location Trackable";
	var style = "success";
	if(value == false){
		status = "Offline";
	  SMS_msg = "SMS Disabled";
		loc_msg = "Location Untrackable";
		style = "error";
	}
 
	$("#presence_status").text(status);
	$("#sms_screen").prepend("<p class='"+ style +"'>" + SMS_msg + "</p>");	
	$("#map_response_holder").empty().append("<div class='" + style +
		" map_response'>" + loc_msg + "</div>");
}

function setupLocation(lat, lng){
	map = new GMap2(document.getElementById("map_canvas"));         
  var center = new GLatLng(lat,lng);
  map.setCenter(center, 16);

  marker = new GMarker(center, {draggable: true});

  GEvent.addListener(marker, "dragstart", function() {
     map.closeInfoWindow();
  });
 
  var callback = function() {
    var point = marker.getPoint();
    marker.openInfoWindowHtml("I'm at " + point.toUrlValue());
		updatePhoneCoords(getPhone().id, point);
  }
 
  GEvent.addListener(marker, "dragend", callback);
  
  map.addOverlay(marker);
  map.addControl(new GSmallMapControl());
  map.addControl(new GMapTypeControl());          
  
  geocoder = new GClientGeocoder();  
}

function updatePhoneCoords(phone_id, point){	
	$.ajax({
    type: "POST",
    url: "/devSandbox/phones/" + phone_id + "/location",
    data:{lat: point.lat(), lon: point.lng()},
    dataType: "json",
    success: function(data){
      if(data["error"] == undefined){     
				$("#map_response_holder").empty();
				$("#phone_location").text(point.lat() + ", " + point.lng());
      } else{
				$("#map_response_holder").empty().
					append("<div class='error map_response'>Update Failed, Please move pin again.</div>");
      }
    }
  });
}

function showAddress(address) {
  if (geocoder) {
    geocoder.getLatLng(
      address,
      function(point) {
        if (!point) {
					$("#map_response_holder").empty().
						append("<div class='error map_response'>" + address + " not found.</div>");
        } else {
          map.setCenter(point, 13);
          marker.setLatLng(point);
          marker.openInfoWindowHtml("I'm at " + point.toUrlValue() +
						"<br/>" + address);
					updatePhoneCoords(1, point);
        }
      }
    );
  }
}

function updateSMS(){
	if(checkPresence()){		   		
		$("#sms_activity").show();
		$.getJSON("/devSandbox/phones/" + getPhone().id + "/sms", function(data){
			$("#sms_activity").hide();
			$.each(data,function(){
				$("#sms_screen").prepend("<p class='sms'>" + this["message"] + "</p>");
			});
		});
	}		
	return true;
}

function sendSMS(){
	$("#message_loader").show();
	$(".message_response").remove();
	$.ajax({
		type: "GET",
		url: "/devSandbox/resources/sms.json",
		data: {key:"none", mdn:"test_" + getPhone().id,
					 senderName:"emulator",message:$("#message").val()},
		dataType: "jsonp",
		success: function(data){
			$("#message").val("");
			$("#message_response_holder").empty().
				after("<div class='success message_response'>Successful. Tranno is "+ data["tranno"] +"</div>");
		},
		complete: function(){
			$("#message_loader").hide()
		}
	});	
}

$.fn.flash = function(style,message){
	$(this).children().remove();;
	$(this).removeClass("error notice success");
	$(this).
		addClass(style).
		text(message).
		show("blind");	
}