// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults

jQuery.ajaxSetup({
	'beforeSend': function(xhr) {
		xhr.setRequestHeader("Accept", "text/javascript");
	}
});

function _ajax_request(url, data, callback, type, method) {
	if (jQuery.isFunction(data)) {
		callback = data;
		data = {};
	};

	return jQuery.ajax({
		type: method,
		url: url,
		data: data,
		success: callback,
		dataType: type
	});
}

jQuery.extend({
	put: function(url, data, callback, type) {
		return _ajax_request(url, data, callback, type, 'PUT');
	},

	delete_: function(url, data, callback, type) {
		return _ajax_request(url, data, callback, type, 'DELETE');
	}
});

jQuery.fn.submitWithAjax = function() {
	this.unbind('submit', false);
	this.submit(function() {
		$.post(this.action, $(this).serialize(), null, "script");
	  	
		return false;
  });

	return this;
};

jQuery.fn.getWithAjax = function() {
	this.unbind('click', false);
	this.click(function() {
		$.get($(this).attr("href"), $(this).serialize(), null, "script");
		
		return false;
	});

	return this;
};

jQuery.fn.postWithAjax = function() {
	this.unbind('click', false);
	this.click(function() {
		$.post($(this).attr("href"), $(this).serialize(), null, "script");
		
		return false;
	});

	return this;
};


jQuery.fn.putWithAjax = function() {
	this.unbind('click', false);
	this.click(function() {
		$.put($(this).attr("href"), $(this).serialize(), null, "script");
		
		return false;
	});

	return this;
};

jQuery.fn.deleteWithAjax = function() {
	this.removeAttr('onclick');
	this.unbind('click', false);
	this.click(function() {
		$.delete_($(this).attr("href"), $(this).serialize(), null, "script");
		
		return false;
	});
	
	return this;
};

function ajaxLinks() {
	$('.ajaxForm').submitWithAjax();
	$('a.get').getWithAjax();
	$('a.post').postWithAjax();
	$('a.put').putWithAjax();
	$('a.delete').deleteWithAjax();
	
	$('#related_products a').bind('click', function() {
		if ($(this).attr('class') == 'post') {
			$(this).attr('class', 'delete');
		}
		
		else {
			$(this).attr('class', 'post');
		}
	});
};

$(document).ready(function() {
	// All non-GET requests will add the authenticity token
	// if not already present in the data packet
	
	$(document).ajaxSend(function(event, request, settings) {
		// FF 3 > header Content-Type defaults to text/plain
		// force to text/javascript
		if (settings.type == 'PUT' || settings.type == 'DELETE') {
			request.setRequestHeader("Content-Type", "text/javascript");
		};
	
		if (typeof(window.AUTH_TOKEN) == "undefined") {
			return;
		};

		settings.data = settings.data || "";
		settings.data += (settings.data ? "&" : "") + "authenticity_token=" + encodeURIComponent(window.AUTH_TOKEN);
	});

	ajaxLinks();
});