var points;
var markers = [];
var mainMap;
var detailMap;
var uploadMap;
var infoWindow = null;
var geocoder;
var canSend = 1;
var curVideoLink = null;

function clearMarkers()
{
	for(var id in markers)
	{
		markers[id].setMap(null);
	}
	markers = [];
}

function closeInfoWindow()
{
	if (infoWindow)
	{
		infoWindow.close();
		infoWindow = null;
	}
}

function loadPoints(map, zoom, selectedPointId)
{
	clearMarkers();
	$.ajax({
    url: ajaxPointsUrl + '?zoom=' + zoom + (selectedPointId ? '&selPoint=' + selectedPointId : ''),
    dataType: 'json',
    success: function(data)
		{
      points = data;
      clearMarkers();
      insertMarkers(map);
      if (selectedPointId) showInfoWindow(map, markers[selectedPointId]);
    }
  });
}

function insertMarkers(map)
{
	for(var id in points)
	{
		var ico = new google.maps.MarkerImage(siteUrl + 'images/mapIco.png',
			new google.maps.Size(34, 30),
			new google.maps.Point(0, 0),
  		new google.maps.Point(0, 30)
    );

	  var shadow = new google.maps.MarkerImage(siteUrl + 'images/mapIco_shadow.png',
      new google.maps.Size(40, 36),
      new google.maps.Point(0, 0),
      new google.maps.Point(2, 31)
	  );

  	var shape = {
      coord: [0,30, 34,30, 17,0],
      type: 'poly'
    };

	  var icoLatLng = new google.maps.LatLng(points[id][0], points[id][1]);
		markers[id] = new google.maps.Marker({
      position: icoLatLng,
      map: map,
      shadow: shadow,
      icon: ico,
      shape: shape,
      title: points[id][3] ? points[id][3] : 'V této oblasti se nachází více děr. Kliknutím přiblížíte oblast.',
      zIndex: 10
    });
    markers[id].setZIndex(parseInt(id));
              
    google.maps.event.addListener(markers[id], 'click', function(event)
		{
			map.setCenter(this.getPosition());
			if (points[this.getZIndex()][3]) showInfoWindow(map, this);
			else map.setZoom(points[this.getZIndex()][2]);
		});
  }
}

function showInfoWindow(map, marker)
{
  closeInfoWindow();
  var id = marker.getZIndex();
  
	infoWindow = new google.maps.InfoWindow({
    content: '<div class="pointDesc"><h4><a href="' + points[id][5] + '">' + points[id][3] + '</a></h4>'
		  + '<a href="' + points[id][5] + '"><img alt="' + points[id][3] + '" src="' + siteUrl + 'thumb.php?src=/uploads/image/item/' + id + '.jpg&w=' + prevWidth + '&h=' + prevHeight + '&zc=1&r=' + prevCorners + '&rbg=' + prevBg + '" width="' + prevWidth + '" height="' + prevHeight + '" /></a>'
		  + '<p>' + points[id][4] + '</p><p class="link"><a class="red" href="' + points[id][5] + '">Přejít na detail výmolu</a></p><span class="clearFix">&nbsp;</span></div>'
  });
  infoWindow.open(map, marker);
}

function initHomeMap()
{
  mainMap = new google.maps.Map(
  document.getElementById('mainMap'),
	{
		center: mapDefCenter,
		zoom: mapDefZoom,
		minZoom: mapDefZoom,
		mapTypeId: google.maps.MapTypeId.ROADMAP,
		streetViewControl: false
	});
				  	
	google.maps.event.addDomListener(mainMap, 'zoom_changed', function()
	{
		loadPoints(mainMap, mainMap.getZoom());
	});
	
	addHomeControl(mainMap);
	
	insertMarkers(mainMap);
}

function initDetailMap(selectedPointId)
{
  detailMap = new google.maps.Map(
  document.getElementById('detailMap'),
	{
		center: mapDefCenter,
		zoom: mapZoom,
		minZoom: mapDefZoom,
		mapTypeId: google.maps.MapTypeId.ROADMAP,
		streetViewControl: false
	});
				  	
	google.maps.event.addDomListener(detailMap, 'zoom_changed', function()
	{
		loadPoints(detailMap, detailMap.getZoom());
	});
	
	loadPoints(detailMap, detailMap.getZoom(), selectedPointId);
}

function addHomeControl(map)
{
  var homeControlDiv = document.createElement('div');
	homeControlDiv.className = 'btnCont';
	var controlHome = document.createElement('div');
	controlHome.className = 'btnOut';
	controlHome.title = 'Zobrazit celou republiku';
	homeControlDiv.appendChild(controlHome);
				
	var controlText = document.createElement('div');
	controlText.className = 'btnText';
	controlText.innerHTML = '<strong>Celá republika</strong>';
	controlHome.appendChild(controlText);

  google.maps.event.addDomListener(controlHome, 'click', function()
	{
		closeInfoWindow();
		map.setCenter(mapDefCenter);
		map.setZoom(mapDefZoom);
	});
						
	map.controls[google.maps.ControlPosition.TOP_RIGHT].push(homeControlDiv);
}

function locateUser(map)
{
  if (navigator.geolocation)
	{
		navigator.geolocation.getCurrentPosition(function(position)
		{
      initialLocation = new google.maps.LatLng(position.coords.latitude,position.coords.longitude);
			map.setCenter(initialLocation);
			map.setZoom(11);
		},
		function()
		{
			map.setCenter(mapDefCenter);
		});
	}
	else if (google.gears)
	{
		var geo = google.gears.factory.create('beta.geolocation');
		geo.getCurrentPosition(function(position)
		{
			initialLocation = new google.maps.LatLng(position.latitude,position.longitude);
			map.setCenter(initialLocation);
			map.setZoom(11);
		},
		function()
		{
			map.setCenter(mapDefCenter);
		});
	}
	else
	{
		map.setCenter(mapDefCenter);
	}
}

var curUpload_mainPhoto = null;
var curUpload_otherPhotos = [];
var curUpload_marker = null;

$(function()
{
  $('.lightbox').nyroModal({
    imageRegex: '[^\.]\.(jpg|jpeg|png|tiff|gif|bmp)|thumb\.php\s*$'
	});
  
  $('.photoList .photo').mouseover(function(event)
	{
	  $(event.currentTarget).addClass('photo_active');
	}).mouseout(function(event)
	{
	  $(event.currentTarget).removeClass('photo_active');
	});

  $('.mapLink').nyroModal({
    sizes:
    {
      minW: 700,
		  minH: 420
		},
    callbacks:
		{
		  afterShowCont: function()
			{
			  initDetailMap(selectedPointId);
			},
			afterClose: function()
			{
			  $('#detailMap').html('');
			}
		}
	});
});

$(document).ready(function()
{	
	$('#upForm_mainPhoto').fileUploadUI(
	{
    buildUploadRow: function (files, index)
		{
		  setCanSend(false);
      $('#upForm_mainPhoto a.uploadBtn span').html('nahrávám...');
      return '';
    },
    buildDownloadRow: function (file)
		{
		  setCanSend(true);
		  $('#upForm_mainPhoto a.uploadBtn span').html('Vybrat fotku');
		  if (file.type_match == 0) alert('Fotka musí být ve formátu JPEG');
			else
			{
			  $('#insertForm .prevFrame').html('<img alt="" src="' + siteUrl + 'thumb.php?src=/uploads/image/tmp/' + file.name + '&w=227&h=227&zc=1" width="227" height="227" style="display: block;" />');
			  curUpload_mainPhoto = file.name;
			}
      return '';
    }
  });
  
  for(i = 1; i <= 4; i++)
  {
	  $('#upForm_otherPhoto_' + i).fileUploadUI(
  	{
  	  contForm: $('#upForm_otherPhoto_' + i),
      buildUploadRow: function (files, index)
		  {
		    setCanSend(false);
		    this.contForm.children('img').remove();
        this.contForm.append('<img alt="nahrávám..." src="' + siteUrl + 'images/loading_small.gif" width="24" height="24" class="loadAnim" />');
        return '';
      },
      buildDownloadRow: function (file)
  		{
  		  setCanSend(true);
  		  var el = $('#upForm_otherPhoto_' + file.index);
	  	  el.children('img').remove();
		    if (file.type_match == 0) alert('Fotka musí být ve formátu JPEG');
			  else curUpload_otherPhotos[file.index] = file.name;
			  
	  		if (curUpload_otherPhotos[file.index]) el.append('<img alt="" src="' + siteUrl + 'thumb.php?src=/uploads/image/tmp/' + curUpload_otherPhotos[file.index] + '&w=46&h=46&zc=1&r=5&rbg=FFFFFF" width="46" height="46" />');
        return '';
      }
    });
	}
	
	$('#item_video').bind('change paste', function()
	{	  
	  setTimeout(function()
	  {
  	  var el = $('#item_video');
	    var value = el.val();
	    
	    if (value && curVideoLink != value)
  	  {
	      var regExp = /^http:\/\/www\.youtube\.com\/watch\?v=[A-Za-z0-9_\-]+$/;
	      var isValid = regExp.test(value);
				if (isValid)
  	    {
	  	    curVideoLink = value;
					
					$.ajax({
            url: siteUrl + 'youtube.php',
						dataType: 'json',
						data: { url: value },
						type: 'POST',
						success: function(data)
						{
						  if (typeof(data.file_name) == 'undefined') return;
						  $('#insertForm .prevFrame').html('<img alt="" src="' + siteUrl + 'thumb.php?src=/uploads/image/tmp/' + data.file_name + '&w=227&h=227&zc=1" width="227" height="227" style="display: block;" />');
						  curUpload_mainPhoto = data.file_name
            }
          });
		    }
		  }
		}, 100);
	});
	
	$('#uploadBtn a').nyroModal({
	  sizes:
    {
      minW: 700,
		  minH: 420
		},
		callbacks:
		{
		  afterShowCont: function()
		  {
			  if (uploadMap) return;      
        uploadMap = new google.maps.Map(
        document.getElementById('uploadMap'),
	      {
	        center: mapDefCenter,
		      zoom: mapDefZoom,
		      minZoom: mapDefZoom,
		      mapTypeId: google.maps.MapTypeId.ROADMAP,
		      streetViewControl: false
	      });
	      
	      locateUser(uploadMap);
	      
	      addHomeControl(uploadMap);
				  	
	      google.maps.event.addDomListener(uploadMap, 'click', function(event)
	      {
	        if (curUpload_marker)
	        {
					  curUpload_marker.setMap(null);
					  curUpload_marker = null;
					}

          curUpload_marker = new google.maps.Marker({
            position: event.latLng, 
            map: uploadMap
					});
	      });
			}
		}
	});
	
	geocoder = new google.maps.Geocoder();
});

function sendPoint()
{
  if (canSend != 1) return;
  $.ajax({
    url: sendUrl,
    data: {
      place: $('#item_place').val(),
      datetime: $('#item_datetime').val(),
      desc: $('#item_description').val(),
      email: $('#item_email').val(),
      video: $('#item_video').val(),
      mainImage: curUpload_mainPhoto,
      otherImages: curUpload_otherPhotos,
      lat: curUpload_marker ? curUpload_marker.getPosition().lat() : null,
      lon: curUpload_marker ? curUpload_marker.getPosition().lng() : null
		},
		type: 'POST',
    dataType: 'json',
    success: function(data)
		{
      if (data.url)
			{
			  $.nmTop().close();
			  window.location.href = data.url;
			}
      else alert(data.errors.join('\n'));
    }
  });
}

function mapSearchLoc(map, elId, event)
{
  if (event.keyCode != 13) return;
  var input = $('#' + elId);
  var address = input.val();
  geocoder.geocode({'address': address}, function(results, status)
	{
    if (status == google.maps.GeocoderStatus.OK)
		{
      map.setCenter(results[0].geometry.location);
      map.setZoom(15);
    }
		else
		{
		  alert('Adresa nenalezena');
		  input.val('');
		}
  });
}

function setCanSend(state)
{
  var el = $('#insertForm a.finalBtn');
  if (state) canSend++;
  else canSend--;
  if (canSend == 1) el.removeClass('finalBtnInactive');
  else el.addClass('finalBtnInactive'); 
}

jQuery(document).ready(function($) {
	var name = ".ieaBanner";  
	var menuYloc = null;  

	menuYloc = parseInt($(name).css("top").substring(0,$(name).css("top").indexOf("px")))
	$(window).scroll(function () {
		var offset = menuYloc+$(document).scrollTop()+"px";  
		$(name).animate({top:offset},{duration:300,queue:false});
	});
});
