var firstPOI = null;
var lastPOI = null;
var oldCoord = null;
var selectedPOI = new Array();
var currentZIndex = 100;
var poiCloseClicked = false;
var popupZIndex = 1100;

function setZIndex(num)
{
  currentZIndex = num;
}        
        function VM_startUp() {
            $('.POI').hover(function() {
                    if($.inArray(this, selectedPOI) == -1) { 
                      firePopup($(this));
                    }
                    $(this).css('z-index', popupZIndex++);
                },
                function() {
                    if($.inArray(this, selectedPOI) == -1) {
                      $(this).children('div').hide();
                      $(this).children('img').css('visibility', 'visible');
                      $(this).css('z-index', currentZIndex++);
                      if($.browser.msie)
                      {
                        $('.vm_ctrl_arrow_up img').css('visibility', 'visible');
                        $('.vm_ctrl_arrow_down img').css('visibility', 'visible');
                        $('.vm_ctrl_arrow_left img').css('visibility', 'visible');
                        $('.vm_ctrl_arrow_right img').css('visibility', 'visible');
                      }
                    }
                })
		.click(function() {
                    if($.inArray(this, selectedPOI) == -1 && !poiCloseClicked) {
                      selectedPOI.push(this);
                      $(this).find('img').each(function(){
                        if($(this).hasClass('CloseBtn')) $(this).show();
                      });
                      //$(this).find('.CloseBtn').show();
                      $(this).css('z-index', popupZIndex++);
                    }
                    else poiCloseClicked = false;

                });


            $('.CloseBtn').click( function() {
                poiEl = $(this).hide().parents('.POI');
                poiEl.children('div').hide();
                poiEl.children('img').css('visibility', 'visible');
                for (i = 0; i < selectedPOI.length; i++) {
                  if (selectedPOI[i] == poiEl.get(0)) {
                    selectedPOI.splice(i, 1);
                    break;
                  }
                }
                poiCloseClicked = true;
            });

	    $('div.ZoomDetail').each(function() {
                var coords = $(this).attr('rel').split('-');
                $(this).css({ 'margin-left': coords[0] + 'px', 'margin-top': coords[1] + 'px' });
            }).hover(function() {
                reg = /(\d+)px/;
                mapObj = $('.MapMain');
	        mw = $('.vm_MapPane');
               
                mapTopCoord = parseInt(mapObj.css('top').replace(reg, '$1'));
                mapLeftCoord = parseInt(mapObj.css('left').replace(reg, '$1'));
                zoomTopCoord = parseInt($(this).css('margin-top').replace(reg, '$1'));
                zoomLeftCoord = parseInt($(this).css('margin-left').replace(reg, '$1'));

                h = 'R';
                v = 'B';
                if (mapLeftCoord + zoomLeftCoord + 145 > mw.width()) {
                    h = 'L';
                }
                if (mapTopCoord + zoomTopCoord + 87 > mw.height()) {
                    v = 'T';
                }
                $(this).children('div').removeClass().addClass(v+h);
		$(this).find('div').each(function() {
                  if($(this).hasClass('ZoomPopup')) $(this).show();
                });
                $(this).css('z-index', popupZIndex++).find('.ZoomButton').css('visibility', 'hidden');
                
            });
            $('.ZoomPopup').hover(function() { }, function() {
                $(this).hide().parents('div.ZoomDetail').find('.ZoomButton').css('visibility', 'visible');
                $(this).css('z-index', currentZIndex++);
            });

            colors = [['GeneralServices' , 'red'], ['Shopping' , 'blue'], ['Outdoor' , 'orange'], ['Restaurants' , 'purple'], ['Indoor' , 'teal']];
            for (i = 0; i < colors.length; i++) {
                setUpPOI(colors[i]);
            }
            $('.MapMain').css('cursor', 'url(' + openHandCursor + '), default').mousedown(function(e) {
                oldCoord = e;
                $(this).css('cursor', 'url(' + closeHandCursor + '), default');
            }).mousemove(function(e) {
                if (oldCoord != null) {
                    mapObj = $('.MapMain');
	            mw = $('.vm_MapPane');
                    maxLeft = (mw.width() - $(this).width());
                    maxTop = (mw.height() - $(this).height());
                    leftStep = e.pageX - oldCoord.pageX;
                    topStep = e.pageY - oldCoord.pageY;

                    reg = /(\d+)px/;
                    leftCoord = parseInt(mapObj.css('left').replace(reg, '$1'));
                    topCoord = parseInt(mapObj.css('top').replace(reg, '$1'));
                    if (leftCoord > -leftStep) {
                        leftStep = -leftCoord;
                        tmpImg = $('.vm_ctrl_arrow_left img')[0];
                        tmpImg.src = tmpImg.src.replace('arrow_left_on.png', 'arrow_left_off.png');
                    }
                    if (leftCoord < (maxLeft - leftStep)) {
                        leftStep = maxLeft - leftCoord;
                        tmpImg = $('.vm_ctrl_arrow_right img')[0];
                        tmpImg.src = tmpImg.src.replace('arrow_right_on.png', 'arrow_right_off.png');
                    }
                    if (topCoord < (maxTop - topStep)) {
                        topStep = maxTop - topCoord;
                        tmpImg = $('.vm_ctrl_arrow_down img')[0];
                        tmpImg.src = tmpImg.src.replace('arrow_down_on.png', 'arrow_down_off.png');
                    }
                    if (topCoord > -topStep) {
                        topStep = -topCoord;
                        tmpImg = $('.vm_ctrl_arrow_up img')[0];
                        tmpImg.src = tmpImg.src.replace('arrow_up_on.png', 'arrow_up_off.png');
                    }
                    if (leftCoord + leftStep <= 0 && leftCoord + leftStep >= maxLeft)
                        mapObj.css('left', (leftCoord + leftStep) + 'px');
                    if (topCoord + topStep <= 0 && topCoord + topStep >= maxTop)
                        mapObj.css('top', (topCoord + topStep) + 'px');

                    tmpImg = $('.vm_ctrl_arrow_left img')[0];
                    if (leftCoord + leftStep < 0 && tmpImg.src.indexOf('arrow_left_off.png') > 0) {
                        tmpImg.src = tmpImg.src.replace('arrow_left_off.png', 'arrow_left_on.png');
                    }
                    tmpImg = $('.vm_ctrl_arrow_right img')[0];
                    if (leftCoord + leftStep > maxLeft && tmpImg.src.indexOf('arrow_right_off.png') > 0) {
                        tmpImg.src = tmpImg.src.replace('arrow_right_off.png', 'arrow_right_on.png');
                    }
                    tmpImg = $('.vm_ctrl_arrow_up img')[0];
                    if (topCoord + topStep < 0 && tmpImg.src.indexOf('arrow_up_off.png') > 0) {
                       tmpImg.src = tmpImg.src.replace('arrow_up_off.png', 'arrow_up_on.png');
                    }
                    tmpImg = $('.vm_ctrl_arrow_down img')[0];
                    if (topCoord + topStep > maxTop && tmpImg.src.indexOf('arrow_down_off.png') > 0) {
                       tmpImg.src = tmpImg.src.replace('arrow_down_off.png', 'arrow_down_on.png');
                    }
                    oldCoord = e;
                }
            }).mouseup(function(e) {
                oldCoord = null;
                $(this).css('cursor', 'url(' + openHandCursor + '), default');
            });
            
            $(".POI_Parking").hover( function() {
              $(this).css('z-index', currentZIndex++).find('div').show();
            }, function() {
              $(this).find('div').hide();
            });

            $(".POI_Trains").hover( function() {
              $(this).css('z-index', currentZIndex++).find('div').show();
            }, function() {
              $(this).find('div').hide();
            });
        }

        function setUpPOI(color) {
            chkImage = $('td.' + color[0]).next().find('img')[0];
            pois = $('.POI h2.'+color[0]).parents('.POI');
            if (chkImage.src.indexOf('img_checkbox_off.jpg') < 0) {
                if (firstPOI == null || lastPOI == null) {
                    pois.fadeIn();
                    if (firstPOI == null)
                        firstPOI = color[0];
                    else if (lastPOI == null)
                        lastPOI = color[0];
                }
                else {
                    chkImage.src = chkImage.src.replace('img_checkbox_sel_' + color[1] + '.gif', 'img_checkbox_off.jpg');
                    pois.hide();
                }
            }
            else {
                pois.hide();
            }
        }
        
        function showMarkers(type, color) {
            chkImage = $('td.' + type).next().find('img')[0];
            pois = $('.POI h2.'+type).parents('.POI');
            if (pois.css('display') == 'block') {
                if($.browser.msie) pois.hide();
                else pois.fadeOut();
                if (firstPOI == type) {
                    if (lastPOI != null) {
                        firstPOI = lastPOI;
                        lastPOI = null;
                    }
                    else firstPOI = null;
                }
                else {
                    if (lastPOI == type) lastPOI = null;
                }
                chkImage.src = chkImage.src.replace('img_checkbox_sel_' + color + '.gif', 'img_checkbox_off.jpg');
            }
            else {
                if($.browser.msie) pois.show();
                else pois.fadeIn();
                chkImage.src = chkImage.src.replace('img_checkbox_off.jpg', 'img_checkbox_sel_' + color + '.gif');
                if (firstPOI == null)
                    firstPOI = type;
                else {
                    if (lastPOI == null) {
                        lastPOI = type;
                    }
                    else {
                        if($('.POI h2.' + firstPOI).length > 0) {
                          showMarkers(firstPOI, getCheckboxColor(firstPOI));
                        }
                        else
                        {
                          if(lastPOI != type) {
                            firstImg = $('td.' + firstPOI).next().find('img')[0];
                            firstImg.src = firstImg.src.replace('img_checkbox_sel_' + getCheckboxColor(firstPOI) + '.gif', 'img_checkbox_off.jpg');
                            firstPOI = lastPOI;
                          } 
                          lastPOI = null;
                        }
                        chkImage = $('td.' + type).next().find('img')[0];
                        if(chkImage.src.indexOf('img_checkbox_sel_' + color + '.gif') > 0)
                          lastPOI = type;
                    }
                }
            }
        }

        function rightMove() {
            if ($('.vm_ctrl_arrow_right img')[0].src.indexOf('arrow_right_off.png') < 0) {
                mapObj = $('.MapMain');
                wrapperWidth = $('.vm_MapPane').width();
                reg = /(\d+)px/;
                left = parseInt(mapObj.css('left').replace(reg, '$1'));
                mapWidth = mapObj.width();
                if (left <= (wrapperWidth - mapWidth + 100)) {
                    step = -(wrapperWidth - mapWidth) + left;
                    tmpImg = $('.vm_ctrl_arrow_right img')[0];
                    tmpImg.src = tmpImg.src.replace('arrow_right_on.png', 'arrow_right_off.png');
                }
                else step = 100;
                mapObj.animate({'left' : (left - step) + 'px'}, "normal");
                tmpImg = $('.vm_ctrl_arrow_left img')[0]
                if (tmpImg.src.indexOf('arrow_left_off.png') > 0) {
                    tmpImg.src = tmpImg.src.replace('arrow_left_off.png', 'arrow_left_on.png');
                }
            }
        }
        function leftMove() {
            if ($('.vm_ctrl_arrow_left img')[0].src.indexOf('arrow_left_off.png') < 0) {
                mapObj = $('.MapMain');
                reg = /(\d+)px/;
                left = parseInt(mapObj.css('left').replace(reg, '$1'));
                if (left >= -100) {
                    step = -left;
                    tmpImg = $('.vm_ctrl_arrow_left img')[0];
                    tmpImg.src = tmpImg.src.replace('arrow_left_on.png', 'arrow_left_off.png');
                }
                else step = 100;
                mapObj.animate({'left' : (left + step) + 'px'}, "normal");
                tmpImg = $('.vm_ctrl_arrow_right img')[0]
                if (tmpImg.src.indexOf('arrow_right_off.png') > 0) {
                    tmpImg.src = tmpImg.src.replace('arrow_right_off.png', 'arrow_right_on.png');
                }
            }
        }
        
        function downMove() {
            if ($('.vm_ctrl_arrow_down img')[0].src.indexOf('arrow_down_off.png') < 0) {
                mapObj = $('.MapMain');
                wrapperHeight = $('.vm_MapPane').height();
                reg = /(\d+)px/;
                topCoord = parseInt(mapObj.css('top').replace(reg, '$1'));
                mapHeight = mapObj.height();
                if (topCoord <= (wrapperHeight - mapHeight + 100)) {
                    step = -(wrapperHeight - mapHeight) + topCoord;
                    tmpImg = $('.vm_ctrl_arrow_down img')[0];
                    tmpImg.src = tmpImg.src.replace('arrow_down_on.png', 'arrow_down_off.png');
                }
                else step = 100;
                mapObj.animate({'top' : (topCoord - step) + 'px'}, "normal");
                tmpImg = $('.vm_ctrl_arrow_up img')[0]
                if (tmpImg.src.indexOf('arrow_up_off.png') > 0) {
                    tmpImg.src = tmpImg.src.replace('arrow_up_off.png', 'arrow_up_on.png');
                }
            }
        }
        
        function upMove() {
            if ($('.vm_ctrl_arrow_up img')[0].src.indexOf('arrow_up_off.png') < 0) {
                mapObj = $('.MapMain');
                reg = /(\d+)px/;
                topCoord = parseInt(mapObj.css('top').replace(reg, '$1'));
                if (topCoord >= -100) {
                    step = -topCoord;
                    tmpImg = $('.vm_ctrl_arrow_up img')[0];
                    tmpImg.src = tmpImg.src.replace('arrow_up_on.png', 'arrow_up_off.png');
                }
                else step = 100;
                mapObj.animate({'top' : (topCoord + step) + 'px'}, "normal");
                tmpImg = $('.vm_ctrl_arrow_down img')[0]
                if (tmpImg.src.indexOf('arrow_down_off.png') > 0) {
                    tmpImg.src = tmpImg.src.replace('arrow_down_off.png', 'arrow_down_on.png');
                }
            }
        }


function getMap(pathToMap)
{
  selectedMap = pathToMap;
  mw = $('.vm_MapPane');
  mw.html($('#msgLoading').html());
  $('.vm_ctrl_arrow_up').hide();
  $('.vm_ctrl_arrow_down').hide();
  $('.vm_ctrl_arrow_left').hide();
  $('.vm_ctrl_arrow_right').hide();

  $.get(pathToMap, function(data) {
    //imgBg = $(data).css('background');
    //imgBg = imgBg.substring(imgBg.indexOf('url(') + 4);
    //imgBg = imgBg.substring(0, imgBg.indexOf(')'));
    //$.get(imgBg, function(imgData) { 
      mw.html(data);
      firstPOI = null;
      lastPOI = null;
      tmpImg = $('.vm_ctrl_arrow_up').show().find('img')[0];
      tmpImg.src = tmpImg.src.replace('arrow_up_off.png', 'arrow_up_on.png');
      tmpImg = $('.vm_ctrl_arrow_down').show().find('img')[0];
      tmpImg.src = tmpImg.src.replace('arrow_down_off.png', 'arrow_down_on.png');
      tmpImg = $('.vm_ctrl_arrow_left').show().find('img')[0];
      tmpImg.src = tmpImg.src.replace('arrow_left_off.png', 'arrow_left_on.png');
      tmpImg = $('.vm_ctrl_arrow_right').show().find('img')[0];
      tmpImg.src = tmpImg.src.replace('arrow_right_off.png', 'arrow_right_on.png');
      info = mw.find('#mapInfo').text().split('%%');
      setZIndex(info[1]);
      $('.vm_map_caption').text(info[0]);
      VM_startUp();
    //});
  });
  
}

function storeMap()
{
  mapObj = $('.MapMain');
  mapTopCoord = parseInt(mapObj.css('top').replace(reg, '$1'));
  mapLeftCoord = parseInt(mapObj.css('left').replace(reg, '$1'));
  cookieValue = selectedMap + '%%' + firstPOI + '%%' + lastPOI + "%%" + mapTopCoord + "%%" + mapLeftCoord + "%%";
  for(i = 0; i < selectedPOI.length; i++)
  {
    cookieValue += selectedPOI[i].id + "%%";
  }
  //alert(cookieValue);
  d = new Date();
  
  document.cookie = "vmState=" + escape(d.getTime() + '%%' + cookieValue);
}

function showPopup(id)
{
  poi = $('#' + id);
  firePopup(poi);
  poi.css('z-index', popupZIndex++)
  poi.find('img').each(function(){
     if($(this).hasClass('CloseBtn')) $(this).show();
  });

  selectedPOI.push(poi[0]);
}

function firePopup(poi)
{
  origSrc = poi.children('img').css('visibility', 'hidden')[0].src;
  h = 'R'; 
  v = 'B';
  reg = /(\d+)px/;
  mapObj = $('.MapMain');
  mw = $('.vm_MapPane');
  tip = $(this).find('.PopupBG');
  tipWidth = 258;//parseInt(tip.css('width').replace(reg, '$1'));
  tipHeight = 131;//parseInt(tip.css('height').replace(reg, '$1'));
  mapTopCoord = parseInt(mapObj.css('top').replace(reg, '$1'));
  mapLeftCoord = parseInt(mapObj.css('left').replace(reg, '$1'));
  poiTopCoord = parseInt(poi.css('margin-top').replace(reg, '$1'));
  poiLeftCoord = parseInt(poi.css('margin-left').replace(reg, '$1'));

  if (mapLeftCoord + poiLeftCoord + tipWidth + poi.width() - 12 > mw.width()) {
      h = 'L';
  }
  if (mapTopCoord + poiTopCoord + tipHeight + poi.height() - 37 > mw.height()) {
      v = 'T';
  }
  poi.find('img').each(function() {
    if($(this).hasClass('TiltedPeg')) {
      this.src = origSrc.replace('.png', '_' + getTiltedPegSrc(v + h) + ".png");
    }
  });
  poi.children('div').removeClass().addClass(v + h).show();

  if($.browser.msie)
  {
    if((h == 'R' && mapLeftCoord + poiLeftCoord + tipWidth + poi.width() > mw.width() - 60)
      || (h == 'L' && mapLeftCoord + poiLeftCoord > mw.width() - 60))
      $('.vm_ctrl_arrow_right img').css('visibility', 'hidden');

    if(h == 'R' && mapLeftCoord + poiLeftCoord < 40)
      $('.vm_ctrl_arrow_left img').css('visibility', 'hidden');

    vArrowLeftPos = mw.width() / 2;

    if(v == 'T' && mapTopCoord + poiTopCoord - tipHeight < 75 
      && ((h == 'R' && mapLeftCoord + poiLeftCoord + tipWidth + poi.width() > vArrowLeftPos + 20 && mapLeftCoord + poiLeftCoord < vArrowLeftPos + 20)
      || (h == 'L' && mapLeftCoord + poiLeftCoord - tipWidth - poi.width() < vArrowLeftPos)))
      $('.vm_ctrl_arrow_up img').css('visibility', 'hidden');

    if(v == 'B' && mapTopCoord + poiTopCoord + tipHeight + poi.height() - 37 > mw.height() - 30 
      && ((h == 'R' && mapLeftCoord + poiLeftCoord + tipWidth + poi.width() > vArrowLeftPos + 20 && mapLeftCoord + poiLeftCoord < vArrowLeftPos + 20)
      || (h == 'L' && mapLeftCoord + poiLeftCoord - tipWidth - poi.width() < vArrowLeftPos)))
      $('.vm_ctrl_arrow_down img').css('visibility', 'hidden');
  }
}
function getTiltedPegSrc ( popupPosition ) {

  var pegPositionId = new String();
		
  switch ( popupPosition.toUpperCase() ) {
    case "BR":
	pegPositionId = "tl";
	break;
    case "TL":
	pegPositionId = "br";
	break;
    case "BL":
	pegPositionId = "tr";
	break;
    case "TR": 
	pegPositionId = "bl";
	break;
    default:
	alert ( "Position must be either: BR, TR, BL, or TL" );
  }
  return pegPositionId;	
}

function getCheckboxColor(type)
{
  chColor = "";
  switch ( type ) {
    case "GeneralServices":
	chColor = "red";
	break;
    case "Shopping":
	chColor = "blue";
	break;
    case "Outdoor":
	chColor = "orange";
	break;
    case "Restaurants": 
	chColor = "purple";
	break;
    case "Indoor": 
	chColor = "teal";
	break;
    default:
	alert ( "Type must be either: GeneralServices, Shopping, Outdoor, Indoor, or Restaurants" );
  }
  return chColor;	
}

function initMap()
{
  $('.POI').hide();
  isInit = false;
  if (document.cookie.length>0)
  {
    c_start=document.cookie.indexOf("vmState=");
    if (c_start!=-1)
    {
      c_start=c_start + 8;
      c_end=document.cookie.indexOf(";",c_start);
      if (c_end==-1) c_end=document.cookie.length;
      vmCookie = unescape(document.cookie.substring(c_start,c_end));
      //alert(vmCookie);
      parts = vmCookie.split('%%');
      d = new Date();
      timeDif = d.getTime() - parts[0];
      if(timeDif <= (5 * 60 * 1000))
      {
	 if(selectedMap != parts[1])
         {
           selectedMap = parts[1];
           mw = $('.vm_MapPane');
           mw.html($('#msgLoading').html());
           $('.vm_ctrl_arrow_up').hide();
           $('.vm_ctrl_arrow_down').hide();
           $('.vm_ctrl_arrow_left').hide();
           $('.vm_ctrl_arrow_right').hide();

           $.get(selectedMap, function(data) {
             mw.html(data);
             firstPOI = null;
             lastPOI = null;
             tmpImg = $('.vm_ctrl_arrow_up').show().find('img')[0];
             tmpImg.src = tmpImg.src.replace('arrow_up_off.png', 'arrow_up_on.png');
             tmpImg = $('.vm_ctrl_arrow_down').show().find('img')[0];
             tmpImg.src = tmpImg.src.replace('arrow_down_off.png', 'arrow_down_on.png');
             tmpImg = $('.vm_ctrl_arrow_left').show().find('img')[0];
             tmpImg.src = tmpImg.src.replace('arrow_left_off.png', 'arrow_left_on.png');
             tmpImg = $('.vm_ctrl_arrow_right').show().find('img')[0];
             tmpImg.src = tmpImg.src.replace('arrow_right_off.png', 'arrow_right_on.png');
             info = mw.find('#mapInfo').text().split('%%');
             setZIndex(info[1]);
             $('.vm_map_caption').text(info[0]);
             setupMap(parts);
           });
         }
         else {
           setupMap(parts);
         }
         isInit = true;
      }
    } // vmCookie
  } //cookie
  if(!isInit)
    VM_startUp();
}

function setupMap(parts)
{
  category1 = parts[2];
  category2 = parts[3] == "null" ? null : parts[3];
  yCoord = parts[4];
  xCoord = parts[5];
  colors = [['GeneralServices' , 'red'], ['Shopping' , 'blue'], ['Outdoor' , 'orange'], ['Restaurants' , 'purple'], ['Indoor' , 'teal']];
  for (i = 0; i < colors.length; i++) {
      chkImage = $('td.' + colors[i][0]).next().find('img')[0];
      chkImage.src = chkImage.src.replace('img_checkbox_sel_' + colors[i][1] + '.gif', 'img_checkbox_off.jpg'); 
  }

  chkImage = $('td.' + category1).next().find('img')[0];
  chkImage.src = chkImage.src.replace('img_checkbox_off.jpg', 'img_checkbox_sel_' + getCheckboxColor(category1) + '.gif');
  if(category2 != null) {
    chkImage = $('td.' + category2).next().find('img')[0];
    chkImage.src = chkImage.src.replace('img_checkbox_off.jpg', 'img_checkbox_sel_' + getCheckboxColor(category2) + '.gif');
  }
  $('.MapMain').css({'top' : yCoord, 'left' : xCoord});
  for(i = 6; i < parts.length; i++) {
    if(parts[i].indexOf('POI') >= 0)
      showPopup(parts[i]);
  }
  VM_startUp();
}
