
// ================================================================================
// ojo/
// ================================================================================


function jsHttpRequest() {
	function initConnector() {
		var o = null;
		var success = false;
		var MSXML_XMLHTTP_PROGIDS = new Array(
			'MSXML2.XMLHTTP.5.0',
			'MSXML2.XMLHTTP.4.0',
			'MSXML2.XMLHTTP.3.0',
			'MSXML2.XMLHTTP',
			'Microsoft.XMLHTTP'
		);

		for (var i=0;i < MSXML_XMLHTTP_PROGIDS.length && !success; i++) {
			try {
				o = new ActiveXObject(MSXML_XMLHTTP_PROGIDS[i]);
				success = true;
			} catch (e) {}
		}
		if( null==o && typeof XMLHttpRequest != "undefined") o = new XMLHttpRequest();
		return o;
	} this.initConnector = initConnector;


	function doRequest(method,url,parms) {
			var ret = false;
			var x = this.initConnector();
			if(null==x)  return;
			var self = this;

			var i, n;
			var post_data;
			method = method.toUpperCase();

			if (method == "GET") {
				if (url.indexOf("?") == -1) url += "?";
				for( var qparam in parms) { url += qparam+"="+escape(parms[qparam])+"&"; }
				var dt = new Date();
				url += '_'+dt.getTime()+'=1';
				post_data = null;
			} else {
				post_data = "&";
				for( var qparam in parms) { post_data += qparam+"="+escape(parms[qparam]); }
				if(2<post_data.length) post_data = post_data.substr(1);
				else post_data = "";
			}
			x.onreadystatechange = function() {
				if (x.readyState != 4) return;
				if( x.status == 200) {
					self.owner.actionResponse = ('xml'==self.owner.actionResponseType.toLowerCase()?x.responseXML:x.responseText);
					self.owner.action();
				} else {
					alert(x.status);
				}
			}

			try {
				x.open(method, url, true);
				if (method == "POST") {
					x.setRequestHeader("Method", "POST " + url + " HTTP/1.1");
					x.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				}
				x.send(post_data);
				ret = true;
			} catch (e) {
				alert(e);
			}
			delete x;
			return ret;

	} this.doRequest = doRequest;


	this.owner = arguments[0];
}




function trim(str) {
	var mode;
	if(1==arguments.length) mode = 'LR';
	else mode = arguments[1];
	mode = mode.toUpperCase();
	var trimLen = 0;
	if( mode.indexOf('L')>-1 ) {
		for(var i=0;i<str.length;i++) {
			if( /\s/.test(str.substr(i,1)) ) trimLen++;
			else break;
		}
		if(trimLen>0) str = str.substr(trimLen);
		trimLen = 0;
	}
	if( mode.indexOf('R')>-1 ) {
		for( i=str.length-1;i>=0;i--) {
			if( /\s/.test(str.substr(i,1)) ) trimLen++;
			else break;
		}
		if(trimLen>0) str = str.substr(0,str.length-trimLen);
	}
	return str;
}

function setJsCookie(key,value,expires) {
	var gmtExpire;
	if( typeof expires == 'object') {
		gmtExpire = '; expires=' + expires.toGMTString() + ';';
	} else {
		gmtExpire = ';';
	}
	document.cookie = key + '=' + escape(value) + gmtExpire;
}

function checkMailAddr(value) {
	var addr = value.split("@");
	if(addr.length==1 || addr.length>2) return false;
	var dom = addr[1].split(".");
	if(dom.length == 1) return false;
	var domLen = dom.length
	if(domLen>2 && (dom[domLen-1]).length==0) domLen--;
	if(dom[domLen-1].length<2 || dom[domLen-1].length>3) return false;
	for(var i=0;i<domLen;i++) { if(dom[i].length==0) return false; }

	var acc = addr[0].split(".");
	for(i=0;i<acc.length;i++) { if(acc[i].length==0) return false; }
	var okChars = "abcdefghijklmnopqrstuvwxyz";
	okChars += okChars.toUpperCase()+"0123456789-_";
	var testString = acc.join("")+"."+dom.join("");
	if("."==testString) return false;
	i=0;
	while( i<testString.length ) {
		if('.'==testString.substr(i,1)) {
			okChars = okChars.substr(0,okChars.length-1);
		} else {
			if(okChars.indexOf(testString.substr(i,1))==-1 ) return false;
		}
		i++;
	}
	return true;
}


function SetCookie(cookieName,cookieValue,nDays) {
 var today = new Date();
 var expire = new Date();
 if (nDays==null || nDays==0) nDays=1;
 expire.setTime(today.getTime() + 3600000*24*nDays);
 document.cookie = cookieName+"="+escape(cookieValue)
                 + ";expires="+expire.toGMTString();
}

function SetSessCookie(cookieName,cookieValue) {
	document.cookie = cookieName+"="+escape(cookieValue);
}

function getCookie(cookieName) {
	var ret = undefined;
	cookieName += "=";
	place = document.cookie.indexOf(cookieName,0);
	if (place == -1) {
		ret = undefined;
	} else {
		end = document.cookie.indexOf(";",place)
		if (end == -1) {
			ret = unescape(document.cookie.substring(place+cookieName.length,document.cookie.length));
		} else {
			ret = unescape(document.cookie.substring(place+cookieName.length,end));
		}
	}
	return ret;
}



// XOR decode
function usr_str_xor(to_dec,xor_key) {
	var ret="";
	for(i=0;i<to_dec.length;i++) ret += String.fromCharCode(xor_key^to_dec.charCodeAt(i));
	return ret
}

// Base64 encoding
var base64EncodeChars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var base64DecodeChars = new Array(
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
    -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
    52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1,
    -1,  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14,
    15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
    -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
    41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);

function base64encode(str) {
    var out, i, len;
    var c1, c2, c3;

    len = str.length;
    i = 0;
    out = "";
    while(i < len) {
	c1 = str.charCodeAt(i++) & 0xff;
	if(i == len)
	{
	    out += base64EncodeChars.charAt(c1 >> 2);
	    out += base64EncodeChars.charAt((c1 & 0x3) << 4);
	    out += "==";
	    break;
	}
	c2 = str.charCodeAt(i++);
	if(i == len)
	{
	    out += base64EncodeChars.charAt(c1 >> 2);
	    out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
	    out += base64EncodeChars.charAt((c2 & 0xF) << 2);
	    out += "=";
	    break;
	}
	c3 = str.charCodeAt(i++);
	out += base64EncodeChars.charAt(c1 >> 2);
	out += base64EncodeChars.charAt(((c1 & 0x3)<< 4) | ((c2 & 0xF0) >> 4));
	out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >>6));
	out += base64EncodeChars.charAt(c3 & 0x3F);
    }
    return out;
}

function base64decode(str) {
    var c1, c2, c3, c4;
    var i, len, out;

    len = str.length;
    i = 0;
    out = "";
    while(i < len) {
	/* c1 */
	do {
	    c1 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
	} while(i < len && c1 == -1);
	if(c1 == -1)
	    break;

	/* c2 */
	do {
	    c2 = base64DecodeChars[str.charCodeAt(i++) & 0xff];
	} while(i < len && c2 == -1);
	if(c2 == -1)
	    break;

	out += String.fromCharCode((c1 << 2) | ((c2 & 0x30) >> 4));

	/* c3 */
	do {
	    c3 = str.charCodeAt(i++) & 0xff;
	    if(c3 == 61)
		return out;
	    c3 = base64DecodeChars[c3];
	} while(i < len && c3 == -1);
	if(c3 == -1)
	    break;

	out += String.fromCharCode(((c2 & 0XF) << 4) | ((c3 & 0x3C) >> 2));

	/* c4 */
	do {
	    c4 = str.charCodeAt(i++) & 0xff;
	    if(c4 == 61)
		return out;
	    c4 = base64DecodeChars[c4];
	} while(i < len && c4 == -1);
	if(c4 == -1)
	    break;
	out += String.fromCharCode(((c3 & 0x03) << 6) | c4);
    }
    return out;
}
// Base64 encoding ==


//
// Globals ========================================================================
//

var ImgExts = new String("|gif|jpg|jpe|jpeg|png|bmp|wbmp|tif|tiff|pcx|psd|emf|raw|tga|");


//
// ================================================================================

