var trace = function(a) {
	try {
		console.log(a);
	} catch(e) {
//		alert(a);
	}
};


if(!Array.indexOf){
	Array.prototype.indexOf = function(object){
		for(var i = 0; i < this.length; i++){
			if(this[i] == object){return i;break;}
		}
		return -1;
	};
}




decodeURIComponent2 = function(str){
	if(!str || str=="") return "";
	else return decodeURIComponent(str)
}




var Util = {


	/*
		クエリの値を得る関数
		@queryStr	クエリ文字列
		@field		取得したい変数名
	*/
	getQueryValue:function(queryStr, field) {
		var qArr = queryStr.split("&");
		if(queryStr=="") qArr = [];
		var i, len=qArr.length;
		for(i=0; i<len; i++){
			var f = qArr[i].split("=")[0];
			if(f == field) return qArr[i].split("=")[1];
		}
		return null;
	},
	/*
		クエリni atai wo set
		@queryStr	クエリ文字列
		@field		setしたい変数名
		@value		setしたい値
	*/
	setQueryValue:function(queryStr, field, value) {
		if(!queryStr) queryStr = "";
		var qArr = queryStr.split("&");
		if(queryStr=="") qArr = [];
		var i, len=qArr.length;
		var isAlreadyExist = false;
		for(i=0; i<len; i++){
			var f = qArr[i].split("=")[0];
			if(f == field) {
				qArr[i] = f + "=" + value;
				isAlreadyExist = true;
			}
		}
		if(!isAlreadyExist) qArr.push( field+"="+value );
		return qArr.join("&");
	},

	/*
		クエリの変数を削除する関数
		@queryStr	クエリ文字列
		@field		削除したい変数名
	*/
	removeQueryVariable:function(queryStr, field) {
		if(!queryStr) return queryStr;
		var qArr = queryStr.split("&");
		if(queryStr=="") qArr = [];
		var i, len = qArr.length;
		for(i=len-1; i>=0; i--){
			if(qArr[i].split("=")[0]==field) qArr.splice(i, 1);
		}
		return qArr.join("&");
	},

	/*
		ハッシュの指定した値の右隣の値を返す
		ex.) creator/0001みたいなとき
		@hashStr	ハッシュ文字列
		@value		変数名
	*/
	getNextHashValue:function(hashStr, value) {
		if(hashStr.indexOf(value)<0) return null;
		var hArr = hashStr.split("/");
		var ans = hArr[hArr.indexOf(value)+1];
		if(ans=="") ans = null;
		return ans;
	},

	/*
		ハッシュの指定した値の２個右隣の値を返す
		ex.) creator/0001みたいなとき
		@hashStr	ハッシュ文字列
		@value		変数名
	*/
	getNextNextHashValue:function(hashStr, value) {
		if(hashStr.indexOf(value)<0) return null;
		var hArr = hashStr.split("/");
		var ans = hArr[hArr.indexOf(value)+2];
		if(ans=="") ans = null;
		return ans;
	},

	/*
		ハッシュの指定した値の右隣の値を変更して新しいハッシュを返す
		ex.) creator/0001みたいなとき
		@hashStr	ハッシュ文字列
		@value		変数名
	*/
	setNextHashValue:function(hashStr, value, setValue) {
		var hArr = hashStr.split("/");
		hArr[hArr.indexOf(value)+1] = setValue;
		return hArr.join("/");
	},

	/*
		ハッシュの指定した値以降を削除する
		@hashStr	ハッシュ文字列
		@value		変数名
	*/
	deleteHashValues:function(hashStr, value) {
		if(hashStr.indexOf(value)<0) return hashStr;
		var hArr = hashStr.split("/");
		hArr = hArr.slice( 0, hArr.indexOf(value) );
		return hArr.join("/");
	},

	/*
		ハッシュの指定した値のみを削除する
		@hashStr	ハッシュ文字列
		@value		変数名
	*/
	deleteHashValue:function(hashStr, value) {
		if(hashStr.indexOf(value)<0) return hashStr;
		var hArr = hashStr.split("/");
		var i, len = hArr.length;
		for(i=len-1; i>=0; i--){
			if(hArr[i]==value) hArr.splice(i,1);
		}
		return hArr.join("/");
	},

	/*
		ハッシュ整形
		@hashStr	ハッシュ文字列
	*/
	cleanupHash:function(hashStr) {
		var hArr = hashStr.split("/");
		var i, len = hArr.length;
		for(i=len-1; i>=0; i--){
			if(hArr[i]=="") hArr.splice(i,1);
		}
		return "/"+hArr.join("/");
	},

	/*
		ハッシュに値を追加する
		@hashStr	ハッシュ文字列
		@value		変数名
	*/
	addHashValue:function(hashStr, value) {
		if(hashStr.indexOf(value)>=0) return hashStr;
		if(hashStr.substr( hashStr.length-1 )!="/") hashStr+="/";
		return hashStr + value;
	},


	/*
		HTMLのコメントアウトを取り除く
	*/
	removeComment:function(str) {
		if(str.indexOf("<!--")>=0) {
			return str.split("-->")[0].split("<!--")[1];
		} else return str;
	},

	/*
		画像本来の大きさを取得
		@image (jqueryでなくjsオブジェクトを渡す！)
	*/
	getImageSize:function(image) {
		var w = image.width;
		var h = image.height;

		if ( typeof image.naturalWidth !== 'undefined' ) {  // for Firefox, Safari, Chrome
			w = image.naturalWidth;
			h = image.naturalHeight;

		} else if ( typeof image.runtimeStyle !== 'undefined' ) {    // for IE
			var run = image.runtimeStyle;
			var mem = { w: run.width, h: run.height };  // keep runtimeStyle
			run.width  = "auto";
			run.height = "auto";
			w = image.width;
			h = image.height;
			run.width  = mem.w;
			run.height = mem.h;

		} else {         // for Opera
			var mem = { w: image.width, h: image.height };  // keep original style
			image.removeAttribute("width");
			image.removeAttribute("height");
			w = image.width;
			h = image.height;
			image.width  = mem.w;
			image.height = mem.h;
		}

		return {width:w, height:h};
	},

	/* iframe内からparentにリンクするボタンにイベントを設定 */
	toParentBtn:function($btns){
		$btns.each(function(){
			var $this = $(this);
			if($this.attr("target") == "_parent") {
				$this.click(function(){
					parent.location = $this.attr("href");
					return false;
				})
			}
		})
	}
}
