(function ($) {

function isFullUrl(s) {
	var regexp = /(ftp|http|https):\/\/?/
	return regexp.test(s);
}


$.fn.ajaxLoader = function(options) {

	this.each(function(){
		var el = $(this);
		var height = el.height();
		var width = el.width();
		var data = $(this).metadata();
		if ( options ) $.extend(data, options);
		if ( data.url ) {
			var ind = $('<div style="height:' + height + 'px;width:'+width+'px;"><img src="' + __appBase + '/img/indicators/h_small.gif"/></div>').insertAfter(this);
			el.hide();
			if ( isFullUrl(data.url) ) {
				var url = data.url;
			}
			else {
				var url = __appBase + data.url;
			}
			if ( data.data ) {
				$.post(url, data.data, function(data){
					el.html(data);
					el.fadeIn();
					ind.remove();
				});
			}
			else {
				$.get(url, function(data){
					el.html(data);
					el.fadeIn();
					ind.remove();
				});
			}
		}
	});	

	return this;
}

$.fn.contextPopdown = function(options) {
	this.each(function(){
		var offset = $(this).offset();
		var target = $(options.target).remove().appendTo("body");
		$(target).css({
			position: 'absolute',
			left: offset.left + "px",
			top: (offset.top + $(this).height())+ "px"
		});
		$(this).click(function(){
			$(options.target).toggle('slide');
		});
	});

	return this;
}

$.fn.dialogDelete = function(options) {
	options = $.extend({}, options);
	this.each(function(){
		var trigger = $(this);
		var metadata = $(this).metadata();
		if ( metadata ) {
			options = $.extend(options, metadata);
		}
		$(this).click(function() {
			$('<div class="delete-confirmation" title="Delete Confirmation">Are you sure want to delete the item?</div>').appendTo('body').dialog({
				modal: true,
				buttons: {
					'Cancel': function() {
						$(this).dialog('destroy');
					},
					'Delete': function(){
						var url = '';
						if ( options && !options.url ) {
							url = trigger.attr('href');		
						}
						else {
							url = __appBase + options.url;
						}
						$.get(url, null, function(){
							if ( options.update ) {
								$(options.update).ajaxLoader();
							}
						}); 
						$(this).dialog('destroy');
					}
				}
			});
			return false;
		});
	});

	return this;
}

$.fn.ajaxDialog = function(options) {
	this.each(function(){
		var settings = $.extend({}, options);

		var trigger = $(this);
		var metadata = $(this).metadata();
		if ( metadata ) {
			settings = $.extend(settings, metadata);
		}

		var url = '';
		if ( settings && !settings.url ) {
			url = trigger.attr('href');		
		}
		else {
			url = __appBase + settings.url;
		}

		$(this).click(function() {
			$('<div title="Edit"></div>').appendTo('body').dialog($.extend({
				modal: true,
				width: '400px',
				buttons: {
					'Cancel': function() {
						$(this).dialog('destroy');
					},
					'Submit': function(){
						var dlg = $(this);
						dlg.find('form').submit();
					}
				},
				open: function() {
					var dlg = $(this);
					dlg.html('<img src="' + __appBase + '/img/indicators/h_small.gif" />');
					$.get(url, null, function(data){
						dlg.html(data.response);
						dlg.find('form').ajaxForm({dataType:'json', success: function(data){
								if ( data.status == 'success' ) {
									if ( settings.update ) {
										$(settings.update).ajaxLoader();
									}
									dlg.dialog('destroy');
								}
								else {
									dlg.html(data.response);
								} 
							},
							error: function(XMLHttpRequest, textStatus, errorThrown){
								alert('Error: ' + textStatus);
								dlg.dialog('destroy');
							}
						});
						//re-center after the form is loaded
						dlg.dialog('option', 'position', 'center');
					}, 'json'); 
				}
			}, settings));
			return false;
		});
	});

	return this;

};

$.fn.ajaxTrigger = function(options) {
	options = $.extend({bind: 'click'}, options);

	this.each(function(){
		var el = $(this);
		var metadata = $(this).metadata();
		var settings = $.extend(metadata, options);
		if ( !settings.url ) {
			settings.url = el.attr('href');
			if ( settings.url && !isFullUrl(settings.url) && __appBase != '' ) {
				settings.url = settings.url.replace(__appBase, '');
			}
		}
		if ( settings.bind && settings.update ) {
			el.bind(settings.bind, function(e) {
				if ( settings.confirm && !confirm(settings.confirm) ) {
					return false;
				}
				$(settings.update).ajaxLoader(settings);
				return false;
			});
		}
	});	

	return this;

}

$.fn.flashMessage = function(options) {
	options = $.extend({'action':'prepend', 'type':'success', 'message': '','delay': 2000, 'effect':'slow'}, options);
	
	this.each(function(){
		if ( options.action == 'prepend' ) {
			$('<div class="message '+ options.type +'">' + options.message + '</div>')
                       		.hide()
				.prependTo(this)
                                .fadeIn(options.effect);
				/*.delay(options.delay)
                                .fadeOut(options.effect, function() { 
					$(this).remove();
				});*/
		}
	});
	
	return this;
}


$(document).ready(function(){
	$('.ajaxLoader').ajaxLoader();
	$('.ajaxTrigger').ajaxTrigger();
	
	
	$('form#ContactAddForm').submit(function(event){
		var contactAddForm = $(this);
		
		if(contactAddForm.find(':input#ContactOptInEmail').is(':checked')){
			var _gaq = _gaq || [];
			_gaq.push(['_setAccount', __googleAnalyticsTrackingCode]);
			_gaq.push(['_trackEvent', 'Mailing List', 'Joined', 'Joined MailChimp Mailing List - via submit']);
		}
		
		if(contactAddForm.find(':input#ContactBrochuresYes').is(':checked')){
			var _gaq = _gaq || [];
			_gaq.push(['_setAccount', __googleAnalyticsTrackingCode]);
			_gaq.push(['_trackEvent', 'Brochure', 'Requested', 'Requested Printed Brochure']);
		}
		
		var _gaq = _gaq || [];
		_gaq.push(['_setAccount', __googleAnalyticsTrackingCode]);
		_gaq.push(['_trackEvent', 'Contact Form', 'Submitted', 'Contact Us Form Submitted']);
	});
	
	$('form.search-form, form#ContactNewsletter').submit(function(event){
		var _gaq = _gaq || [];
		_gaq.push(['_setAccount', __googleAnalyticsTrackingCode]);
		_gaq.push(['_trackEvent', 'Mailing List', 'Joined', 'Joined MailChimp Mailing List']);
	});
	
});

}(jQuery));

