/* --------------------------------------------------------------------------------------
Petit Christmas 2008
降雪＆クリスマスアイテム表示スクリプト

[書式]

<script src="http://www.petit.cc/xmas2008/petitsnow.js" type="text/javascript"></script>


[オプション] ※ petitsnow.js?a=b&c=d

x … アイテム表示位置(X座標)
y … アイテム表示位置(Y座標) ※ xとyの両方の設定があると絶対配置(absolute)になります。(通常はstatic)

item … 「0」を指定するとアイテムが非表示になります。
efct … 「0」を指定すると雪が非表示になります。
-------------------------------------------------------------------------------------- */



(function(){
if(document.getElementById && (window.addEventListener || window.attachEvent)){


_win = (navigator.appVersion.indexOf('Win') >- 1)? 1 : 0;
_ie6 = (navigator.appVersion.indexOf('MSIE 6') >- 1)? 1 : 0;
_safari = (navigator.userAgent.indexOf('Safari') != -1)? 1 : 0;

// ---------------------------------------------------------------------------------

// キャンペーンページURL
var baseURL = 'http://www.petit.cc/xmas2008/';


// 降雪用変数

// 雪の画像URL
var snowImgURL = '/images/snow.gif';

// 雪の数
var snow = 12;

// 基本画像サイズ
var size = '35px';

// 乱数
var num = [];

// X座標の起点
var startXPos = [];

// Y座標の起点
var startYPos = [];

// ステップ
var step = [];

// ステップに加算する数
var gStepTime = 3;

// 雪のX座標
var posX = [];

// 雪のY座標
var posY = [];

var h,w,r;


// ---------------------------------------------------------------------------------

// アイテム用変数

var param = [];

var ItemPositionType = 'relative';

var ItemURL = 'http://www.petit.cc/xmas2008/socks.png';

var ItemW = '82';

var ItemH = '243';

var ItemElementID = 'ItemPetitXmas08';

var ItemImgID = 'ItemPetitXmas08Img';


// ---------------------------------------------------------------------------------


// クエリ取得
for(iCnt = 0; iCnt < document.getElementsByTagName('script').length; iCnt ++){
	
	var o = document.getElementsByTagName('script')[iCnt];
	
	// script要素のファイル名が一致したら実行
	if(o.src.indexOf('petitsnow.js') > -1){
		
		// 値を取得
		var paramList = (o.src.split('?')[1]).split('&');
		
		for(lCnt = 0; lCnt < paramList.length; lCnt ++){
			
			var query = paramList[lCnt].split('=');
			
			// 配列paramに代入
			param[query[0]] = query[1];
		}
		
		// 絶対配置
		if(param['x'] != undefined && param['y'] != undefined) ItemPositionType = 'absolute';
	}
}


// 雪の書き出し
if(param['efct'] != 0){
	for(iCnt = 0; iCnt < snow; iCnt ++){

		document.write('<div id="snow_'+iCnt+'" style="visibility: hidden; position: absolute; width: 35px; height: 35px; z-index: ' + 10000 + iCnt + '"><img src="' + snowImgURL + '"></div>');

		num[iCnt] = Math.random() + 0.5;
	
		step[iCnt] = 0;
	}
}


if (typeof window.innerWidth == 'number'){
	r = window;
}else{ 
	if (document.documentElement && typeof document.documentElement.clientWidth == "number" && document.documentElement.clientWidth != 0){
		r = document.documentElement;
	}else{ 
		if (document.body && typeof document.body.clientWidth == "number") r = document.body;
	}
}


// ---------------------------------------------------------------------------------


// ウィンドウ表示領域取得
function winsize(){

	// Safari
	if(_safari){
		w = window.innerWidth;
		h = window.innerHeight;
		
	// 互換モード
	}else if(document.compatMode == 'BackCompat'){
		w = document.body.clientWidth;
		h = document.body.clientHeight;
	
	// 標準モード
	}else{
		w = document.documentElement.clientWidth;
		h = document.documentElement.clientHeight;
	}
	
}


// ---------------------------------------------------------------------------------


// ウィンドウのスクロール量を算出
function scrl(yx){
	var y, x;
	
	if (typeof window.pageYOffset == 'number'){
		y = r.pageYOffset;
		x = r.pageXOffset;
	}else{
		y = r.scrollTop;
		x = r.scrollLeft;
	}
	
	return (yx == 0)? y : x;
}


// ---------------------------------------------------------------------------------


function init(){
	
	if(param['efct'] != 0){
		
		winsize();
		
		// X座標の上限
		var rimitX = w - 50;

		// Y座標スタート位置の範囲
		var rimitY = 1000;


		// 雪の書き出し
		for(iCnt = 0; iCnt < snow; iCnt ++){

			startXPos[iCnt] = Math.round(Math.random() * rimitX);
			startYPos[iCnt] = - (Math.round(Math.random() * rimitY));
		
			document.getElementById('snow_' + iCnt).style.visibility = 'visible';
		}

		act();
	}
	
}


// ---------------------------------------------------------------------------------


// 雪の制御
function act(){

	for(iCnt = 0; iCnt < snow; iCnt ++){

		posX[iCnt] = (iCnt % 2 == 0)? startXPos[iCnt] + Math.cos(step[iCnt] * 0.03) * (num[iCnt] * 10) : startXPos[iCnt] - Math.cos(step[iCnt] * 0.03) * (num[iCnt] * 10);
		
		// X座標が画面右端を越えたら、リセット
		if(posX[iCnt] > (scrl(1) + w - 50)){
			startXPos[iCnt] = Math.round(Math.random() * (w - 50));
			posY[iCnt] = startYPos[iCnt];
			step[iCnt] = 0;
		}
		
		// window下まで降りた後の処理
		if(parseInt(document.getElementById('snow_' + iCnt).style.top) > (scrl(0) + h - 50)){
			startXPos[iCnt] = Math.round(Math.random() * (w - 50));
			posY[iCnt] = startYPos[iCnt];
			step[iCnt] = 0;
		
		// 通常処理
		}else{
			posY[iCnt] = startYPos[iCnt] + step[iCnt] * num[iCnt];
		}
	
		document.getElementById('snow_' + iCnt).style.left = posX[iCnt] + scrl(1) + 'px';
		document.getElementById('snow_' + iCnt).style.top = posY[iCnt] + scrl(0) + 'px';
		
		step[iCnt] += gStepTime;

	}
	
	setTimeout(act, '50');
}


// ---------------------------------------------------------------------------------


// イベント監視
if(window.addEventListener){
	window.addEventListener('resize',winsize,false);
	window.addEventListener('load',init,false);
}
else if(window.attachEvent){
	window.attachEvent('onresize',winsize);
	window.attachEvent('onload',init);
}


}
})();

