function openWin(theURL,winName,w,h,f) {
	var width = w ? w:100;
	var height = h ? h:100;
	var feature = f ? f:'location=no,menubar=no,titlebar=no,toolbar=no,status=0,personalbar=no,resizable=yes,scrollbars=yes';
	var winName = winName ? winName:'window';
	if(!theURL)
		alert("url can't use empty..");
	window.open(theURL,'window',"width="+width+",height="+height+","+feature);
}//

//EmbeddedPage Go License Page  Product Key 관련
function goLicensePage(PageHtm,type){
    document.getElementById('home').src = "/"+PageHtm+"?"
        +"product="+getUrl('product')
        +"&"+"version="+getUrl('version')
        +"&"+"driver="+getUrl('driver')
        +"&"+"type="+getUrl('type')
        +"&"+"memory="+getUrl('memory')
        +"&"+"cpu="+getUrl('cpu')
        +"&"+"os="+getUrl('os')
        +"&"+"formtype="+type;
}
//Product Key 관련

//Html UrlParser 관련
function setUrl(name,frameID){
    document.getElementById(frameID).innerHTML = getUrl(name);
}
function getUrl(name){
    var url_arr = document.URL.split("?");
    if(!url_arr[1])
        return "";

    var parameter_arr = url_arr[1].split("&");
    for (var i=0; i < parameter_arr.length; i++){
        var temp_arr = parameter_arr[i].split("=");
        if(temp_arr[0] == name) return unescape(temp_arr[1]);
    }
}
//Command관련

function getBrowserInfo(name){
	return name ? navigator[name]:navigator;
}//

//sprintf
//일반적인 내부함수 만드는 법
var StringBuffer =  function(){
    this.str = "";
    this.append = function(arg0){
        this.str += arg0;
    };
    this.toString = function(){
        return this.str;
    };
}//

function sprintf() {
	if (!arguments || arguments.length < 1 || !RegExp) 
		return;

	var str = arguments[0];
	var re = /([^%]*)%('.|0|\x20)?(-)?(\d+)?(\.\d+)?(%|b|c|d|u|f|o|s|x|X)(.*)/;
	var a = b = [], numSubstitutions = 0, numMatches = 0;
	while (a = re.exec(str)) {
		var leftpart = a[1], pPad = a[2], pJustify = a[3], pMinLength = a[4];
		var pPrecision = a[5], pType = a[6], rightPart = a[7];
		
		//alert(a + '\n' + [a[0], leftpart, pPad, pJustify, pMinLength, pPrecision);

		numMatches++;
		if (pType == '%') subst = '%';
		else {
			numSubstitutions++;
			if (numSubstitutions >= arguments.length) {
				alert('Error! Not enough function arguments (' + (arguments.length - 1) + ', excluding the string)\nfor the number of substitution parameters in string (' + numSubstitutions + ' so far).');
			}
			var param = arguments[numSubstitutions];
			var pad = '';
			if (pPad && pPad.substr(0,1) == "'") pad = leftpart.substr(1,1);
			else if (pPad) pad = pPad;
			var justifyRight = true;
			if (pJustify && pJustify === "-") justifyRight = false;
			var minLength = -1;
			if (pMinLength) minLength = parseInt(pMinLength);
			var precision = -1;
			if (pPrecision && pType == 'f') precision = parseInt(pPrecision.substring(1));
			var subst = param;
			if (pType == 'b') subst = parseInt(param).toString(2);
			else if (pType == 'c') subst = String.fromCharCode(parseInt(param));
			else if (pType == 'd') subst = parseInt(param) ? parseInt(param) : 0;
			else if (pType == 'u') subst = Math.abs(param);
			else if (pType == 'f') subst = (precision > -1) ? Math.round(parseFloat(param) * Math.pow(10, precision)) / Math.pow(10, precision): parseFloat(param);
			else if (pType == 'o') subst = parseInt(param).toString(8);
			else if (pType == 's') subst = param;
			else if (pType == 'x') subst = ('' + parseInt(param).toString(16)).toLowerCase();
			else if (pType == 'X') subst = ('' + parseInt(param).toString(16)).toUpperCase();
		}//Else
		str = leftpart + subst + rightPart;
	}//While
	return str;
}//sprintf

//window.open시 동작할 function Event 추가용
//사용법은 addLoadEvent(함수명1); addLoadEvent(함수명2); 함수를 선언한 순서대로 실행한다
function addLoadEvent(func){
	var oldonload = window.onload;
	if(typeof window.onload != 'function')
		window.onload = func;
	else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}//

//특정요소의 뒤에 새로운요소를 추가하고 싶은경우
function insertAfter(newElement,targetElement){
	var parent = targetElement.parentNode;
	if(parent.lastChild  == targetElement)
		parent.appendChild(newElement)
	else
		parent.insertBefore(newElement,targetElement.nextSibling);
}//

//특정요소의 class를 추가하는 함수
function addClass(element,value){
	if(!element.className)
		element.className = value;
	else {
		var newClassName = element.className;
		newClassName += " ";
		newClassName += value;
		element.className = newClassName;
	}
}//

//Element 속성
function getTextByElement(element){
	if (document.ELEMENT_NODE == null) {
		document.ELEMENT_NODE = 1;
		document.ATTRIBUTE_NODE = 2;
		document.TEXT_NODE = 3;
		document.CDATA_SECTION_NODE = 4;
		document.ENTITY_REFERENCE_NODE = 5;
		document.ENTITY_NODE = 6;
		document.PROCESSING_INSTRUCTION_NODE = 7;
		document.COMMENT_NODE = 8;
		document.DOCUMENT_NODE = 9;
		document.DOCUMENT_TYPE_NODE = 10;
		document.DOCUMENT_FRAGMENT_NODE = 11;
		document.NOTATION_NODE = 12;
	}

	switch(element.nodeType){
		case document.ELEMENT_NODE://Node.ELEMENT_NODE
			return xml.getTextByElement(element.firstChild);
			break;
		case document.ATTRIBUTE_NODE://Node.ATTRIBUTE_NODE
			break;
		case document.TEXT_NODE://Node.TEXT_NODE:
			return element.nodeValue;
			break;
		case document.DOCUMENT_NODE://Node.DOCUMENT_NODE:
			break;
	}
	return temps;
}//

/*javascript에는 공백제거를 하는 trim함수가 없다 ;;
그래서 정규표현식을 사용하여 공백을 제거한다.
정규표현식
^ - 처음시작(beginning of line)
\s - 공백(whitespace character)
$ - 끝라인(end of line)*/
function trim(str) {  
    return str.replace(/^\s\s*/, '').replace(/\s\s*$/, '');  
}//


function getCookieVal (offset) {
	var endstr = document.cookie.indexOf (";", offset);
	if (endstr == -1)
		endstr = document.cookie.length;
	return unescape(document.cookie.substring(offset, endstr));
}

function GetCookie (name) {
	var arg = name + "=";
	var alen = arg.length;
	var clen = document.cookie.length;
	var i = 0;
	while (i < clen) {	//while open
		var j = i + alen;
		if (document.cookie.substring(i, j) == arg)
			return getCookieVal (j);
		i = document.cookie.indexOf(" ", i) + 1;
		if (i == 0)
			break; 
	}	//while close
	return null;
}
