/*
<a href="/zorgverleners/kaart/ziekenhuizen/friendly-name/5/" rel="zorgverleners" class="routemappopup">
  <img src="blabla" alt="Open de plattegrond" />
</a>
*/

$(function()
{
	var rm_image = $("<div id='rm_image'></div>");
	var rm_zoom  = $("<div id='rm_zoom'></div>");
	var rm_close = $("<input type='button' class='button' id='rm_close' value='sluiten' title='Sluit de routekaart'/>").click(function() {
		routemap.slideUp();
	});
	var rm_link = $("<p id='rm_link'></p>");
	var routemap = $("<div id='routemap'><h2>Kaart</h2></div>").jqDrag().append(rm_close, rm_image, rm_zoom, rm_link).appendTo($("body"));
	var rm_names = ["huis","straat","buurt","wijk","kwartier","plaats","gemeente","regio","provincie","gewest"];

	$("a.routemappopup").click(function(e) {

		if (e.ctrlKey || e.shiftKey) {
			return true;
		} else {
			var qs = $(this).attr("href").substring($(this).attr("href").indexOf("?") + 1);
			
			qs= substr(qs.replace("/"+$(this).attr('rel')+"/kaart/", ""),0,-1);
      
      var zuil= $(this).attr('rel');
			var zoom= substr(qs,(strrpos(qs,"/")+1));
			var type= substr(qs,0,strpos(qs,"/"));
			qs= qs.replace(type+"/", "")
			var friendlyname= substr(qs, 0, strpos(qs,"/") );
      
			routemap.slideUp("fast", function() {
				rm_image.empty();
				$.getJSON("/"+zuil+"/services/MapService.svc/js/GetImageUrl?&type="+type+"&friendlyname="+friendlyname+"&zoom=" + zoom, function(data) {
				  rm_link.empty().append("<a href='"+data.d.key+"'>Toon routebeschrijving</a> (opent Google Maps)</p>");
				  
					var img = '<img alt="Kaart waar de locatie zich bevindt" src="' + data.d.value + '"/>';
					rm_image.append(img);
					rm_zoom.empty();

					$.each(rm_names, function(i, val) {
						var zoom_level = i;

						var zoom_class = (zoom == zoom_level) ? "button active" : "button";
						var zoom_button = $("<input type='button'/>").attr({
							className: zoom_class,
							value: zoom_level + 1,
							title: "zoom naar " + val
						}).click(function() {
							rm_image.find("img").fadeOut();
							$.getJSON("/"+zuil+"/services/MapService.svc/js/GetImageUrl?&type="+type+"&friendlyname="+friendlyname+"&zoom=" + zoom_level, function(data) {
								var tile = $('<img alt="Kaart waar de locatie zich bevindt" src="' + data.d.value + '"/>').css("display","none");
								rm_image.empty().append(tile).find("img").fadeIn();
							});
							rm_zoom.find("input").removeClass("active");
							$(this).addClass("active");
						}).hover(function() {
							$(this).addClass("hover");
						}, function() {
							$(this).removeClass("hover");
						});
						rm_zoom.append(zoom_button);
						if (zoom == zoom_level) {
							zoom_button.focus();
						}
					});
				});

				routemap.css({
					left: $(window).width() / 2 - 200,
					top: e.pageY + 10
				});

			});
			routemap.slideDown("slow");
			return false;
		}
		
		return false;
	});
	
  function substr (str, start, len) {
      // Returns part of a string  
      // 
      // version: 909.322
      // discuss at: http://phpjs.org/functions/substr
      // +     original by: Martijn Wieringa
      // +     bugfixed by: T.Wild
      // +      tweaked by: Onno Marsman
      // +      revised by: Theriault
      // +      improved by: Brett Zamir (http://brett-zamir.me)
      // %    note 1: Handles rare Unicode characters if 'unicode.semantics' ini (PHP6) is set to 'on'
      // *       example 1: substr('abcdef', 0, -1);
      // *       returns 1: 'abcde'
      // *       example 2: substr(2, 0, -6);
      // *       returns 2: false
  
  // Add: (?) Use unicode.runtime_encoding (e.g., with string wrapped in "binary" or "Binary" class) to
  // allow access of binary (see file_get_contents()) by: charCodeAt(x) & 0xFF (see https://developer.mozilla.org/En/Using_XMLHttpRequest ) or require conversion first?
  
      var i = 0, allBMP = true, es = 0, el = 0, se = 0, ret = '';
      str += '';
      var end = str.length;
  
      // BEGIN REDUNDANT
      this.php_js = this.php_js || {};
      this.php_js.ini = this.php_js.ini || {};
      // END REDUNDANT
      switch(
          (this.php_js.ini['unicode.semantics'] && 
              this.php_js.ini['unicode.semantics'].local_value.toLowerCase())) {
          case 'on': // Full-blown Unicode including non-Basic-Multilingual-Plane characters
              // strlen()
              for (i=0; i < str.length; i++) {
                  if (/[\uD800-\uDBFF]/.test(str.charAt(i)) && /[\uDC00-\uDFFF]/.test(str.charAt(i+1))) {
                      allBMP = false;
                      break;
                  }
              }
  
              if (!allBMP) {
                  if (start < 0) {
                      for (i = end - 1, es = (start += end); i >= es; i--) {
                          if (/[\uDC00-\uDFFF]/.test(str.charAt(i)) && /[\uD800-\uDBFF]/.test(str.charAt(i-1))) {
                              start--;
                              es--;
                          }
                      }
                  }
                  else {
                      var surrogatePairs = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
                      while ((surrogatePairs.exec(str)) != null) {
                          var li = surrogatePairs.lastIndex;
                          if (li - 2 < start) {
                              start++;
                          }
                          else {
                              break;
                          }
                      }
                  }
  
                  if (start >= end || start < 0) {
                      return false;
                  }
                  if (len < 0) {
                      for (i = end - 1, el = (end += len); i >= el; i--) {
                          if (/[\uDC00-\uDFFF]/.test(str.charAt(i)) && /[\uD800-\uDBFF]/.test(str.charAt(i-1))) {
                              end--;
                              el--;
                          }
                      }
                      if (start > end) {
                          return false;
                      }
                      return str.slice(start, end);
                  }
                  else {
                      se = start + len;
                      for (i = start; i < se; i++) {
                          ret += str.charAt(i);
                          if (/[\uD800-\uDBFF]/.test(str.charAt(i)) && /[\uDC00-\uDFFF]/.test(str.charAt(i+1))) {
                              se++; // Go one further, since one of the "characters" is part of a surrogate pair
                          }
                      }
                      return ret;
                  }
                  break;
              }
              // Fall-through
          case 'off': // assumes there are no non-BMP characters;
                             //    if there may be such characters, then it is best to turn it on (critical in true XHTML/XML)
          default:
              if (start < 0) {
                  start += end;
              }
              end = typeof len === 'undefined' ? end : (len < 0 ? len + end : len + start);
              // PHP returns false if start does not fall within the string.
              // PHP returns false if the calculated end comes before the calculated start.
              // PHP returns an empty string if start and end are the same.
              // Otherwise, PHP returns the portion of the string from start to end.
              return start >= str.length || start < 0 || start > end ? !1 : str.slice(start, end);
      }
      return undefined; // Please Netbeans
  }
  
  function strpos (haystack, needle, offset) {
      //     example 1: strpos('Kevin van Zonneveld', 'e', 5);
  
      var i = (haystack+'').indexOf(needle, (offset || 0));
      return i === -1 ? false : i;
  }
  
  function strrpos (haystack, needle, offset) {
      // http://kevin.vanzonneveld.net
      // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
      // +   bugfixed by: Onno Marsman
      // +   input by: saulius
      // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
      // *     example 1: strrpos('Kevin van Zonneveld', 'e');
      // *     returns 1: 16
      // *     example 2: strrpos('somepage.com', '.', false);
      // *     returns 2: 8
      // *     example 3: strrpos('baa', 'a', 3);
      // *     returns 3: false
      // *     example 4: strrpos('baa', 'a', 2);
      // *     returns 4: 2
  
      var i = -1;
      if (offset) {
          i = (haystack+'').slice(offset).lastIndexOf(needle); // strrpos' offset indicates starting point of range till end,
          // while lastIndexOf's optional 2nd argument indicates ending point of range from the beginning
          if (i !== -1) {
              i += offset;
          }
      }
      else {
          i = (haystack+'').lastIndexOf(needle);
      }
      return i >= 0 ? i : false;
  }

	
});
