//////////////////////////////////////////////////////////////////////////////////////////////////////
//								Main system functions
//////////////////////////////////////////////////////////////////////////////////////////////////////
var includedScripts = new Array();
function loadScript(src){
	if (includedScripts[src]) return;
	var script = document.createElement('script');
	script.language = 'JavaScript';
	script.type = 'text/javascript';
	script.src = src;
	document.documentElement.firstChild.appendChild(script);
	includedScripts[src]=1;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
//									Events handling
//////////////////////////////////////////////////////////////////////////////////////////////////////
function addEvent(elm, evType, fn, useCapture) {
	if (elm.addEventListener) {
		elm.addEventListener(evType, fn, useCapture);
		return true;
	} else if (elm.attachEvent) {
		var r = elm.attachEvent('on' + evType, fn);
		return r;
	} else {
		elm['on' + evType] = fn;
	}
}
function removeEvent(elm, evType, fn, useCapture) {
	if (elm.removeEventListener) {
		elm.removeEventListener(evType, fn, useCapture);
		return true;
	} else if (elm.attachEvent) {
		var r = elm.detachEvent('on' + evType, fn);
		return r;
	} else {
		elm['on' + evType] = fn;
	}
}
document.getElementsByClassName = function(cl) {
	var retnode = [];
	var myclass = new RegExp('\\b'+cl+'\\b');
	var elem = this.getElementsByTagName('*');
	for (var i = 0; i < elem.length; i++) {
		var classes = elem[i].className;
		if (myclass.test(classes)) retnode.push(elem[i]);
	}
	return retnode;
};
//////////////////////////////////////////////////////////////////////////////////////////////////////
var globalClickX=0;
var globalClickY=0;
addEvent(document,'click',getClickPosition,false);
function getClickPosition(e){
	if (!e)e=window.event;
	//var posx=0;
	//var posy=0;
	if (e.pageX || e.pageY) {
		globalClickX = e.pageX;
		globalClickY = e.pageY;
	}else if (e.clientX || e.clientY) {
		globalClickX = e.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
		globalClickY = e.clientY + document.body.scrollTop + document.documentElement.scrollTop;
	}
	//alert(globalClickX+' '+globalClickY);
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
//										Opacity
//////////////////////////////////////////////////////////////////////////////////////////////////////
var opacityProp;
function getOpacityProperty(){
	// CSS3 compliant (Moz 1.7+, Safari 1.2+, Opera 9)
  	if (typeof document.body.style.opacity == 'string') return 'opacity';
  	// Mozilla 1.6 и младше, Firefox 0.8 
  	else if (typeof document.body.style.MozOpacity == 'string') return 'MozOpacity';
  	// Konqueror 3.1, Safari 1.1
  	else if (typeof document.body.style.KhtmlOpacity == 'string') return 'KhtmlOpacity';
  	// Internet Exploder 5.5+
  	else if (document.body.filters && navigator.appVersion.match(/MSIE ([\d.]+);/)[1]>=5.5) return 'filter';
  	//нет прозрачности
  	return false; 
}
function setOpacityProperty(){
	opacityProp = getOpacityProperty();
}
function setOpacity(elem,x){
	if (!opacityProp) setOpacityProperty();
	if (opacityProp!='filter') {
		//alert(opacityProp);
		if (x>=10)elem.style.opacity='1.00';
		else elem.style.opacity='0.'+(x);
	} else {
		//alert(elem.src);
		nOpacity=(x*10);
    	var oAlpha = elem.filters['DXImageTransform.Microsoft.alpha'] || elem.filters.alpha;
    	if (oAlpha) oAlpha.opacity = nOpacity;
    	else   elem.style.filter += "progid:DXImageTransform.Microsoft.Alpha(opacity="+nOpacity+")";
	}
}
addEvent(window,'load',setOpacityProperty,false);
//////////////////////////////////////////////////////////////////////////////////////////////////////
//										Flash objects
//////////////////////////////////////////////////////////////////////////////////////////////////////
//addEvent(window,'load',opaqueAllFlashes);
function opaqueFlash(flashNode){
	if (!flashNode) return;
	var paramNodes=flashNode.getElementsByTagName('PARAM');
	if (!paramNodes) return;
	var embed=flashNode.getElementsByTagName('embed')[0];
	if (embed){
		embed.setAttribute("wmode", "opaque");
	} 
	flashNode.setAttribute("wmode", "opaque");
	var new_elem = document.createElement('PARAM');
	new_elem.setAttribute("name", "WMODE");
	new_elem.setAttribute("value", "opaque");
	var chld=flashNode.firstChild;
	chld.parentNode.insertBefore(new_elem,chld);
	var flashParent=flashNode.parentNode;
	var df=document.createElement('div');
	df.appendChild(flashNode);
	
	var dd=document.createElement('div');
	flashParent.appendChild(dd);
	dd.innerHTML=df.innerHTML;
}
function opaqueAllFlashes(){
	var flashes=document.getElementsByTagName('object');
	for (var i=0;i<flashes.length;i=i+1){
		var flashNode=flashes[i];
		opaqueFlash(flashNode);
		//alert('object: '+i);
	}
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
//											Strings
//////////////////////////////////////////////////////////////////////////////////////////////////////
function strReTag(str){
	var myRegExp = /[<]/gi;
	var returnStr=str.replace(myRegExp,'');
	var myRegExp = /[>]/gi;
	returnStr=returnStr.replace(myRegExp,'');
	return returnStr;
}
function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}
 
function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
 
function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////// Observing url's hash for the available tabs name /////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////
var wasHash=window.location.hash; // в переменную wasHash кладет значения при переключении комбика grid.js
addEvent(window,'load',checkUrl,false);
function checkUrl(){
	if ((window.location.hash!=wasHash)||((window.location.hash)&&(!wasHash))){
		var loc=document.location.hash.substring(1);
		if (loc!='') {
			if(typeof tabs != "undefined"){
				for (var i in tabs){
					var tbs=tabs[i].elements;
					for (var y in tbs) if (y==loc) tbActivate(i,y);
				}
			}
		}
	}
	tt=setTimeout(checkUrl,500);
	wasHash=window.location.hash;
}
//////////////////////////////////////////////////////////////////////////////////////////////////////
//									easy controlling DOM
//////////////////////////////////////////////////////////////////////////////////////////////////////
var uniqueIds=new Array();
function getUniqueId(){
	uniqueIds[uniqueIds.length]=1;
	return uniqueIds.length;
}
function id(id){
	var dd=document.getElementById(id);
	if (!dd) {
		
		return null;
	} else {
		var dom=dd;
		if (dd.tagName.toLowerCase()=='div') {
			dom.prop='go';
		}
		return dom;
	}	
}