
// settings
var dir = 'v'; // 'h' or 'v'
var containerId = 'cont'; // ID внешнего (неподвижного) контейнера для новостей (берется для ресайза)
var movingDivId = 'news'; // ID внутреннего (движимого) контейнера для новостей
var innerElementsClass = 'news'; // класс внутреннего дива каждой новости
var	fd = 40; // flipback distance

// system
var go;
var to; // timeout
var nodes = new Array();
var cc = new Array();
var newsElement;
var contElement;
var frame = 0;



function getElementsByClassName(obj, clsName){
    var retVal = new Array();
    var elements = obj.getElementsByTagName("*");
    for(var i = 0;i < elements.length;i++){
        if(elements[i].className.indexOf(" ") >= 0){
            var classes = elements[i].className.split(" ");
            for(var j = 0;j < classes.length;j++){
                if(classes[j] == clsName)
                    retVal.push(elements[i]);
            }
        }
        else if(elements[i].className == clsName)
            retVal.push(elements[i]);
    }
    return retVal;
}


function newsInit(){
	contElement = document.getElementById(containerId)

	newsElement = document.getElementById(movingDivId)
	newsElement.cp = typeof(newsElement.cp) == 'undefined' ? 0 : newsElement.cp

	cord = 0;

	elements = getElementsByClassName( newsElement, innerElementsClass )
	for(i=0;i<elements.length;i++){
		if ( elements[i].nodeType == 1 ) {
			cc.push(cord)
			cord = cord + ( dir == 'h' ? elements[i].offsetWidth : elements[i].offsetHeight )
			nodes.push( elements[i] )
		}
	}

	// init animation, resize block
	newsElement.cp = - cord / 5
	newsElement.style.marginTop = newsElement.cp + 'px'
	go = 0
	move()
	
}

function nextNews(){
	clearTimeout(to)
	go++
	if ( go >= nodes.length ) {
		go = nodes.length - 1
		flipback_bottom()
	} else {
		move()
	}
}

function prevNews(){
	clearTimeout(to)
	go--
	if ( go < 0 ) {
		go = 0
		flipback_top()
	} else {
		move()
	}
}


function move(){
	d = Math.abs(newsElement.cp) - cc[go];
	sign = d < 0 ? -1 : 1;
	dx = d/10;
	if (Math.abs(d) < 1) dx = d;

	newsElement.cp += dx;
	if ( dir == 'h' ) newsElement.style.marginLeft = newsElement.cp + "px";
	else newsElement.style.marginTop = newsElement.cp + "px";

	h1 = parseInt( contElement.style.height );
	h2 = nodes[go].offsetHeight;
	dh = h2 - h1;
	dhx = h1 + dh / 2;
	contElement.style.height = dhx + 'px';

	if (d) to = setTimeout("move()", 20 );
}

function flipback_top(frame){
	switch (frame) {
		default:
			d = fd - newsElement.cp;
			dx = d/2;
			if (Math.abs(d) < 1) dx = d;
			if (d){
				newsElement.cp += dx
				if ( dir == 'h' ) newsElement.style.marginLeft = newsElement.cp + "px"
				else newsElement.style.marginTop = newsElement.cp + "px"
				to = setTimeout("flipback_top(0)", 20 );
			}else{
				to = setTimeout("flipback_top(1)", 20 );
			}
		break;
		case 1:
			d = 0 - newsElement.cp
			dx = d/10
			if (Math.abs(d) < 1) dx = d
			if (d){
				newsElement.cp += dx
				if ( dir == 'h' ) newsElement.style.marginLeft = newsElement.cp + "px"
				else newsElement.style.marginTop = newsElement.cp + "px"
				to = setTimeout("flipback_top(1)", 20 );
			}
		break;
	}
}


function flipback_bottom(frame){
	tp = cc[go] // temp position
	switch (frame) {
		default:
			d = tp + newsElement.cp + fd
			dx = - d/2
			if (Math.abs(d) < 1) dx = - d
			if (d){
				newsElement.cp += dx
				if ( dir == 'h' ) newsElement.style.marginLeft = newsElement.cp + "px"
				else newsElement.style.marginTop = newsElement.cp + "px"
				to = setTimeout("flipback_bottom(0)", 20 );
			}else{
				to = setTimeout("flipback_bottom(1)", 20 );
			}
		break;
		case 1:
			d = - tp - newsElement.cp
			dx = d/10
			if (Math.abs(d) < 1) dx = d
			if (d){
				newsElement.cp += dx
				if ( dir == 'h' ) newsElement.style.marginLeft = newsElement.cp + "px"
				else newsElement.style.marginTop = newsElement.cp + "px"
				to = setTimeout("flipback_bottom(1)", 20 );
			}
		break;
	}
}


