/**
* 名称でのDOMオブジェクトの取得
* 1つのオブジェクトを返す
*/
function getObjectByIdOrName(idOrName)
{
	if (document.getElementById == undefined)
	{
		if (document.all == undefined)
		{
			return null;
		}
		else
		{
			return document.all.item(idOrName);
		}
	}
	else
	{
		if (document.getElementById(idOrName) == null)
		{
			return document.getElementsByName(idOrName)[0];
		}
		else
		{
			return document.getElementById(idOrName);
		}
	}
}

/**
* 名称でのDOMオブジェクトの取得
* オブジェクト配列を返す
*/
function getObjectsByName(name)
{
	if (document.getElementsByName == undefined)
	{
		alert(1);
		if (document.all == undefined)
		{
			return null;
		}
		else
		{
			var items = document.all.item(name);
			if (items.length == undefined)
			{
				var ret = new Array();
				ret[0] = document.all.item(name);
				return ret;
			}
			else
			{
				return document.all.item(name);
			}
		}
	}
	else
	{
		return document.getElementsByName(name);
	}
}

/**
* クラス名でのDOMオブジェクトの取得
* オブジェクト配列を返す
*/
function getElementsByClass(className)
{
	var retElements = new Array();
	if (document.getElementsByTagName != undefined)
	{
		var elements = document.getElementsByTagName("*");
		var retIdx = 0;
		for (var idx = 0; idx < elements.length; idx++)
		{
			var classNames = elements[idx].className.split(" ");
			for (var idx2 = 0; idx2 < classNames.length; idx2++)
			{
				if (classNames[idx2] == className)
				{
					retElements[retIdx++] = elements[idx];
				}
			}
		}
	}
	return retElements;
}

/**
* 親エレメントを返す
*/
function getParent(objElement)
{
	return objElement.parentElement == undefined ? objElement.parentNode : objElement.parentElement;
}

/**
* 子エレメントのコレクションを返す
*/
function getChildren(objElement)
{
	return objElement.children == undefined ? objElement.childNodes : objElement.children;
}

/**
*
*/
function getEvent(evt)
{
	return evt == undefined ? event : evt;
}

/**
* 文字列のトリミング(前後空白の除去)
*/
function trim(str)
{
	return str.replace(/^\s+|\s+$/g, "");
}

/**
* 特定文字の実態参照化
*/
function htmlspecialchars(str)
{
	return str
		.	replace(/[&]/g, "&amp;")
		.	replace(/"/g,"&quot;")
		.	replace(/'/g,"&#039;")
		.	replace(/</g,"&lt;")
		.	replace(/>/g,"&gt;")
		.	replace(/ /g,"&nbsp;")
	;
}

/**
* 数値のカンマ編集
*/
function getCommalizeNum(value)
{
	var num = Number(value);
	if (isNaN(num)) return value;
	num = String(num);
	var pointIndex = num.indexOf(".");
	return (pointIndex == -1)
		? 	num.replace(/(\d{1,3})(?=(?:\d\d\d)+$)/g, "$1,")
		:	num.substring(0, pointIndex).replace(/(\d{1,3})(?=(?:\d\d\d)+$)/g, "$1,") + num.substring(pointIndex)
		;
}

/**
* 文字列から数値以外を除去
*/
function valueFilterForNumer(value, isUseSign, isUseDecimalPoint)
{
	isUseSign = isUseSign == undefined ? false : isUseSign;
	isUseDecimalPoint = isUseDecimalPoint == undefined ? false : isUseDecimalPoint;
	var retValue =
			value
			//数字の半角化
		.	replace(/０/g, "0").replace(/１/g, "1").replace(/２/g, "2").replace(/３/g, "3").replace(/４/g, "4").replace(/５/g, "5").replace(/６/g, "6").replace(/７/g, "7").replace(/８/g, "8").replace(/９/g, "9")
			//マイナスと小数点の半角化
		.	replace(/－/g, "-").replace(/．/g, ".")
			//数字とマイナスと小数点以外を除去
		.	replace(/[^0-9\-.]/g, "")
			//先頭かつ後続する数字のあるマイナスを退避
		.	replace(/^-(?=[0-9])/g, "s")
			//数字とマイナス退避文字と小数点以外を除去
		.	replace(/[^0-9s.]/g, "")
			//マイナスの復帰
		.	replace(/^s/, "-")
	;
	retValue = Number(retValue);
	if (!isNaN(retValue))
	{
		retValue = !isUseSign ? Math.abs(retValue) : retValue;
		retValue = !isUseDecimalPoint ? Math.floor(retValue) : retValue;
	}
	return retValue;
}

/**
* 入力フィルタ(整数)
*/
function inputFilterForInteger(evt, isUseSign, isUseDecimalPoint)
{
	isUseSign = isUseSign == undefined ? false : isUseSign;
	isUseDecimalPoint = isUseDecimalPoint == undefined ? false : isUseDecimalPoint;
	var event = getEvent(evt);
	if
	(
		//フルキーの数字
		(event.keyCode >= 48 && event.keyCode <= 57)
		//テンキーの数字
	||	(event.keyCode >= 96 && event.keyCode <= 105)
		//CTRL + V
	||	(event.keyCode  == 86 && event.ctrlKey)
		//CTRL + A
	||	(event.keyCode  == 65 && event.ctrlKey)
		//CTRL + C
	||	(event.keyCode  == 67 && event.ctrlKey)
		//CTRL + X
	||	(event.keyCode  == 88 && event.ctrlKey)
		//CTRL + Z
	||	(event.keyCode  == 90 && event.ctrlKey)
		//BS, TAB
	||	(event.keyCode >= 8 && event.keyCode <= 9)
		//PGUP, PGDOWN, END, HOME, LEFT, UP, RIGHT, DOWN
	||	(event.keyCode >= 33 && event.keyCode <= 40)
		//INS, DEL
	||	(event.keyCode >= 45 && event.keyCode <= 46)
	)
	{
		return true;
	}
	else if
	(
		//サインあり
		isUseSign
		//マイナス
	&&	(event.keyCode == 109 || (event.keyCode == 189 && !event.shiftKey))
	)
	{
		return true;
	}
	else if
	(
		//小数点以下あり
		isUseDecimalPoint
		//マイナス
	&&	(event.keyCode == 110 || (event.keyCode == 190 && !event.shiftKey))
	)
	{
		return true;
	}
	else
	{
		return false;
	}
}

function doScrollWindow(obj, horizon, vertical, interval, callback)
{
	var beforeLeft = obj.scrollLeft;
	var beforeTop = obj.scrollTop;
	obj.scrollLeft += horizon;
	obj.scrollTop += vertical;
	if (beforeLeft != obj.scrollLeft || beforeTop != obj.scrollTop)
	{
		var nextCallParams = "document.getElementById('" + obj.id + "'), " + horizon + ", " + vertical + ", " + interval;
		if (callback != undefined)
		{
			nextCallParams += ", \"" + callback + "\"";
		}
		window.setTimeout("doScrollWindow(" + nextCallParams + ")", interval);
	}
	else if (callback != undefined)
	{
		window.setTimeout(callback, 1);
	}
}

