/***
	Index Of Util Part
	1. Window Size & Scroll
	2. Select & Option Object
	3. CheckBox Object
***/


/***** 1. Window Size & Scroll ******/
/*
	moves the scroll in window specfied point
	<td id=abc >
	oneOfTdInTable = document.all("abc");
	moveScroll( oneOfTdInTable );

*/
function moveScroll( obj )
{
	po = 0;
	for( p=obj ; p.nodeName != "BODY" ; p=p.offsetParent )
	{
		po += p.offsetTop;
	}
	halfSize = document.body.offsetHeight/2;
	if ( po - halfSize > 0 )
		po = po - halfSize;
	else
		po = 0;
	window.scroll(0, po );
}
/*
*/
function getTop( obj )
{
	po = 0;
	for( p=obj ; p.nodeName != "BODY" ; p=p.offsetParent )
	{
		po += p.offsetTop;
	}
	return po
}

function getLeft( obj )
{
	po = 0;
	for( p=obj ; p.nodeName != "BODY" ; p=p.offsetParent )
	{
		po += p.offsetLeft;
	}
	return po
}
/***** End Of 1. Window Size & Scroll ******/

/***** 2. Select & Option Object ******/
/* default compareMethod => compareOptionByValue
 Usage : sortSelect( document.job.MY_SELECT , myCompare );
 		 sortSelect( document.job.MY_SELECT );
*/
function sortSelect( obj , compareMethod )
{
	if( compareMethod == null )
		compareMethod = compareOptionByValue;

	var arr = new Array();
	for( i=obj.options.length-1 ; i>=0 ; i=obj.options.length-1 )
	{
		arr[i] = obj.options[i];
		obj.remove(i);
	}
	arr.sort( compareMethod );
	for( var i=0 ; i<arr.length ; i++ )
		obj.add( arr[i] );
}

function compareOptionByValue( o1 , o2 )
{
	v1 = parseInt(o1.value);
	v2 = parseInt(o2.value);
	if( v1 > v2 )
		return 1;
	else if( v1 < v2 )
		return -1;
	else
		return 0;
}
/* sample compareMethod For table 
	function compareInt( a , b )
	{
		aa = a.all.item(sortKey);
		bb = b.all.item(sortKey);
		first = aa.childNodes[0].nodeValue*1;
		second = bb.childNodes[0].nodeValue*1;
		if( first > second )
			return descSort;
		else if( first < second )
			return descSort*-1;
		else
			return 0;
	}
*/

function selectOption( selectObj , optionObj )
{
	for( var i=0 ; i<selectObj.options.length ; i++ )
	{
		if( selectObj.options[i] == optionObj )
			selectObj.options[i].selected = true;
		else
			selectObj.options[i].selected = false;
	}
}

function selectOptionByIndex( selectObj , index )
{
	for( var i=0 ; i<selectObj.options.length ; i++ )
	{
		if( i == index )
			selectObj.options[i].selected = true;
		else
			selectObj.options[i].selected = false;
	}
}

function removeAllSelectOption( selectObj )
{
	for( var i=selectObj.length-1 ; i>=0 ; i-- )
		selectObj.remove(i);
}

function makeOption( selectObj , value , text )
{
	var opt = document.createElement("OPTION");
	selectObj.options.add(opt);
	opt.text = text;
	opt.value = value;
}

function existSameValueInOption(selectObj, value)
{
	for( var i=0 ; i<selectObj.length ; i++ )
	{
		if( selectObj.options[i].value == value )
			return true;
	}
	return false;
}
/***** End Of 2. Select & Option Object ******/

/***** 3. CheckBox Object ******/

/***** End Of 3. CheckBox Object ******/

/***** Etc ******/
function _openWindow(url,width,height,popupname){
	var w = width;
	var h = height;  
	var x = (screen.availWidth - w) / 2;
	var y = (screen.availHeight - h) / 2;
	return window.open(url, popupname===undefined?"":popupname, "toolbar=0, status=0, scrollbars=no, location=0, menubar=0, width="+w+", height="+h+", left="+x+", top="+y);
}

// layey effect
function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_showHideLayers() { //v6.0
  var i,p,v,obj,args=MM_showHideLayers.arguments;
  for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
    if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
    obj.visibility=v; }
}

function shrinkByWidth(str,className,add)
{
	var div = $("<div></div>").css("display", "none");
	var sp = $("<span></span>");//.css("display", "none");
	$("body").append(div.append(sp));
	if (className) sp.addClass(className);
	sp.append(add);
	sp.append(str);
//	alert(sp.css("width"));
//	for (var i = 0; i < str.length; ++i) {
//		sp.append(s
//		alert(sp.get(0).scrollWidth);
//	}
}

function shrinkString(str,len,add)
{
	if (!str) return str;
	if (!add) add = "";
	var al = 0;
	var sl = 0;
	for (var i = 0; i < add.length; ++i)
		al += (isUnit2(str.charAt(i)) ? 2 : 1);
	var si = 0;
	var ns = "";
	for (; (si < str.length) && (al + sl < len); ++si) {
		sl += (isUnit2(str.charAt(si)) ? 2 : 1);
		ns += str.charAt(si);
	}
		
	if (si < str.length) ns += "...";
	return ns;
}

function isUnit2(c) {
	return ((c >= '\u1100') && (c <= '\u11FF')) || 
		((c >= '\u3130') && (c <= '\u318F')) || 
		((c >= '\uAC00') && (c <= '\uD7AF')) || 
		((c >= '\u4E00') && (c <= '\u9FBF')) || 
		((c >= '\uF900') && (c <= '\uFAFF')) || 
		((c >= '\u3040') && (c <= '\u30FF')) || 
		((c >= '\u31F0') && (c <= '\u31FF'));
}
