var comachi = new Object();

/**
 * コントローラー
 */
comachi.FallenLeafController = Class.create({
    initialize: function() {
        document.observe("dom:loaded", function() {
	    comachi.FallenLeaf.load($$('.header-navi-etc'));
	    this.animate;
	    new PeriodicalExecuter(this.animate, 7);
	}.bind(this));
    },
    animate: function() {
	var fallenLeaf = comachi.FallenLeaf.next();
	comachi.FallenLeafView.animate(fallenLeaf);
    }
});

/**
 * モデル
 */
comachi.FallenLeaf = {
    index: 0,
    elements: null,
    load: function(elements) {
	this.elements = elements;
    },
    next: function() {
	var element = this.elements[this.index];
	element.index = this.index;
	++this.index;
	if (this.index > this.elements.length -1) {
	    this.index = 0;
	}
	return element;
    }
}

/**
 * ビュー
 */
comachi.FallenLeafView = {
    startPositions: [{top:  '310px',
		      left: '60px',
		      direction: -1},
		     {top:  '200px',
		      left: '310px',
		      direction: -1},
		     {top:  '140px',
		      left: '200px',
		      direction: 1},
		     {top:  '270px',
		      left: '410px',
		      direction: 1},
		     {top:  '100px',
		      left: '430px',
		      direction: -1},
		     {top:  '240px',
		      left: '550px',
		      direction: 1}],
    leafImagesLength: 5,
    leafImagesPath: 'http://www.comachi-kimono.jp/images/fallen_leaf/fallen_leaf_#{index}.png',
    animate: function(fallenLeaf) {
	this.initializeFallenLeaf(fallenLeaf);
	this.animateRepeatedly(fallenLeaf);
    },
    initializeFallenLeaf: function(fallenLeaf) {
	var startPositionIndex = Math.floor(Math.random() * 
					    this.startPositions.length);
	var startPosition = this.startPositions[startPositionIndex];
	fallenLeaf.style.left = startPosition.left;
	fallenLeaf.style.top  = startPosition.top;
	fallenLeaf.direction  = startPosition.direction;
        this.setLeafImage(fallenLeaf);
	fallenLeaf.style.display = 'block';
    },
    animateRepeatedly: function(fallenLeaf) {
	var nextEndPosition = this.getNextEndPosition(fallenLeaf);
	if (nextEndPosition) {
	    JSTweener.addTween(fallenLeaf.style,
			       {
				   suffix: {
				       left: 'px',
				       top: 'px'
				   },
				   time: 3,
				   left: nextEndPosition.left,
				   top: nextEndPosition.top,
				   onComplete: this.animateRepeatedly.bind(this),
				   onCompleteParams: [fallenLeaf]
			       });
	}
	else {
	    fallenLeaf.hide();
	}
    },
    getNextEndPosition: function(fallenLeaf) {

	var top  = parseFloat(fallenLeaf.style.top);
	var left =  parseFloat(fallenLeaf.style.left);

	if (parseFloat(fallenLeaf.style.top) < 450) {
	    top  = top  + Math.floor(Math.random() * (80 - 120 + 1)) + 80;
	    left = left + fallenLeaf.direction * 
		(Math.floor(Math.random() * (80 - 120 + 1)) + 80);
	    fallenLeaf.direction = fallenLeaf.direction * -1;
	    return {top: top, left: left}
	}
	else {
	    return null;
	}
    },
    setLeafImage: function(fallenLeaf) {
	var index = Math.floor(Math.random() * this.leafImagesLength) + 1;
	var path  = this.leafImagesPath.interpolate({index: index});

	if (Prototype.Browser.IE) {
	    var divs  = fallenLeaf.getElementsBySelector('div');
	    if (divs.length == 0) {
		var a = fallenLeaf.getElementsBySelector('a')[0];
		a.insert('<div></div>');
		divs  = fallenLeaf.getElementsBySelector('div');
	    }
	    var div = divs[0];
	    div.setStyle(
		{'filter': 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\'' + path + '\',' + 'sizingMethod=scale)',
		 'width':  '69px',
		 'height': '39px'});
	}
	else {
	    var imgs  = fallenLeaf.getElementsBySelector('img');

	    if (imgs.length == 0) {
		var a = fallenLeaf.getElementsBySelector('a')[0];
		a.insert('<br /><img src="a" />');
		imgs  = fallenLeaf.getElementsBySelector('img');
	    }
	    var img = imgs[0];
	    img.src = path;
	}
	fallenLeaf.style.zIndex = fallenLeaf.index;
    }
};

new comachi.FallenLeafController();
