/**
 * ユーティリティ関連
 * Staticメソッドのみ
 * @author tinyboat.net
 */
function TinyboatUtils(){
	this.FULL_NAME = "TinyboatUtils:: ";
}

//////////////////////////////////////////////////////////////////////

/**
 * イベントリスナーを生成する
 * @param {イベント発生オブジェクト} object
 * @param {イベントタイプ} eventType
 * @param {コールバック} callback
 */
TinyboatUtils.addEvent = function(object, eventType, callback){
	
	if(document.addEventListener){
		object.addEventListener(eventType, callback, false);
	}else if(document.attachEvent){
		object.attachEvent("on"+eventType, callback);
	}else{
		return false;
	}
	return true;
}

//////////////////////////////////////////////////////////////////////

/**
 * イベントリスナーを抹消する
 * @param {イベント発生オブジェクト} object
 * @param {イベントタイプ} eventType
 * @param {コールバック} callback
 */
TinyboatUtils.removeEvent = function(object, eventType, callback){
	
	alert(this.FULL_NAME + "removeEvent():: ");
	
	if(document.removeEventListener){
		object.removeEventListener(eventType, callback, false);
	}else if(document.detachEvent){
		object.detachEvent("on"+eventType, callback);
	}else{
		return false;
	}
	return true;
}

//////////////////////////////////////////////////////////////////////

/**
 * getElementById のショートカット
 * @param {エレメントのid} id
 */
TinyboatUtils.$ = function(id){
	return document.getElementById(id);
}

//////////////////////////////////////////////////////////////////////

/**
 * リストを配列に変換する
 * @param {lengthが実装されたオブジェクト} list
 */
TinyboatUtils.$A = function(list){
	var array = new Array();
	if(!list) return array;
	for(var i=0; i<list.length; i++)
		array.push(list[i]);	
	return array;
}

//////////////////////////////////////////////////////////////////////

/**
 * ターゲットとなるメソッドの呼び出し元を変更します
 * @param {呼び出し元} object
 * @param {呼び出されるメソッド} method
 */
TinyboatUtils.bind = function(object, method){
	var self = this;
	var parameters = this.$A(arguments);
	
	var object = parameters.shift();
	var method = parameters.shift();
	
	return function() {
		return method.apply(object, parameters.concat(self.$A(arguments)));
	}
}

//////////////////////////////////////////////////////////////////////

/**
 * デフォルトのイベントをキャンセルする
 * @param {イベントオブジェクト} Event
 */
TinyboatUtils.cancel = function(event){
	if(typeof event.preventDefault == "function"){
		event.preventDefault();	
	}else{
		event.returnValue = false;	
	}
	return false;
}
