//Transform mailto-links
jQuery(document).ready(function() {
	jQuery(".mailto_link").each(function() {
		var link = jQuery(this);
		var link_address = link.attr("href");
		link_address = link_address.replace(/!/g, ".");
		link_address = link_address.replace(/\^/g, "@");
		link_address = "mailto:"+link_address;
		link.attr("href", link_address);
	});
});

//Ajax stuff
var AjaxLoader = function(options) {
	this.options = {
		loader: "#ajax_loader"
	};
	this.options = jQuery.extend(this.options, options);
	this.active_request_count = 0;
	this.loader = jQuery(this.options.loader);
};

AjaxLoader.prototype = {
	showLoader: function() {
		this.active_request_count++;
		this.loader.show();
	},
	
	hideLoader: function() {
		this.active_request_count--;
		if(this.active_request_count<=0) {
			this.loader.hide();
			this.active_request_count = 0;
		}
	}
};

jQuery(document).ready(function() {
	var ajax_loader = new AjaxLoader();
	
	jQuery('.load-ajax a').live('click', function() {
		var link = jQuery(this);
		if(link.is('.no-ajax, .no-ajax *, *[rel=document], *[rel=external], .service_links *')) {
			return true;
		}
		var load_ajax = link.closest('.load-ajax');
		var load_into = jQuery(load_ajax.getClassValue('load-into'));
		ajax_loader.showLoader();		
		var load_handler = function() {
			var same_load_ajax = [];
			jQuery('.load-ajax').each(function() {
				if(this.className.indexOf('load-into-'+load_ajax.getClassValue('load-into')) > -1) {
					same_load_ajax[same_load_ajax.length] = this;
				}
			});
			same_load_ajax = jQuery(same_load_ajax);
			var direct_links = same_load_ajax.find('a[href='+link.attr('href')+']');
			if(direct_links.length > 0) {
				same_load_ajax.find('a.active').removeClass('active');
				direct_links.addClass('active');
			}
			ajax_loader.hideLoader();
			load_into.show();
		};
		var detail_title = link.text();
		link.blur();

		load_into.load(link.attr('href'), {container_only: 'image'}, load_handler);
		jQuery("#header #title").text(detail_title);
		return false;
	});
});



//Ajax-navigation
// var mark_nav_items = function() {
// 	var nav_items = jQuery('a.project_navigation_item, a.placeholder').filter(':not(.no-ajax *)');
// 	nav_items.click(nav_item_click_hander);
// };
// 
// var nav_item_click_hander = function(event) {
// 	nav_item = jQuery(this);
// 	if(this.tooltip) {
// 		this.tooltip.destroy();
//     this.tooltip = null;
// 	}
// 
// 	jQuery("#ajax_loader").show();
// 	jQuery("#image_container").load(nav_item.attr('href'), {container_only: 'image'}, function() {init_stuff();jQuery("#ajax_loader").hide();});
// 	return false;
// };

//Add tooltips to .thumbnail_items
var add_tooltips = function() {
	jQuery(".thumbnail a").each(function() {
	  var tooltip_content = jQuery(this).next('.tooltip');
	  if(tooltip_content.length === 1) {
  		new Tooltip(this, tooltip_content, jQuery("#image_container"), jQuery("#main_content"));
  		jQuery(this).attr("title", "");
			if(jQuery.browser.msie) {
  			this.alt = "";
			}
	  }
	});
};

var animate_thumbnails = function() {
  var interval = 150;
  var delay = interval;
	var thumbnails = jQuery(".thumbnail img");
	thumbnails.each(function() {
	  var thumbnail = jQuery(this);
    window.setTimeout(function() {
      thumbnail.css("visibility", "visible");
    }, delay);
    delay += interval;
	});
};

var init_stuff = function() {
  // mark_nav_items();
  animate_thumbnails();
  add_tooltips();
};

jQuery(document).ready(init_stuff);

//Classes
var Tooltip = function(opener) {
  this.opener = jQuery(opener);
  this.content = jQuery(arguments[1] || this.opener.next());
  opener.tooltip = this;
  this.appender = arguments[2] || document.getElementsByTagName('body')[0];
  this.content.appendTo(this.appender);
  this.offsetParent = jQuery(arguments[3] || this.appender);
  this.calcOffset();
  this.enable();
  Tooltip.instances[Tooltip.instances.length] = this;
};

Tooltip.instances = [];

Tooltip.prototype.display = function() {
	this.content.show();
};

Tooltip.prototype.hide = function() {
	this.content.hide();
};

Tooltip.prototype.setPosition = function(x, y) {
  var offsetLeft = 10;
	var offsetTop = 10;
  var limit_right = this.appender.offset().left+this.appender.width();
  var distance_to_limit = limit_right-x;
  var tooltip_width = this.content.width();

  if(distance_to_limit < tooltip_width) {
    this.content.css("left", '');
    this.content.css("right", distance_to_limit+offsetLeft);
  } else {
    this.content.css("right", '');
    this.content.css("left", x-(this.offsetParentOffset.left)+offsetLeft);
  }
  this.content.css("top", y-(this.offsetParentOffset.top)+offsetTop);
};

Tooltip.prototype.enable = function() {
	this.opener.bind("mouseenter", this.handleMouseover);
	this.opener.bind("mouseleave", this.handleMouseout);
	this.opener.mousemove(this.handleMousemove);
  var tooltip = this;
  jQuery(window).bind('resize', function(event) {tooltip.calcOffset.call(tooltip, event);});
	this.hide();
};

Tooltip.prototype.calcOffset = function(event) {
  this.offsetParentOffset = this.offsetParent.offset();
}

Tooltip.prototype.handleMouseover = function(event) {
	var tooltip = this.tooltip;
	tooltip.setPosition(event.pageX, event.pageY);
	tooltip.display();
};

Tooltip.prototype.handleMouseout = function(event) {
	var tooltip = this.tooltip;
	tooltip.hide();
};

Tooltip.prototype.handleMousemove = function(event) {
	var tooltip = this.tooltip;
	tooltip.setPosition(event.pageX, event.pageY);
};

Tooltip.prototype.destroy = function() {
	delete this['opener'];
	this.content.remove();
	delete this['content'];
};

// jQuery(document).ready(function() {
// 	var project_detail_image_container = jQuery('#project_detail_images');
// 	if(project_detail_image_container.children().length < 2) {
// 		project_detail_image_container.addClass('unclickable');
// 		return;
// 	}
// 	var project_navigation_items = jQuery('#project_navigation .project_navigation_item');
// 	var interval_length = 3500;
// 	var interval_trigger = function() {
// 		project_detail_image_container.trigger('next-overlay');
// 	};
// 	var interval = window.setInterval(interval_trigger, interval_length);
// 	
// 	project_detail_image_container.bind('animate-next-overlay', function(event, options) {
// 		project_navigation_items.removeClass('active');
// 		var active_image_index = project_detail_image_container.children().index(options.next_element);
// 		project_navigation_items.eq(active_image_index).addClass('active');
// 	});
// 	
// 	project_navigation_items.bind('click',  function() {
// 		var navigation_item = jQuery(this);
// 		if(navigation_item.hasClass('active')) {
// 			return
// 		}
// 		window.clearInterval(interval);
// 		interval = null;
// 		project_detail_image_container.children().stop(true, true);
// 		
// 		project_navigation_items.removeClass('active');
// 		navigation_item.addClass('active');
// 		
// 		var active_image_index = project_navigation_items.index(navigation_item);
// 		project_detail_image_container.children().attr('style', '').removeClass('top_element').removeClass('next_element').addClass('bottom_element').eq(active_image_index).addClass('top_element').removeClass('bottom_element');
// 	});
// 	
// 	project_detail_image_container.click(function() {
// 		if(interval !== null) {
// 			window.clearInterval(interval);
// 			interval = null;
// 			return;
// 		}
// 		var new_next_element = project_detail_image_container.children('.top_element').next();
// 		if(new_next_element.length === 0) {
// 			new_next_element = project_detail_image_container.children('img:first');
// 		}
// 		var animation_type = project_detail_image_container.getClassValue('animation-type', 'cover');
// 		var animation = OverlayAnimations[animation_type];
// 		animation.position_next_element(new_next_element);
// 		new_next_element.addClass('next_element').removeClass('bottom_element');
// 		
// 		interval = window.setInterval(interval_trigger, interval_length);
// 		interval_trigger();
// 	});
// }).bind(this);

