//==============================================================================
// プロパティの拡張。
// 既に存在するプロパティの場合は、上書きする。
// 【引数】
//		target：プロパティを拡張する対象のオブジェクト
//		adder ：追加するプロパティをもつオブジェクト
// 【戻り値】
//		拡張後のオブジェクト
// 【修正履歴】
//     2007/08/02    Ryousuke Kuramoto    新規作成
//==============================================================================
window.$extend = function(target, adder) {
	for (var property in adder) {
		target[property] = adder[property];
	}
	return target;
}

//==============================================================================
// フォーマット指定で日時の文字列を取得する。
// Dateオブジェクトを指定しなかった場合は、現在時刻とする。
// フォーマットを指定しなかった場合は、"yyyy/MM/dd HH:mm:ss"とする。
// フォーマットは以下を指定する。
//   yyyy:西暦
//   MM  :月
//   dd  :日
//   HH  :時（24時間表記）
//   mm  :分
//   ss  :秒
//   SSS :ミリ秒
//
// 【引数】
//		第１引数	フォーマット文字列
//		第２引数	Dateオブジェクト
// 【戻り値】
//		時刻文字列
// 【修正履歴】
//     2007/07/20    Ryousuke Kuramoto    新規作成
//==============================================================================
window.$T = function() {
	var result = null;
	var date = null;
	
	// 引数セット
	switch ($T.arguments.length) {
	case 2:
		date = ($T.arguments[1].constructor == Date) ? $T.arguments[1] : new Date();
	case 1:
		result = ($T.arguments[0].constructor == String) ? $T.arguments[0] : "yyyy/MM/dd HH:mm:ss";
		break;
	default:
		result = "yyyy/MM/dd HH:mm:ss";
		date = new Date();
	}
	
	var to = function(num, span) {
		num = num + "";
		for (var diff = span - num.length; diff > 0; diff--) {
			num = "0" + num;
		}
		return num;
	};
	
	result = result.replace("yyyy", date.getFullYear());
	result = result.replace("MM", to(date.getMonth()+1, 2));
	result = result.replace("dd", to(date.getDate(), 2));
	result = result.replace("HH", to(date.getHours(), 2));
	result = result.replace("mm", to(date.getMinutes(), 2));
	result = result.replace("ss", to(date.getSeconds(), 2));
	result = result.replace("SSS", to(date.getMilliseconds(), 3));
	
	return result;
}

//==============================================================================
// getElementByIdの補完。
// idを指定して要素を取得する。
// 同一idの要素が複数存在する場合は、最初に見つけた要素を返却する。
// 【引数】
//		id：取得する要素のid属性
// 【戻り値】
//		引数に指定されたid属性を持つ要素
// 【修正履歴】
//     2007/07/20    Ryousuke Kuramoto    新規作成
//==============================================================================
if (!window.document.getElementById) {
	// getElementByIdがサポートされていない場合,
	// allを用いて実装する
	window.document.getElementById = function(id) {
		return window.document.all(id);
	};
}

//==============================================================================
// idを指定して要素を取得する。
// 同一idの要素が複数存在する場合は、最初に見つけた要素を返却する。
// 取得した要素は拡張メソッド群を拡張して返却する。
// 【引数】
//		id：取得する要素のid属性
// 【戻り値】
//		引数に指定されたid属性を持つ要素
// 【修正履歴】
//     2007/07/20    Ryousuke Kuramoto    新規作成
//==============================================================================
window.$ = function(id) {
	 var target = window.document.getElementById(id);
	 if (target) {
	 	$extend(target, ElementMethods);
	 }
	 return target;
};

// エレメントの拡張メソッド群
var ElementMethods = {
	// 表示確認 true:表示 false:非表示
	isVisible: function() {
		return this.style.display != 'none';
	},
	// 表示切替
	toggle: function() {
		this[this.isVisible() ? 'hide' : 'show']();
	},
	// 非表示にする
	hide: function() {
		this.style.display = 'none';
	},
	// 表示する
	show: function() {
		this.style.display = '';
	},
	// 無効化
	toDisable: function() {
		this.disabled = true;
	},
	// 有効化
	toEnable: function() {
		this.disabled = false;
	}
};

//==============================================================================
// ウィンドウサイズ
//==============================================================================
window.$innerHeight = function() {
	var innerHeight = 0;
	try {
		if (window.innerHeight) {
			innerHeight = window.innerHeight;
		} else {
			innerHeight = window.document.body.clientHeight;
		}
	} catch (e) {
	}
	return innerHeight;
};
window.$innerWidth = function() {
	var innerWidth = 0;
	try {
		if (window.innerWidth) {
			innerWidth = window.innerWidth;
		} else {
			innerWidth = window.document.body.clientWidth;
		}
	} catch (e) {
	}
	return innerWidth;
};

//==============================================================================
// スクロール位置
//==============================================================================
window.$pageXOffset = function() {
	var pageXOffset = 0;
	try {
		if (window.pageXOffset) {
			pageXOffset = window.pageXOffset;
		} else {
			pageXOffset = window.document.body.scrollLeft;
		}
	} catch (e) {
	}
	return pageXOffset;
};
window.$pageYOffset = function() {
	var pageYOffset = 0;
	try {
		if (window.pageYOffset) {
			pageYOffset = window.pageXOffset;
		} else {
			pageYOffset = window.document.body.scrollTop;
		}
	} catch (e) {
	}
	return pageYOffset;
};

