var vIclBrowserId=0
, vIclAttr={"icl":1}
, vAwfActiveRid=0
, vAwfSeq=0
, vAwfQueue={}	// Queue in case awf is invoked while waiting for previous request
;

function
iclGetHtml()
{
	var l=document.getElementsByTagName("HTML");
	return l[0];
}

function
iclGetPageSizes()
{
	var x=0,y=0,w=0,h=0,e=iclGetHtml();
	if( e ){x=e.scrollLeft;y=e.scrollTop;w=e.offsetWidth;h=e.offsetHeight;};
	return {"scrollLeft":x,"scrollTop":y,"offsetWidth":w,"offsetHeight":h};
}

function
iclGetEventPos(e)
{
	var x=0,y=0;
	if( e )
	{
		if(e.x || e.y)
		{
			x=e.x;
			y=e.y;
		}
		else
		{
			x=e.clientX;
			y=e.clientY;
		}
	}
	return {"x":x,"y":y};
}
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.tagName=="IMG")
		return e.parentNode;
	return e;
}
function
iclCancelEvent(e)
{
	var bid=iclGetBrowserId();
	if( bid=="ie" )
	{
		if(window.event)
		{
			window.event.cancelBubble = true;
			window.event.returnValue = false;
		}
		return window.event;
	}
	else
	{
		if( e )
		{
			e.stopPropagation();
			e.preventDefault();
		}
		return e;
	}
}

function
iclGetBrowserId()
{ 	
	if( !vIclBrowserId )
	{
		if( navigator.userAgent.match(/\bMSIE\b/) )
			vIclBrowserId="ie";
		else
		{
			if( navigator.userAgent.match(/Firefox/) )
				vIclBrowserId="fx";		
			else
			if( navigator.userAgent.match(/Opera/) )
				vIclBrowserId="op";		
			else
				vIclBrowserId="unk";		
		}
	}
	return vIclBrowserId;
}

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=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,vId)
{
	var vElt= e ? iclGetEventSrc(e,1) : 0
	,	vDiv
	,	vExp=0;
	if( !vId && vElt )vId = vElt.id;

	if( vId  )
	{
		var vDiv=iclElt(vId+"_div");
		if( vElt && (vElt.tagName=="INPUT") && ( vElt.type=="radio" || vElt.type=="checkbox" ) )
		{
			vExp=vElt.checked; // Don't cancel event
			
		}
		else
		{	
			iclCancelEvent(e);
			vExp= vDiv && vDiv.style.display=="none";	
		}
		if(vDiv)
		{
			vDiv.style.display=vExp?"block":"none";
			if( vExp )
			{
				e=vId+"_focus";
				if( iclElt(e) )iclDelayFocus(e,50);
			}
		}
		if( vDiv=iclElt(vId+"_hide") )	
			vDiv.style.display=vExp?"none":"block";
		
	}
	else
		iclCancelEvent(e);
	return vExp;
}

function
iclAddDiv(id,vHtm,vAttr,vScroll)
{ 
	var e = id && id>"" ? iclElt(id) : document.body;
	if( e )
	{
		var v,vDiv=document.createElement("DIV");
		if( vAttr && vAttr!="0")
		{
			if( v=vAttr["id"] )vDiv.id=v;
			if( v=vAttr["class"] )vDiv.className=v;
		}
		vDiv.innerHTML=vHtm;
		e.appendChild(vDiv);
		if(vScroll)vDiv.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: "+id);
	return 0;
}
function
iclDelayFocus(id,delay)
{ 
	if(!delay)
		iclFocus(id);
	else 
	{	
		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);
	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;
}
var vTestCallNum=1;

function
AwfEvent(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.AwfDispEvent)vWin.AwfDispEvent(vId,vParams);
}

function
AwfDispEvent(vId,vParams)
{
	if( window.OnAwfEvent && !window.OnAwfEvent(vId,vParams) )
		return 0;
	var i,fr;
	for(i=0;i<frames.length;i++)
	{
		fr=frames[i];
		try {
			if( fr.AwfDispEvent && !fr.AwfDispEvent(vId,vParams))
				return 0;
		} catch(e) {}
	}
	return 1;
}
function
OnAwfExec(e,vCmd,vData,vExtra)
{
	iclCancelEvent(e);
	AwfExec(vCmd,vData,vExtra)
}
// --
function
AwfExec(vCmd,vData,vExtra)
{
	var vType,vFmt;
	if( !vExtra )vExtra={};
	
	if( !vData )vData="";
	if( vCmd )
		vExtra["cmd"]=vCmd;
	else
	if( !vExtra["cmd"] )
	{
		alert("no_cmd");
		return 0;
	}
	
	if( !(vType=vExtra["type"]) )vType="post";
	
// ExecLoad
	var vTask=AwfAllocTask(vType,vExtra);
	
	if( typeof(vData)=="object" )
	{
		var vKey
			,vVars=vData
			,vData="";
		if( vVars )
		{
			for(vKey in vVars )
				if( vKey!="awf" )vData+="&"+vKey+"="+encodeURIComponent(vVars[vKey]);
			vData=vData.substr(1);
		}
	}
	vTask.data = vData;
	return AwfStartTask(vTask);
}
// --
function
AwfLoad(vCmd,vData,vExtra)
{
	if( !vExtra )vExtra={};
	vExtra["type"]="post";
	return AwfExec(vCmd,vData,vExtra); 
}

// 
function
AwfBuildFormExtra(vForm,vExtra)
{
	if( !vExtra )vExtra={};
	vExtra["form"]=vForm;
	if( !vExtra["url"] && vForm.action && typeof(vForm.action)=="string")
		vExtra["url"]=vForm.action;
	if( !vExtra["cmd"] )vExtra["cmd"]="submit";
	return vExtra;
}
// --
function
AwfExecForm(vForm,vExtra)
{
	if( !(vForm=iclElt(vForm)) )return 0;
	if( !(vExtra = AwfBuildFormExtra(vForm,vExtra)) )
		return 0;
	if( !vExtra["disable_list"] && !vExtra["no_auto_disable"])
		vExtra["disable_list"]=[vForm];
	var i=0,ix,e,vIsUpload=0;
	vVars=new Array();
	vVars["awf_form_id"]=vForm.id;
	var vDis={};
	for(ix=0;ix<vForm.elements.length;ix++)
	{
		e=vForm.elements[ix];
		if( e.name=="awf" )
			continue;
		if( e.tagName=="INPUT" )
		{
			if( e.type=="file" )
			{
				if( e.value > "" )
				{
					vIsUpload=1;	// use uploader frame
					break;
				}
				continue;	// ignore
			}
			if( (e.type=="radio" || e.type=="checkbox") && !e.checked  )
				continue;
		}
		else
		if( !(e.tagName=="SELECT"||e.tagName=="TEXTAREA") )
			continue;
		vVars[e.name]=e.value;
	}
	
	if( vIsUpload )
	{
		// 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 vTask=AwfAllocTask("upload",vExtra)
		,	vUrl
		,	vProc;
		vTask["fail_if_busy"]=true;
		vTask["uploadTimer"]=vTask["uploadPerc"]=0;
		
		if( !(vProc=vExtra["uploadProc"]) )vProc=AwfGetAttr("awf_upload_proc");
		if( !(vUrl=vExtra["uploadUrl"]) ){
			vUrl=AwfGetAttr("icl_url")+"/icl.awf.php";
		}
		
		vTask["uploadUrl"]=vUrl;
		vTask["uploadProc"]=vProc;

		return AwfStartTask(vTask);
	}
	else
		return AwfExec(0,vVars,vExtra);
}
// --
function
AwfAllocTask(vType,vExtra)
{
	var vUrl = vExtra["url"]
	,	vTag = vExtra["tag"]
	,	vFmt = vExtra["fmt"]
	,	vTimeout=vExtra["timeout"]
	,	vCs="utf-8";
	if( !vFmt )vFmt="post";
	if( !vTag)vTag="";
	if( !vUrl )vUrl=document.location.pathname;
	if( !vTimeout) vTimeout=120000;
	return {"type":vType
			,"cmd":vExtra["cmd"]
			,"tag":vTag
			,"form":vExtra["form"]
			,"url":vUrl
			,"win":window
			,"timeout":vTimeout
			,"timeoutTimer":0
			,"fail_if_busy":vExtra["fail_if_busy"]
			,"disable_list":vExtra["disable_list"]
			,"fmt":vFmt
			,"charSet":vCs};
}
// --
function
AwfGetTaskUrl(vTask)
{
	return vTask.url+"?awf="+AwfGetTaskQS(vTask);
}
// --
function
AwfGetTaskQS(vTask)
{
	return vTask.rid+";"+vTask.cmd+";"+vTask.type+";"+vTask.fmt+";"+vTask.charSet
		+"&caller="+vTask.win.name
		+"&executer="+window.name;
}

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";
		alert( ObjInfo(vFrame) );
		document.body.appendChild(vFrame);
		window.frames[vId].window.onload=function(){ alert('on_load'); }
	}
	return vFrame;
}
function
AwfOnFrameLoad()
{
	alert("AwfOnFrameLoad");
}
// --
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
	,	vForm=vTask.form
	,	vApc=vForm?vForm.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;
		}
		var d=new Date();
		vRid = ""+d.getTime()
		vTask.rid=vRid="t"+vRid.substr(vRid.length-10,8)+vAwfSeq;
		vAwfSeq++;
		vTask.in_queue=1;
		vAwfQueue[vRid]=vTask;
	}
	
	if( vTask.type=="upload" )
	{
		vElt=vForm?vForm.elements["awf"]:0;
		if( !vForm || !vElt || !vApc || !vForm.id)
		{
			AwfEndTask(vTask,"Invalid form");
			return 0;
		}
		vTask["uploadFormId"]=vForm.id;
		vElt.value=AwfGetTaskQS(vTask);
		vApc.value=vRid;
		AwfDisableTaskElts(vTask,false);
		vForm.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_ind"))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);
	}
	else
	if( vTask.disabled_elts )
	{
		iclEnableElts(vTask.disabled_elts);
		vTask.disabled_elts=0;
	}
}

function
AwfGetUploadFormRid(vTask)
{
	var vForm=vTask.win.iclElt(vTask.uploadFormId)
	,	vApc=vForm?vForm.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 vFormRid=AwfGetUploadFormRid(vTask);
		if( vFormRid!=vRid )
		{
			// Form no longer exists or is uploading another thing
			AwfEndTask(vTask,"aborted (now uploading:"+vFormRid+")");
			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,1000);
		}
	}
	else
	{
		iclDebug("AwfUploadTimer("+vRid+"): task_not_found");
	}
}

function
AwfOnUploadProgress(vRid,vPerc)
{
	var vTask = vAwfQueue[vRid];
	if( !vTask || vTask.type!="upload")
	{
		iclDebug("AwfOnUploadProgress("+vRid+","+vPerc+"): task_not_found");
		return;
	}
	vTask.uploadPerc=vPerc;
	if( AwfGetUploadFormRid(vTask)==vRid )
	{
		AwfReportUpload(vTask,"progress",{"perc":vPerc});
		if( vPerc<100 )AwfSetUploadTimer(vTask,1000);
	}
	else
	{
		AwfEndTask(vTask,"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_ind"))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(vObj)
{
	if(vObj)
	{
		var vA={count:0,list:new Array()};
		iclDoDisable(vA,vObj);
		return vA["list"];
	}
	return null;
}

function
iclDoDisable(vA,vObj)
{
	if( !vObj )return;
	var e,to=typeof(vObj);
	if( to=="string" )
	{
		if( (e=iclElt(vObj)) && !e.disabled)
		{
			vA.list[vA.count++]=e;
			e.disabled=true;
		}
	}
	else
	if( to=="object" )
	{
		if( vObj.tagName )
		{
			if( vObj.tagName=="FORM" )
			{
				var ix;
				for(ix=0;ix<vObj.elements.length;ix++)
				{
					e=vObj.elements[ix];
					if( e.tagName=="INPUT" )
					{
						if( e.type!="text" && e.type!="button" && e.type!="password")
							continue;
					}
					else
					{
						if( !(e.tagName=="SELECT"||e.tagName=="TEXTAREA"||e.tagName=="BUTTON") )
							continue;
					}
					if( !e.disabled )
					{
						vA.list[vA.count++]=e;
						e.disabled=true;
					}
				}
			}
			else
			if( !vObj.disabled )
			{
				vA.list[vA.count++]=vObj;
				vObj.disabled=true;
			}
		}
		else
		{
			var vKey;
			for(vKey in vObj )
				iclDoDisable(vA,vObj[vKey]);
		}
	}
}
// --
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("id_icl_debug",msg,0,0); 
	else
		iclAddDiv(null,msg,0,0); 
	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(vId)
{
	var vElt=iclElt(vId),vW,vO;

	if( vElt )
	switch(iclGetEltVal(vId+"_type"))
	{
	case "fck":

		if( vElt.tagName=="IFRAME" 
			&& (vW=iclGetFrameWin(vElt)) 
			&& (vO=vW.FCK) 
			&& vO.UpdateLinkedField )
			return {type:"fck",elt:vElt,fck:vO};
		break;
	case "nic":
		if(vW=window.nicEditors )
		{
			if( vW.findEditor )
			{
				if( vO=vW.findEditor(vId) )
					return {type:"nic",elt:vElt,nic:vO};
				else
					alert("nic: !vW.findEditor("+vId+")");
			}
			else
				alert("nic: !vW.findEditor");
		}
		else
			alert("nic: !window.nicEditors");
		break;
		
	default:
		if( vElt.tagName=="TEXTAREA" || vElt=="INPUT" )
			return {"type":"std","elt":vElt};
		break;
	}
	return null;
}
function
iclGetEditorVal(vId)
{
	var vVal=""
		,vE=iclGetEditor(vId);
	if( vE )
	switch(vE.type)
	{ 
	case "fck":
		vE.fck.UpdateLinkedField();
		vVal = vE.fck.LinkedField.value; 
		break;
	case "nic":
		vE.nic.saveContent(); // then, get val
	case "std":
		vVal=vE.elt.value;
		break;
	}
	return vVal;
}
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" )
		{
			alert("will set cssText");
			e.cssText=vCss;	
		}
		else
			e.innerHTML=vCss;	
	}
}

function
iclClearDiv(e,vDiv,vScroll)
{
	tcReset(e);
	if(e=iclElt(vDiv))
		iclSetEltHtmVis(e,null,0);
	if(vScroll)iclScrollToTop();
}