$.fn.slider = function(options) {
    var defaults = {
	navId: 'misc-navigation',
	hiddenContentClass: 'hidden-content',
	height: 240,
	speed: 'slow',
	params: {'type': 900},
	loadClass: 'ajax-load',
	closeClass: 'close-button',
	activeLinkClass: 'active'
    };
    var options = $.extend(defaults, options);
    
    var elem = $(this);
    var hiddenContent = elem.find('.'+options.hiddenContentClass+':first');
    var closeButton = elem.find('.'+options.closeClass+':first');
    var moveInProgress = false;
    var callBackCount = 0;
    var isOpen = false;
    var ajaxProgress = false;
    var openAfterClose = false;
    var currentUrl;
    var prevElem;
    var lastNum = -1;
    
    $('#'+options.navId+' a').each(function(num) {
	$(this).click(function() {
	    if(lastNum > -1) {
		if(lastNum == num) {
		    return false;
		}
	    }
	    if(!inProgress()) {
		currentUrl = $(this).attr('href');
		$(this).parent().addClass(options.activeLinkClass);
		if(isOpen) {
		    openAfterClose = true;
		    prevElem.parent().removeClass(options.activeLinkClass);
		    close();
		}
		else {
		    open();
		}
		prevElem = $(this);
		lastNum = num;
	    }
	    return false;
	});
    });
    
    closeButton.click(function() {
	$('#'+options.navId+' a').each(function() {
	    $(this).parent().removeClass(options.activeLinkClass);
	});
	lastNum = -1;
	prevElem = null;
	close();
    });
    
    function open() {
	clearContent();
	loadContent(currentUrl);
	if(moveInProgress) {
	    return false;
	}
	moveInProgress = true;
	elem.animate({'top': '-'+options.height+'px'}, options.speed, resetMoveProgress);
	hiddenContent.animate({'height': options.height+'px'}, options.speed, resetMoveProgress);
	return true;
    }
    
    function close() {
	if(moveInProgress) {
	    return false;
	}
	moveInProgress = true;
	hiddenContent.animate({'height': '0px'}, options.speed, resetMoveProgress);
	elem.animate({'top': '0px'}, options.speed, resetMoveProgress);
	return true;
    }
    
    function resetMoveProgress() {
	callBackCount += 1;
	if(callBackCount == 2) {
	    moveInProgress = false;
	    callBackCount = 0;
	    var closeText = closeButton.find('span:first');
	    if(isOpen) {
		isOpen = false;
		closeText.hide();
		closeButton.removeClass('over');
	    }
	    else {
		isOpen = true;
		closeText.show();
		closeButton.addClass('over');
	    }
	    if(!isOpen) {
		clearContent();
	    }
	    if(openAfterClose) {
		open();
		openAfterClose = false;
	    }
	}
    }
    
    function inProgress() {
	return moveInProgress || ajaxProgress;
    }
    
    function loadContent(url) {
	if(ajaxProgress) {
	    return false;
	}
	ajaxProgress = true;
	$.get(url, options.params, function(data) {
	    hiddenContent.find('.inner:first').removeClass(options.loadClass);
	    hiddenContent.find('.inner:first').html(data);
	    $('.contact-form').contact();
	    $('#misc-content .inner .slider-indent').pagination();
	    ajaxProgress = false;
	});
	return true;
    }
    
    function clearContent() {
	hiddenContent.find('.inner:first').html("");
	hiddenContent.find('.inner:first').addClass(options.loadClass);
    }
};
