
/* init */
var itemsInTheBox = 4;
var galleryItems = '#galleryItems';
var galleryItemsStore = '#galleryItemsStore';

var showBoxWidth = parseInt( $( galleryItems ).css( 'width' ) );
var slideSpeed = 500;
var scrollItemsCnt = 0;
var blockButtonsClick = true;

var giStore = [];
var gi = [];

function getChildNodes( store, nodeTag ) {
	if( store.children ) {
		return store.children; 
	}else {
		if( !store.children && store.childNodes ) {
			return store.getElementsByTag( nodeTag );
		}
	}
	
	return [];
}

/* manipulate functions */
function getItemsFromHead( num ) {
	var getItemsCnt = 0;
	
	if( giStore.children.length > 0 ) {
		if( giStore.children.length < num ) {
			getItemsCnt = giStore.children.length;
		}else {
			getItemsCnt = num;
		}
	}
	
	var res = [];
	
	for( var i = 0; i < getItemsCnt; i++ ) {
		res.push( giStore.children[i] );
	}
	
	var newStore = [];
	for( i = getItemsCnt; i < giStore.children.length; i++ ) {
		newStore.push( giStore.children[i] );
	}
	
	$( galleryItemsStore ).html( newStore );

	return res;
}

function getItemsFromFoot( num ) {
	var getItemsCnt = 0;
	
	if( giStore.children.length > 0 ) {
		if( giStore.children.length < num ) {
			getItemsCnt = giStore.children.length;
		}else {
			getItemsCnt = num;
		}
	}
	
	var res = [];
	
	for( i = ( giStore.children.length - getItemsCnt ); i <= giStore.children.length; i++ ) {
		res.push( giStore.children[i] );
	}
	
	var newStore = [];
	for( i = 0; i < giStore.children.length - getItemsCnt; i++ ) {
		newStore.push( giStore.children[i] );
	}
	
	$( galleryItemsStore ).html( newStore );
	
	return res;
}

function dropItemsToFoot( num ) {
	var dropItemsCnt = 0;
	
	if( gi.children.length > 0 ) {
		if( gi.children.length < num ) {
			dropItemsCnt = gi.children.length;
		}else {
			dropItemsCnt = num;
		}
	}
	
	var res = [];
	
	for( var i = 0; i < dropItemsCnt; i++ ) {
		res.push( gi.children[i] );
	}
	
	var newStore = [];
	for( i = dropItemsCnt - 1; i < gi.children.length; i++ ) {
		newStore.push( gi.children[i] );
	}
	
	$( galleryItems ).html( newStore );
	$( galleryItemsStore ).append( res );
}

function dropItemsToHead( num ) {
	var dropItemsCnt = 0;
	
	if( gi.children.length > 0 ) {
		if( gi.children.length < num ) {
			dropItemsCnt = gi.children.length;
		}else {
			dropItemsCnt = num;
		}
	}
	
	var res = [];
	
	for( var i = gi.children.length - dropItemsCnt - 1; i <= gi.children.length - 1; i++ ) {
		res.push( gi.children[i] );
	}
	
	
	var newStore = [];
	for( i = 0; i < gi.children.length - dropItemsCnt; i++ ) {
		newStore.push( gi.children[i] );
	}
	
	$( galleryItemsStore ).prepend( res );
	$( galleryItems ).html( newStore );
}

function slideFromLeft() {
	var items = getItemsFromFoot( scrollItemsCnt );
	$( galleryItems ).css( "marginLeft", "-" + ( showBoxWidth / itemsInTheBox * scrollItemsCnt ) + "px" );
	$( galleryItems ).prepend( items );
	
	$( galleryItems ).animate( {
		marginLeft: 0 + "px"
	}, slideSpeed, function() {
		dropItemsToHead( scrollItemsCnt );
		blockButtonsClick = false;
	});
	
}

function slideFromRight() {
	var items = getItemsFromHead( scrollItemsCnt );
	$( galleryItems ).append( items );		
			
	$( galleryItems ).animate( {
		marginLeft: "-" + ( showBoxWidth / itemsInTheBox * scrollItemsCnt ) + "px"
	}, slideSpeed, function() {
		dropItemsToFoot( scrollItemsCnt );
		$( galleryItems ).css( "marginLeft", 0 + "px" );
		blockButtonsClick = false;
	});
}

function init() {
	giStore = $( galleryItemsStore )[0];
	gi = $( galleryItems )[0];

	/* crutch for firefox 3.0.14 */
	if( giStore ) {
		if( !giStore.children && giStore.childNodes ) {
			giStore.children = giStore.getElementsByTagName('a');
		}
	}
	
	if( gi ) {
		if( !gi.children && gi.childNodes ) {
			gi.children = gi.getElementsByTagName('a');
		}
	}
	
	
	if( giStore ) {
		if( giStore.children ) {
			if( giStore.children.length > itemsInTheBox ) { 
				blockButtonsClick = false;
				
				if( giStore.children.length < itemsInTheBox * 2 ) {
					if( giStore.children.length < itemsInTheBox + itemsInTheBox / 2 ) {
						scrollItemsCnt = 1;
					}else {
						scrollItemsCnt = 2;
					}
				}else {
					scrollItemsCnt = itemsInTheBox;
				}
			}
		}
	}
	
	
	
	var items;
	items = getItemsFromHead( itemsInTheBox );
	$( galleryItems ).html( items );
}


/* events handlers */
$( '#prev' ).click( function( e ) {
	if( !blockButtonsClick ) {
		blockButtonsClick = true;
		slideFromRight();
	}
});

$( '#next' ).click( function( e ) {
	if( !blockButtonsClick ) {
		blockButtonsClick = true;
		slideFromLeft();
	}
});


$(document).ready( function() {
	init();
} );

