
/* EVAL function
====================================*/
	function $function(fName,params){
			var res=null
			if (fName) 
			{
				//var paramsStr=params?params.join(','):''
				//alert (params)
				//eval('res='+fName+'('+getArgList(params)+')')
				eval('res='+fName+'(params)')
			}
			return res
		}

/* AJAX
====================================*/
	function doScript(scriptSRC,params){
		var newScript = document.createElement("SCRIPT"), paramsString="";
		//	if (!params) var params={};
		
		if (!params.from) params.from="js";
			for (p in params) {paramsString+=paramsString?"&"+p+"="+params[p]:"?"+p+"="+params[p]}
		scriptSRC+=paramsString;
		//alert (scriptSRC); return;
		newScript.type="text/javascript";
		newScript.src=scriptSRC;   
		//	alert (scriptSRC);
		document.body.appendChild(newScript);
		}
	
	function putAndSendForm(fAction,fMethod,fData,fFiles){
		var f=setChild(document.body,null,null,"form"),i;
		if (fAction) f.action=fAction;
		if (fMethod) f.method=fMethod;
		for (var iName in fData)
		{ 
			i=setChild(f,null,null,"input")
			//i.setProperty("type","hidden");
			i.name=iName
			i.value=fData[iName]
		}
		
		if (fFiles)
		{
			for (var fName in fFiles)
			{
				var ff=fFiles[fName], newff=f.appendChild(ff);
				// for (var pr in ff) newff[pr]=ff[pr]
				newff.value=ff.value;
				
				//alert(i.value);
			}
			i=setChild(f,null,null,"input")
			i.name="MAX_FILE_SIZE"
			i.value=30000
			f.enctype="multipart/form-data";
		}
		
	
		f.submit();
		}
		
	/* XML
	====================================*/
	function parseLineXML(xml){
		var res=[],
			fc=xml.firstChild,
			fcA={}
		if (fc.nodeType != 1) fc= fc.nextSibling;
		
		//Get fc attributes
		for (var a=0;a<fc.attributes.length;a++){
			var attr=fc.attributes[a]
			if (attr.nodeType!=2) continue
			fcA[attr.nodeName]=attr.nodeValue
			}

 	 	for (var i=0;i<fc.childNodes.length;i++){
			
			var node=fc.childNodes[i]
			if (node.nodeType!=1) continue
			res[i]={value:node.firstChild.data,data:{}}
			for (var a=0;a<node.attributes.length;a++){
				var attr=node.attributes[a]
				if (attr.nodeType!=2) continue
				res[i].data[attr.nodeName]=attr.nodeValue
				}
			}
		return {head:fcA,body:res}
		}

/* DOM functions
====================================*/
	function $id(el){	
		var res;
		if (!el) return false;
		res=null;
		if (typeof(el)!="object")
		{
			if (document.getElementById(el)) res=document.getElementById(el);
		} else res=el;
		
		return res;
		}
	
	function $name(el){	
		if (!el) return false;
		var els=new Array();
	
		if (typeof(el)!="object")
		{
			els=document.getElementsByName(el);
		} 
		
		if (els.length!=0) return els;
		else return null;
		}
	
	
	function $tagname(tg,par){	
		if (!tg) return false;
		var els=new Array();
	
		if (par && typeof(par)=="object") els=par.getElementsByTagName(tg);
		else els=document.getElementsByTagName(tg);
		
		if (els.length>1) return els
		else if (els.length==1) return els[0]
		else return [];
		}
	
	function $value(el){
		var res
		el=$id(el)
		if (!el) return false
		
		res=el.value?el.value:null
		return res
		
		}
	
	function $innerHTML(el,text){
		el=$id(el)
		if (!el) return false
		el.innerHTML=text
		return true
		}
	function setChild(par,elID,elClass,elType,elContent){
		if (!par && !elID) return false;
		
		var el=$id(elID);
		
		if (par && !el && elType) 
		{
			//need to create and append new child
			par=$id(par);		
			el=document.createElement(elType);
			el=par.appendChild(el);
			if (elID) el.id=elID;
		}
		
		if (!el) return false;
		
		if (elClass) el.className=elClass;
		if (elContent) el.innerHTML=elContent;
		
		return el;
		}
	function unsetChild(el){
		if (!el) return false;
		el=$id(el);
		el.parentNode.removeChild(el);
		return true
		}	
	
	function getElementByTagAndClass(par,elTag,elClass){
		if (!par || !elTag) return false;
	
		par=$id(par);
		var el,elNum,els=new Array(),res=null;
		els=par.getElementsByTagName(elTag);
		if (els.length>0)
		{
			for (elNum in els) {
				el=els[elNum];
				//if (el.className && el.className==elClass)
				if (el.className && in_array(el.className.split(" "),elClass))
					res=el;
			}
		}
		
		return res;
		}
	function getElementsByTagAndClass(par,elTag,elClass){
			if (!par || !elTag) return false;
		
			par=$id(par);
			var el,elNum,els=new Array(),res=new Array();
			els=par.getElementsByTagName(elTag);
			if (els.length>0)
			{
				for (elNum in els) {
					el=els[elNum];
					if (el.className && in_array(el.className.split(" "),elClass))
					//if (el.className && el.className==elClass) 
					res.push(el);
				}
			}
			
			return res;
		}
	function getElementByTagAndProperty(par,elTag,property,propertyValue){
		if (!par || !elTag) return false;	
		par=$id(par);
		var el,elNum,els=new Array(),res=null;
		els=par.getElementsByTagName(elTag);
		if (els.length>0){
			for (elNum in els) {
				el=els[elNum];
				//if (el.className && el.className==elClass)
				if (el[property] && el[property]==propertyValue)
					res=el;
				}
			}		
		return res
		}


/* Positioning and view
====================================*/
	function getWhereIs(block){
		var blockLeft = 0;
		var blockTop = 0;
			while(block) {
				blockLeft += block.offsetLeft;
				blockTop += block.offsetTop;
				block = block.offsetParent;
			}
			return { left:blockLeft, top:blockTop }
		}
	function setPosition(el,pos){
		el=$id(el)
		if (!el) return false
		
		if (pos.left!=null) el.style.left=pos.left+"px"
		if (pos.top!=null) el.style.top=pos.top+"px"
		
		return false
		}	
	function switchElementVisibility(el,state){
			var states=new Array('hidden','showed')
			el=$id(el)
			var searchTmpl='/'+states[0]+'/'
			if (state==null)
				newState=(el.className.search(states[0])>-1)?1:0
			else
				newState=state
			currState=(newState==0)?1:0
			strTempl='/'+states[currState]+'/'
	
			if (el.className.indexOf(states[state])>0)
				el.className.replace(strTempl, states[state])
			else 
				el.className=states[newState]
			}
	function toggleClass(el,state,states){
			var states=states?states:['hidden','showed']
			el=$id(el)
			var searchTmpl='/'+states[0]+'/'
			newState=(state==null)?((el.className.search(states[0])>-1)?1:0):state
			
			currState=(newState==0)?1:0
			if (el.className.search(states[currState])>-1){
				el.className=el.className.replace(states[currState], states[newState])
				}
			else 
				if (el.className.search(states[newState])<0)
					el.className+=" "+states[newState]
			}
	
/* STRING functions
====================================*/
	function NtoBR(strToClear){
		
		nIndex=strToClear.indexOf('\n');
		//	alert (nIndex);
		while (nIndex>0)
		{
			leftPart=strToClear.substr(0,nIndex);
			rightPart=strToClear.substr(nIndex+1, strToClear.length-1);
			strToClear=leftPart+"<BR>"+rightPart;
			nIndex=strToClear.indexOf("\n");
		}
	
		nIndex=strToClear.indexOf('\r');
		//	alert (nIndex);
		while (nIndex>0)
		{
			leftPart=strToClear.substr(0,nIndex);
			rightPart=strToClear.substr(nIndex+1, strToClear.length-1);
			strToClear=leftPart+rightPart;
			nIndex=strToClear.indexOf("\r");
		}
		
		//	alert (strToClear);
		return strToClear;
		}
	
	function BRtoN(strToClear){
	
		nIndex=strToClear.indexOf('<BR>');
		//	alert (strLength);
		while (nIndex>0)
		{
			leftPart=strToClear.substr(0,nIndex);
			rightPart=strToClear.substr(nIndex+4, strToClear.length-1);
			strToClear=leftPart+'\n'+rightPart;
			nIndex=strToClear.indexOf("<BR>");
		}
		
		nIndex=strToClear.indexOf('<br>');
		while (nIndex>0)
		{
			leftPart=strToClear.substr(0,nIndex);
			rightPart=strToClear.substr(nIndex+4, strToClear.length-1);
			strToClear=leftPart+'\n'+rightPart;
			nIndex=strToClear.indexOf("<br>");
		}
		
		
		return strToClear;
		}

/* Array functions
====================================*/
	function in_array(arr,el){
		var res=0
		for (elNum in arr) if (el==arr[elNum]) res++
		return res
		}
	
	function getArgList(params){
		var argList=''
		for (var paramName in params)
			{
				argList+=argList?',':''
				argList+='"'+params[paramName]+'"'
			}
			
		return argList
		}
	function setArray(el){
		if ((typeof el=="object") && el.length!=null)	
			return el
		else
			return [el]
		}


/* Debugging
====================================*/	
	function testObject(obj,isWrite){
		var o="",
			sprt=isWrite?"<br/>":"\n"
	
		for (var p in obj)
			o+=p+"=>"+obj[p]+sprt
		if (isWrite) document.write(o)
		else alert (o)
		}
	
/* PROTOTYPES
===================================== */
	
	/* String
	===================================== */
	
	
	
/* EVENTS	
====================================*/
	function MXX_EVENTS(){
		this.Elements=[]
		this.Events=[]
		this.eventObj=this
		this.append=function(el,evnt,func,weight){
			el=$id(el)
			if (!el) return
			if (!in_array(this.Elements,el)){
				el.eventObj=this				
				el.elNum=this.Elements.push(el)-1
				this.Events[el.elNum]={}
				}
			var evnts=setArray(evnt)
			for (var e=0;e<evnts.length;e++){
				var cEvnt=evnts[e]
				if (!this.Events[el.elNum][cEvnt])
					this.Events[el.elNum][cEvnt]=[]
				var funcs=setArray(func)
				this.Events[el.elNum][cEvnt]=this.Events[el.elNum][cEvnt].concat(funcs)			
				
				if (!this["router_"+cEvnt]) eval('this["router_'+cEvnt+'"]=function(eArg){this.eventObj.router(this,"'+cEvnt+'",eArg)}')
				
				eval('el["'+cEvnt+'"]=this["router_'+cEvnt+'"]')
				//if (cEvnt=="onclick") alert(el.id+"\n"+el.onclick)
				}
			
			}
		this.router=function(el,evnt,eArg){
			
			var elData=el.eventObj.Events[el.elNum]
			
			
			//FIXME
			if (!elData[evnt]) {
				//alert (el.onclick)
				//evnt="onclick" 
				}
				
			for (var e=0;e<elData[evnt].length;e++){
				elData[evnt][e].call(el,eArg)								
				}
			
			}
		
		}
	var EVENTS=new MXX_EVENTS()
	
	function getKeyPressed(e){
		var KEYCODES=new Array()
			KEYCODES[13]="ENTER"
			KEYCODES[27]="ESC"
			KEYCODES[37]="ARROWLEFT"
			KEYCODES[38]="ARROWUP"
			KEYCODES[39]="ARROWRIGHT"
			KEYCODES[40]="ARROWDOWN"
			
		var intKey=-1,
			targetField
		if (window.event){
			intKey=event.keyCode
			targetField=event.srcElement
			}
		else{
			intKey=e.which
			targetField=e.target
			}
		var res=(KEYCODES[intKey])?KEYCODES[intKey]:intKey
		return res
		}

/* Flash Checking
=================================================*/
var flashChecking={
	isIE:(navigator.appVersion.indexOf("MSIE") != -1) ? true : false,
	isWin:(navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false,
	isOpera:(navigator.userAgent.indexOf("Opera") != -1) ? true : false,
	ControlVersion:function(){
		var version;
		var axo;
		var e;
	
		// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
	
		try {
			// version will be set for 7.X or greater players
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
			version = axo.GetVariable("$version");
		} catch (e) {
		}
	
		if (!version)
		{
			try {
				// version will be set for 6.X players only
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
				
				// installed player is some revision of 6.0
				// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
				// so we have to be careful. 
				
				// default to the first public version
				version = "WIN 6,0,21,0";
	
				// throws if AllowScripAccess does not exist (introduced in 6.0r47)		
				axo.AllowScriptAccess = "always";
	
				// safe to call for 6.0r47 or greater
				version = axo.GetVariable("$version");
	
			} catch (e) {
			}
		}
	
		if (!version)
		{
			try {
				// version will be set for 4.X or 5.X player
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
				version = axo.GetVariable("$version");
			} catch (e) {
			}
		}
	
		if (!version)
		{
			try {
				// version will be set for 3.X player
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
				version = "WIN 3,0,18,0";
			} catch (e) {
			}
		}
	
		if (!version)
		{
			try {
				// version will be set for 2.X player
				axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
				version = "WIN 2,0,0,11";
			} catch (e) {
				version = -1;
			}
		}
		
		return version;
		},
	GetSwfVer:function(){
			// NS/Opera version >= 3 check for Flash plugin in plugin array
			var flashVer = -1;
			
			if (navigator.plugins != null && navigator.plugins.length > 0) {
				if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
					var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
					var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
					var descArray = flashDescription.split(" ");
					var tempArrayMajor = descArray[2].split(".");			
					var versionMajor = tempArrayMajor[0];
					var versionMinor = tempArrayMajor[1];
					var versionRevision = descArray[3];
					if (versionRevision == "") {
						versionRevision = descArray[4];
					}
					if (versionRevision[0] == "d") {
						versionRevision = versionRevision.substring(1);
					} else if (versionRevision[0] == "r") {
						versionRevision = versionRevision.substring(1);
						if (versionRevision.indexOf("d") > 0) {
							versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
						}
					}
					var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
				}
			}
			// MSN/WebTV 2.6 supports Flash 4
			else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
			// WebTV 2.5 supports Flash 3
			else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
			// older WebTV supports Flash 2
			else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
			else if ( this.isIE && this.isWin && !this.isOpera ) {
				flashVer = this.ControlVersion();
			}	
			return flashVer;
		},
	 DetectFlashVer:function(reqMajorVer, reqMinorVer, reqRevision){
			versionStr = this.GetSwfVer();
			if (versionStr == -1 ) {
				return false;
			} else if (versionStr != 0) {
				if(this.isIE && this.isWin && !this.isOpera) {
					// Given "WIN 2,0,0,11"
					tempArray         = versionStr.split(" "); 	// ["WIN", "2,0,0,11"]
					tempString        = tempArray[1];			// "2,0,0,11"
					versionArray      = tempString.split(",");	// ['2', '0', '0', '11']
				} else {
					versionArray      = versionStr.split(".");
				}
				var versionMajor      = versionArray[0];
				var versionMinor      = versionArray[1];
				var versionRevision   = versionArray[2];
		
					// is the major.revision >= requested major.revision AND the minor version >= requested minor
				if (versionMajor > parseFloat(reqMajorVer)) {
					return true;
				} else if (versionMajor == parseFloat(reqMajorVer)) {
					if (versionMinor > parseFloat(reqMinorVer))
						return true;
					else if (versionMinor == parseFloat(reqMinorVer)) {
						if (versionRevision >= parseFloat(reqRevision))
							return true;
					}
				}
				return false;
			}
		}
	}
	
function buildFlashExt(src,width,height,version,name,wmode,params,isWrite){
	if (!version) version=7
	if (!width) width='100%'
	if (!height) height='100%'
	if (!name) name='flashmovie'
	if (!wmode) wmode='transparent'
	if (params) src+='?'+params
	var o='<'+'object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version='+version+',0,0,0" width="'+width+'" height="'+height+'" id="'+name+'"><'+'param name="movie" value="'+src+'"><'+'param name="wmode" value="'+wmode+'" /><'+'param name="quality" value="high"><'+'param name="allowScriptAccess" value="always" /><param name="menu" value="false" /><'+'embed src="'+src+'" quality="high" wmode="'+wmode+'" width="'+width+'" height="'+height+'" name="'+name+'" menu="false" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspace="http://www.macromedia.com/go/getflashplayer"/><'+'/object>'
	if (isWrite) document.write(o)
	return o
	}
	