﻿// common.js by guoo.net
// javascript library
// start page
var undefined;
var explorer = (navigator.userAgent.indexOf('MSIE')!=-1)?1:0;
if(explorer) var explorerVer = navigator.appVersion.match(/MSIE \d+.\d+/)[0].split(" ")[1];
var firefox = (navigator.userAgent.indexOf('Firefox')!=-1)?1:0;
var netscape = (navigator.userAgent.indexOf('Netscape')!=-1)?1:0;
var mozila = (navigator.userAgent.indexOf('rv:')!=-1)?1:0;
var opera = (navigator.userAgent.indexOf('Opera')!=-1)?1:0;
var gecko = (navigator.userAgent.indexOf('Gecko')!=-1)?1:0;

var PET_dontcare = new Date();
var PET_pageStartTime = PET_dontcare.getTime()
function getExecuteTime() {
	var dontcare = new Date();
	return ((dontcare.getTime()) - PET_pageStartTime)/1000;
}

//start for dreamweaver script
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

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_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_nbGroup(event, grpName) { //v6.0
  var i,img,nbArr,args=MM_nbGroup.arguments;
  if (event == "init" && args.length > 2) {
    if ((img = MM_findObj(args[2])) != null && !img.MM_init) {
      img.MM_init = true; img.MM_up = args[3]; img.MM_dn = img.src;
      if ((nbArr = document[grpName]) == null) nbArr = document[grpName] = new Array();
      nbArr[nbArr.length] = img;
      for (i=4; i < args.length-1; i+=2) if ((img = MM_findObj(args[i])) != null) {
        if (!img.MM_up) img.MM_up = img.src;
        img.src = img.MM_dn = args[i+1];
        nbArr[nbArr.length] = img;
    } }
  } else if (event == "over") {
    document.MM_nbOver = nbArr = new Array();
    for (i=1; i < args.length-1; i+=3) if ((img = MM_findObj(args[i])) != null) {
      if (!img.MM_up) img.MM_up = img.src;
      img.src = (img.MM_dn && args[i+2]) ? args[i+2] : ((args[i+1])? args[i+1] : img.MM_up);
      nbArr[nbArr.length] = img;
    }
  } else if (event == "out" ) {
    for (i=0; i < document.MM_nbOver.length; i++) {
      img = document.MM_nbOver[i]; img.src = (img.MM_dn) ? img.MM_dn : img.MM_up; }
  } else if (event == "down") {
    nbArr = document[grpName];
    if (nbArr)
      for (i=0; i < nbArr.length; i++) { img=nbArr[i]; img.src = img.MM_up; img.MM_dn = 0; }
    document[grpName] = nbArr = new Array();
    for (i=2; i < args.length-1; i+=2) if ((img = MM_findObj(args[i])) != null) {
      if (!img.MM_up) img.MM_up = img.src;
      img.src = img.MM_dn = (args[i+1])? args[i+1] : img.MM_up;
      nbArr[nbArr.length] = img;
  } }
}
//end for dreamweaver script

// emul ie
if(gecko && typeof HTMLElement!='undefined') {
	HTMLElement.prototype.insertAdjacentElement = function(where,parsedNode) {
		switch(where) {
		case 'beforeBegin':
			this.parentNode.insertBefore(parsedNode,this)
			break;
		case 'afterBegin':
			this.insertBefore(parsedNode,this.firstChild);
			break;
		case 'beforeEnd':
			this.appendChild(parsedNode);
			break;
		case 'afterEnd':
			if (this.nextSibling) this.parentNode.insertBefore(parsedNode,this.nextSibling);
			else this.parentNode.appendChild(parsedNode);
			break;
		}
	};

	HTMLElement.prototype.insertAdjacentHTML = function(where,htmlStr) {
		var r = this.ownerDocument.createRange();
		r.setStartBefore(this);
		var parsedHTML = r.createContextualFragment(htmlStr);
		this.insertAdjacentElement(where,parsedHTML)
	};


	HTMLElement.prototype.insertAdjacentText = function(where,txtStr) {
		var parsedText = document.createTextNode(txtStr)
		this.insertAdjacentElement(where,parsedText)
	};


	HTMLElement.prototype.__defineSetter__("innerHTML", function (str) {
		var r = this.ownerDocument.createRange();
		r.selectNodeContents(this);
		r.deleteContents();
		var df = r.createContextualFragment(str);
		this.appendChild(df);
		return str;
	});

	HTMLElement.prototype.__defineSetter__("outerHTML", function (str) {
		var r = this.ownerDocument.createRange();
		r.setStartBefore(this);
		var df = r.createContextualFragment(str);
		this.parentNode.replaceChild(df, this);
		return str;
	});


	HTMLElement.prototype.__defineGetter__("innerHTML", function () {
		return getInnerHTML(this);
	});

	HTMLElement.prototype.__defineGetter__("outerHTML", function () {
		return getOuterHTML(this)
	});
}


if(gecko && typeof HTMLBodyElement!='undefined') {
	Event.prototype.__defineGetter__("clientWidth", function() {
		return window.innerWidth;
	});

	Event.prototype.__defineGetter__("clientHeight", function() {
		return window.innerHeight;
	});
}

if(gecko && typeof Event!='undefined') {
	Event.prototype.__defineGetter__("srcElement", function() {
		var node = this.target;
		while(node.nodeType != 1) node = node.parentNode;
		return node;
	});

	Event.prototype.__defineSetter__("cancelBubble", function(b) {
		if(b) this.stopPropagation();
	});

	Event.prototype.__defineSetter__("returnValue", function(b) {
		if(!b) this.preventDefault();
	});

	Event.prototype.__defineGetter__("fromElement", function() {
		var node;
		if(this.type == "mouseover")
			node = this.relatedTarget;
		else if(this.type == "mouseout")
			node = this.target;
		else
		return null;
		var node = this.target;
		while(node.nodeType != 1) node = node.parentNode;
		return node;
	});

	Event.prototype.__defineGetter__("toElement", function() {
		var node;
		if(this.type == "mouseout")
			node = this.relatedTarget;
		else if(this.type == "mouseover")
			node = this.target;
		else
		return null;
		var node = this.target;
		while(node.nodeType != 1) node = node.parentNode;
		return node;
	});

	Event.prototype.__defineGetter__("offsetX", function() {
		return this.layerX;
	});

	Event.prototype.__defineGetter__("offsetY", function() {
		return this.layerY;
	});

	Event.prototype.__defineGetter__("button", function() {
		return (this.which==1)?1:(this.which==2)?4:2;
	});
}

if(gecko && typeof CSSStyleDeclaration!='undefined') {
	CSSStyleDeclaration.prototype.__defineSetter__("cursor", function(v) {
		if(v=="hand") v = "pointer";
		this.setProperty("cursor", v, "important");
	});
}


//prototype for String
String.prototype.trim = function() {
	var str=this.replace(/(\s+$)/g,"");
	return str.replace(/(^\s*)/g,"");
}
//prototype for Array
Array.prototype.contains = function (value) {
	for(var i=0; i<this.length; i++) {
		if(this[i]==value) return true;
	}
	return false;
}
Array.prototype.getIndex = function (value) {
	for(var i=0; i<this.length; i++) {
		if(this[i]==value) return i;
	}
	return false;
}

//start Hashtable
function Hashtable() {
	this.arrayHashtableKey = [];
	this.arrayHashtableValue = [];
}
Hashtable.prototype.put = function(key, value) {
	if(this.arrayHashtableKey.contains(key)) {
		this.arrayHashtableValue[this.arrayHashtableKey.getIndex(key)] = value;
	}else {
		var nextIndex = this.arrayHashtableKey.length;
		this.arrayHashtableKey[nextIndex] = key;
		this.arrayHashtableValue[nextIndex] = value;
	}
}
Hashtable.prototype.get = function(key) {
	if(this.arrayHashtableKey.contains(key)) {
		return this.arrayHashtableValue[this.arrayHashtableKey.getIndex(key)];
	}else {
		return false;
	}
}
Hashtable.prototype.remove = function(key) {
	if(this.arrayHashtableKey.contains(key)) {
		var index = this.arrayHashtableKey.getIndex(key);
		var arrayTemp;
		arrayTemp = this.arrayHashtableValue.slice(0, index);
		arrayTemp = arrayTemp.concat(this.arrayHashtableValue.slice(index+1));
		this.arrayHashtableValue = arrayTemp;
		arrayTemp = this.arrayHashtableKey.slice(0, index);
		arrayTemp = arrayTemp.concat(this.arrayHashtableKey.slice(index+1));
		this.arrayHashtableKey = arrayTemp;
		return true;
	}else {
		return false;
	}
}
Hashtable.prototype.elements = function() {
	return this.arrayHashtableValue;
}
Hashtable.prototype.keys = function() {
	return this.arrayHashtableKey;
}
Hashtable.prototype.size = function() {
	return this.arrayHashtableKey.length;
}
Hashtable.prototype.containsKey = function(key) {
	return this.arrayHashtableKey.contains(key);
}
Hashtable.prototype.containsValue = function(value) {
	return this.arrayHashtableValue.contains(value);
}
Hashtable.prototype.clear = function() {
	this.arrayHashtableKey = [];
	this.arrayHashtableValue = [];
}

// 상황에 따른 onload효과를 위해..
if(gecko) {
	window.onload = function() {
		document.readyState = 'complete';
	};
}
function onLoadFunction(functionName) {
	var loaded = false;
	loaded = document.readyState=='complete';
	if(!loaded) {
		setTimeout('onLoadFunction(\''+functionName+'\')', 30);
		return;
	}
	eval(functionName);
}
function onLoadElement(elementName, functionName) {
	if(!document.getElementById(elementName)) {
		setTimeout('onLoadElement(\''+elementName+'\', \''+functionName+'\')', 30);
		return;
	}
	eval(functionName);
}


// explorer외에.. onscroll 대채용.
function onScrollFunction(functionName, lastLeft, lastTop){
	if(!lastLeft) lastLeft = 0;
	if(!lastTop) lastTop = 0;

	if(document.body.scrollTop!=lastTop || document.body.scrollLeft!=lastLeft) {
		eval(functionName);
	}

	window.setTimeout('onScrollFunction(\''+functionName+'\', '+document.body.scrollLeft+', '+document.body.scrollTop+');', 30);
}
//finish Hashtable

//2004.11.15 by guoo.net
function openPopup(url, name, width, height, left, top, extra) {
	var status = 'toolbar=no,scrollbars=yes,resizable=no,width='+width+',height='+height;
	if(left) status += ',left='+left;
	else status += ',left='+(window.screen.availWidth-width)/2;
	if(top) status += ',top='+top;
	else status += ',top='+(window.screen.availHeight-height)/2;
	if(extra) status += ','+extra;
	var win = window.open(url, name, status);
	win.focus();
	return win;
}
function openPopup2(url, name, width, height, left, top, extra, status) {
    var status;
    if (status == '')
    {
	    status = 'toolbar=no,scrollbars=no,resizable=no,width='+width+',height='+height;
	}
	if(left) status += ',left='+left;
	else status += ',left='+(window.screen.availWidth-width)/2;
	if(top) status += ',top='+top;
	else status += ',top='+(window.screen.availHeight-height)/2;
	if(extra) status += ','+extra;
	var win = window.open(url, name, status);
	win.focus();
	return win;
}

//tooltip start - 툴팁
//2005.1.12 by guoo.net
var tooltipLastElement; //dontcare
function createTooltip() {
	var divTooltip = document.createElement('DIV');
	divTooltip.id = 'tooltip';
	divTooltip.noWrap = true;
	divTooltip.style.position = 'absolute';
	divTooltip.style.zIndex = 1000;
	divTooltip.style.visibility = 'hidden';
	divTooltip.style.border = '1px solid #bbaaaa';
	divTooltip.style.background = '#ffffdd';
	divTooltip.style.fontFamily = '굴림';
	divTooltip.style.fontSize = '9pt';
	divTooltip.style.padding = '3';
	document.body.appendChild(divTooltip);
	return divTooltip;
}

function hideTooltip() {
	var divTooltip = document.getElementById('tooltip');
	if(!divTooltip) return;
	divTooltip.style.visibility = 'hidden';
	divTooltip.innerHTML = '';
	tooltipLastElement = '';
}

function tooltip(event, html, up) {
	if(!explorer && !gecko) return;

	var divTooltip = document.getElementById('tooltip');
	if(!divTooltip) divTooltip = createTooltip();

	var element = event.srcElement;

	if(tooltipLastElement!=element) {
		tooltipLastElement = element;
		element.onmouseout = hideTooltip;
		divTooltip.style.top = 0;
		divTooltip.style.left = 0;
		divTooltip.innerHTML = html;
		divTooltip.style.visibility = 'visible';
	}

	var pageWidth = document.body.clientWidth;
	var pageHeight = document.body.clientHeight;
	var gab = 9;

	if(pageWidth < divTooltip.clientWidth + 15 + event.clientX) {
		divTooltip.style.left = document.body.scrollLeft + pageWidth - (divTooltip.clientWidth + 15) + gab;
	}else {
		divTooltip.style.left = event.clientX + document.body.scrollLeft + gab;
	}

	if(!up) {
		if(pageHeight < divTooltip.clientHeight + 15 + event.clientY) {
			divTooltip.style.top = document.body.scrollTop + pageHeight - (divTooltip.clientHeight + 15) + gab;
		}else {
			divTooltip.style.top = event.clientY + document.body.scrollTop + gab;
		}
	}else {
		if(0 > event.clientY - (divTooltip.clientHeight + 15)) {
			divTooltip.style.top = gab;
		}else {
			divTooltip.style.top = event.clientY + document.body.scrollTop - divTooltip.clientHeight - gab;
		}
	}
}
//tooltip finish

function dynamicDiv(name) {
	var divObj = document.getElementById(name);
	if(!divObj) {
		divObj = document.createElement('DIV');
		divObj.id = name;
		divObj.style.visibility = 'hidden';
		divObj.style.position = 'absolute';
		document.body.insertAdjacentElement('afterBegin', divObj);
	}
	return divObj;
}

//파일찾기 이미지 버튼.
//create 2005.1.18 by 송돌이
//modify 2005.6.28 by 송돌이
//image file button start
function createImageFileButton(imgObj, formname, fileformname, onchangefunction) {
	imgObj.onload = ''; // animatin gif경우 계속 onload발생..
	var inputFileObj;
	var divWrapLayer;
	inputFileObj = document.getElementById(fileformname);
	if(!inputFileObj) {
		var formElement = document.forms[formname];
		divWrapLayer = document.createElement('DIV');
		divWrapLayer.id = 'div_wrap_image_file_button_'+fileformname;
		divWrapLayer.style.position = 'absolute';
		divWrapLayer.style.width = '1px';
		divWrapLayer.style.height = '1px';
		divWrapLayer.style.overflow = 'hidden';
		divWrapLayer.style.visibility = 'visible';
		inputFileObj = document.createElement('INPUT');
		inputFileObj.type = 'file';
		inputFileObj.name = fileformname;
		inputFileObj.id = fileformname;
		inputFileObj.size = '1';
		inputFileObj.style.position = 'absolute';
		inputFileObj.style.left = '-55px';
		inputFileObj.style.top = '-10px';
    
		var extraArgs = arguments;
		var onchangeExtraArgs = '';
		for(var i=4; i<arguments.length; i++) onchangeExtraArgs += ', extraArgs['+i+']';
		if(window.Event) imgObj.addEventListener('mousemove', function(e) { window.event = e; }, true);
		imgObj.onmousemove = function() {
			var crackx = 0;
			var cracky = 0;
			divWrapLayer.style.left = document.body.scrollLeft + event.clientX - crackx;
			divWrapLayer.style.top = document.body.scrollTop + event.clientY - cracky;
		};
		
		if(imgObj.press) {
			var source = imgObj.src;
			inputFileObj.onmouseup = function() {
				imgObj.src = source;
			}
			inputFileObj.onmousedown = function() {
				imgObj.src = imgObj.press;
			}
		}//if
		if(typeof onchangefunction!='undefined')
			inputFileObj.onchange = function() {
				eval("onchangefunction(document.getElementById(fileformname), document.getElementById('div_wrap_image_file_button_'+fileformname) "+onchangeExtraArgs+");");
			};
		divWrapLayer.appendChild(inputFileObj);
		formElement.appendChild(divWrapLayer);
	}else {
	    divWrapLayer = document.getElementById('div_wrap_image_file_button_'+fileformname);

		var extraArgs = arguments;
		var onchangeExtraArgs = '';
		for(var i=4; i<arguments.length; i++) onchangeExtraArgs += ', extraArgs['+i+']';
		if(window.Event) imgObj.addEventListener('mousemove', function(e) { window.event = e; }, true);
		imgObj.onmousemove = function() {
			var crackx = 0;
			var cracky = 0;
			divWrapLayer.style.left = document.body.scrollLeft + event.clientX - crackx;
			divWrapLayer.style.top = document.body.scrollTop + event.clientY - cracky;
		};
		
		if(imgObj.press) {
			var source = imgObj.src;
			inputFileObj.onmouseup = function() {
				imgObj.src = source;
			}
			inputFileObj.onmousedown = function() {
				imgObj.src = imgObj.press;
			}
		}//if
		if(typeof onchangefunction!='undefined')
			inputFileObj.onchange = function() {
				eval("onchangefunction(document.getElementById(fileformname), document.getElementById('div_wrap_image_file_button_'+fileformname) "+onchangeExtraArgs+");");
			};
	}
}
function removeImageFileForm(formname, fileformname) {
	var formObj = document.forms[formname];
	var inputObj = document.getElementById(fileformname);
	var divWrapLayer = document.getElementById('div_wrap_image_file_button_'+fileformname);
	formObj.removeChild(inputObj);
	divWrapLayer.parentNode.removeChild(divWrapLayer);
}
function resetImageFileButton(fileformname) {
	var inputFileObj = document.getElementById(fileformname);
	var divWrapLayer = document.getElementById('div_wrap_image_file_button_'+fileformname);
	var oldOnchange = inputFileObj.onchange;
	var oldOnmouseup = inputFileObj.onmouseup;
	var oldOnmousedown = inputFileObj.onmousedown;
	divWrapLayer.removeChild(inputFileObj);
	inputFileObj = document.createElement('INPUT');
	inputFileObj.type = 'file';
	inputFileObj.name = fileformname;
	inputFileObj.id = fileformname;
	inputFileObj.size = '1';
	inputFileObj.style.position = 'absolute';
	inputFileObj.style.left = '-40px';
	inputFileObj.style.top = '-10px';
	inputFileObj.onchange = oldOnchange;
	inputFileObj.onmouseup = oldOnmouseup;
	inputFileObj.onmousedown = oldOnmousedown;
	divWrapLayer.appendChild(inputFileObj);
}
//image file button finish

// image functions start
function limitSizeImage(imgObj, limitWidth, limitHeight) {
	var width = imgObj.width;
	var height = imgObj.height;

	if(width > limitWidth) {
		imgObj.width = limitWidth;
	}
	if(height > limitHeight) {
		imgObj.height = limitHeight;
	}
}
// image functions finish

//파일확장자 가져오기
//2004.1.21 by guoo.net
function getExtension(filename) {
	var pos = filename.lastIndexOf('/');
	var ext = filename;
	if(pos!=-1) filename = filename.substring(pos+1);
	pos = filename.lastIndexOf('\\');
	if(pos!=-1) filename = filename.substring(pos+1);
	pos = filename.indexOf('?');
	if(pos!=-1) ext = filename.substring(0, pos);
	pos = ext.lastIndexOf('.');
	if(pos!=-1) ext = ext.substring(pos+1);
	return ext.toLowerCase();
}

//파일이름 가져오기
//2004.1.21 by guoo.net
function getFilename(filename) {
	var pos = filename.lastIndexOf('/');
	if(pos!=-1) filename = filename.substring(pos+1);
	pos = filename.lastIndexOf('\\');
	if(pos!=-1) filename = filename.substring(pos+1);
	pos = filename.indexOf('?');
	if(pos!=-1) filename = filename.substring(0, pos);
	pos = filename.lastIndexOf('.');
	if(pos!=-1) filename = filename.substring(0, pos);
	return filename;
}

//2004.1.21 by guoo.net
function movePage(page, vars) {
	if(vars) page = page + '?' + vars;
	window.location.href = page;
}

//2004.1.21 by guoo.net
function openModalWindow(page, width, height) {
	showModalDialog(page, window, 'dialogWidth:'+width+'px; dialogHeight:'+height+'px; resizable:yes; help:no; status:no; scroll:no;');
}

function setCookie(name, value, expiredays) {
	var todayDate = new Date(); 
	todayDate.setDate(todayDate.getDate() + expiredays); 
	var cookieValue = name + '=' + escape(value) + "; path=/;";
	if(expiredays) {
		cookieValue += ' expires=' + todayDate.toGMTString()+';';
	}//if

	document.cookie = cookieValue;
}

function getCookie(name) {
	var cname = name + '=';
	if(document.cookie.length>0) {
		begin = document.cookie.indexOf(cname);
		if(begin!=-1) {
			begin += cname.length;
			var end = document.cookie.indexOf(';',begin);
			if(end==-1)	{
				end = document.cookie.length;
			}
			return unescape(document.cookie.substring(begin,end));
		}
	}
	return;
}

function copyClipBoard(text){
	if(explorer) { // IE일 경우
		window.clipboardData.setData("Text", text);
	}else if(gecko) { // NS일 경우
		// you have to sign the code to enable this, or see notes below 
		netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');

		// maak een interface naar het clipboard
		var clip = Components.classes['@mozilla.org/widget/clipboard;1'].createInstance(Components.interfaces.nsIClipboard);
		if (!clip) return;

		// maak een transferable
		var trans = Components.classes['@mozilla.org/widget/transferable;1'].createInstance(Components.interfaces.nsITransferable);
		if (!trans) return;

		// specificeer wat voor soort data we op willen halen; text in dit geval
		trans.addDataFlavor('text/unicode');

		// om de data uit de transferable te halen hebben we 2 nieuwe objecten nodig   om het in op te slaan
		var str = new Object();
		var len = new Object();

		var str = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);

		var copytext = text;    // 로컬변수에 복사
		str.data = copytext;

		trans.setTransferData("text/unicode",str,copytext.length*2);
		var clipid = Components.interfaces.nsIClipboard;
		if (!clipid) return false;

		clip.setData(trans,null,clipid.kGlobalClipboard);
	}
	return false;
}


/*  
Function Equivalent to java.net.URLEncoder.encode(String, "UTF-8")
Version: 1.0
*/
function encodeURL(str){
    var s0, i, s, u;
    
    s0 = "";                            // encoded str
    
    for (i = 0; i < str.length; i++) {  // scan the source
        s = str.charAt(i);
        u = str.charCodeAt(i);          // get unicode of the char
        if (s == " ") {
            s0 += "+";
        } else {                        // SP should be converted to "+"
            if ( u == 0x2a || u == 0x2d || u == 0x2e || u == 0x5f || ((u >= 0x30) && (u <= 0x39)) || ((u >= 0x41) && (u <= 0x5a)) || ((u >= 0x61) && (u <= 0x7a))) {       // check for escape
                s0 = s0 + s;            // don't escape
            } else {                  // escape
                if ((u >= 0x0) && (u <= 0x7f)) {     // single byte format
                    s = "0"+u.toString(16);
                    s0 += "%"+ s.substr(s.length-2);
                } else if(u > 0x1fffff) {     // quaternary byte format (extended)
                    s0 += "%" + (oxf0 + ((u & 0x1c0000) >> 18)).toString(16);
                    s0 += "%" + (0x80 + ((u & 0x3f000) >> 12)).toString(16);
                    s0 += "%" + (0x80 + ((u & 0xfc0) >> 6)).toString(16);
                    s0 += "%" + (0x80 + (u & 0x3f)).toString(16);
                } else if(u > 0x7ff) {        // triple byte format
                    s0 += "%" + (0xe0 + ((u & 0xf000) >> 12)).toString(16);
                    s0 += "%" + (0x80 + ((u & 0xfc0) >> 6)).toString(16);
                    s0 += "%" + (0x80 + (u & 0x3f)).toString(16);
                } else {                      // double byte format
                    s0 += "%" + (0xc0 + ((u & 0x7c0) >> 6)).toString(16);
                    s0 += "%" + (0x80 + (u & 0x3f)).toString(16);
                }
            }
        }
    }
    
    return s0;
}

/*  
Function Equivalent to java.net.URLDecoder.decode(String, "UTF-8")
Version: 1.0
*/
function decodeURL(str){
    var s0, i, j, s, ss, u, n, f;
    s0 = "";                                // decoded str
    
    for (i = 0; i < str.length; i++) {      // scan the source str
        s = str.charAt(i);
        if (s == "+") {
            s0 += " ";
        } else {                            // "+" should be changed to SP
        
            if (s != "%") {
                s0 += s;
            } else{                         // add an unescaped char
                                            // escape sequence decoding
                u = 0;                      // unicode of the character
                f = 1;                      // escape flag, zero means end of this sequence
                while (true) {
                    ss = "";                // local str to parse as int
                    for (j = 0; j < 2; j++ ) {  // get two maximum hex characters for parse
                        sss = str.charAt(++i);
                        if (((sss >= "0") && (sss <= "9")) || ((sss >= "a") && (sss <= "f"))  || ((sss >= "A") && (sss <= "F"))) {
                            ss += sss;          // if hex, add the hex character
                        } else {--i; break;}    // not a hex char., exit the loop
                    }
                    n = parseInt(ss, 16);               // parse the hex str as byte
                    if (n <= 0x7f) {u = n; f = 1;}      // single byte format
                    if ((n >= 0xc0) && (n <= 0xdf)) {u = n & 0x1f; f = 2;}   // double byte format
                    if ((n >= 0xe0) && (n <= 0xef)) {u = n & 0x0f; f = 3;}   // triple byte format
                    if ((n >= 0xf0) && (n <= 0xf7)) {u = n & 0x07; f = 4;}   // quaternary byte format (extended)
                    if ((n >= 0x80) && (n <= 0xbf)) {u = (u << 6) + (n & 0x3f); --f;}         // not a first, shift and add 6 lower bits
                    if (f <= 1) {break;}                    // end of the utf byte sequence
                    if (str.charAt(i + 1) == "%") { i++ ;}  // test for the next shift byte
                    else {break;}                           // abnormal, format error
                }
                s0 += String.fromCharCode(u);               // add the escaped character
            }
        }
    }
    return s0;
}

function outputFlash(src, width, height, isTrasparent) {
    document.write('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="'+width+'" height="'+height+'">');
    document.write('<param name="movie" value="'+src+'" />');
    document.write('<param name="quality" value="high" />');
    if(isTrasparent) document.write('<param name="wmode" value="transparent" />');
    document.write('<embed src="'+src+'" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="'+width+'" height="'+height+'"></embed></object>');
}

// 2007.3.16 by prgmmer
// listbox methods
function clearListBox(listbox_obj)
{
    //alert(listbox_obj.options.length);
    for(var i=listbox_obj.options.length-1; i>=0; i--) {
        listbox_obj.options.remove(i);
    }
}

function addListBoxItem(listbox_obj, value, text)
{
    var obj_option = document.createElement("OPTION");
     
    listbox_obj.options.add(obj_option);
    obj_option.innerText = text;
    obj_option.value = value;
}

// 2007.04.02 by prgmmer
function dynamicForm(id, wrap_tag_id)
{
    var wrap_tag = document.getElementById(wrap_tag_id);
    var form = document.forms[id];
    if(typeof(form) == "undefined") {
        form = document.createElement("FORM");
    }
    
    form.id = form_id;
    form.style.display = "none";
    document.body.appendChild(form);
    
    form.innerHTML = wrap_tag.innerHTML;
    return form;
}

function submitPopup(id, url, width, height, form)
{
	var status = 'toolbar=no,scrollbars=yes,resizable=no,width='+width+',height='+height;
	if(left) status += ',left='+left;
	else status += ',left='+(window.screen.availWidth-width)/2;
	if(top) status += ',top='+top;
	else status += ',top='+(window.screen.availHeight-height)/2;
	if(extra) status += ','+extra;
	var popup_url = 'about:blank';
	if(typeof(form) == "undefined") {
	    popup_url = url;
	}
	var win = window.open(popup_url, id, status);
	if(typeof(form) == "undefined") {
	    form.method = "POST";
	    form.action = url;
	    form.target = id;
	    form.submit();
	}
	win.focus();
	return win;
}

