//
//  ncp-spinner
//
//  Created by murat on 2008-07-13 (or thereabouts).
//  Copyright (c) 2007 murat n konar. All rights reserved.
//

var kFrameCount = 48
var kSpinnerDimension = 48


// ------------------------------------------------------------------------------------------------------------
//	newSpinnerNode
// ------------------------------------------------------------------------------------------------------------
function newSpinnerNode(completionFunction)
{
	var spinner = new Element('div', {'class':'spinner-div', id: 'spinner' + spinners.length.toString()})

	spinner.spinnerImage = new Element('img')
	spinner.adopt(spinner.spinnerImage)
	spinner.spinnerImage.src = 'modules/ncp-spinner/images/ncp-spinner-0.png'
	spinner.fx = new Fx.Morph(spinner.spinnerImage, {wait: false, duration: 200, fps: 24})
	spinner.spinnerImage.frameNumber = 0
	spinner.fx.set({'opacity': 1, 'height':kSpinnerDimension, 'width':kSpinnerDimension, 'padding':0})

	if (!$defined(completionFunction)){
		completionFunction = function(){}
	}

	spinner.goOffDuty = function (){
		spinner.fx.start({'opacity': 1, 'height':2, 'width':2, 'padding':23}).chain(function(){
																				onDutySpinners.erase(spinner);
																				spinner.spinnerImage.dispose()
																				completionFunction();
																		})
	}
	
	spinner.goOnDuty = function (){
		if (!onDutySpinners.contains(spinner)){
			onDutySpinners.push(spinner)
		}
		spinner.adopt(spinner.spinnerImage)
		spinner.fx.start({'opacity': 1, 'height':kSpinnerDimension, 'width':kSpinnerDimension, 'padding':0})
	}
	
	spinner.isOnDuty = function() {
		return onDutySpinners.contains(spinner)
	}

	onDutySpinners.push(spinner)
	spinners.push(spinner)
	spinner.fx.set({'opacity': 1, 'height':kSpinnerDimension, 'width':kSpinnerDimension, 'padding':0})
	
	return spinner
}

// ------------------------------------------------------------------------------------------------------------
//	getSpinnerImages
// ------------------------------------------------------------------------------------------------------------
function getSpinnerImages()
{
	var images = new Array()
	
	for (var i = 0; i < kFrameCount; i++)
	{
		var imagePath = 'modules/ncp-spinner/images/ncp-spinner-' + i.toString() + '.png'
		images.push(new Asset.image(imagePath))
	}
	return images
}

// ------------------------------------------------------------------------------------------------------------
//  These are 'class' level things

var spinnerImages 	= getSpinnerImages()
var spinners 		= new Array()
var onDutySpinners 	= new Array()

var advanceSpinnersFunction	= function() {
	onDutySpinners.each(function(item, index)
	{
		item.spinnerImage.frameNumber = (item.spinnerImage.frameNumber+1)%kFrameCount
		item.spinnerImage.src = "modules/ncp-spinner/images/ncp-spinner-" + item.spinnerImage.frameNumber.toString() + ".png"
	}, null); //optional second arg for binding, not used here
}

advanceSpinnersFunction.periodical(75)
