$(function(){
	
	//表示FIELD id指定
	$fFr = $("#time_paris"); // France
	$fUs = $("#time_ny"); // USA
	$fIt = $("#time_italia"); // Italy
	$fJp = $("#time_japan"); // japan
	
	
	
	//現在の年数取得
	var today = new Date();
	var year  = today.getYear();
	if(year < 1900){year += 1900;}
	
	//ローカルとGMTの差を取得
	var tzOffset = today.getTimezoneOffset();
	
	//各国のサマータイム期間
	//
	var posStartFr = GetDstStartFr(year); // France Start
	var posEndFr   = GetDstEndFr(year);   // France End
	var posStartUs = GetDstStartUs(year); // USA Start
	var posEndUs   = GetDstEndUs(year);   // USA End
	var posStartIt = GetDstStartIt(year); // ITALI Start
	var posEndIt   = GetDstEndIt(year);   // ITALI End
	
	//TIMEZONE
	var tzFr = 1*60;   // France GMT+9
	var tzUs = -5*60;   // USA GMT+9
	var tzIt = 1*60;   // Italy GMT+9
	var tzJp = 9*60;   // Japan GMT+9
	
	var fr,us,it,jp;   // 出力文字列
	
	//表示処理関数
	function disp(){
		
		var now  = new Date();
		var nowT = now.getTime();
		
		//時間取得
		fr  = nowat(nowT,tzFr,'FR'); // France
		us  = nowat(nowT,tzUs,'US'); // USA
		it  = nowat(nowT,tzIt,'IT'); // Italy
		jp  = nowat(nowT,tzJp,'JP'); // Japan
		
		// フィールドに表示
		$fFr.text(fr); // France
		$fUs.text(us); // UAS
		$fIt.text(it); // Italy
		$fJp.text(jp); // Japan
		
		setTimeout(disp, 1000);
	}
	
	//時間取得関数
	function nowat(nowT,tz,st){
		
		var hour,min,sec;
		var posT = nowT + (tzOffset + tz) * 60 * 1000;
		
		//サマータイム処理
		if(st == 'FR'){
			if( (posStartFr <= posT) && (posEndFr > posT) ){ posT += 60*60*1000; }
		}
		else if(st == 'US'){
			if( (posStartUs <= posT) && (posEndUs > posT) ){ posT += 60*60*1000; }
		}
		else if(st == 'IT'){
			if( (posStartIt <= posT) && (posEndIt > posT) ){ posT += 60*60*1000; }
		}
		
		var t = new Date();
		t.setTime(posT);
		
		hour = t.getHours();   // 時
		min  = t.getMinutes(); // 分
		sec  = t.getSeconds(); // 秒

		// 数値が1桁の場合、頭に0を付けて2桁で表示する指定
		if(hour < 10) { hour = "0" + hour; }
		if(min < 10) { min = "0" + min; }
		if(sec < 10) { sec = "0" + sec; }
		
		//フォーマット
		var outputTime = hour + ':' + min + ':' + sec;
		
		return outputTime;
	}
	
	//サマータイム 取得
	//FRANCE = 3月の最終日曜日 01:00〜 10月の最終日曜日 02:00まで
	//開始時刻取得(FRANCE)
	function GetDstStartFr(argYear){
		var dstStart = new Date(argYear,2,31,1,0,0);
		for ( var i=31; i>24; i--){
			dstStart.setDate(i);
			if( 0 == dstStart.getDay() ){ break; }
		}
		return dstStart.getTime();
	}
	
	//終了時刻取得(FRANCE)
	function GetDstEndFr(argYear){
		var dstEnd = new Date(argYear,9,31,2,0,0);
		for ( var i=31; i>24; i--){
			dstEnd.setDate(i);
			if( 0 == dstEnd.getDay() ){ break; }
		}
		return dstEnd.getTime();
	}
	
	//USA = 4月の第一日曜日 02:00 〜 10月の最終日曜日 01:00 まで
	//開始時刻取得(US)
	function GetDstStartUs(argYear){
		var dstStart = new Date(argYear,3,1,2,0,0);
		for ( var i=1; i<=7; i++){
			dstStart.setDate(i);
			if( 0 == dstStart.getDay() ){ break; }
		}
		return dstStart.getTime();
	}
	
	//終了時刻取得(US)
	function GetDstEndUs(argYear){
		var dstEnd = new Date(argYear,9,31,1,0,0);
		for ( var i=31; i>24; i--){
			dstEnd.setDate(i);
			if( 0 == dstEnd.getDay() ){ break; }
		}
		return dstEnd.getTime();
	}
	
	//ITALI = 3月の最終日曜日 01:00〜 10月の最終土曜日 02:00まで
	//開始時刻取得(ITALI)
	function GetDstStartIt(argYear){
		var dstStart = new Date(argYear,3,1,2,0,0);
		for ( var i=31; i<=24; i--){
			dstStart.setDate(i);
			if( 0 == dstStart.getDay() ){ break; }
		}
		return dstStart.getTime();
	}
	
	//終了時刻取得(ITALI)
	function GetDstEndIt(argYear){
		var dstEnd = new Date(argYear,9,31,1,0,0);
		for ( var i=31; i>24; i--){
			dstEnd.setDate(i);
			if( 6 == dstEnd.getDay() ){ break; }
		}
		return dstEnd.getTime();
	}
	
	//script start
	disp();
	
});

