//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);
	});
});

//Store information in class names
jQuery.fn.extend({
  getClassValue: function(classStart) {
    classStart+='-';
    var result = null;
    jQuery.each(this.get(0).className.toString().split(/\s+/), function(i, val) {
      if(val.indexOf(classStart) === 0) {
        result = val.substring(classStart.length);
        return false;
      }
    });
    return result;
  }
});

jQuery.extend({
  bindFunction: function() {
    __arguments = jQuery.makeArray(arguments);
    var __function = __arguments.shift();
    var context = __arguments.shift();
    return function() {
      return __function.apply(context, __arguments.concat(jQuery.makeArray(arguments)));
    };
  }
});

jQuery(document).ready(function() {
  var ajax_loader = new AjaxLoader();
  
  jQuery('.load-ajax a').live('click', function() {
    var link = jQuery(this);
    if(link.is('.return_link') || link.is('.no-ajax, .no-ajax *, *[rel=document], *[rel=external]')) {
      return true;
    }
    var load_ajax = link.parents('.load-ajax');
    var load_into = jQuery(load_ajax.getClassValue('load-into'));
    ajax_loader.showLoader();
    
    var original_action = load_ajax.getClassValue('original');
    var return_to = load_ajax.getClassValue('return-to');
    
    var load_handler = function() {
      ajax_loader.hideLoader();
      var return_links = load_into.find('a.return_link');
      if(original_action == 'hide') {
        return_links.data('original', load_ajax);
        return_links.data('target', load_into);
        load_ajax.hide();
      } else if(return_to) {
        return_links.data('original', jQuery(return_to));
        return_links.data('target', load_into);
      }
      load_into.show();
    };
    
    load_into.load(link.attr('href'), {container_only: 'content'}, load_handler);
    return false;
  });
  
  jQuery('a.return_link').live('click', function() {
    var original = jQuery(this).data('original');
    var target = jQuery(this).data('target');
    if(original && target) {
      original.show();
      target.hide();
      return false;
    }
  });
});

//Ajax loader
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;
    }
  }
};
