(function($) {
    $.fn.extend({
        ajaxload: function(settings) {
			var defaults = {
				method           : "get",
				action           : "#",
				mode             : "overwrite",
				data             : "",
				referrer         : document.location.href
			};
			var settings = $.extend(defaults, settings);
			var el = $(this);
			
			$.ajax({
				type: settings.method,
				url: settings.action,
				data: settings.data,
				cache: false,
				beforeSend: function(xhr) {
					xhr.setRequestHeader('X-Added-Referer', settings.referrer);
				},
				error: function(xhr, textStatus, errorThrown) {
					alert(errorThrown);
				},
				complete: function(data, textStatus) {
					//alert(textStatus);
				},
				success: function(data) {
					if(settings.mode == 'append') {
						$(el).append( data );
					}
					else {
						$(el).html( data );
					}
				}
			});			
        }
    });
})(jQuery);
(function($) {
    $.fn.extend({
        ajaxSubmit: function(settings) {
			var defaults = {
				async:   true,
				method: "post",
				action: "#",
				data: {},
				dataType: "json",
				onSuccess: function(data) {},
				onComplete: function(data, textStatus) {},
				onError: function(xhr, textStatus, errorThrown) {},
				onBeforeSend: function(data) { return data;}
			};
			var settings = $.extend(defaults, settings);
			var el = $(this);
			
			$.ajax({
				async: settings.async,
				type: settings.method,
				url: settings.action,
				data: settings.onBeforeSend(settings.data),
				cache: false,
				dataType: settings.datatype,
				error: function(xhr, textStatus, errorThrown) {
					settings.onError(xhr, textStatus, errorThrown);
				},
				complete: function(data, textStatus) {
					settings.onComplete(data, textStatus);
				},
				success: function(data) {
					settings.onSuccess(data);
				}
			});			
        }
    });
})(jQuery);
(function($) {
    $.fn.extend({
        ajaxDivToggle: function(settings) {		
			var defaults = {
				speed: "fast"
			};
			var settings = $.extend(defaults, settings);        	
			$(this).toggle(settings.speed);        
        }
    })
})(jQuery);
(function($) {
    $.fn.extend({
        categoryBrowse:function(settings) {
			var defaults = {
				closedClass      : 'shut',
				openClass        : 'open',
				hiddenClass      : 'offscreen',
				browseChildUrl   : '/ajax/0/browseChildTaxonomyBlock.html',
				clickData        : {},
				browseLinkClass  : 'browse',
				anim    		 : {height: 'toggle'},
				animDuration     : 500,
				animEasing		 : 'linear',
				animCallback	 : function() {},
				openCallback     : function() {},
				closeCallback    : function() {},
				referrer         : document.location.href
			};
			var settings = $.extend(defaults, settings);
			var container = $(this);
			$(this).find("a." + settings.browseLinkClass).live( 'click', function(e) {
				e.preventDefault();
				var that = $(this);
				if($(this).hasClass(settings.openClass) == false ) {
					if($(this).parent().children("ul").size() == 0) {
						var sendData = $.extend(settings.clickData, { c : $(this).attr('id') } );
						$.ajax({
							  type: 'get',
							  url: settings.browseChildUrl,
							  data: sendData,
							  beforeSend: function(xhr) {
								  xhr.setRequestHeader('X-Added-Referer', settings.referrer);
							  },
							  success: function(data) {
									$(data).appendTo( that.parent() ).hide().animate( settings.anim, settings.animDuration, settings.animEasing, settings.animCallback );
									settings.openCallback();
			    			  }
						});
					}
					$(this).removeClass(settings.closedClass);
					$(this).addClass(settings.openClass);
					$(this).parent().find("ul:first").removeClass(settings.hiddenClass).hide().animate( settings.anim, settings.animDuration, settings.animEasing, settings.animCallback );
				}
				else {
					$(this).removeClass(settings.openClass);
					$(this).addClass(settings.closedClass);
					$(this).parent().find("ul:first").animate( settings.anim, settings.animDuration, settings.animEasing, function() {
						$(this).addClass(settings.hiddenClass);
						settings.animCallback();
					} );
				}				
			});
		}
	});
})(jQuery);
(function($) {
    $.fn.extend({
        ajaxifyLinks:function(settings) {
        var defaults = {
				ajaxUrl   		 : '',
				clickData        : {},
				clickLinkClass   : 'ajaxlink',
				anim    		 : {height: 'toggle'},
				animDuration     : 300,
				animEasing		 : 'linear',
				animCallback	 : function() {},
				clickCallback    : function(data, link) {},
				target           : '#content',
				referrer         : document.location.href
			};
			var settings = $.extend(defaults, settings);
			var container = $(this);
        	$(this).find("a." + settings.clickLinkClass).live( 'click', function(e) {
	        	e.preventDefault();
	        	var link = $(this);
				var sendData = $.extend(settings.clickData, { c : $(this).attr('id') } );
				
				$.ajax({
				  type: 'get',
				  url: settings.ajaxUrl,
				  data: sendData,
				  beforeSend: function(xhr) {
					  xhr.setRequestHeader('X-Added-Referer', settings.referrer);
				  },
				  success: function(data) {
					  $(settings.target).animate( settings.anim, settings.animDuration, settings.animEasing, function () { 
  							$(settings.target).replaceWith(data);
					  }).animate( settings.anim, settings.animDuration, settings.animEasing, function() {
						  settings.animCallback();
					  });
					  settings.clickCallback(data, link); 
				  }
				});        	
        	});
		}
	});
})(jQuery);        	
(function($) {
    $.fn.extend({
        ajaxifyForm:function(settings) {
        var defaults = {
				ajaxUrl   		 : '',
				submitData       : {},
				submitInputs     : '',
				anim    		 : {height: 'toggle'},
				animDuration     : 300,
				animEasing		 : 'linear',
				animCallback	 : function() {},
				submitCallback    : function(data, form) {},
				target           : '#content'
			};
			var settings = $.extend(defaults, settings);
			var form = $(this);
        	form.bind( 'submit', function(e) {
	        	e.preventDefault();
	        	var inputs = {};
			    var a = form.serializeArray();
    			$.each(a, function() {
    				if(settings.submitInputs != '' && settings.submitInputs.indexOf(this.name) > -1) {
				        if (inputs[this.name]) {
	            			if (!inputs[this.name].push) {
	                			inputs[this.name] = [inputs[this.name]];
				            }
	            			inputs[this.name].push(this.value || '');
	        			} else {
	            			inputs[this.name] = this.value || '';
	        			}
	        		}
			    });
				var sendData = $.extend(settings.submitData, inputs );
				$.ajax({
				  type: 'get',
				  url: settings.ajaxUrl,
				  data: sendData,
				  success: function(data) {
					  $(settings.target).animate( settings.anim, settings.animDuration, settings.animEasing, function () { 
					  		$(settings.target).replaceWith(data);
					   } ).animate( settings.anim, settings.animDuration, settings.animEasing, settings.animCallback );
					  settings.submitCallback(data, form);
				  }
				});        	
        	});
		}
	});
})(jQuery);  


