/*@cc_on _d=document;eval('var document=_d')@*/
/* Version: 2012/02/02 */
function hasClassName(el,class_name){return new RegExp('\\b'+class_name+'\\b').test(el.className)}
function addClassName(el,class_name){if(!el.className){el.className=class_name} else if(!hasClassName(el,class_name)){var className=el.className+" "+class_name;el.className=className.split(/\s+/).join(' ')}}
function removeClassName(el,class_name){var className=el.className;if(className){className=className.replace(new RegExp('\\b'+class_name+'\\b'),'');className=className.replace(/\s+/g,' ');el.className=className.replace(/\s+$/g,'')}}

function addEventHandler(target,type,listener)
{
	if (target.addEventListener) target.addEventListener(type,listener,false);
	else if (target.attachEvent) target.attachEvent('on'+type,listener);
	else target['on'+type] = listener;
}
function removeEventHandler(target,type,listener)
{
	if (target.removeEventListener) target.removeEventListener(type,listener,false);
	else if (target.detachEvent) target.detachEvent('on'+type,listener);
	else target['on'+type] = null;
}
/**** not used
function getRadioValue(form,name)
{
	var list = document.forms[form].elements[name];
	for (var i=0; i<list.length; i++) {
		if (list[i].checked) return list[i].value;
	}
	return null;
}
****/
/* not used */
function getEventTarget(event)
{
	event = event || window.event;
	if (event.target) return event.target;
	else if (event.srcElement) return event.srcElement;
	return null;
}
/* called from /translation/dialog.js */
function getEventPt(event)
{
	event = event || window.event;
	if (document.all || window.opera) {
		var offsetX = document.documentElement.scrollLeft;
		var offsetY = document.documentElement.scrollTop;
		if (window.opera) offsetX = offsetY = 0;
		return {x:event.screenX+offsetX, y:event.screenY+offsetY};
	} else {
		var offsetX = window.scrollX;
		var offsetY = window.scrollY;
		return {x:event.screenX+offsetX, y:event.screenY+offsetY};
	}
}
function getElementsByClass(searchClass,el,tag)
{
	var res = new Array();
	if (el == null || el == undefined) el = document;
	if (tag == null || tag == undefined) tag = '*';
	var els = el.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp('(^|\\s)'+searchClass+'(\\s|$)');
	for (i=0,j=0; i<elsLen; i++) {
		if (pattern.test(els[i].className)) res[j++] = els[i];
	}
	return res;
}

function Rectangle(x,y,w,h) {
	this.left=x; this.top=y; this.width=w; this.height=h;
}
Rectangle.prototype = {
inside:function(x,y) {
	if (x < this.left) return false;
	if (x >= this.left+this.width) return false;
	if (y < this.top) return false;
	if (y >= this.top+this.height) return false;
	return true;
},
grow:function(dh,dv) {
	this.left -= dh; this.top -= dv;
	this.width += dh*2; this.height += dv*2;
	return this;
}
};
/**** not used
function getWindowRect()
{
	var ua = navigator.userAgent.toLowerCase();
	var _netspape = (i = ua.indexOf("netscape")) != -1;
	if (_netspape) {
		scrollL = window.pageXOffset;
		scrollT = window.pageYOffset;
	} else if (document.documentElement) {
		scrollL = document.documentElement.scrollLeft;
		scrollT = document.documentElement.scrollTop;
	} else {
		scrollL = document.body.scrollLeft;
		scrollT = document.body.scrollTop;
	}
	if (_netspape) {
		windowW = window.innerWidth;
		windowH = window.innerHeight;
	} else if (document.documentElement) {
		windowW = document.documentElement.clientWidth;
		windowH = document.documentElement.clientHeight;
	} else {
		windowW = document.body.offsetWidth;
		windowH = document.body.offsetHeight;
	}
	return new Rectangle(scrollL,scrollT,windowW,windowH);
}
****/
/* called from /translation/dialog.js, index.js */
function getElementRect(el)
{
	var is_ie = (document.all && !window.opera);
	var rt = new Rectangle(0,0,el.offsetWidth,el.offsetHeight);
	do {
		rt.left += el.offsetLeft;
		rt.top += el.offsetTop;
		el = el.offsetParent;
		if (el && (is_ie)) {//IE
			rt.left += (parseInt(getActiveStyle(el,"border-left-width")) || 0);
			rt.top += (parseInt(getActiveStyle(el,"border-top-width")) || 0);
		}
	} while (el);
	return rt;
}
function getActiveStyle(element,property,pseudo)
{
	if (element.currentStyle) {//IE
		property = (property.match(/-/)) ? property.camelize() : property;
		return element.currentStyle[ property.camelize() ];
	} else if (document.defaultView.getComputedStyle) {//Mozilla
		property = (property.match(/-/) == null) ? property.deCamelize() : property;
		return document.defaultView.getComputedStyle(element, pseudo).getPropertyValue(property);
	}
	return "";
}
String.prototype.camelize = function()
{
	return this.replace(/-([a-z])/g, function($0, $1) { return $1.toUpperCase() });
}
String.prototype.deCamelize = function()
{
	return this.replace(/[A-Z]/g, function($0) { return "-" + $0.toLowerCase() });
}
function addRule(selector,property,sheetindex,ruleindex)
{
	if (sheetindex == undefined) sheetindex = 0;
	var sheet = document.styleSheets[sheetindex];
	if (sheet.addRule) {//IE
		if (ruleindex == undefined) ruleindex = sheet.rules.length;
		sheet.addRule( selector, "{" + property + "}", ruleindex );
		return ruleindex;
	} else if (sheet.insertRule) {//Mozilla
		if (ruleindex == undefined) ruleindex = sheet.cssRules.length;
		return sheet.insertRule( selector + "{" + property + "}", ruleindex );
	}
	return null;
}
function removeRule(index,sheetindex)
{
	if (sheetindex == undefined) sheetindex = 0;
	var sheet = document.styleSheets[sheetindex];
	if (sheet.removeRule) {//IE
		sheet.removeRule(index);
	} else if (sheet.deleteRule) {//Mozilla
		sheet.deleteRule(index);
	}
}
/* not used */
function createCookie(name,value,days)
{
	var expires="";
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*3600));
		expires = "; expires="+date.toGMTString();
	}
	document.cookie = name+"="+value+expires+"; path=/";
}
/* not used */
function readCookie(name)
{
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for (var i=0;i<ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function MyAjaxObject() {}
MyAjaxObject.prototype = {
_create:function() {
	if (window.XMLHttpRequest) return new XMLHttpRequest();
	if (window.ActiveXObject) {//IE5,IE6
		try {
			return new ActiveXObject("Msxml2.XMLHTTP");//MSXML3
		} catch(e) {
			return new ActiveXObject("Microsoft.XMLHTTP");//MSXML2
		}
	}
	return null;
},
send:function(url,arr,callback,params) {
	var req = this._create();
	req.onreadystatechange = function() {
		if (req.readyState == 4 && req.responseText) {
			callback(req,arr,params);
			req = null;
		}
	}
	req.open((arr == null)?"GET":"POST",url,true);
	req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
	var d = "";
	if (arr != null) {
		for (var k in arr) {
			if (d != "") d += "&";
			d += k+"="+escape(arr[k]);
		}
	}
	req.send(d);
	return req;
},
abort:function(req) {
	if (req.readyState!=0 && req.readyState!=4) req.abort();
}
};

