String.prototype.trim = fTrim;

function fTrim() { return this.replace(/^\s*/ ,"").replace(/\s*$/ ,""); }

/**
 * ????????? ????????? ????????? ???????????? ?????????.
 * ex) val = gfRound(12.245, 3);
 */
function  gfRound(val, precision) {
    var p = Math.pow(10, precision);
    return Math.round(val * p) / p;
}

function OnlyNumberDot()          //¼ýÀÚ¿Í ¼Ò¼öÁ¡¸¸ ÀÔ·Â¹Þµµ·Ï.... 
{
  if( ( (event.keyCode<48)||(event.keyCode>57) ) && (event.keyCode!=13) && (event.keyCode!=46) )
  {
    event.returnValue=false;
  }
}

/**
 * ?????????????????? ???????????? ??????, ????????? ????????? ?????? ????????????.
 * val = gfTrim(" abcd ");
 */
function gfTrim(s) {
    return s.replace( /^s*/, "" ).replace( /s*$/, "" );
} 

/**
 * ???????????? ????????? ???????????? ???????????? ??????(??????)??? ?????? ????????? ?????????.
 * val = gfLpad("123", 5, "0");
 */
function gfLpad(s, n, c) {
    s = ( trim(s) == "" ) ? "" : s;

    while (s.length < n)
        s = c + "" + s;

    return s;
}
 
/**
 * ???????????? ????????? ???????????? ???????????? ?????????(??????)??? ?????? ????????? ?????????.
 * val = gfRpad("123", 5, "0");
 */
function gfRpad(s, n, c) {
    s = ( trim(s) == "" ) ? "" : s;

    while (s.length < n)
        s = s + "" + c;

    return s;
}

/**
 * ???????????? ???????????? ????????? ????????????.(????????? ???????????? ??????)
 * val = gfIsNumeric("a123")
 */

function gfIsNumeric(numeric) {
	var filter = /[^0-9]/
	if (filter.test(numeric) == true) { 
		return false; } 
	else { return true; }

}

/**
 * ???????????? ???????????? textarea??? ????????? ??? textarea??? ????????? ????????? table??? ??????
 * source :textarea ID
 * target : div ?????? innerHTML ????????? ?????? ????????? ID
 * gfConvertXlsData(source, target)
 */
function gfConvertXlsData(source, target) {
	var cellData, html;
	var excelData = document.getElementById(source);
	var target = document.getElementById(target);

	try {
		// ?????????????????? ????????? ???????????? ????????? ????????? ?????? ??????
		if (excelData.value.substring(excelData.value.length-1)=="\n")
			excelData.value = excelData.value.substring(0,excelData.value.length-2);

		// Row ????????? ??????
		cellData = excelData.value.split("\n");
		
		// Col ????????? ??????
		for (var i=0;i<cellData.length;i++) {
			cellData[i] = cellData[i].split("\t");
		}
		
		html = "<table border=1>";

		for (var i=0;i<cellData.length;i++) {
			html += "<tr>";

			for (var j=0;j<cellData[i].length;j++) {
				html += "<td><input type='text' value='" + cellData[i][j] + "'></td>";
			}

			html += "</tr>";
		}

		html += "</table>";

		target.innerHTML = html;
	} 
	catch (e) {
		alert(e.description);
	}
}

/**
 * table??? button ?????? ??????
 * imagePath : image ??????
 * id    : td??? div id
 * url   : javascript ????????? url 
 * title : button title 
 * gfMakeButton("btn1", "www.yahoo.co.kr", "Yahoo")
 * gfMakeButton("btn1", "javascript:myFunc()", "JavaScript")
 */
function gfMakeButton(sImagePath, sId, sUrl, sTitle) {
	var sBtn = "";
	var sFunc = "";

	if (sUrl.substring(0,10).toUpperCase() == "JAVASCRIPT") sFunc = sUrl.substring(11,sUrl.length);

	sBtn += "<table border=0 cellpadding=0 cellspacing=0 align=center>";
	sBtn += "	<tr>";
	sBtn += "		<td><img src='" + sImagePath + "btn_left.gif'></td>";

	if (sUrl.substring(0,10).toUpperCase() == "JAVASCRIPT")
		sBtn += "		<td class=bg_btn><a onclick='" + sFunc + "' class=btn onmouseover='return true;'>" + sTitle + "</a></td>";
	else
		sBtn += "		<td class=bg_btn><a href='" + sUrl + "' class=btn onmouseover='return true;'>" + sTitle + "</a></td>";

	sBtn += "		<td><img src='" + sImagePath + "btn_right.gif'></td>";
	sBtn += "	</tr>";
	sBtn += "</table>";

	var obj = document.getElementById(sId);
	obj.innerHTML = sBtn;
}

/**
 * IBSheet?????? ????????? ????????? ?????? status?????? I,U,D??? ?????? ???????????? Hidden Element??? ????????????
 * sFormName      : ?????????
 * ug             : IBSheet ????????? ??????
 * aColNameList   : DB??? ????????? ???????????? ?????? 
 * gfMakeSaveField("IBSheetListForm", ug, aColNameList)
 */
function gfMakeSaveField(sFormName, ug, aColNameList) {
	
	if (ug.IsDataModified==false) {
		return;
	}

	try {
		var sCheckCol = aColNameList[aColNameList.length-1];
		var aValue = new Array(ug.RowCount("I") + ug.RowCount("U") + ug.RowCount("D"));
		var iPos = 0;

		for (var i=0;i<aValue.length;i++) {
			aValue[i] = new Array();
		}

		with(ug) {
			for (var i=1;i<=RowCount;i++) {
				if (CellValue(i, SaveNameCol(sCheckCol)) != "R") {
					for (var j=0;j<aColNameList.length;j++) {
						aValue[iPos][j] = CellValue(i, SaveNameCol(aColNameList[j]));
					}
					iPos++;
				}
			}
		}

		makeHiddenElement(sFormName, aColNameList, aValue);

	} catch (e) {
		alert(e.description);
	}
}

function makeHiddenElement(sFormName, aColNameList, aValue) {
	for (var i=0;i<aValue.length;i++) {
		for (var j=0;j<aValue[i].length;j++) {
			var oNewHidden=document.createElement("input");

			oNewHidden.type="hidden";
			oNewHidden.name=aColNameList[j];
			oNewHidden.value=aValue[i][j];

			eval("document." +sFormName + ".appendChild(oNewHidden);");
		}
	}
}

/**
 * ?????? ?????? ?????? ?????? Hidden ??????
 * oForm : ????????? Hidden??? ???????????? ???
 * gfRemoveAllHiddenElement(oForm)
 */
function gfRemoveAllHiddenElement(oForm) {
	for (var i=oForm.elements.length-1 ; i >= 0 ; i--) {
		if (oForm.elements[i].type == "hidden")
			oForm.removeChild(oForm.elements[i])
	}
}

/**
 * ?????? ?????? ?????? ?????? Hidden ??????
 * oForm   : ????????? Hidden??? ???????????? ???
 * aHidden : ?????? ???????????? ????????? Hidden Array
 * gfRemoveHiddenElement(oForm, aHidden)
 */
function gfRemoveHiddenElement(oForm, aHidden) {
	if (aHidden.length == 0 || aHidden == null) {
		gfRemoveAllHiddenElement(oForm);
		return;
	}

	for (var i=oForm.elements.length-1 ; i >= 0 ; i--) {
		var bDelFlag  = true;

		for (var j=0 ; j < aHidden.length ; j++) {
			if (oForm.elements[i] == aHidden[j]) {
				bDelFlag = false;
				break;
			}
		}

		if (bDelFlag) {
			if (oForm.elements[i].type == "hidden") oForm.removeChild(oForm.elements[i]);
		}
	}
}

/**
 * IBSheet?????? ?????? ?????? ????????? ?????? Value ??????
 * sMsg           : ????????? ?????????
 * ug             : IBSheet ????????? ??????
 * aColNameList   : ????????? ???????????? ?????? 
 * gfSheetInputCheck("?????????????????????.", IBSheetListForm.ug, aColNameList)
 */
function gfSheetInputCheck(sMsg, ug, aColNameList) {
	var sCellValue = "";

	with(ug) {
		for (var i=1;i<=RowCount;i++) {
			for (var j=0;j<aColNameList.length;j++) {
				sCellValue = CellValue(i, SaveNameCol(aColNameList[j]));

				if (gfTrim(sCellValue) == "") {
					alert(sMsg);
					SelectCell(i, SaveNameCol(aColNameList[j]));

					return false;
				}
			}
		}
	}

}

function gfCreateOption(value, text) {
	var oOption = document.createElement("OPTION");

	oOption.value = value;
	oOption.text = text;

	return oOption;

}

function gfRemoveAllOptions(oCombo) {
	for(var i=oCombo.length-1 ; i >= 0 ; i--) {
		oCombo.remove(i);
	}

}

function gfSearchKey(sFunc) {
	if (event.keyCode==13) {
		eval(sFunc);
		event.returnValue=false;
	}
}

/** ########## Ajax??? ?????? ########## */

function gfResponseText(sResponseText) {
	var iPos = sResponseText.indexOf("<");

	return sResponseText.substring(iPos);
}

function gfGetRequestBody(oForm) {
	var aParams = new Array();
alert(oForm);
	for (var i=0; i < oForm.elements.length; i++){
		var sParam = encodeURIComponent(oForm.elements[i].name);
		sParam += "=";
		sParam += encodeURIComponent(oForm.elements[i].value);

		aParams.push(sParam);

	}
	return aParams.join("&");
}

function createHttpRequest()
{
	var aVersion = ["MSXML2.XMLHTTP.5.0", "MSXML2.XMLHTTP.4.0",
		            "MSXML.XMLHTTP.3.0", "MSXML2.XMLHTTP", "MICROSOFT.XMLHTTP"];

	for (var i=0 ; i<aVersion.length ; i++) {
		try {
			var oXmlHttp = new ActiveXObject(aVersion[i]);
			return oXmlHttp;
		} catch (e) {
			//alert(e.description);
			//return null;
			continue
		}
	}

	if (oXmlHttp == null) return null

	throw new Error("MSXML is not installed.");
}

function createDocument()
{
	var aVersion = ["MSXML2.DOMDocument.5.0", "MSXML2.DOMDocument.4.0",
		            "MSXML.DOMDocument.3.0", "MSXML2.DOMDocument", "MICROSOFT.XMLDOM"];

	for (var i=0 ; i<aVersion.length ; i++) {
		try {
			var oXmlDom = new ActiveXObject(aVersion[i]);
			return oXmlDom;
		} catch (e) {
			//alert(e.description);
			//return null;
			continue
		}
	}

	if (oXmlDom == null) return null

	throw new Error("MSXML is not installed.");
}

function gfCreateXmlDom(oXmlHttp) {
	var sXml = "";
	var oXmlDom = null;

	oXmlDom = createDocument();

	if (oXmlDom != null) {
		sXml = gfResponseText(oXmlHttp.responseText);
		oXmlDom.loadXML(sXml);
	}

	return oXmlDom;
}

/**
 * Ajax??? ????????? Server??? ????????? ???????????? ??????
 * oForm           : ????????? ?????????
 * callback             : IBSheet ????????? ??????
 * sFlag   : ?????????(true)/??????(false) ?????? 
 * gfSendRequest(oForm, callback, sFlag, sErrMsg)
 */
function gfSendRequest(oForm, sCallBackFunc, sFlag)
{
	//XMLHttpRequest ???????????? ??????
	var xmlHttp = createHttpRequest();
	if( xmlHttp == null ) return null;

	var sBody = gfGetRequestBody(oForm);

	xmlHttp.onreadystatechange =function () 
	{
		if (xmlHttp.readyState == 4 ){
			if (xmlHttp.status == 200 ) {
				showResult(xmlHttp);
				eval(sCallBackFunc);
			} else {
				alert(xmlHttp.statusText);
			}
		}
	}

	xmlHttp.open("POST", oForm.action, sFlag);
	xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=EUC-KR");
	xmlHttp.send(sBody);

}

function gfSendRequestXML(oForm, oCallBackFunc, sFlag)
{
	//XMLHttpRequest ???????????? ??????
	var xmlHttp = createHttpRequest();
	if( xmlHttp == null ) return null;

	var sBody = gfGetRequestBody(oForm);

	xmlHttp.onreadystatechange =function () 
	{
		if (xmlHttp.readyState == 4 ){
			if (xmlHttp.status == 200 ) {
				oCallBackFunc(xmlHttp);
			} else {
				alert("1"+xmlHttp.statusText);
			}
		}
	}

	alert("2"+oForm.action);
	xmlHttp.open("POST", oForm.action, sFlag);
	xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=EUC-KR");
	xmlHttp.send(sBody);

}

function showResult(oXmlHttp) {
	var oXmlDom = null;
	var oRoot = null;
	var iCount = 0;
	var oNodes = null;
	var sMsg = "";

	oXmlDom = gfCreateXmlDom(oXmlHttp);

	if (oXmlDom != null) {
		oRoot = oXmlDom.documentElement;

		if (oRoot == null || oRoot.length == 0) {
			alert("Function fShowResult XML Error!");
		}else {
			iCount = oRoot.childNodes[0].text;
			sMsg = oRoot.childNodes[1].text;

			alert((parseInt(iCount) > 0 ? iCount : "") + sMsg);
		}
	} else {
		alert("XML DOM Error");
	}

}

/** ################################### */


/** ########## Tab ?????? ?????? ########## */
var aTabCloseFlag = new Array();
var iMaxTabCount = 10;
var iTabCount    = 0;
var iTabWidth    = 150;
var iTabHeight   = 27;
var iTopPos      = 70;
var sTabImgPath  = "";

function removeTab(iIndex) {
	if (iIndex == 1) iIndex = iIndex + 1

	for (var i=iIndex;i<=iMaxTabCount;i++) {
		if (document.getElementById("tab" + i) != null) {
			eval("document.body.removeChild(tab" + i + ");");
			eval("document.body.removeChild(tabBody" + i + ");");
			eval("document.body.removeChild(tabUnder" + i + ");");

			iTabCount--;
		}
	}
	showThisTab(iIndex-1);
}

function showThisTab(iIndex) {
	var sDivTitle = "";
	var oTab      = null;
	var oTabBody  = null;
	var oTabUnder = null;

	try {
		for (var i=1;i<=iMaxTabCount;i++) {
			oTab = document.getElementById("tab" + i);

			if (oTab != null) {
				eval("tabBody" + i + ".style.display='none';");
				eval("tabUnder" + i + ".style.display='none';");

				//sDivTitle = oTab.innerText;
				//oTab.innerHTML = makeTabHtml(i, sDivTitle, 2);

				eval("tabImgLeft"  + i + ".src='" + sTabImgPath + "tab21.gif';");
				eval("tabTdCenter" + i + ".className='bg_tab21';");
				eval("tabTdClose"  + i + ".className='bg_tab21';");
				eval("tabImgRight" + i + ".src='" + sTabImgPath + "tab22.gif';");
			}
		}
	
		//oTab = document.getElementById("tab" + iIndex);
		//oTab.innerHTML = makeTabHtml(iIndex, oTab.innerText, 1);

		eval("tabImgLeft"  + iIndex + ".src='" + sTabImgPath + "tab11.gif';");
		eval("tabTdCenter" + iIndex + ".className='bg_tab11';");
		eval("tabTdClose"  + iIndex + ".className='bg_tab11';");
		eval("tabImgRight" + iIndex + ".src='" +sTabImgPath + "tab12.gif';");

		document.getElementById("tabBody" + iIndex).style.display='';
		document.getElementById("tabUnder" + iIndex).style.display='';
		document.getElementById("tabBody" + iIndex).document.frames[0].window.focus();

	} catch(e) {
		alert(e.description);
		return;
	}
}

function makeTabHtml(iIndex, sTitle, iFlag) {
	var sClose = "";

	if (iIndex != 1) sClose = "<img src='" + sTabImgPath + "btn_close.gif' onclick='removeTab(" + iIndex + ")'>";
	if (aTabCloseFlag[iIndex] == "N") sClose = "";

	/*
	var sTabHtml = "<table width=" + iTabWidth + " height=" + iTabHeight + " border=0 cellpadding=0 cellspacing=0>"
				 + "	<tr>"
				 + "		<td width=10><img src='" + sTabImgPath + "tab" + iFlag + "1.gif'></td>"
				 + "        <td align=center class=bg_tab" + iFlag + "1><b>" + sTitle + "</b></td>"
				 + "        <td width=10 align=center class=bg_tab" + iFlag + "1>" + sClose + "</td>"
				 + "        <td width=10><img src='" + sTabImgPath + "tab" + iFlag + "2.gif'></td>" 
				 + "	</tr>"
				 + "</table>";
	*/
	var sTabHtml = "<table width=" + iTabWidth + " height=" + iTabHeight + " border=0 cellpadding=0 cellspacing=0>"
				 + "	<tr>"
				 + "		<td width=10><img id='tabImgLeft"  + iIndex + "' src='" + sTabImgPath + "tab" + iFlag + "1.gif'></td>"
				 + "        <td align=center  id='tabTdCenter" + iIndex + "' class=bg_tab" + iFlag + "1><b>" + sTitle + "</b></td>"
				 + "        <td width=10      id='tabTdClose"  + iIndex + "' align=center class=bg_tab" + iFlag + "1>" + sClose + "</td>"
				 + "        <td width=10><img id='tabImgRight" + iIndex + "' src='" + sTabImgPath + "tab" + iFlag + "2.gif'></td>" 
				 + "	</tr>"
				 + "</table>";

	return sTabHtml;
}

/**
 * Tab ?????? ??????
 * iIndex     : Tab ?????????
 * sUrl       : Tab ????????? ????????? URL
 * sTitle     : Tab Title
 * sImgPath   : ????????? ?????? 
 * sCloseFlag : Tab??? Close ????????? ???????????? 
 * gfMakeTab(1,'http://www.nate.com','tab1','/boby/images/','Y')
 */
function gfMakeTab(iIndex, sUrl, sTitle, sImgPath, sCloseFlag) {
	var iNewBodyWidth = document.body.clientWidth-document.body.leftMargin-5;
	var iNewBodyHeight = document.body.clientHeight-iTopPos-5;

	aTabCloseFlag[iIndex] = sCloseFlag;
	sTabImgPath = sImgPath;

	try {
		var sIframe = "<iframe src='" + sUrl + "' width=100% height=100% frameborder=0></iframe>";
		var sTable = "<table width=100% height=100% border=0 cellpadding=1 cellspacing=1 class=bg_g>"
				   + "	<tr>"
				   + "		<td class=bg_w>" + sIframe + "</td>"
				   + "	</tr>"
				   + "</table>";

		var oTab        = document.getElementById("tab" + iIndex);
		var oTabBody    = document.getElementById("tabBody" + iIndex);
		var oTabUnder   = document.getElementById("tabUnder" + iIndex);

		if (oTab != null) {
			document.body.removeChild(oTab);
			document.body.removeChild(oTabBody);
			document.body.removeChild(oTabUnder);
		}

		oTab = document.createElement("div");
		oTabBody = document.createElement("div");
		oTabUnder = document.createElement("div");

		// Tab Div
		oTab.id="tab" + iIndex;
		oTab.style.position = "absolute";
		oTab.style.top = (iTopPos - iTabHeight);
		oTab.style.left = (iIndex - 1) * iTabWidth + parseInt(document.body.leftMargin);
		oTab.style.width = iTabWidth;
		oTab.style.height = iTabHeight;
		oTab.style.border = "0px";
		oTab.style.cursor = "hand";
		oTab.onclick= function() {showThisTab(iIndex);}
		oTab.innerHTML = makeTabHtml(iIndex, sTitle, 1);

		// Tab??? ????????? ???????????? Div
		oTabBody.id="tabBody" + iIndex;
		oTabBody.style.position = "absolute";
		oTabBody.style.top = iTopPos+"px";
		oTabBody.style.left = document.body.leftMargin;
		oTabBody.style.width = iNewBodyWidth;
		oTabBody.style.height = iNewBodyHeight;
		oTabBody.style.border = "0px";
		oTabBody.innerHTML = sTable;

		// Tab ????????? UnderLine??? ????????? Div
		oTabUnder.id="tabUnder" + iIndex;
		oTabUnder.style.position = "absolute";
		oTabUnder.style.top = iTopPos;
		oTabUnder.style.left = (iIndex - 1) * iTabWidth + parseInt(document.body.leftMargin) + 1;
		oTabUnder.style.width = iTabWidth - 2;
		oTabUnder.style.height = "1px";
		oTabUnder.style.background = "white";
		oTabUnder.innerHTML = "<table height=0 cellspacing=0 cellpadding=0><tr><td></td></tr></table>";

		document.body.appendChild(oTab);
		document.body.appendChild(oTabBody);
		document.body.appendChild(oTabUnder);

		showThisTab(iIndex);

		iTabCount++;
	} catch(e) {
		alert(e.description);
		return;
	}
}
/** ################################### */


/**
 * Validation ?????? ?????? ??? ??????
 * required : ?????? ?????? ?????? ??????
 * numeric  : ?????? ?????? ?????? ??????
 */
var aCheckControlTagName = new Array("INPUT", "SELECT", "TEXTAREA", "PASSWORD");
var aCheckControls = new Array();

//window.attachEvent("onload", fSetControlProperty);

function fSetControlProperty() {
	var oControls = null;

	for (var i=0 ; i < aCheckControlTagName.length ; i++) {
		oControls = document.getElementsByTagName(aCheckControlTagName[i])

		if (oControls != null) {
			for (var j=0 ; j < oControls.length ; j++) {
				if (oControls[j].getAttribute("required") != null) {
					oControls[j].className = "required";
					aCheckControls.push(oControls[j]);
				} 
				if (oControls[j].getAttribute("numeric") != null) {
					oControls[j].attachEvent("onkeydown", fInputNumber);
					oControls[j].style.textAlign = "right";
					oControls[j].style.paddingRight = "5";
				}
			}
		}
	}
}

var aNumKeyCode = new Array(48,49,50,51,52,53,54,55,56,57);
var aNumPadKeyCode = new Array(96,97,98,99,100,101,102,103,104,105);
var aSpecialKeyCode = new Array(8,9,16,17,18,35,36,37,38,39,40,46,103);

function fInputNumber() {
	var iKeyCode = event.keyCode;
	var aNumRelatedKeyCode = aNumKeyCode.concat(aNumPadKeyCode).concat(aSpecialKeyCode);
	var sNumRelatedKeyCode = aNumRelatedKeyCode.join(",");

	if (event.shiftKey) return false;

	if (sNumRelatedKeyCode.indexOf(iKeyCode) > 0)
		event.returnValue = true
	else
		event.returnValue = false

}

function gfSubmit(oForm) {
	var sCheckMessage = "";
	var bResult = true;

	for (var i=0 ; i < aCheckControls.length ; i++) {
		if (aCheckControls[i].value.trim() == "") {
			bResult = false;
			sCheckMessage = aCheckControls[i].getAttribute("checkMessage");

			if (sCheckMessage == null) {
				alert("?????? ??????????????????.");
			} else {
				alert(sCheckMessage);
			}

			aCheckControls[i].focus();
			return;
		}
	}

	if (bResult) oForm.submit();
}
/** ################################### */
