/*************************************************
 * jQuery slideNews plugin
 * This jQuery plug-in mounts the slide news on the specified box element.
 * @name jquery.slideNews-1.0.js
 * @require jQuery 1.3
 * @author Shuntaro Ogawa <s.ogawa@galaweb.jp>
 * @version 1.0
 * @date 2009-06-29
**************************************************/
(function(jQuery) {
	
	jQuery.fn.slideNews = function(options) {
		// extend default settings.
		var options = jQuery.extend({
			items: [],	// news items (ex)[html, html, ...]
			next: '',	// next (button|link) selector
			prev: '',	// prev (button|link) selector
			duration: 1500,	// animation time
			easing: 'swing',	// animation easing
			wait: 3000	// wait time, if 0 when stop.
		}, options);
		
		return this.each(function() {
			var N;	// timeout id
			var elm = $(this);
			var w = elm.width();
			var h = elm.height();
			elm.css({width: w, height: h, overflow: 'hidden'}).html('');
			
			var ul = document.createElement('ul');
			ul.style.margin = ul.style.padding = 0;
			ul.style.overflow = 'hidden';
			ul.style.width  = w +'px';
			ul.style.height = h +'px';
			ul.style.paddingLeft = w +'px';
			
			for (var i=0, len=options.items.length; i<len; i++) {
				var li = document.createElement('li');
				li.style.margin = li.style.padding = 0;
				li.style.width  = w +'px';
				$(li).html( options.items[i] );
				ul.appendChild( li );
			}
			elm.html( ul );
			
			// slide action
			var slide = function(){
				$(ul).animate({ paddingLeft: '0' }, options.duration, options.easing, callback);
			};
			var nextItem = function() {
				if (parseInt(ul.style.paddingLeft) == 0) {
					clearTimeout(N);
					ul.style.paddingLeft = w +'px';
					
					var l = ul.firstChild.cloneNode(true);
					ul.removeChild( ul.firstChild );
					ul.appendChild( l );
					setTimeout(slide, 0);
				}
				return false;
			};
			var prevItem = function() {
				if (parseInt(ul.style.paddingLeft) == 0) {
					clearTimeout(N);
					ul.style.paddingLeft = w +'px';
					
					var l = ul.lastChild.cloneNode(true);
					ul.removeChild( ul.lastChild );
					ul.insertBefore( l, ul.firstChild );
					setTimeout(slide, 0);
				}
				return false;
			};
			var callback = function() {
				if (options.wait > 0) N = setTimeout(nextItem, options.wait);
			};
			
			// next
			if (options.next != '') {
				$(options.next).click(nextItem);
			}
			// prev
			if (options.prev != '') {
				$(options.prev).click(prevItem);
			}
			// start action.
			setTimeout(slide, 0);
		});
	};
	
})(jQuery);

