function createHttpRequest() {

    if(window.ActiveXObject){
        try {
            // MSXML2
            return new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                // MSXML
                return new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e2) {
                return null;
            }
        }

    } else if(window.XMLHttpRequest){
        return new XMLHttpRequest();
    } else {
        return null;
  }
}

var LOG_MAX=30;
var logDataList= new Array();
var isIE = window.ActiveXObject;
var BR = '<br>';
if(isIE){
	BR = '<BR>';
}

function logPlace(place, str){
	if(!document.getElementById(place)) return;
	//var logData = document.getElementById('log').innerHTML;
	var logData = logDataList[place];
	if(logData==null){
		logData='';
	}
	var now = new Date();
	var timeStr =  fillLeft(now.getHours(),2,"0")+":"+fillLeft(now.getMinutes(),2,"0")+":"+fillLeft(now.getSeconds(),2,"0");
//	logData = logData + timeStr+" "+str+BR;
	logData = timeStr+" "+str+BR+ logData;
	var logs = logData.split(BR);
	if(logs.length>LOG_MAX){
		logData = logData.substring(0,logData.lastIndexOf(BR));
	}
	document.getElementById(place).innerHTML = logData.replace('\n','<br>').replace('\n','<br>');
	
	logDataList[place]=logData;
}

var logStr='';
function log(str){
	if(!document.getElementById('log')) return;
	
	var now = new Date();
	var timeStr =  fillLeft(now.getHours(),2,"0")+":"+fillLeft(now.getMinutes(),2,"0")+":"+fillLeft(now.getSeconds(),2,"0");
	logStr = logStr + timeStr+" "+str+BR;
	var logs = logStr.split(BR);
	if(logs.length>LOG_MAX){
		logStr = logStr.substring(logStr.indexOf(BR)+4);
	}
	document.getElementById('log').innerHTML = logStr.replace('\n','<br>').replace('\n','<br>');
}

function fillLeft(src, length, fillStr){
	var result="";
	src = ""+src;	// toString
	for(i=src.length; i<length; i++){
		result += "0";
	}
	result += src;
	return result;
}



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 += "+";}       // SP should be converted to "+"

        else {

            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")

    Copyright (C) 2002, Cresc Corp.

    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 += " ";}       // "+" should be changed to SP

        else {

            if (s != "%"){s0 += s;}     // add an unescaped char

            else{               // 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;

}