jQuery.fn.extend({
	showWindow: function(options) {
		new jQuery.fnShowWindow(this, options);
	}
});


jQuery.fnShowWindow = function(object, options) {

	var opt						= options || {};
	opt.maxItem				= opt.maxItem;
	opt.slideAlign  	= opt.slideAlign;
	opt.slideWidth  	= opt.slideWidth;
	opt.slideHeight 	= opt.slideHeight;
	opt.slideQueue  	= opt.slideQueue;
	opt.slideSpeed		= opt.slideSpeed || 0;
	opt.slideTimeOut  = opt.slideTimeOut;

	var thisObj				= $(object);
	var currPosition	= 0;
	var intVal 				= '';
	var kierunek      = 1;
	var btnBack				= thisObj.find('.Back');
	var btnNext				= thisObj.find('.Next');
	var slideObject		= thisObj.find('.Slide');
	var slideItem			= thisObj.find('.Slide a');
	var slidePager		= thisObj.find('.Pagination');
	var slideNumber		= slideItem.length;


	if ( slideNumber > opt.maxItem ) {

		//#
		if ( opt.slideAlign == 'horizontal' ) {
			slideObject.width( slideNumber * opt.slideWidth ).height( opt.slideHeight );
		}
		if ( opt.slideAlign == 'vertical' ) {
			slideObject.width( opt.slideWidth ).height( slideNumber * opt.slideHeight );
		}

		//#
		if ( slidePager.length == 1 ) {
			var pItem = '';
			slideItem.each(function(a) {
				if ( a == 0 ) { cssClass = 'First'; }
				else if ( (a+1) == slideNumber ) { cssClass = 'Last'; }
				else { cssClass = 'All'; }

				pItem += '<a class="pItem '+cssClass+'" id="'+a+'"><span>'+(a+1)+'</span></a>';

				if ( slideNumber != (a+1) ) {
					pItem += '<span class="pSeparator"></span>';
				}
			});
			slidePager.html('<span class="pContainer">' + pItem + '</span>');

			slidePager.find('.pItem').bind('click', function() {
				currPosition = parseInt( $(this).attr('id') );
				mAnimate(currPosition);
				mControl(currPosition);
			});
		}

		//#
		function mControl(pos) {
			if (pos == 0) {
				btnBack.attr('id', 'Disabled');
			} else {
				btnBack.attr('id', 'Enabled');
			}

			if (pos == (slideNumber-opt.maxItem)) {
				btnNext.attr('id', 'Disabled');
			} else {
				btnNext.attr('id', 'Enabled');
			}

			if ( slidePager.length == 1 ) {
				slideObject.promise().done(function() {
					slidePager.find('.pItem').removeClass('Active');
					slidePager.find('.pItem#'+(pos)).addClass('Active');
				});
			}
		}

		//#
		mControl(currPosition);

		//#
		function mAnimate(cur) {
			if ( opt.slideAlign == 'horizontal' ) {
				slideObject.animate( {marginLeft: opt.slideWidth*(-cur)}, {queue: opt.slideQueue, duration: opt.slideSpeed} );
			}
			if ( opt.slideAlign == 'vertical' ) {
				slideObject.animate( {marginTop: opt.slideHeight*(-cur)}, {queue: opt.slideQueue, duration: opt.slideSpeed} );
			}
		}

		//#
		thisObj.find('.Back, .Next').bind('click', function() {
			if ( $(this).attr('id') != 'Disabled' ) {
				currPosition = $(this).hasClass('Next') ? currPosition+1 : currPosition-1;
				kierunek = $(this).hasClass('Next') ? 1 : -1;
				mAnimate(currPosition);
				mControl(currPosition);
			}
		});

		//# p&s
		if ( opt.slideTimeOut > 0 ) {
			$([window, document]).load(function() {
				startInterval();
			}).blur(function() {
				stopInterval();
			});

			thisObj.mouseenter(function() {
				stopInterval();
			}).mouseleave(function() {
				startInterval();
			});
		}

	}
	else {
		thisObj.find('.Arrows').hide();
	}


	// ---------------------------------------------------------------------------------------------------------------------------------------------------------- //
	//# startInterval
	function startInterval() {
		if ( intVal == '' ) {
			kierunek = (kierunek > 0) ? 1 : -1;

			intVal = setInterval(function() {
				if ( currPosition == 0 ) {
					kierunek = 1;
				}
				else if ( currPosition == (slideNumber-opt.maxItem) ) {
					kierunek = -1;
				}

				currPosition += kierunek;
				mAnimate(currPosition);
				mControl(currPosition);
			}, opt.slideTimeOut );
		}
		else {
			stopInterval();
		}
	}

	//# stopInterval
	function stopInterval() {
		if( intVal != '' ) {
			clearInterval(intVal);
			intVal = '';
		}
	}

}
