// Массив для хранения информации о группах значков.
var tipGroups = new Array(0);
// Массив для хранения информации значках.
var mapTips = new Array(0);
// Для debug;
var debug=false;

var activeTG = 0; //-- количество активных групп

function vmFeatures(){
  //Подгружаем все значки которые должны быть показаны всегда.
  showTips(0);
  var queryParam, view, viptips;
  queryParam = getQueryParam('view');
  if (!isNaN(parseInt(queryParam))) {view = parseInt(queryParam)};
  // Если в скрипт пришел параметр view=1 то рисуем красную точку в текущих координатах.
  if(view==1){
		var ext = '';
		if(getQueryParam('h')){
			ext = "onmouseout='img_hide();' onmouseover='img_show();'";
		}
    addMapObject("<img src='/images/icons/red-dot.gif'"+ ext +">", geoX, geoY, 7, 7, true);
    shiftMapObjects();
  }
  queryParam = getQueryParam('viptips');
  if (!isNaN(parseInt(queryParam))){
    showTips(parseInt(queryParam));
  }
  queryParam = getQueryParam('oid');
  if (!isNaN(parseInt(queryParam))) {
    orgid = parseInt(queryParam);
    load_js('/?mod=map_tips&act=user_tips&a=5&px=' + geoX + '&py=' + geoY + '&idorg=' + orgid);
  }
  queryParam = getQueryParam('rid');
  if (!isNaN(parseInt(queryParam))) {
    load_js('/?mod=map_tips&act=user_tips&a=6&rub=' + queryParam);
  }
  mapViewCenter(-1);
}

/******************************************************************************************************
  Функции отображения и скрытия легенды - список значков группы.
******************************************************************************************************/
//-- Выдаем индекс группы типсов
function getTGidx(group_id){
  for (i=0; i<tipGroups.length; i++){
    if ( tipGroups[i][0] == group_id ) {
      return i;
    }
  }
}

//-- Снимаем группу типсов
function uncheckTGCB(group){
  var obj=document.getElementById("TGCB" + group);
  obj.checked = false;
  clickTGCB(group);
}


//-- Показываем хинт к иконке в нижней инфо-полоске (группы типсов)
function legendInfoHint(group_id, on){
  var obj=document.getElementById("legendInfoHint");
  if( obj ){
    i = getTGidx(group_id);
    obj.innerHTML = on ? '<b>' + tipGroups[i][1] + '</b> (клик - показать список объектов, даблклик - скрыть объекты)' : '<a href="#" onclick="showTipsList();" title="Группы значков" alt="Группы значков">Выбрать объекты для отображения на карте</a> | <a href="#" onclick="show_start_um();">Создай свою карту</a>';
  }
}


function showTipsList(){
  var obj=document.getElementById("groupsTips");
  if (obj){
    //-- Скрываем список типсов
    hideLLegend();
    obj.style.display='block';
  }
}

function hideTipsList(){
  var obj=document.getElementById("groupsTips");
  if (obj){
    obj.style.display='none';
  };
}

function showLLegend(group_id, is_google){
  var infoDiv=document.getElementById("tipsList");
  //-- Скрываем список групп
  hideTipsList();
  // Ищем div. В него генерируем HTML текст с описанием.
  if (infoDiv){
    var cnn=0, i, buf="";
    // Заголовок легенды.
    buf += "<div align='right' width='100%' height='18px' style='background-image: url(http://i.gorod33.ru/s/blue/glass.gif)'>";
    buf += "<span style='left: 2px; color: #FFFFFF; position: absolute; top:2px; left:5px'><b>";
    buf += "Список значков ";
    // Ищем название группы.
    for (i=0; i<tipGroups.length; i++){
      if (tipGroups[i][0]==group_id) {
        buf += "'"+ tipGroups[i][1] + "'&nbsp;";
        break;
      }
    }
    buf += "</b></span>";
    buf += "<img src='/images/btn/map-close.gif' height='18px' border='0' align='absmiddle' onclick='hideLLegend();'>";
    buf += "</div>";
    // Тело легенды.
    buf += "<div style='overflow: auto; height:370px; margin: 3px;'>";
    buf += "<ul>";
    counter = 0;
    // сначала(сверху) выводим тех, кто оплатил значек
    for (i=0; i<mapTips.length; i++){
      if ( ( mapTips[i][1]==group_id ) && mapTips[i][17] ) {
          //buf += "<img src='http://i.gorod33.ru/s/blue/arrow-go.gif'>&nbsp;<a href='#' onclick='hideLLegend();";
          //if ( is_google ) {
          //  buf += "global_map.panTo( new GLatLng("+mapTips[i][2]+","+mapTips[i][3]+") )";
          //} else {
          //  buf += "shiftMapTo("+mapTips[i][2]+","+mapTips[i][3]+",4)";
          //}
        //buf += "'>" + mapTips[i][8]+"</a><br>";
        buf += mapTips[i][16];
        counter++;
      }
    }
    buf += counter > 0 ? "<hr>" : "";
    // затем выводим всех остальных, кто значек не оплатил
    for (i=0; i<mapTips.length; i++){
      if ( ( mapTips[i][1]==group_id ) && ( !mapTips[i][17] ) ) {
        buf += mapTips[i][16];
      }
    }

    buf += "</ul>";
    buf += "</div>";
    infoDiv.innerHTML=buf;
    infoDiv.style.display="block";
  }
}

function hideLLegend(){
  var legDiv=document.getElementById("tipsList");
  if (legDiv) legDiv.style.display="none";
}

/******************************************************************************************************
  Функции отображения и скрытия легенды - клик на значек.
    i - индекс значка в массиве mapTips
******************************************************************************************************/
function showCLegend(i, is_google ){
  is_google = is_google || false;
  var infoDiv=document.getElementById("clickLegend");
  // Ищем div. В него генерируем HTML текст с описанием.
  if (infoDiv){
    var buf = "";
    // Заголовок легенды.
//    buf += "<div align='left' width='100%' style='background-image: url(http://i.gorod33.ru/s/blue/glass.gif)'>";
//    buf += "<span style='color: #FFFFFF'><b>" + mapTips[i][8] + "</b></span>";
//    buf += "<img src='/images/btn/map-close.gif' height='18px' border='0' align='right' style='position: absolute; top:0px; right:0px' onclick='hideCLegend();'>";
//    buf += "</div>";
    buf += "<div align='right' width='100%' height='18px' style='background-image: url(http://i.gorod33.ru/s/blue/glass.gif)'>";
    buf += "<span style='left: 2px; color: #FFFFFF; position: absolute; top:2px; left:5px'><b>"+ mapTips[i][8] + "</b></span>";
    buf += "<img src='/images/btn/map-close.gif' height='18px' border='0' align='absmiddle' onclick='hideCLegend();'>";
    buf += "</div>";


    // toolbar легенды.
    buf += "<div style='text-align: left; width: 100%; font-size: 8pt; font-weight: normal; margin: 0; background: #eee;'>&nbsp;";
    if( mapTips[i][12] ){
        buf += "<a href='#' onclick='myExtTipClicked("+i+",1);'>" + mapTips[i][13] + "</a>&nbsp;|&nbsp;";
    }
    buf += "<a href='#' onclick='hideCLegend();";
    if ( is_google ) {
      buf += "global_map.panTo(new GLatLng( " + mapTips[i][2] + ", " + mapTips[i][3] + " ) );";
    } else {
      buf += "shiftMapTo("+mapTips[i][2]+","+mapTips[i][3]+",4);";
    }
    buf += "'>перейти к зданию</a>&nbsp;";
    buf += mapTips[i][9] ? "|&nbsp;<a href='" + mapTips[i][9] + "' target='_blank'>подробнее</a>" : "";
    buf += "</div>";
    // Тело легенды.
    buf += "<div style='margin:3px'>";
    buf += mapTips[i][10]+"<br/>";
    buf += "</div>";
    infoDiv.innerHTML=buf;
    infoDiv.style.display="block";
  }
}

function hideCLegend(){
  var legDiv=document.getElementById("clickLegend");
  if (legDiv) legDiv.style.display="none";
}

function myExtTipClicked(i){
  var sticky = document.getElementById('clickLegend');
  if (sticky){
    var buf='';
    // Заголовок легенды.
    buf += "<div align='left' width='100%' style='background-image: url(http://i.gorod33.ru/s/blue/glass.gif)'>";
    buf += "<span style='color: #FFFFFF'><b>" + mapTips[i][8] + "</b></span>";
    buf += "<img src='/images/btn/map-close.gif' height='18px' border='0' align='right' style='position: absolute; top:0px; right:0px' onclick='hideCLegend();'>";
    buf += "</div>";
    // toolbar легенды.
    buf += "<div style='text-align: left; width: 100%; font-size: 8pt; font-weight: normal; margin: 0; background: #eee;'>&nbsp;";
    buf += "<a href='#' onclick='showCLegend("+i+");'>вернуться к описанию</a>";
    buf += "</div>";
    // Тело легенды.
    buf += "<div style='margin:3px'>";
    buf += mapTips[i][12];
    buf += "</div>";
    sticky.innerHTML = buf;
  }
}

/******************************************************************************************************
  Функции отображения и скрытия легенды - наведение мышью.
    i - индекс значка в массиве mapTips
******************************************************************************************************/
function showOLegend(i){
  var legDiv=document.getElementById("overLegend");
  // Ищем div. В него генерируем HTML текст с описанием.
  if (legDiv){
    // Текст это параметр info_flash
    var hint_txt="<h3>Информация не заполнена.</h3>";
    legDiv.style.background = mapTips[i][18];
    if ( mapTips[i][18] == 'transparent' ) {
      legDiv.style.borderWidth = '0px';
    } else {
      legDiv.style.borderWidth = '1px';
    }
    if (mapTips[i][11]!=""){
      hint_txt=mapTips[i][11];
    } else {
      if (mapTips[i][8]!="") hint_txt="<h3>"+mapTips[i][8]+"</h3>";
    }
    legDiv.innerHTML=hint_txt;
    // Ищем где расположен div значка. Там же всплывает подсказка.
    obj=mapObjects[mapTips[i][0]][0];
    legDiv.style.left=(parseInt(obj.style.left)+parseInt(obj.style.width)+15)+'px';
    legDiv.style.top=parseInt(obj.style.top)+'px';
    legDiv.style.display="block";
  }
}

function hideOLegend(){
  var legDiv=document.getElementById("overLegend");
  if (legDiv) legDiv.style.display="none";
}


function show_legend_near_org( inner_html ){
  var legDiv=document.getElementById("overLegend");
  // Ищем div. В него генерируем HTML
  if (legDiv){
    // Текст это параметр info_flash
    legDiv.innerHTML = inner_html;
    // Ищем где расположен div значка. Там же всплывает подсказка.
    main_vp = document.getElementById("viewport");
    legDiv.style.left = (tempX - main_vp.offsetLeft + 10) + 'px';
    legDiv.style.top = (tempY - main_vp.offsetTop + 10) + 'px';
    /*
    // обращаемся к типсу, который показывает позицию ближайшей организации
    obj=mapObjects[near_org_tip_id][0];
    legDiv.style.left=(parseInt(obj.style.left)+parseInt(obj.style.width)+15)+'px';
    legDiv.style.top=parseInt(obj.style.top)+'px';
    */
    legDiv.style.background = '#ffffff';
    legDiv.style.borderWidth = '1px';
    legDiv.style.display="block";
  }
}


/***************************************************************************************************
  Функции для отображения, скрытия значков.
***************************************************************************************************/
function clickTGCB(group_id){

  var obj=document.getElementById("TGCB"+group_id);
  var obj_list=document.getElementById("TGL"+group_id);
  var obj_img=document.getElementById("TGI"+group_id);
  var objll_img=document.getElementById("TGIll"+group_id);
  var objli=document.getElementById("legendInfoImgs");
  var i;
  if (obj){
    if (obj.checked){
      showTips(group_id);
      //if (obj_list) obj_list.innerHTML = "<span style='text-decoration: underline;' onclick='showLLegend("+group_id+")'>список</span>";

//      objli.style.display = 'block';
      objll_img.style.display = 'block';

      activeTG++;
    } else {
      hideTips(group_id);
      if (obj_list) obj_list.innerHTML = "список";
      objll_img.style.display = 'none';
      hideLLegend();


      activeTG--;
      if( !activeTG ){
//        objli.style.display = 'none';
      }
    }

    // Меняем картинку у группы.
    if (obj_img){
      i = getTGidx(group_id);
      obj_img.src = '/' + (obj.checked ? tipGroups[i][2] : tipGroups[i][3]);
    }
  }

}

function showTips(group_id){
  var i;
  group_id=parseInt(group_id);
  //Проверяем загружена ли значки группы.
  if (isloadTG(group_id)){
    //Перебираем значки из массива. Ищем относящиеся к группе и показываем.
    for (i=0; i<mapTips.length; i++){
      if ( mapTips[i][1]==group_id )
        mapObjects[mapTips[i][0]][5]=true;
    }
    shiftMapObjects();
  } else {
    //Подгружаем js скрипт с информацией о значках. Этот скрипт добавит значки
    // с помощью addTip и в конце вызовет initTips.
    addJS('index', '?mod=map_tips&act=load_tips&g='+group_id);
    //addJS('tips', '?g='+group_id);    
  }
}


function hideTips(group_id){
  var i;
  group_id=parseInt(group_id);
  //Проверяем загружена ли значки группы.
  if (isloadTG(group_id)){
    //Перебираем значки из массива. Ищем относящиеся к группе и скрываем.
    for (i=0; i<mapTips.length; i++){
      if (mapTips[i][1]==group_id){
        if (debug) alert(mapTips[i][8]+' icon group_id='+mapTips[i][1]);
        mapObjects[mapTips[i][0]][5]=false;
      }
    }
    shiftMapObjects();
  }
}


/***************************************************************************************************
  Функции для добавления, начальной инициализации значков.
***************************************************************************************************/
// Функция добавления значка в массив.
function addTip(id, group_id, x, y,
                img_name, img_width, img_height, img_scaled,
                title, url, text,
                info_flash, info_orgs, info_org_title, list_org, is_viptip, bgcolor){
  bgcolor = bgcolor || false;
  is_viptip = is_viptip || false;
  mapTips[mapTips.length] = new Array(19);
  mapTips[mapTips.length-1][0] = -1; // индекс значка в массиве mapObjects;
  mapTips[mapTips.length-1][1] = group_id;
  mapTips[mapTips.length-1][2] = x;
  mapTips[mapTips.length-1][3] = y;
  mapTips[mapTips.length-1][4] = img_name;
  mapTips[mapTips.length-1][5] = img_width;
  mapTips[mapTips.length-1][6] = img_height;
  mapTips[mapTips.length-1][7] = img_scaled;
  mapTips[mapTips.length-1][8] = title;
  mapTips[mapTips.length-1][9] = url;
  mapTips[mapTips.length-1][10] = text;
  mapTips[mapTips.length-1][11] = info_flash;
  mapTips[mapTips.length-1][12] = info_orgs;
  mapTips[mapTips.length-1][13] = info_org_title;
  mapTips[mapTips.length-1][14] = id;
  mapTips[mapTips.length-1][15] = true; // Visible
  // Содержит html для генерации списка значков у этой иконки.
  mapTips[mapTips.length-1][16] = list_org;
  mapTips[mapTips.length-1][17] = is_viptip;
  if ( bgcolor ) {
    mapTips[mapTips.length-1][18] = bgcolor;
  } else {
    mapTips[mapTips.length-1][18] = "#ffffff";
  }
  return true;
}


function initTips(group_id){
  var i;
  // Указываем в массиве групп значков, что инфа о значках загружена в массив.
  for (i=0; i<tipGroups.length; i++){
    if (tipGroups[i][0]==group_id) {
      tipGroups[i][5]=true;
      break;
    }
  }
  // Создаем объекты карты. Только те, что загружены - т.е. c group_id
  for (i=0; i<mapTips.length; i++){
    if (mapTips[i][1]==group_id){
      mapTips[i][0] = addMapObject("", mapTips[i][2], mapTips[i][3], mapTips[i][5], mapTips[i][6], true);
    }
  }
  onChangeScale();
  // Отображаем значки.
  shiftMapObjects();
}

//Функция вызывающаяся при смене масштаба. Вызов тупо прописан в map.js Меняем картинки на img_scale;
function onChangeScale(){
  var i, txt, obj, pre_txt, past_txt;
  // Пробегаем по объектам на карте.
  for (i=0; i<mapTips.length; i++){
    pre_txt = '';
    past_txt = '';
    txt = "<img";
    if (scale < 3){
       txt += " src='/images/icons/"+mapTips[i][7]+"' width='5px' height='5px'";
    } else {
       txt += " src='/"+mapTips[i][4]+"' width='100%' height='100%'";
    }
    // Если поле text не пустое - то у значка есть mouse click подсказка!
    if (mapTips[i][10]!=''){
      txt += " onclick='showCLegend("+i+")'";
    }else if(mapTips[i][9]!=''){
      pre_txt = "<a href='" + mapTips[i][9] + "' target='_blank'>";
      past_txt = "</a>";
    }
    // Если поле info_flash не пустое - то у значка есть mouse over подсказка!
    //if (mapTips[i][11]!='')
    txt += " onmouseover='showOLegend("+i+")' onmouseout='hideOLegend()'";
    txt += ">";
    mapObjects[mapTips[i][0]][0].innerHTML = pre_txt + txt + past_txt;
  }
}

// Функция добавления группы значков в массив. Надо добавить сюда количество значков в группе.
function addTG(id, title, imagename, imagename_dis, image_scaled){
  tipGroups[tipGroups.length] = new Array(6);
  tipGroups[tipGroups.length-1][0] = id;
  tipGroups[tipGroups.length-1][1] = title;
  tipGroups[tipGroups.length-1][2] = imagename;
  tipGroups[tipGroups.length-1][3] = imagename_dis;
  tipGroups[tipGroups.length-1][4] = image_scaled;
  tipGroups[tipGroups.length-1][5] = false; // Признак: Подгружены ли данные этой группы
  tipGroups[tipGroups.length-1][6] = true; // Отображать ли значки группы (для googlemap)
  return true;
}

// Функция проверки загружена ли группа с добавления группы значков в массив.
function isloadTG(id){
  var i, result=false;
  for (i=0; i<tipGroups.length; i++){
    if (tipGroups[i][0]==id) {
      result=tipGroups[i][5];
      break;
    }
  }
  return result;
}


function addJS(jsFile, getParams) {
  var o = document.createElement('script');
  o.setAttribute('src', '/' + jsFile+'.php'+getParams);
  o.setAttribute('id', jsFile);
  document.body.appendChild(o);
}

function removeJS(jsID) {
  var o = document.getElementById(jsID);
  if (o != null)
    document.body.removeChild(o);
}
