
var DEFAULT_TIMEOUT = 60000;

var MAX_TIMEOUT = 10 * DEFAULT_TIMEOUT;

var DEFAULT_PAUSE = 6000;

var currentTimeout = 0;
var lastId = -1;
var fixedMap=false;
var isRunning = false;
var currentData = null;

var currentHTML = "";

function getUserLanguage()
{
 var language=(navigator["language"])?navigator["language"]:navigator["userLanguage"];

 return language; 
}

function getDefaultAd()
{
  if ("ru"==getUserLanguage()) return russianAd;
  else                         return englishAd;
}

function changeTVStatus()
{ 
  var obj = document.getElementById("tvStatus");
  var obj1 = document.getElementById("indicator");

  if (isRunning) 
  {
    isRunning=false;
    if (obj) obj.innerHTML="Start";
    if (obj1) obj1.style.color="red";
  }
  else
  {
    isRunning=true;
    if (obj) obj.innerHTML="Stop";
    if (obj1) obj1.style.color="green";
  } 
}

function changeMapStatus()
{
  var obj = document.getElementById("mapStatus");

  if (fixedMap) 
  {
       fixedMap=false;
       if (obj) obj.innerHTML="Free map";
  }
  else
  {
       fixedMap=true;
       if (obj) obj.innerHTML="Fixed map";
  }
}

function getNewData()
{

//alert("getNewData. isRunning:"+isRunning);

 if (!isRunning)
 {
   handlerNewData("[]","");
   return;
 } 

 var sUrl = "/servlet/GeoSms?f=gnd&id="+lastId;
 if (fixedMap)
 {
  var b = map.getBounds();
  var sw = b.getSouthWest();
  var ne = b.getNorthEast();   

  sUrl+="&lat1="+sw.lat();
  sUrl+="&lng1="+sw.lng();
  sUrl+="&lat2="+ne.lat();
  sUrl+="&lng2="+ne.lng();
 }

//alert("ajax:"+sUrl);

 cjAjaxEngine(sUrl,handlerNewData, errorNewData);
}
  
function getLastId()
{
  cjAjaxEngine("/servlet/GeoSms?f=lid",handlerLid, errorLid,mainBeforeAction, mainAfterAction);
}

function errorLid()
{
  alert("Could not get the latest record from DB.");
}

function handlerNewData(txt, xmlDoc)
{
//alert("handlerNewData."+txt);
  if (txt)
  {
    if (txt.indexOf("[")>=0)
    {
      currentData = eval ("("+txt+")");
      showData(currentData.length-1);
    }
    else
    {
      currentTimeout+=DEFAULT_TIMEOUT;
      if (currentTimeout>MAX_TIMEOUT) currentTimeout=DEFAULT_TIMEOUT;
      setTimeout("getNewData()",currentTimeout);
    }
  }
  else
  {
    currentTimeout+=5*DEFAULT_TIMEOUT;
    setTimeout("getNewData()",currentTimeout);
  }
  
}

function showInfo(id)
{
  if (!markers) return;

  for (i=0; i<markers.length; i++)
  {
    var thisId = markers[i].id;

    if (id==eval(thisId))
    {
       var thisHtml = getCodeForSms(markers[i],false);
       var infoHtml="<div style='width:200px'>"+thisHtml+"</div>"; 
     
       map.openInfoWindowHtml(new GLatLng(markers[i].latitude, markers[i].longitude),infoHtml);

       return;
    }
  }
}

function showData(ind)
{
   var s="";
   var thisHtml="";
   var infoHtml="";
   var thisId=0;
   
   if (ind>=0 && isRunning)
   {
     if (validMessage(currentData[ind]))
     { 
          markers[markers.length]=currentData[ind];

          thisHtml = getCodeForSms(currentData[ind],false);

          infoHtml="<div style='width:200px'>"+thisHtml+"</div>"; 

          if (isRunning)
          {
            if (embed)
            {
                var point = new GLatLng(currentData[ind].latitude, currentData[ind].longitude);
                var t = "#"+currentData[ind].odj+" by "+currentData[ind].phone;
                var m = new GMarker(point,{title:t});

                GEvent.addListener(m, "click", function() {
                 showInfo(currentData[ind].id);
                });

                currentData[ind].marker=m;
                map.addOverlay(m);
            }
            map.openInfoWindowHtml(new GLatLng(currentData[ind].latitude, currentData[ind].longitude),infoHtml);

          }
       
          s+=getCodeForSms(currentData[ind],true);
          s+="<br/>";

          thisId = eval(currentData[ind].id);
          if (thisId>lastId) lastId=thisId;            

          currentHTML=s+currentHTML;
          var obj = document.getElementById("olddata");
          if (obj) obj.innerHTML=currentHTML;    
          setTimeout("showData("+(ind-1)+")",DEFAULT_PAUSE);         
    }
    else
          setTimeout("showData("+(ind-1)+")",DEFAULT_PAUSE/5);
  }
  else
  {      
   if (currentData.length>0) currentTimeout = DEFAULT_TIMEOUT;      
   else                      currentTimeout+= DEFAULT_TIMEOUT;
    if (currentTimeout>MAX_TIMEOUT) currentTimeout=DEFAULT_TIMEOUT;

    if (!isRunning)
      setTimeout("getNewData()",300);
    else 
      setTimeout("getNewData()",currentTimeout);
  }
}

function errorNewData()
{
  alert("Could not get new data from DB.");
  currentTimeout+=5*DEFAULT_TIMEOUT;
  setTimeout("getNewData()",currentTimeout);
}

function handlerLid(txt, xmlDoc)
{
   if (document.getElementById("olddata"))
   {
     if ("ru"==getUserLanguage()) document.getElementById("olddata").innerHTML=russianHelp;
     else                         document.getElementById("olddata").innerHTML=englishHelp;
   }

  if (!txt) alert("DB error: could not get last record");
  else
    if (isNaN(txt)) alert(txt);
    else
    {
      lastId = eval(txt);     
      lastId-=5;
      setTimeout("getNewData()",currentTimeout);
    }
}

function validMessage(obj)
{
   if (!fixedMap) return true;

   var b = map.getBounds();
   var sw = b.getSouthWest();
   var ne = b.getNorthEast();   

   if (obj.latitude <=ne.lat() && obj.latitude>=sw.lat())
     if (obj.longitude<=ne.lng() && obj.longitude>=sw.lng())
       return true;

   return false;    
}

function getCodeForSms(obj,makeLink)
{
  var s;

  if (makeLink) s = "<a href='javascript:void(0)' title='Show on the map' onClick='showInfo("+obj.id+");return false;'>#"+obj.id+"</a>. ";
  else          s = obj.id+". ";
  s+=obj.text;
  s+="<br/>";
  s+="<span class='link_info'> by "+obj.phone+"</span>"; 

  s+=" <"+"a href='javascript:void(0)' title='Discuss this' onClick='getForum("+obj.id+",\""+obj.text+"\");return false;'>"+"<"+"img style='vertical-align:middle' src='icons/document.png' border='0' alt='Discussion'/>"
  s+="</a>";

  s+="("+obj.msgCount+")";

  return s;
}

function pause(millis)
{
  var date = new Date();
  var curDate = null;

  do { curDate = new Date(); }
    while(curDate-date < millis);
} 

