function p(id, dest_lang, src_lang) {
  var url = 'ln.php?' + id;
  if(dest_lang) {
      url += '&trto=' + dest_lang;
  }
  if(src_lang) {
      url += '&trfr=' + src_lang;
  }
  uP(url, id);
}
function xP(id) {
  uP('x.php?lc=' + lang + '&id=' + id, id);
}
function sc(lat, lon, lvl) {
  map.setCenter(new GLatLng(lat, lon),lvl);
}
function slu(id, name) {
    var bUrl = 'dlu.php?lc=' + lang;
    var pStr1 = "uP('" + bUrl + "&t=1&id=" + id + "'," + id + ")";
    var pStr2 = "uP('" + bUrl + "&t=2&id=" + id + "'," + id + ")";
    var pStr3 = "uP('" + bUrl + "&t=3&id=" + id + "'," + id + ")";
    var pStr4 = "uP('" + bUrl + "&t=4&id=" + id + "'," + id + ")";
    var pStr5 = "uP('" + bUrl + "&t=5&id=" + id + "'," + id + ")";
    i$('dlud').innerHTML = '<b>' + name + '</b><br/>';
    i$('dlud').innerHTML += '&bull; <a href="javascript:;" onclick="' + pStr1 + '">Wikipedia</a><br/>';
    i$('dlud').innerHTML += '&bull; <a href="javascript:;" onclick="' + pStr4 + '">WHO</a><br/>';
    i$('dlud').innerHTML += '&bull; <a href="javascript:;" onclick="' + pStr2 + '">CDC</a><br/>';
    i$('dlud').innerHTML += '&bull; <a href="javascript:;" onclick="' + pStr3 + '">PubMed</a><br/>';
    i$('dlud').innerHTML += '&bull; <a href="javascript:;" onclick="' + pStr5 + '">Google Trends</a><br/>';
    i$('dlud').innerHTML += '<br/><a href="javascript:;" style="text-align: right" onclick="i$(\'dlud\').style.display = \'none\';">close</a>';
    i$('dlud').style.display = '';
}
// function alias to save bandwith on ajax calls
var visiMrk = new Array();
var markerArray = new Array();
function a(marker, hide_id) {
  if(hide_id) {
      //marker.hide();
      marker.onMap = 0;
      if(isArray(visiMrk[hide_id])) {
        visiMrk[hide_id].push(marker);
      } else {
        visiMrk[hide_id] = new Array(marker);
      }
  } else {
    map.addOverlay(marker);
    markerArray.push(marker);
  }
}
// this is some experimental stuff for expand/collapse markers
//var pl = new GIcon();
//pl.image = "http://healthmap.chip.org/~cfreifeld/da/img/5+.png";
//pl.shadow = "http://healthmap.org/img/mm_shadow.png";
//pl.shadowSize = new GSize(22,20);
//pl.iconSize = new GSize(32,32);
//pl.iconAnchor = new GPoint(16,16);
//pl.iconSize = new GSize(12,20);
//pl.iconAnchor = new GPoint(6,20);
//pl.infoWindowAnchor = new GPoint(6,10);
function cXM(point, tooltip, id) {
  var marker = new GMarker(point,{'icon': pl, 'title': tooltip});
  GEvent.addListener(marker, "click", function() { toggleVisiMrk(id); marker.hide(); });
  return marker;
}
function toggleVisiMrk(id) {
  if(isArray(visiMrk[id])) {
    for(var i = 0; i < visiMrk[id].length; i++) {
      m = visiMrk[id][i];
      if(!m.onMap) {
        map.addOverlay(m);
        m.onMap = 1;
      } else if(m.isHidden()) {
        m.show();
      } else {
        m.hide();
      }
    }
  }
}

function pT(lat,lon) {
    return new GLatLng(lat,lon);
}
// adapted from ecmanaut
function formatTime( timeInteger )
{
  function zpad( n ){ return n>9 ? n : '0'+n; }
  var t = new Date();
  t.setTime(timeInteger * 1000);
  var Y = t.getFullYear();
  var M = t.getMonth(); // month-1
  var D = t.getDate();
  //var d = t.getDay(); // 0..6 == sun..sat
  var mon = monAbbr[M];
  var h = t.getHours();
  var m = t.getMinutes();
  // var s = t.getSeconds();
  //return day +' '+ D +' '+ mon +', '+ Y +', '+ zpad(h)+':'+zpad(m)+':'+zpad(s);
  return D +' '+ mon +' '+ Y +' '+ zpad(h)+':'+zpad(m);
}

function initTags(checkAll) {
    for(var ti = 0; ti < tagIds.length; ti++) {
        var t = tagIds[ti];
        var tagCheck = i$('tag' + t);
        if(checkAll) {
            state['alert_tag_id']['' + t] = 1;
            tagCheck.checked = 1;
        }
        tagCheck.fieldType = 'alert_tag_id';
        tagCheck.dbId = t;
        addEvent(tagCheck, "click", stateChange);
        addEvent(i$('tn' + t), 'mouseover', hilite);
        addEvent(i$('tn' + t), 'mouseout', unHilite);
    }
}

function initDiseases(checkAll) {
    for(var di = 0; di < diseaseIds.length; di++) {
        var d = diseaseIds[di];
        var dizCheck = i$('diz' + d);
        if(checkAll) {
            state['disease_id']['' + d] = 1;
            dizCheck.checked = 1;
        }
        dizCheck.fieldType = 'disease_id';
        dizCheck.dbId = d;
        addEvent(dizCheck, "click", stateChange);
        addEvent(i$('dn' + d), 'mouseover', hilite);
        addEvent(i$('dn' + d), 'mouseout', unHilite);
    }
}
//var requestLock = false;
function stateChange(evt) {
    var tg = getTarget(evt);
    // update state object
    // TODO: eventually we will have non boolean state fields
    //state[tg.fieldType][tg.dbId] = tg.checked ? 1 : 0;
    tg.checked ? state[tg.fieldType][tg.dbId] = 1 : delete state[tg.fieldType][tg.dbId];
    //if(!requestLock) {
    //    requestLock = true;
    //    setTimeout('xajax_update_map(state)', 1500);
    //}
    //THIS IS FOR TIMELINE VS MAP
    if(i$('content').className == "hide") {
        updTimeline();
    } else {
        updMap();
    }
}
function setAllCheck(type, value) {
    var idMap = {'diz':diseaseIds, 'feed':feedIds, 'tag':tagIds};
    var f     = {'diz':'disease_id', 'feed':'feed_id', 'tag':'alert_tag_id'};
    //if(type == 'diz') {
    //    var ids = diseaseIds;
    //    var fieldType = 'disease_id';
    //}
    var ids = idMap[type];
    var fieldType = f[type];
    for(var i = 0; i < ids.length; i++) {
        if(i$(type + ids[i])) {
            i$(type + ids[i]).checked = value;
        }
        //state[fieldType][ids[i]] = value;
        value ? state[fieldType][ids[i]] = value : delete state[fieldType][ids[i]];
    }
}
function updMap()
{
    // clear map
    counter = 0;
    // marker_html = [];
    points = [];
    markers = [];

    //TODO: activate spinner here
    //document.body.style.cursor = 'wait';
    // hit the server
    xajax_update_map(state, sdate, edate, pathToMain);
}
function expCollDiv(divid, dividlink)
{
    if(i$(divid).className == "hide") {
        i$(dividlink).innerHTML = '- hide';
        i$(divid).className = "block";
    } else {
        i$(dividlink).innerHTML = '+ more';
        i$(divid).className = "hide";
    }
}
