var vIclBrowser=0
, vIclAttr={"icl":1}
, vAwfActiveRid=0
, vAwfSeq=0
, vAwfQueue={}	// Queue in case awf is invoked while waiting for previous request
;
function
iclArray(e)
{ return e && typeof(e)=="object" && e!=null ? e: {}; }
function
iclString(v)
{ return !v || v=="0" || v==null ? "": v; }
function
iclInt(v)
{
	v=parseInt(v);
	return isNaN(v)?0:v;
}

function
iclGetHtml()
{
	var l=document.getElementsByTagName("HTML");
	return l[0];
}
function
iclGetEltSizes(e,all)
{
	var sL=0,sT=0,x=0,y=0,w=0,h=0,cH=0,cW=0;
	if( e=iclElt(e) )
	{
		sL=e.scrollLeft;
		sT=e.scrollTop;
		cH=e.clientHeight;
		cW=e.clientWidth;
		w=e.offsetWidth;
		h=e.offsetHeight;
		if(all){
			do
			{
				y+=e.offsetTop;
				x+=e.offsetLeft;
			}while(e=e.offsetParent);
		}
	};
	return {"x":x,"y":y,"w":w,"h":h,"scrollLeft":sL,"scrollTop":sT,"clientHeight":cH,"clientWidth":cW};
}
function
iclGetPageSizes()
{return iclGetEltSizes(iclGetHtml(),0);}

function
iclGetEvent(e)
{
	var bid=iclGetBrowserId();
	if( bid=="ie" )
		return window.event;
	else
		return e;
}
function
iclGetEventSrc(e,needId)
{
	if( e=iclGetEvent(e) )
		e = e.srcElement ? e.srcElement : e.target;
	if( e && needId && !e.id && e.parentNode.id)
		return e.parentNode;
	return e;
}
function
iclCancelEvent(e)
{
	if( e )
	{
		var bid=iclGetBrowserId();
		if( bid=="ie" )
		{
			if(window.event)
			{
				window.event.cancelBubble = true;
				window.event.returnValue = false;
			}
			return window.event;
		}
		else
		{
			e.stopPropagation();
			e.preventDefault();
		}
	}
	return e;
}
function
iclIsAltBrowser()
{ 	
	var b=iclGetBrowserId();
	return (b=="gc" || b=="sf");
}

function
iclGetBrowserId()
{ 	
	if( !vIclBrowser )
	{
		var ua=navigator.userAgent;
		if( ua.match(/\bMSIE\b/) )
			vIclBrowser="ie";
		else
		{
			if( ua.match(/Firefox/) )
				vIclBrowser="fx";		
			else
			if( ua.match(/Opera/) )
				vIclBrowser="op";
			else
			if( ua.match(/Chrome/) )
				vIclBrowser="gc";
			else
			if( ua.match(/Safari/) )
				vIclBrowser="sf";
			else
				vIclBrowser="unk";		
		}
	}
	return vIclBrowser;
}

function
iclElt(vId)
{ return vId && typeof(vId)=="string"?document.getElementById(vId):vId ; }

function
iclTopElt(vId)
{ return iclGetTopFrame().iclElt(vId); }


function
iclSetEltHtm(id,v)
{ 
	var e;
	try{ 
		if( e = iclElt(id) )
			e.innerHTML=v;
// else alert("CannotSetElt("+id+"): "+v);
	}
	catch(ex)
	{e=0;}
	return e;
}
function
iclSetEltHtmVis(id,v,vVis)
{
	var e=iclSetEltHtm(id,v);
	if( e )
	{
		e.style.display=v!=null && v>""?vVis:"none";
	}
	return e;
}

function
iclSetTopEltHtm(vId,vHtm)
{
	var vTop=iclGetTopFrame();
	return vTop.iclSetEltHtm(vId,vHtm);
}
// --
function
iclScrollToTop()
{ 
	var e=iclIsAltBrowser() ? document.body : iclGetHtml();
	if(e)e.scrollTop=0;
}
// --
function
iclScrollElt(e,vTop)
{ 
	if(e=iclElt(e))
		e.scrollIntoView(vTop?true:false);
}
// --
function
iclDisplayElt(e,v)
{ 
	if(e=iclElt(e))
		e.style.display=v;
}
// --
function
iclAddOption(vSel,vVal,vText)
{ 
	var vOpt=document.createElement("OPTION");
	vOpt.value=vVal;
	vOpt.text=vText;
	if( iclGetBrowserId()=="ie" )
		vSel.add(vOpt);
	else
		vSel.add(vOpt,null);
}

function
iclOnExpandLink(e,data)
{
	data=iclArray(data);
	var elt= e ? iclGetEventSrc(e,1) : 0
	,	id=data.id
	,	eId,div,exp=0;
	if( !elt )
	{
		iclCancelEvent(e);
		return 0;
	}
	if( id )
	{
		eId=id;
	}
	else
	{
		id = elt.id;
		eId=id+"_div";
	}
	div=iclElt(eId);
	if( (elt.tagName=="INPUT") && ( elt.type=="radio" || elt.type=="checkbox" ) )
	{
		exp=elt.checked; // Don't cancel event
	}
	else
	{	
		iclCancelEvent(e);
		exp= div && div.style.display=="none";	
	}
	if(div)
	{
		div.style.display=exp?"block":"none";
		if( exp )
		{
			eId=data.focus;
			if(!eId)eId=id+"_focus";
			if( elt=iclElt(eId) )
				iclDelayFocus(elt,50);
		}
	}
	eId=data.hide;
	if(!eId)eId=id+"_hide";
	if( elt=iclElt(eId) )	
		elt.style.display=exp?"none":"block";
	return exp;
}

function
iclAddDiv(data)	// id,vHtm,attr,vScroll
{ 
	var e = data.div ? iclElt(data.div) : document.body;
	if( e )
	{
		var v,div=document.createElement("DIV");
		if( v=data.id  )div.id=data.id;
		if( v=data.className )div.className=v;
		div.innerHTML=data.htm;
		e.appendChild(div);
		if(data.scroll)div.scrollIntoView(false);
	}
}
function
iclGetEltVal(id)
{ 
	var e;
	return ( e = iclElt(id) )  ? e.value:"";
}
function
iclSetEltVal(id,v)
{ 
	var e;
	if( e = iclElt(id) )  e.value=v;
}

function
iclEnableElt(id,v)
{ 
	var e;
	if( e = iclElt(id) )e.disabled=v?false:true;
}
function
iclFocus(id)
{ 
	var e;
	if( e = iclElt(id) )
	{
		try{
			if(e.tagName=="INPUT"||e.tagName=="TEXTAREA")e.select();
			e.focus(); 
			return 1;
		}
		catch(e){}
	}
	alert("Cannot focus: "+(e?e.id:id));
	return 0;
}
function
iclDelayFocus(id,delay)
{ 
	if(!delay)
		iclFocus(id);
	else 
	{	
		if(typeof(id)=="object")id=id.id;
		setTimeout("iclFocus('"+id+"')", delay); 
	}
}

function
iclGetWinDoc(vWin)
{
	try{ return vWin?vWin.document:0; }
	catch(e) {	return 0; }
}
// --
function
iclGetFrameDoc(vFrame)
{
	vFrame=iclElt(vFrame);
	try{ return vFrame ? vFrame.contentWindow.document : 0;	}
	catch(e)
	{	return 0; }
}

function
iclGetFrameWin(vFrame)
{
	vFrame=iclElt(vFrame);
	try{ return vFrame ? vFrame.contentWindow: 0;	}	// && vFrame.src>"" 
	catch(e)
	{	return 0; }
}
function
iclGetFrameLoader(vFrame)
{
	var vW=iclGetFrameWin(vFrame);
	return (vW && vW.AwfLoad) ? vW : 0;
}
// --
function
iclOnAwfSubmit(e,vElt,vExtra)
{
	iclCancelEvent(e);
	vElt=iclElt(vElt);
	if( vElt.tagName!="FORM")vElt=vElt.form;
	AwfExecForm(vElt,vExtra);
}
// --
function
iclGetTopFrame()
{
	var vMe=window
		,vP=vMe.parent;
	if( vMe!=vP && vP.iclGetTopFrame)return vP.iclGetTopFrame();
	return vMe;
}
function
iclCopyTopFrameMap()
{
	var vTop=iclGetTopFrame();
	if( window!=vTop )vIclAttr["frame_map"]=vTop.vIclAttr["frame_map"];
}
// --
function
iclPrintFrameMap()
{	
	var vKey,vStr="",vMap = vIclAttr["frame_map"];
	if( vMap )
	for(vKey in vMap)
	{
		vStr+="<div>"+vKey+"="+vMap[vKey]+"</div>";
	}
	iclDebug("<b>frame_map</b><div style=\"padding-left:10px\">"+vStr+'</div>');
}
// --
function
iclMapFrameCode(vCode)
{
	var vMap=vIclAttr["frame_map"]
		,v=vMap ? vMap[vCode] : 0;
	return v ? v : vCode;
}
// --
function
iclGetFrameByCode(vCode)
{
	var vName=iclMapFrameCode(vCode)
	,	vMe=window;
	if( !vName )return 0;
	if( vName==vMe.name )return vMe;
	var vTop=iclGetTopFrame();
	return vName == '@top' ? vTop : vTop.iclFindFrame(vName,vTop!=vMe);
}
// --
function
iclFindFrame(vName,vTestSelf)
{
	var i,fr
	,	vMe=window;
	if( !vName )return 0;
	if( vTestSelf && vName==vMe.name )return vMe;
	for(i=0;i<frames.length;i++)
	{
		try {
			if( frames[i].iclFindFrame && (fr=frames[i].iclFindFrame(vName,1)) )
				return fr;
		}
		catch(e)
		{}
	}
	return 0;
}

function
ObjInfo(v)
{
	var a="";
	if( v )
	{
		a+="O";
		if( v.id )
			a+=" id:'"+v.id+"'";
		if( v.name )
			a+=" name:'"+v.name+"'";
		if( v.tagName )
			a+=" tag:'"+v.tagName+"'";
	}
	if( a<="" )
		a="null";
	return a;
}

function
iclEvent(vTgt,vId,vParams)
{
	var vWin;
	if( !vTgt )
		vWin=iclGetTopFrame()
	else
	{
		var vType=vTgt.substr(0,1)
		,	vName=vTgt.substr(1);
		switch(vType)
		{
		case "c":
			vWin=iclGetFrameByCode(vName);
			break;
		case "f":
			vWin=iclGetTopFrame().iclFindFrame(vName,1);
			break;
		case "w":
			vWin=window;
			break;
		default:
			return;
		}
	}
	if( vWin && vWin.iclEventDisp)vWin.iclEventDisp(vId,vParams);
}

function
iclEventDisp(vId,vParams)
{
	if( window.onIclEvent && !window.onIclEvent(vId,vParams) )
		return 0;
	var i,fr;
	for(i=0;i<frames.length;i++)
	{
		fr=frames[i];
		try {
			if( fr.iclEventDisp && !fr.iclEventDisp(vId,vParams))
				return 0;
		} catch(e) {}
	}
	return 1;
}
// --
function
OnAwfExec(e,vCmd,vData,vExtra)
{
	iclCancelEvent(e);
	AwfExec(vCmd,vData,vExtra)
}
// --
function
AwfExec(cmd,data,extra)
{
	extra=iclArray(extra);
	var task,type=extra["type"];
	if( cmd )
		extra["cmd"]=cmd;
	else
	if( !extra["cmd"] )
	{
		alert("no_cmd");
		return 0;
	}
	if( !type )type="post";
// ExecLoad
	task=AwfAllocTask(type,extra);
	task.data = iclBuildQS( iclString(data) );
	return AwfStartTask(task);
}
// --
function
AwfLoad(cmd,data,extra)
{
	extra=iclArray(extra);
	extra["type"]="post";
	return AwfExec(cmd,data,extra); 
}

// 
function
AwfBuildFormExtra(form,extra)
{
	extra=iclArray(extra);
	extra["form"]=form;
	if( !extra["url"] && form.action && typeof(form.action)=="string")
		extra["url"]=form.action;
	if( !extra["cmd"] )extra["cmd"]="submit";
	return extra;
}
// --
function
iclBuildQS(data)
{
	if(!data)return "";
	if( typeof(data)=="object" )
	{
		var k,v,vars=data;
		data="";
		if( vars )
		{
			for(k in vars )
			{
				if( k!="awf" )
				{
					v=vars[k];
					if(v==undefined)continue;
					data+="&"+k+"=";
					if(v!=null)
						data+=encodeURIComponent(v);
				}
			}
			data=data.substr(1);
		}
	}
	return data;
}

function
iclFormToArray(form)
{
	var ix, a={},e;
	if(!form)return null;

	for(ix=0;ix<form.elements.length;ix++)
	{
		e=form.elements[ix];
		if( e.name=="awf" )
			continue;
		if( e.tagName=="INPUT" )
		{
			if( e.type=="file" )
			{
				if( e.value > "" )
					return "upload";
				continue;	// ignore
			}
			if( (e.type=="radio" || e.type=="checkbox") && !e.checked  )
				continue;
		}
		else
		if( !(e.tagName=="SELECT"||e.tagName=="TEXTAREA") )
			continue;
		a[e.name]=e.value;
	}
	return a;
}
// --
function
AwfExecForm(form,vExtra)
{
	if( !(form=iclElt(form)) )return 0;
	if( !(vExtra = AwfBuildFormExtra(form,vExtra)) )
		return 0;
	if( !vExtra["disable_list"] && !vExtra["no_auto_disable"])
		vExtra["disable_list"]=[form];
	var data=iclFormToArray(form);
	if( data.toString()=="upload" )
	{
		// Form should post to a hidden frame: We can't use HttpAsyncRequest for uploads
		// The hidden frame should exist and form's TARGET should be set
		var task=AwfAllocTask("upload",vExtra)
		,	url
		,	proc;
		task["fail_if_busy"]=true;
		task["uploadTimer"]=task["uploadPerc"]=0;
		
		if( !(proc=vExtra["uploadProc"]) )
			proc=AwfGetAttr("awf_upload_proc");
		if( !(url=vExtra["uploadUrl"]) ){
			url=AwfGetAttr("icl_url")+"/icl.awf.php";
		}
		task["uploadUrl"]=url;
		task["uploadProc"]=proc;
		return AwfStartTask(task);
	}
	else
		return AwfExec(0,data,vExtra);
}
// --
function
AwfAllocTask(type,extra)
{
	var url = extra["url"]
	,	tag = extra["tag"]
	,	fmt = extra["fmt"]
	,	timeOut=extra["timeout"]
	,	cs="utf-8"
	,	d=new Date();
	if(!fmt)fmt="post";
	if(!tag)tag="";
	if(!url)url=document.location.pathname;
	if(!timeOut) timeOut=180000;
	return {"type":type
			,"cmd":extra["cmd"]
			,"tag":tag
			,"form":extra["form"]
			,"url":url
			,"win":window
			,"ts":d.getTime()
			,"timeout":timeOut
			,"timeoutTimer":0
			,"fail_if_busy":extra["fail_if_busy"]
			,"disable_list":extra["disable_list"]
			,"fmt":fmt
			,"charSet":cs};
}
// --
function
AwfGetTaskUrl(task)
{
	return task.url+"?awf="+AwfGetTaskQS(task);
}
// --
function
AwfGetTaskQS(task)
{
	var s=window.screen,a=task.rid+";"+task.cmd+";"+task.type+";"+task.fmt+";"+task.charSet	;
	if(s)
		a+=";"+s.availWidth+";"+s.availHeight;
	else
		a+=";0;0";
	a+=";"+encodeURIComponent(task.win.name+"/"+window.name);
	return a;
}

function
AwfGetWorkWin()
{
	var vWin=iclGetFrameByCode("awf");
	if( !vWin || !vWin.AwfGetWorkWin)
	{
		// Not found or does not contain awf scripts, try the top frame
		vWin=iclGetTopFrame();
	}
	return vWin;
}
// --
function
AwfGetAttr(vName)
{ 
	var vAttr = AwfGetWorkWin().vIclAttr; 
	return vAttr ? vAttr[vName]:null;
}
// --
function
AwfGetWorkFrame(vId,vCreate)
{
	vId="awf_"+vId+"_worker";
	var vFrame=iclElt(vId);
	if(!vFrame && vCreate)
	{
		vFrame=document.createElement("IFRAME");
		vFrame.id=vId;
		vFrame.name=vId;
		vFrame.style.width="1px";
		vFrame.style.height="1px";
		vFrame.style.display="none";
		document.body.appendChild(vFrame);
		window.frames[vId].window.onload=function(){}
	}
	return vFrame;
}
// --
function
AwfStartTask(vTask)
{
	// Find special frame for awf calls
	var vElt,vWin=AwfGetWorkWin();
	if( vWin!=window )	// delegate if not us
		return vWin.AwfStartTask(vTask);
		
	var vRid=vTask.rid
	,	form=vTask.form
	,	vApc=form?form.elements["APC_UPLOAD_PROGRESS"]:0;
	if( !vRid )
	{
		if( vTask.in_queue )
		{
			iclDebug("AwfStartTask("+vRid+") does not have a rid, but is in queue!");
			return 0;
		}
		vRid = ""+vTask.ts;
		vTask.rid=vRid="t"+vRid.substr(vRid.length-10,8)+vAwfSeq;
		vAwfSeq++;
		vTask.in_queue=1;
		vAwfQueue[vRid]=vTask;
	}
	
	if( vTask.type=="upload" )
	{
		vElt=form?form.elements["awf"]:0;
		if( !form || !vElt || !vApc || !form.id)
		{
			AwfEndTask(vTask,"Invalid form");
			return 0;
		}
		vTask["uploadFormId"]=form.id;
		vElt.value=AwfGetTaskQS(vTask);
		vApc.value=vRid;
		AwfDisableTaskElts(vTask,false);
		form.submit();
		AwfReportUpload(vTask,"start",{});
		AwfSetUploadTimer(vTask,50);
		// Disable form elements while waiting
		AwfDisableTaskElts(vTask,true);
		return vRid;
	}
	else	
	if( vAwfActiveRid )
	{
		if( vTask.fail_if_busy )
		{
			AwfEndTask(vTask,"Task cannot wait");
			return 0;
		}
		AwfDisableTaskElts(vTask,true);
		return vRid;	// Will wait in queue
	}
	if(vApc)vApc.value="";
	if( !vTask.data )vTask.data="";
	if( vTask.type=="post" )	
	{
		var vHttReq = AwfAllocHttpReq();
		if( !vHttReq )
		{
			AwfEndTask(vTask,"Cannot create request");
			return 0;
		}
		try{
			var vCT;
			vHttReq.onreadystatechange = function ()
				{ 
					if(vHttReq.readyState == 4 )
						AwfHttpReqEnd(vRid,vHttReq.status,vHttReq.responseText); 
				}

			if( vTask.fmt == "raw" )
				vCT="text/plain;charset="+vTask.charSet;
			else
			if( vTask.fmt == "post" )
				vCT="application/x-www-form-urlencoded";
			else
				vCT=0;
			vHttReq.open("POST", AwfGetTaskUrl(vTask) );			
			if( vCT )vHttReq.setRequestHeader("Content-Type",vCT);
			vHttReq.setRequestHeader("Content-Length",vTask.data.length);
			vHttReq.send(vTask.data);
		}
		catch(e)
		{
			vHttReq=null;
			AwfEndTask(vTask,"Exception: "+e);
			return 0;
		}
	}
	else
	if( vTask.type=="load" )
	{
		var vFrame=AwfGetWorkFrame("load",1);
		vFrame.src=AwfGetTaskUrl(vTask)+"&"+vTask.data;
	}
	else
	{
		AwfEndTask(vTask,"Invalid type");
		return 0;
	}
	if( vElt=iclElt("icl_busy"))vElt.style.display="block";
	
	vTask.timeoutTimer=setTimeout("AwfTimeout('"+vRid+"')", vTask.timeout);
	vAwfActiveRid=vRid;
	AwfDisableTaskElts(vTask,true);
	return vRid;
}
function
AwfDisableTaskElts(vTask,vDis)
{
	if( vDis )
	{
		if( vTask.disabled_elts || !vTask.disable_list)
			return;	// Already disabled
		vTask.disabled_elts=iclDisableElts(vTask.disable_list,"form");
	}
	else
	if( vTask.disabled_elts )
	{
		iclEnableElts(vTask.disabled_elts);
		vTask.disabled_elts=0;
	}
}

function
AwfGetUploadFormRid(vTask)
{
	var form=vTask.win.iclElt(vTask.uploadFormId)
	,	vApc=form?form.elements["APC_UPLOAD_PROGRESS"]:0;
	return vApc?vApc.value:0;
}
function
AwfSetUploadTimer(vTask,vMsecs)
{
	vTask.uploadTimer=setTimeout("AwfUploadTimer('"+vTask.rid+"')", vMsecs);
}

function
AwfUploadTimer(vRid)
{
	var vTask = vAwfQueue[vRid];
	if( vTask )
	{
		vTask.uploadTimer=0;
		// Check if upload form is still preset
		var formRid=AwfGetUploadFormRid(vTask);
		if( formRid!=vRid )
		{
			// Form no longer exists or is uploading another thing
			AwfEndTask(vTask,"aborted (now uploading:"+formRid+")");
			return;
		}
		
		// Invokes the page which should in turn invoke the AwfOnUploadProgress() method
		if( !vTask.uploadUrl || !AwfExec("upload_progress","rid="+vRid,{"url":vTask.uploadUrl,"fail_if_busy":1}) )
		{
			iclDebug("AwfUploadTimer("+vRid+"): wait_again");
			AwfSetUploadTimer(vTask,2500);
		}
	}
	else
	{
		iclDebug("AwfUploadTimer("+vRid+"): task_not_found");
	}
}

function
AwfOnUploadProgress(rid,percent)
{
	var task = vAwfQueue[rid];
	if( !task || task.type!="upload")
		return;
	task.uploadPerc=percent;
	if( AwfGetUploadFormRid(task)==rid )
	{
		AwfReportUpload(task,"progress",{"perc":percent});
		if( percent<100 )AwfSetUploadTimer(task,5000);
	}
	else
	{
		AwfEndTask(task,"no_longer_active");
	}
}
function
AwfReportUpload(vTask,vEvent,vParams)
{
	if( vTask.uploadProc )
	{
		vParams["tag"]=vTask.tag;
		vTask.uploadProc(vEvent,vParams);
	}
}

// --
function
AwfTimeout(vRid)
{
	AwfEndTaskRid(vRid,"Timeout",1);
}

// --
function
AwfRemoveTask(vRid)
{
	var vKey,vFound=0,vTask,vNewQueue={};
	for(vKey in vAwfQueue )
	{
		vTask=vAwfQueue[vKey];
		if( vKey == vRid )
			vFound=vTask;	// Found task: Don't place it in the queue
		else
			vNewQueue[vKey]=vTask;
	}
	if( vFound )
	{
		vFound.in_queue=0;
		vAwfQueue=vNewQueue;	// Replace old queue
	}
	return vFound;
}
// --
function
AwfEndTaskRid(vRid,vErr,vTimeout)
{
	var vTask= AwfRemoveTask(vRid);
	//if( vTimeout )alert("AwfTask(rid="+vRid+" TIMEOUT, task_exists=" + (vTask?"yes":"no") );
	if( vTask )
	{
		if(vTimeout)vTask.timeoutTimer=0;
		AwfEndTask(vTask,vErr);
	}
	else
	{
		iclDebug("AwfEndTaskRid("+vRid+") task not found");
		AwfPrintActiveTasks();
		AwfOnTaskEnd(vRid);
	}
	return vTask;
}
// --
function
AwfEndTask(vTask,vErr)
{
	var vElt,vRid=vTask.rid;
	
	if( vElt=iclElt("icl_busy"))vElt.style.display="none";
	
	if( vTask.timeoutTimer )clearTimeout(vTask.timeoutTimer);
	if( vTask.uploadTimer)clearTimeout(vTask.uploadTimer);
	if( vTask.in_queue  )
	{
		if( !AwfRemoveTask(vRid) )
			iclDebug("AwfEndTask("+vRid+"): in_queue=true, but AwfRemoveTask returns false");
	}
	else
	{
		if( AwfRemoveTask(vRid) )
			iclDebug("AwfEndTask("+vRid+"): in_queue=false, but AwfRemoveTask returns true");
	}
	if( vErr )iclDebug("AwfEndTask("+vRid+") status="+(vErr?"err:"+vErr : "ok") );
	AwfDisableTaskElts(vTask,false);
	
	if( vTask.type=="upload" )
	{
		if( !vErr && AwfGetUploadFormRid(vTask)==vRid)
			AwfReportUpload(vTask,"stop",{"caller":"AwfEndTask"});
	}
	else
		AwfOnTaskEnd(vRid);
}
// --
function
AwfOnTaskEnd(vRid)
{
	if( vAwfActiveRid == vRid )
	{
		var vNextTask=0,vTask;
		vAwfActiveRid=0;
		for(vRid in vAwfQueue )
		{
			vTask=vAwfQueue[vRid];	// Found first task
			if( vTask.type!="upload" )
			{
				vNextTask=vTask;
				break;
			}
		}
		if( vNextTask )
		{
			if( !vNextTask.in_queue )
				iclDebug("AwfEndTask("+vRid+"): in queue but in_queue=false");
			AwfStartTask(vNextTask);	
		}
	}
}
function
AwfOnTaskData(vTask,vData)
{
	if( vData )
	{
		try
		{eval(vData);}
		catch(e)
		{}
		
	}
}

function
AwfPrintActiveTasks()
{
	var vTask;		
	for(vRid in vAwfQueue )
	{
		vTask=vAwfQueue[vRid];	// Found first task
		iclDebug("ActiveTask="+vRid+" type="+vTask.type);
	}
}
function
AwfHttpReqEnd(vRid,vStatus,vData)
{
	var vTask = AwfEndTaskRid(vRid,null,0);
	if( vTask )
	{
		if( vStatus == 200 )
			vTask.win.AwfOnTaskData(vTask,vData);	
	}
}		

function
AwfOnLoadData(vRid,vData)
{
	var vTask = vAwfQueue[vRid];
	if( vTask )
	{
		if( vTask.timeoutTimer )
		{
			// Reset timer
			clearTimeout(vTask.timeoutTimer);
			vTask.timeoutTimer=setTimeout("AwfTimeout('"+vRid+"')", vTask.timeout);
		}
		vTask.win.AwfOnTaskData(vTask,vData);
		return 1;
	}
	// Task not found, maybe we're not the awf window
	var vAwf=AwfGetWorkWin();
	if( vAwf!=window )return vAwf.AwfOnLoadData(vRid,vData);
		
	iclDebug("AwfOnLoadData("+vRid+") task not found");
	AwfPrintActiveTasks();
	return 0;
}
// --
function
AwfOnLoadEnd(vRid)
{
	var vAwf=AwfGetWorkWin();
	if( vAwf!=window )return vAwf.AwfOnLoadEnd(vRid);
	AwfEndTaskRid(vRid,null,0);
}		

// --
function
AwfAllocHttpReq(vUrl)
{
	var hr=null;
	if(window.XMLHttpRequest) 
	{ 
		try
		{ hr=new XMLHttpRequest(); 	} 
		catch(e) 
		{ hr=null;}
	} 
	if( !hr && window.ActiveXObject )
	{
		try { hr = new ActiveXObject("Msxml2.XMLHTTP"); } 
		catch(e) 
		{ hr=null;}
		
		if( !hr )
		{
			try { hr = new ActiveXObject("Microsoft.XMLHTTP"); } 
			catch (e) {hr=null}
		}
	}
	return hr;
}
function
iclHideObjects()
{
	var vA={count:0,list:new Array()}
	var e,i,vM;
	try {
		vM=document.embeds.length;
	}
	catch(e) {
		vM=0;
	}
	for(i=0;i<vM;i++)
	{
		e=document.embeds.item(i);
		vA.list[vA.count++]={
			 "elt":e
			,"vis":e.style && e.style.visibility ? e.style.visibility : ""
		};
		e.style.visibility="hidden";
	}
	for(i=0;i<frames.length;i++)
	{
		try {
			if( frames[i].iclHideObjects )
			{
				var j,vB=frames[i].iclHideObjects();
				for(j=0;j<vB.count;j++)
					vA.list[vA.count++]=vB.list[j];
			}
		}
		catch(e){
		}
	}
	return vA;
}

function
iclRestoreObjects(vA)
{
	if( vA && vA.count )
	{
		var i;	
		for(i=0;i<vA.count;i++)		
			vA.list[i].elt.style.visibility=vA.list[i].vis;
	}
}
function
iclDisableElts(elt,mode)
{
	if(elt)
	{
		var vA={count:0,list:new Array()};
		iclDoDisable(vA,elt,mode);
		return vA["list"];
	}
	return null;
}

function
iclDoDisable(vA,elt,mode)
{
	if( !elt )return;
	var e,to=typeof(elt);
	if( to=="string" )
	{
		if( (e=iclElt(elt)) && !e.disabled)
		{
			vA.list[vA.count++]=e;
			e.disabled=true;
		}
	}
	else
	if( to=="object" )
	{
		if( elt.tagName )
		{
			if( elt.tagName=="FORM" )
			{
				var ix, btnOnly=mode && mode=="form";
				for(ix=0;ix<elt.elements.length;ix++)
				{
					e=elt.elements[ix];
					if( e.tagName=="INPUT" )
					{
						if( e.type!="button" )
						{
							if( btnOnly || (e.type!="text" && e.type!="password") )
								continue;
						}
					}
					else
					if( e.tagName!="BUTTON" )
					{
						if( btnOnly || (e.tagName!="SELECT"&&e.tagName!="TEXTAREA") )
							continue;
					}
					if( !e.disabled )
					{
						vA.list[vA.count++]=e;
						e.disabled=true;
					}
				}
			}
			else
			if( !elt.disabled )
			{
				vA.list[vA.count++]=elt;
				elt.disabled=true;
			}
		}
		else
		{
			var k;
			for(k in elt )
				iclDoDisable(vA,elt[k],mode);
		}
	}
}
// --
function
iclEnableElts(vList)
{
	var ix,mx;
	if(vList && (mx=vList.length)>0)
		for(ix=0;ix<mx;ix++)vList[ix].disabled=false;
}
// --
function
iclDebug(msg)
{ 
	/*
	var vWin=iclGetFrameByCode("view");
	if( vWin && vWin.iclDebug && vWin!=window )return vWin.iclDebug(msg);
	if( iclElt("id_icl_debug") )
		iclAddDiv({div:"id_icl_debug",htm:msg}); 
	else
		iclAddDiv({htm:msg}); 
	*/
	return 1;
}
// --
function
iclB64(vStr)
{
	var tk = iclGetToolkit();
	if( !tk )alert("iclGetToolkit not found");
	return tk && tk.B64Encode ? tk.B64Encode(vStr):null;
}
// --
function
iclGetToolkit()
{
	// Searches for the vIclToolKit variable in current and parent frames
	// because we usually only include the Toolkit jscript in the top frame
	var vWin=window;
	while(1)
	{
		try {
			if( vWin.vIclToolKit )return vWin.vIclToolKit;
			if( vWin==vWin.parent || !vWin.parent)return null;
		} catch (ex) {return null;}
		vWin=vWin.parent;
	}
}
function
iclGetEditor(id)
{
	var e,w,o;

	switch(iclGetEltVal(id+"_type"))
	{
	case "fck":

		if( (e=iclElt(id+"_frame"))
			&& (e.tagName=="IFRAME")
			&& (w=iclGetFrameWin(e)) 
			&& (o=w.FCK) 
			&& o.UpdateLinkedField )
			return {type:"fck",elt:e,fck:o};
		break;
	case "nic":
		if( (e=iclElt(id)) && (w=window.nicEditors) )
		{
			if( w.findEditor )
			{
				if( o=w.findEditor(id) )
					return {type:"nic",elt:e,nic:o};
				else
					alert("nic: !w.findEditor("+id+")");
			}
			else
				alert("nic: !w.findEditor");
		}
		else
			alert("nic: !window.nicEditors");
		break;
		
	default:
		if( (e=iclElt(id)) && ((e.tagName=="TEXTAREA") || e.tagName=="INPUT"))
			return {type:"std",elt:e};
		break;
	}
	return null;
}
function
iclGetEditorVal(id)
{
	var v=""
		,e=iclGetEditor(id);
	if( e )
	switch(e.type)
	{ 
	case "fck":
		e.fck.UpdateLinkedField();
		v = e.fck.LinkedField.value; 
		break;
	case "nic":
		e.nic.saveContent(); // then, get val
	case "std":
		v=e.elt.value;
		break;
	}
	return v;
}
function
iclSetEditorVal(vId,vVal)
{
	var vE=iclGetEditor(vId);
	if( vE )
	switch(vE.type)
	{ 
	case "fck":
		vE.fck.SetHTML(vVal);
		break;
	case "nic":
		vE.nic.setContent(vVal);
		break;
	case "std":
		vE.elt.value=vVal;
		break;
	}
	return vVal;

}

function
iclSetStyleElt(vId,vCss)
{
	var bid=iclGetBrowserId()
	,	e=iclElt(vId);
	if( e )
	{
		if( bid=="ie" )
			e.cssText=vCss;	
		else
			e.innerHTML=vCss;	
	}
}
function
iclAdjustDiv(e,delay,adjust)
{
	if( adjust && (e=iclElt(e)) )
	{
		if( delay )
		{
			window.setTimeout("iclAdjustDiv('"+e.id+"',0,'"+adjust+"')",delay);
			return;
		}
		if( adjust==1 || adjust=="auto")
		{
			var a=iclGetEltSizes(e,1)
			,	alt=iclIsAltBrowser()
			,	b=iclGetPageSizes()
			,	pH=b.clientHeight;
			if( alt )b=iclGetEltSizes(document.body,1)
			var	pT=b.scrollTop
			,	l=a.y+a.h
			,	r=pT+pH;
			e=alt?document.body:iclGetHtml();
			if(l>r)
			{
				if(a.h>pH)
					b=a.y;
				else
					b=(l-r)+e.scrollTop;
				e.scrollTop=b;
			}
			else
			if( a.y<pT )
				e.scrollTop=a.y;
		}
		else
		if( adjust=="top")
		{
			iclScrollElt(e,true);
		}
	}
}

