// ================================================================================
// ojo/
// ================================================================================

function addEvent( obj, type, fn ) { 
	if ( obj.attachEvent ) { 
		obj['e'+type+fn] = fn; 
		obj[type+fn] = function(){obj['e'+type+fn]( window.event );} 
		obj.attachEvent( 'on'+type, obj[type+fn] ); 
	} else {
		obj.addEventListener( type, fn, false ); 
	}
} 

function removeEvent( obj, type, fn ) { 
	if ( obj.detachEvent ) { 
		obj.detachEvent( 'on'+type, obj[type+fn] ); 
		obj[type+fn] = null; 
	} else {
		obj.removeEventListener( type, fn, false ); 
	}
} 


function HttpRequest() {
	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) {
			if(null==parms) var 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.triggerFunction(self.owner.fireFunc,x);
				} else {
					if( undefined!=self.owner.handleConnError ) self.owner.handleConnError( x );
					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];
}


String.prototype.trim = function(){
	var m=((0==arguments.length?'lr':arguments[0].replace(/\s*/gi,"")).toUpperCase());
	var s=(m.indexOf('L')>-1?this.replace(/^\s*/,""):this);
	return (m.indexOf('R')>-1?s.replace(/\s*$/,""):s);
}

String.prototype.isMailAddr = function checkMailAddr() {
	var addr = this.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;
}

String.prototype.substrCount = function (s) {
	return this.split(s).length - 1;
}

String.prototype.isAlpha = function () {
    return (this >= 'a' && this <= 'z') || (this >= 'A' && this <= 'Z');
}

String.prototype.isDigit = function () {
    return (this  >= '0' && this  <= '9');
}

Number.prototype.round = function (d) {
	return Math.round(this*Math.pow(10,d))/Math.pow(10,d);
}


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) + ((nDays==null || nDays==0)?'':";expires="+expire.toGMTString());
}

function getCookie(cookieName) {
	var ret = null;
	var toks = document.cookie.split(";");
	for( var i=0; i<toks.length; i++) {
		toks[i] = toks[i].replace(/^\s*/,"");
		if( 0==toks[i].indexOf(cookieName+"=") ) {
			ret = unescape(toks[i].substr(toks[i].indexOf("=")+1));
			break;
		}
	}
	return ret;
}


