﻿jQuery.fn.mynews = function(options){
 
// настройки по умолчанию
var options = jQuery.extend({
  rotation: 'vert', // направление сдвига vert или hor
  reverse: false, // направление прямое или обратное
  intervall: 5000, // задержка при смене в мс
  visual: 3, //количество отображаемых новостей
  firstrss: 1, // начальная новость
  hover: true, // останавливать при наведении?
  random: true, // вперемешку?
  anim: true
},options);
 
return this.each(function() {
var self = $(this);    
var allnews = self.children().css({opacity: "show"}).hide();  // Выбираем все пункты и Скрываем их

var numrss = $(allnews).length; // количество новостей
if (options.visual >= numrss) return;  // предупреждение переполнения, нечего крутить, выходим

var currss = new Array(options.visual);  // массив индексов текущие отображаемые новости
currss[0]  = options.firstrss-1;  // первая из них - из опций

NewsFill(); // заполняем первоначальный массив и отображаем выбранные новости

// установка интервала
var Interval = setInterval(NewsRotate, options.intervall);
   // Обработка наведения курсора
if (options.hover == true){
	$(self).hover(function() { clearInterval(Interval); }, function() { Interval = setInterval(NewsRotate(), options.intervall); });
}

function NewsFill() {
	switch (options.random) {
		case true: {
			for (var i = 1; i < options.visual; i++) {
           	var nextrss = randomNews();
			currss[i] = nextrss;
			// alert(currss[i]);
		    //    currss[i] = randomNews();

			}
			for (var s=options.visual-1; s=0; s--)	{
		    	$($(allnews)[currss[s]]).prependTo($(self));
			}
		}; break;
   		case false: {  
   			for (var k = 0; k < options.visual; k++) {
        		currss[k] = k;  
		   	$($(allnews)[currss[k]]).show();
			}
		    
		
   		}; break;
		
	}
	   // Отображаем отобранные пункты		
		/**/	for (var ind in currss) {
				$($(allnews)[currss[ind]]).show();
			}
		 //	alert(currss);
	   doSort;       
}

function doSort () { 	
	
}; 
	  
function NewsRotate() {
var allnews = self.children();

	switch (options.random) {
   		case true: {var nextrss = randomNews();}; break;
   		case false: {var nextrss = orderNews();}; break;
    }

	var r_n, r_m, toHide, toShow;
	if (options.reverse == false) {
   	 	currss.push(nextrss);
			switch (options.rotation) {
   				case 'hor': {r_n = 'marginLeft'; r_m = 'currentWidth';}; break;
   				case 'vert': {r_n = 'marginTop'; r_m = 'currentHeight';}; break;
    		}
		   toHide = $($(allnews)[0]);
			toShow = $($(allnews)[options.visual]);

			switch (options.anim) {
   				case true: {doAnimate(toHide,toShow, r_n, r_m);}; break;
   				case false: {$(toHide).hide(); $(toShow).show();}; break;
    		}
			//
			$(toHide).appendTo(self).hide();
			currss.shift();
   	    }
	    else  {
			currss.unshift(nextrss);
			switch (options.rotation) {
   				case 'hor': {r_n = 'marginRight'; r_m = 'currentWidth';}; break;
   				case 'vert': {r_n = 'marginBottom'; r_m = 'currentHeight';}; break;
    		}
			toHide = $($(allnews)[currss[options.visual]]);
			toShow = $($(allnews)[currss[0]]);
			doAnimate(toHide,toShow, r_n, r_m);
			currss.pop($(toHide));
		};
    	 
}
	  
function doAnimate (toHide, toShow, r_n, r_m) {
	
	// С анимацией Скрываем первый элемент и показываем будущий

	$(toHide).animate({opacity: "hide"},{duration: 4000, queue:false});
	$(toShow).animate({opacity: "show"}, 2000, "linear");
		// $(toShow).fadeIn(1000);


}; 

function orderNews(){
   var nextNews = currss[options.visual-1]+1;
   if (nextNews > numrss-1){nextNews = 0;}
   return nextNews;	   
}

function randomNews(){
	function getRandom(){return Math.round(Math.random()*(numrss-1));}
	var nextNews = getRandom();
	// alert(nextNews);	
	for (var ind in currss) {  
   		if (nextNews !== currss[ind]){continue;} else {nextNews = getRandom(); ind = 0;}
		
		//while (nextNews == currss[ind]){nextNews = Math.round(Math.random()*(numrss-1));}
	}
	 return nextNews;   
} 

});
}
