function km_checkios() {  
  return (
    (navigator.platform.indexOf("iPhone") !== -1) ||
    (navigator.platform.indexOf("iPod") !== -1)
  );
}

function km_initmousemove() {
  // disable for iOS devices
  if (km_checkios()) {
    var container = $('#container');
    container.css({left: '200px'});
    return;
  }
  
  var viewport_width = $(window).width();
  var viewport_height = $(window).height();
  var container_width = $("#container").width();
  var container_height = $("#container").height();
  var container = $('#container');
  $(document).unbind('mousemove');
  function km_reposition(e) {

    // center
    var centerX = viewport_width/2 - container_width/2;
    // deviation depending on mouse position
    var deviationX = (e.pageX / viewport_width - 0.5) * 2;

    if (deviationX < 0) {
      deviationX = Math.pow(Math.abs(deviationX)-1,2)-1;
    } else {
      deviationX = -Math.pow(Math.abs(deviationX)-1,2)+1;
    }

    if (viewport_width < container_width) {
      // add margin
      var plusX = deviationX * (Math.abs(viewport_width/2 - container_width/2) + 150);
    } else {
      var plusX = deviationX * Math.abs(viewport_width/2 - container_width/2);
    }
    
    container.css("left", centerX - plusX + 'px');
  
    // center
    var centerY = viewport_height/2 - container_height/2;
    // deviation depending on mouse position
    var deviationY = (e.pageY / viewport_height - 0.5) * 2;

    if (deviationY < 0) {
      deviationY = Math.pow(Math.abs(deviationY)-1,2)-1;
    } else {
      deviationY = -Math.pow(Math.abs(deviationY)-1,2)+1;
    }

    var plusY = deviationY * Math.abs(viewport_height/2 - container_height/2);
  
    if (viewport_height < container_height) {
      // add margin
      var plusY = deviationY * (Math.abs(viewport_height/2 - container_height/2) + 150);
    } else {
      var plusY = deviationY * Math.abs(viewport_height/2 - container_height/2);
    }

    container.css("top", centerY - plusY + 'px');
  }

  $(document).mousemove(km_reposition);
  var mouseX = readCookie('mouseX');
  var mouseY = readCookie('mouseY');
  if (mouseX !== undefined && mouseY !== undefined) {
    km_reposition({pageX : mouseX, pageY: mouseY});
  }
}

function km_initgalleries(language) {

  if (language !== 'de') {
    language == 'en';
  }
  
  // do everything for each image gallery
  $.each($('.imagegallery'),function(galleryindex, gallery) {
    
    // make an array containing objects with image urls and titles
    var images = [];
    $.each($(gallery).find('li'), function(liindex, li) {
      var a = $(li).find('a');
      var thecaption = a.text();
      if (thecaption === 'Bild') {
        thecaption = '';
      } else if (thecaption === 'Image') {
        thecaption = '';
      }
      images.push({url: a.attr('href'), caption: thecaption, loaded: false});
    });
    
    // only one image: no gallery, just create one image element, then return
    if (images.length == 1) {
      var currentImage = images[0];
      var imageElement = $('<img></img>');
      imageElement.attr('src', currentImage.url);
      $(gallery).replaceWith(imageElement);
      var overlayElement = $('<img class="imagegallery-overlay-nopointer" src="/ui/empty.gif"></img>').insertAfter(imageElement);
      var captionElement = $('<p class="imagegallery-caption">'+currentImage.caption+'</p>').insertAfter(imageElement);
      overlayElement.css({width: imageElement.width(), height: imageElement.height()});
      overlayElement.mouseover(function(){
        captionElement.show();
      });
      overlayElement.mouseout(function(){
        captionElement.hide();
      });
      captionElement.hide();
      return;
    }

    var loadingMessage;
    if (language === 'de') {
      loadingMessage = $("<div>Laden&hellip;</div>");
    } else {
      loadingMessage = $("<div>Loading&hellip;</div>");
    }
    
    $(gallery).replaceWith(loadingMessage);

    // check if all images have already been loaded. If so, call callback. If not, return.
    function checkLoadingProcess(callback) {
      var i;
      for (i=0; i<images.length; i++) {
        if (!images[i].loaded) {
          return;
        }
      }
      callback();
    }

    // Preload images    
    $.each(images, function(index,image) {
      image.obj = new Image();
      $(image.obj).load(function(event) {
        image.loaded = true;
        checkLoadingProcess(startGallery);
      });
      image.obj.src = image.url;
    });
    
    function startGallery() {
      // create an image element
      var currentImage = images[0];
      var imageElement = $('<img class="imagegallery-replacement"></img>');
      var overlayElement = $('<img class="imagegallery-overlay" src="/ui/empty.gif"></img>');
      imageElement.attr('src', currentImage.url);

      overlayElement.click(function(event) {
        // deactivate onclick handler
        overlayElement.unbind('click');
        // choose next image
        var nextId = ($.inArray(currentImage, images) + 1) % images.length ;
        currentImage = images[nextId];
        if (currentImage.obj !== undefined) {
          // if image has already been loaded once, show it
          updateImage();
          // reactivate onclick handler (set it to this current function)
          overlayElement.click(arguments.callee);
        }
      });
      loadingMessage.replaceWith(imageElement);
      overlayElement.insertAfter(imageElement);
      var captionElement = $('<p class="imagegallery-caption">'+currentImage.caption+'</p>').insertAfter(imageElement);
      imageElement.load(   function(){ 
        overlayElement.css({width: imageElement.width(), height: imageElement.height()});
      });  
      overlayElement.mouseover(function(){
        captionElement.show();
      });
      overlayElement.mouseout(function(){
        captionElement.hide();
      });
      captionElement.hide();
      function updateImage() {
        imageElement.attr('src', currentImage.url);
        overlayElement.css({width: currentImage.obj.width, height: currentImage.obj.height});
        captionElement.text(currentImage.caption);
      }
    }
  });
}

function km_initlinks() {

  // disable for iOS devices
  if (km_checkios()) {
    return;
  }
  
  $.each($('a'), function(index,elem){
    $(elem).click(km_savemousepos);
  });
  
  // Make editionitems behave as if they were a single link
  $.each($('h2.editionitem'), function(index, elem) {
    var linkparts = $(elem).parent().find('a');
    linkparts.mouseenter(function() {
        linkparts.addClass('active');
    }).mouseleave(function() {
        linkparts.removeClass('active');
    });
  });
  
  
}

function km_savemousepos(e) {
  // save current mouse position to cookie
  writeCookie('mouseX', e.pageX);
  writeCookie('mouseY', e.pageY);
}

function writeCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	writeCookie(name,"",-1);
}

