$.fn.formWizard = function(initial, settings) {

    if (typeof initial == 'object') settings = initial; // no initial tab given but a settings object

    settings = $.extend({
        activePanel: (initial && typeof initial == 'number') ? --initial : 0,
        containerClass: 'form-wizard-container',
        stepsClass: 'form-wizard-steps',
        backButtonClass: 'form-wizard-button-back',
        backButtonInactiveClass: 'form-wizard-button-back-inactive',
        nextButtonClass: 'form-wizard-button-next',
        nextButtonInactiveClass: 'form-wizard-button-next-inactive',
        submitButtonClass: 'form-wizard-button-submit'
    }, settings || {});

    return this.each(function() {

    	var container = this;
		var totalPanels = $('.'+settings.containerClass, container).size();

       	$('.'+settings.nextButtonClass, container).bind('click', function(){
			switchPanel('next');
       	});

       	$('.'+settings.backButtonClass, container).bind('click', function(){
			switchPanel('back');
       	});

       	switchPanel('init');

	    function switchPanel(direction) {

	    	// set active panel id
    		if ( direction == 'next' ) {
    			if ( settings.activePanel < (totalPanels-1) ) {
    				settings.activePanel++;
				}
			}
    		else if ( direction == 'back' ) {
    			if ( settings.activePanel > 0 ) {
    				settings.activePanel--;
				}
			}

			// show active panel
       		$('.'+settings.containerClass, container).hide();
			$('.'+settings.containerClass, container).eq(settings.activePanel).show();

			// set back/next button active status
			$('.'+settings.backButtonClass, container).removeClass(settings.backButtonInactiveClass);
			$('.'+settings.nextButtonClass, container).removeClass(settings.nextButtonInactiveClass);
			$('.'+settings.submitButtonClass, container).hide();

			if ( settings.activePanel == 0 ) {
				$('.'+settings.backButtonClass, container).addClass(settings.backButtonInactiveClass);
			}
			if ( settings.activePanel == (totalPanels-1) ) {
				$('.'+settings.nextButtonClass, container).addClass(settings.nextButtonInactiveClass);
				$('.'+settings.submitButtonClass, container).show();
			}

			// display steps
			$('.'+settings.stepsClass).html('Step '+(settings.activePanel+1)+' out of '+totalPanels);
		}
	});
};

function hide_message()
{
	if ( $('.message') )
	{
		$('.message').fadeIn("slow");

		setTimeout(function(){
		$('.message').fadeOut("slow");
							}, 4000);
		return true;
	}
}

function cycleTabs(container, active_tab)
{
	$('.'+container).hide();
	$('#'+active_tab).show();
}

function toggleObject(name, show)
{
    if ( $('#'+name).css("display") == "none"  &&  (show == '' || show == undefined)  ||  show == 1 )
    {
        $('#'+name).fadeIn("fast");
    }
    else
    {
        $('#'+name).fadeOut("fast");
    }
}

// misc
function confirmLink(question)
{
    return confirm(question);
}

function toggleItems(form, check)
{
    for (var i = 0; i < form.elements.length; i++)
    {
        if (form.elements[i].type == 'checkbox')
        {
            form.elements[i].checked = check;
        }
    }
}

function applyOrder()
{
	var orderby = $('#field-orderby').val();
	var direction = $('#field-direction').val();

	$('.order-link').removeClass('order-icon-asc');
	$('.order-link').removeClass('order-icon-desc');
	$('#order-'+orderby.replace('.','-')).addClass('order-icon-'+direction);
}

function reorderFilters(container, url, fields, sort)
{
	var order = ( $('#field-direction').val() == 'asc' ) ? 'desc' : 'asc';

	$('#field-orderby').val(sort);
	$('#field-direction').val(order);

	applyFilters(container, url, fields);
}

function applyFilters(container, url, fields)
{
	var params = {};
	if ( typeof(fields) != 'undefined' ) {
		$(fields).each(function(idx) {
			var key = fields[idx];
			params[key] = $('#field-' + key).val();
		});
	}

	$('#' + container + '-loading').ajaxStart(function(){
		$(this).show();
	});

	$('#' + container + '-loading').ajaxStop(function(){
		$(this).hide();
	});

	$.post(url, params,
		function(response) {
			$('#' + container + '-content').html(response);
			applyOrder();
		}
	);
}

function removeLink(question, container, url, reorder)
{
	$('#' + container + '-loading').ajaxStart(function(){
		$(this).show();
	});

	$('#' + container + '-loading').ajaxStop(function(){
		$(this).hide();
	});

	if ( confirm(question) == true ) {
		$.post(url, {},
			function(response) {
				$('#'+container).remove();
			}
		);
	}

	if ( typeof(reorder) != 'undefined' && reorder ) {
		applyOrder();
	}

	return false;
}

$(document).ready(function(){
    $("#account-nav ul li").hover(
        function() { $("ul", this).fadeIn("fast"); $(this).addClass("shover"); },
        function() { $("ul", this).hide(); $(this).removeClass("shover"); }
    );
});

