//==========================================================
/* global vars
-----------------------------------------------------------*/
var agent = {}; //main agent object
agent.FX = {}; 	//effects for presentation
agent.data = {};
agent.xhrURL = rootPath + "incs/siteXHR.asp";
/* agent initialization function
----------------------------------------------------------------*/
agent.init = function(){
	agent.createTabs();
	
	//agent.FX.domainsearch.toggle();
	// handle renewal traffic
	if (location.request.t && (location.request.rd || location.request.dnrd)){
		agent.loadAgentInfo(location.request.t);
		agent.selectTab("__loginTab");
	}else{
		agent.selectTab("__searchTab");
	}
	
	agent.FX.newdomainsearch = new Fx.Slide("__newDomainSearch",{duration:400, wait:true});
	agent.FX.newdomainresults = new Fx.Slide("domainSearchResults",{duration:400, wait:true}).slideOut();
	
	agent.FX.transferdomainsearch = new Fx.Slide("__transferDomainSearch",{duration:400, wait:true});
	//agent.FX.transferdomainresults = new Fx.Slide("transferSearchResults",{duration:400, wait:true}).slideOut();
	agent.FX.scroll = new Fx.Scroll(window, {
								wait: false,
								duration: 1200,
								offset: {'x': 0, 'y': -35},
								transition: Fx.Transitions.Quad.easeInOut
								});
					
	agent.FX.videosearch = new Fx.Slide("videoSearch",{duration:400, wait:true}).slideOut();	
	//agent.FX.videoscript = new Fx.Slide("videoScript",{duration:400, wait:true}).slideOut();	
	agent.FX.videoresults = new Fx.Slide("videoResults",{duration:400, wait:true}).slideOut();
	
	$('showVideoSearch').addEvents({'click':function(e){ agent.FX.videosearch.toggle(); }});
	//$('showScriptSend').addEvents({'click':function(e){ agent.FX.videoscript.toggle(); }});
	
	//$('sendVideoScript').addEvents({'click':function(e){ agent.sendVideoScript(); }});
	$('videoProducerSearch').addEvents({'click':function(e){ agent.videoProducerSearch(); }});
	
	tabAry = $$(["__searchTab","__transferTab","__loginTab","__cartTab",'__adTab','__videoTab']);
	var pickTab = location.hash.replace('#','').toLowerCase();
	if (pickTab){
		if (pickTab == 'search'){ agent.selectTab('__searchTab'); }
		if (pickTab == 'transfer'){ agent.selectTab('__transferTab'); }
		if (pickTab == 'login'){ agent.selectTab('__loginTab'); }
		if (pickTab == 'cart'){ agent.selectTab('__cartTab'); }
		if (pickTab == 'adwords' || pickTab == 'ad'){ agent.selectTab('__adTab'); }
		if (pickTab == 'liveagent' || pickTab == 'video'){ agent.selectTab('__videoTab'); }	
	}
};

addEvent(window,"load",agent.init); //initialize the system


/* agent tab interface creator
----------------------------------------------------------------*/
agent.createTabs = function(forceTab){
	var tabPanel = $("__agentTabs");
	
	var searchTab = dom.addNode("Find a New Domain",tabPanel,"span",{className:"agentTab",id:"__searchTab"},{});
	addEvent(searchTab,"click",function(e){agent.selectTab("__searchTab");});
	
	var transferTab = dom.addNode("Transfer a Domain",tabPanel,"span",{className:"agentTab",id:"__transferTab"},{});
	addEvent(transferTab,"click",function(e){agent.selectTab("__transferTab");});

	var videoTab = dom.addNode("LiveAgent Videos",tabPanel,"span",{className:"agentTab-highlight",id:"__videoTab"},{});
	addEvent(videoTab,"click",function(e){agent.selectTab("__videoTab");});
	
	var adTab = dom.addNode("Online Marketing",tabPanel,"span",{className:"agentTab",id:"__adTab"},{});
	addEvent(adTab,"click",function(e){agent.selectTab("__adTab");});
	
	var loginTab = dom.addNode("Your Account",tabPanel,"span",{className:"agentTab",id:"__loginTab"},{});
	addEvent(loginTab,"click",function(e){agent.selectTab("__loginTab");});
	
	var cartTab = dom.addNode("Your Cart",tabPanel,"span",{className:"agentTab",id:"__cartTab"},{});
	addEvent(cartTab,"click",function(e){agent.selectTab("__cartTab");});
		
	
	//dom.addNode(null,tabPanel,"br",{className:"clearboth"});
	if (forceTab){ agent.selectTab(forceTab); }
	if (cart){
		cart.setCartTabSummary();
	}
};

/* agent tab interface manager
----------------------------------------------------------------*/
agent.selectTab = function(newTab){
	newTab = $(newTab);
	agent.currenttab = newTab.id;
	//console.info ("setting the a tab to: " +  newTab.id);
	//display the correct content and set the tab appearance
	tabAry = $$(["__searchTab","__transferTab","__loginTab","__cartTab",'__adTab','__videoTab']);

	for (var ii = 0; ii<tabAry.length; ii++){
		if (tabAry[ii]){
			if (!tabAry[ii].original_className){tabAry[ii].original_className = tabAry[ii].className; }
			if (tabAry[ii].id == newTab.id){
				
				tabAry[ii].className = "agentTabSelected";
				dom.toggle(tabAry[ii].id + "Content",true);				
			}else{
				//tabAry[ii].className = "agentTab";
				tabAry[ii].className = tabAry[ii].original_className
				dom.toggle(tabAry[ii].id + "Content",false);
			}
		}
	}
	agent.statusChange();
};

/* agent status message indicator
----------------------------------------------------------------*/
agent.statusChange = function(sMsg,sType,sDelay,showSpinner){ //an empty message will merely allocate space on the page 
	sType 	= sType?sType:'info';	//type of message - affects text color and icon
	sDelay 	= sDelay?sDelay:2000;	//milliseconds to pause a message
	var sb = $("__statusBanner");
	var st = $("__statusText");
	var locEl = $$('#' + agent.currenttab + 'Content h2')[0];
	var chainNew = (agent.FX.status && sMsg)?true:false;

	//console.info("locEl: ",locEl);
	if (locEl){
		//console.info("locEl: ",locEl);
		if (agent.FX.status){
			//console.log("closing");
			agent.FX.status.start({
						opacity:	0
				});
		}else{
			agent.FX.status = new Fx.Styles(sb,{duration:400, wait:false});
			//console.info("new status created");
		}
		sb.injectAfter(locEl);
		sb.setStyle('opacity',0);
			
		sb.className = "statusBanner_" + sType;	
		
		if (sMsg){
			st.innerHTML = sMsg + (showSpinner?(" <img src='" + rootPath + "images/interface/loading_small.gif' border=0 />"):"");			
			agent.FX.status.start({
					opacity:	1
			}).chain(function(){// executes immediately after completion of above effect
				this.start.delay(sDelay,this,{
					opacity:0
				});
				//console.info("status message: ", sMsg);
			});
		}else{
			agent.FX.status.start({opacity:0});
		}
	}		
}

/* agent info loader
----------------------------------------------------------------*/
agent.loadAgentInfo = function(t,jsonObj){
	if(t && !jsonObj){		
		console.info(t);
		dom.addFormData("__agentDomainForm","func","lad","hidden");
		dom.addFormData("__agentDomainForm","agentTempGUID",t,"hidden");
		var sURL = rootPath + "incs/siteXHR.asp";
		xhr.json(sURL,"POST",agent.loadAgentInfo,[t],"__agentDomainForm");
	}else if(jsonObj && jsonObj.agent && jsonObj.agent.isValidAgent == 1){//finished loading
		agent.data = jsonObj;
		//console.info(jsonObj);
		eraseCookie("agentTempGUID");
		createCookie("agentTempGUID",t,1);
		$("__domainManagementTitle").innerHTML = "Manage or Renew Your Domains";
		dom.toggle("__managementLoginSteps",false);
		$("agentDomainManagment").innerHTML = "";
		cart.settings.agentAlias = jsonObj.agent.agentAlias;
		dom.addNode("You are logged in as <b>" + jsonObj.agent.agentFirstName + " " + jsonObj.agent.agentLastName + "</b>&nbsp;&nbsp;&nbsp;","agentDomainManagment","div",{id:"loggedInStatus"},{padding:"5px",marginBottom:"0px",textAlign:"right",color:"#888"});
		dom.addNode("[log out]","loggedInStatus","span",{id:"loggedInStatus",className:"fakeLink",onclick:function(){agentLogout();}});
		
		// ----------------------------------------------------------
		// load the billing data for the agent as well
		agent.data = jsonObj;
		cart.fillCheckoutForm(null,null,true,agent.data.agent);
		
		dom.addNode("","agentDomainManagment","table",{id:"agentDomainTable"},{width:"100%"});
		var d = jsonObj.domain;
		if (d && d.domainID.length){
			console.info("loading account")
			for (var i=0;i<d.domainID.length;i++){
				var curDomObj = {}
				for (var p in d){
					curDomObj[p] = d[p][i];
				}
				curDomObj.email = jsonObj.email;
				
				//console.info('transcribed domain obj:', curDomObj);
				var isTransfer = (d.regIsTransfer[i] && !d.regIsTransferCompleted[i])?true:false;
				var isCanceled = (d.regIsCanceled[i])?true:false;
				
				if (isTransfer && !$("adTransTB")){
					dom.addNode("","agentDomainTable","tbody",{id:"adTransTB"});
					var headTR = dom.addNode(null,"adTransTB","tr",{className:"rowHeader"},{});
					dom.addNode("Domains In Transfer",headTR,"td",{colSpan:2},{});
					dom.addNode("Expiration",headTR,"td",{},{textAlign:"center"});
					dom.addNode("&nbsp;",headTR,"td",{},{textAlign:"right"});
				}else if (!isTransfer && !$("adOwnedTB")){
					dom.addNode("","agentDomainTable","tbody",{id:"adOwnedTB"});
					var headTR = dom.addNode(null,"adOwnedTB","tr",{className:"rowHeader"},{});
					dom.addNode("Currently Owned Domains",headTR,"td",{colSpan:2},{});
					dom.addNode("Expiration",headTR,"td",{},{textAlign:"center"});
					dom.addNode("&nbsp;",headTR,"td",{},{textAlign:"right"});
				} 
				var thisTB = isTransfer?$("adTransTB"):$("adOwnedTB");
				var newTR = dom.addNode(null,thisTB,"tr",{},{});
				
				var dVal = d.domSLD[i] + "." + d.domTLD[i];
				var domTD = dom.addNode("www." + dVal,newTR,"td",{colSpan:2},{fontWeight:"bold"});
				//dom.addNode(null,domTD,"a",{target:d.domainID[i]},{});
				
				dom.addNode(smallDate(d.regExpirationDate[i]),newTR,"td",{},{textAlign:"right"});
				var newRenewTD = dom.addNode("",newTR,"td",{},{fontSize:"10px",textAlign:"right"});
				if (!isTransfer && !isCanceled){
					dom.addNode("",newRenewTD,"img",{id:'btnRenew' + dVal,src:rootPath + "images/interface/btnRenew.gif",domObj:curDomObj,title:"Click to renew or extend your domain ownership",className:"fakeLink"});
					$('btnRenew' + dVal).addEvents({'click':function(e){
														var btnObj = (e.srcElement || e.target || $('btnRenew' + dVal));
														cart.renewDialog(btnObj.domObj,false,btnObj.parentNode.parentNode);
														agent.FX.scroll.toElement(btnObj);
													}});
				}
				if (isCanceled){
					dom.addNode("Domain Canceled",newRenewTD,"span",{},{fontSize:"10px",textAlign:"right",color:"red"});
					newTR.style.backgroundColor = "#fce4e7";
				}
				
				var e = jsonObj.email;
				if (e && e.emailID.length){
					for (var j=0;j<e.emailID.length;j++){
						
						var em = xhr.getDataRow(e,j);
						//clean out multiple e-mails for re-renewal records and show a single row with corrected dates
						var isDuplicateEmail = false;
						for (var ee=0;ee<e.emailID.length;ee++){
							var emt = xhr.getDataRow(e,ee);
							if (emt.emName == em.emName && emt.emPointsTo == em.emPointsTo && emt.emDomainID == em.emDomainID && em.emailID != emt.emailID){
								if ($(emt.emailID)){
									//console.info("email already displayed",em);
									isDuplicateEmail = true;
								}else{
									//console.info("fixing mail dates",em,emt);
									em.emDateAdded = Math.min(smallDate(em.emDateAdded,true),smallDate(emt.emDateAdded,true));
									em.emExpirationDate = Math.max(smallDate(em.emExpirationDate,true),smallDate(emt.emExpirationDate,true));
								}
							}
						}
						if (isDuplicateEmail){ continue; } //skip past a duplicate e-mail (via multiple renewals of the same address)
						
						if (em.domainID == d.domainID[i] && !em.emIsDeleted && smallDate(em.emExpirationDate,true) >= smallDate(now(),true)){
							var newEmTR = dom.addNode(null,thisTB,"tr",{emName:em.emName,emPointsTo:em.emPointsTo,domainName:dVal,id:em.emailID,className:"emailRow"},{});
							var newTD = dom.addNode("Mail for:<br>Is sent to:",newEmTR,"td",{},{paddingRight:"5px",textAlign:"right",color:"#888",width:"60px"});
							dom.addNode(em.emName + "@" + dVal + "<br/>" + em.emPointsTo,newEmTR,"td",{},{color:"#009D00"});
							dom.addNode(smallDate(em.emExpirationDate),newEmTR,"td",{},{textAlign:"right"});
							var modEmailTD = dom.addNode("",newEmTR,"td",{domainName:dVal,emailID:em.emailID},{textAlign:"right"});
							var editEmail = dom.addNode("edit",modEmailTD,"span",{title:"Edit this E-Mail redirect",className:"fakeLink"},{paddingRight:"5px"});
							var deleteEmail = dom.addNode("delete",modEmailTD,"span",{title:"Delete this E-Mail redirect",className:"fakeLink"},{});
							
							addEvent(editEmail,"click",function(e){cart.editEmailRedirect((e.srcElement || e.target).parentNode.emailID);} );
							addEvent(deleteEmail,"click",function(e){cart.editEmailRedirect((e.srcElement || e.target).parentNode.emailID,true);} );
						}
						//dom.addNode(smallDate(d.regDate[i]),newTR,"td",{},{});
					}
				}
				var addNewEmTR = dom.addNode(null,thisTB,"tr",{id:"admin_" + dVal + "_email",className:"emailHeader"},{});
				if (isCanceled){
					dom.addNode("&nbsp;",addNewEmTR,"td",{colSpan:4},{textAlign:"right"});
				}else{
					var mailLink = "<span domainName='" + dVal + "' id='newEmail_" + dVal + "' class='fakeLink' title='Add a new E-Mail redirect'>Add a new E-Mail redirect</span> to <b>" + dVal + "</b> &nbsp;";
					var newEmailTD = dom.addNode(mailLink,addNewEmTR,"td",{domainName:dVal,expDate:d.regExpirationDate[i],colSpan:4},{textAlign:"right"});
					addEvent("newEmail_" + dVal,"click",function(e){cart.addEmailRedirect((e.srcElement || e.target).parentNode.domainName,(e.srcElement || e.target).parentNode.expDate);} );
				}
				// -- handle if this is an auto-renewal ---- //
				var openRenewal = (location.request.rd || location.request.dnrd)?true:false;
				var renewalID = (location.request.rd || location.request.dnrd);
				console.info("viewing: ", curDomObj);
				if (openRenewal && (renewalID == d.domainID[i])){
					console.info("attempting to fire", d.domainID[i]);
					$('btnRenew' + dVal).fireEvent('click',$('btnRenew' + dVal));
					if (location.request.dnrd || d.regWillNotRenew[i]){ // display the do not renew dialog
						console.info("dnrd:",location.request.dnrd);
						dom.toggle("doNotRenewDialog",true);
					}else{
						dom.toggle("doNotRenewDialog",false);
					}
				}
			}
		}	
		
	}else{	// no cookies for you
		//console.info("agentTempGUID failed: " + t);
		eraseCookie("agentTempGUID");
	}
};


/* agent login
----------------------------------------------------------------*/
agent.agentLogin = function(xhrObj){
	if(!xhrObj){
		if ($("__agentAlias") && $("__agentPassword")) {
			console.info($("__agentAlias").value,$("__agentPassword").value);
			dom.addFormData("__agentLoginForm","func","ali","hidden");
			dom.addFormData("__agentLoginForm","agentAlias",$("__agentAlias").value,"hidden");
			dom.addFormData("__agentLoginForm","agentPassword",$("__agentPassword").value,"hidden");
			var sURL = rootPath + "incs/siteXHR.asp";
			xhr.connect(sURL,"POST",agent.agentLogin,[],"__agentLoginForm");
		}else{			
			agent.statusChange("Please supply an Alias and Password.",null,8000);
		}
	}else{
		var t = xhr.XMLtoObj(xhrObj.getElementsByTagName("root")[0]).tempGUID;

		if (t){
			agent.statusChange("You are now logged in",null,10000);
			eraseCookie("agentTempGUID");
			createCookie("agentTempGUID",t,1);
			agent.loadAgentInfo(t);
		}else{
			agent.statusChange("We couldn't match your login information.  Please check what you entered, or call us if you're stuck.",'error',20000);
		}
	}
	dom.removeObject("__agentLoginForm");
};

agent.handleLoginInterface = function(showStep,enterPass,isValid){
	if (showStep == "start"){
		$("__domainManagementTitle").innerHTML = "Already a customer?";
		dom.toggle("__managementStart",true);
		dom.toggle("__managementAlias",false);
		dom.toggle("__managementPassword",false);
		//dom.toggle("agentDomainManagment",false);

	}else if (showStep == "alias"){
		$("__domainManagementTitle").innerHTML = "Logging In...";
		dom.toggle("__managementStart",false);
		dom.toggle("__managementAlias",true);
		dom.toggle("__managementPassword",false);
		//dom.toggle("agentDomainManagment",false);
		//$("__domainManagementTitle").innerHTML = "Manage Your Account";	
		//$("").innerHTML = "";
	}else if (showStep == "password"){
		var agentAlias = $('forgotPasswordAlias').value;
		if (agentAlias.length < 4){
			alert("Please enter a valid State Farm Alias first");
		}else{
			if (isValid){
				//show password
				$("__domainManagementTitle").innerHTML = "Now For Your Password";
				dom.toggle("__managementStart",false);
				dom.toggle("__managementAlias",false);
				dom.toggle("__managementPassword",true);
				$("__agentAlias").value = agentAlias;	
			}else{
				if (enterPass){
					//$("loginStatusResponse").innerHTML = "<br>One Moment... <img src='" + rootPath + "images/interface/loading_small.gif' border=0/><br>";
					forgotPassword(agentAlias,true)
				}else{
					forgotPassword(agentAlias);
				}
			}
		}
	}else if (showStep == "login"){
		agent.agentLogin();
	}
		
}

agent.emailPassword = function(a,xhrObj){
	//console.info(a);
	//if we're not loaded yet
	if (a && !xhrObj){
		dom.addFormData("__supForm","alias",a,"hidden");
		dom.addFormData("__supForm","func","sup","hidden");		
		var xmlURL = rootPath + "incs/siteXHR.asp"; // base query URL
		xhr.connect(xmlURL,"POST",agent.emailPassword,[null],"__supForm");
	}else if(xhrObj){
		var s = xhr.XMLtoObj(xhrObj.getElementsByTagName("root")[0]).status;
		dom.removeObject("__passwordSentMsg");
		if (s == "success"){
			agent.statusChange("Password Sent - check your mail and when the password arrives use it to finish checking out here.",null,12000);
			//dom.addNode("Password Sent - check your mail and when the password arrives use it to finish checking out here.","passwordMessageTD","div",{id:"__passwordSentMsg"},{color:"green",fontSize:"15px;",textAlign:"center"});
		}else{
			agent.statusChange("Unable to send your password.  Please contact us at 1-877-828-3131.",'error',12000);
			//dom.addNode("Unable to send your password.  Please contact us at 1-877-828-3131.","passwordMessageTD","div",{id:"__passwordSentMsg"},{color:"red",fontSize:"15px;",textAlign:"center"});
		}
	}else{
		agent.statusChange("Please use a valid alias.",'error',12000);
	}
	dom.removeObject("__supForm");
};

agent.videoProducerSearch = function(isLoaded,doReset,statusObject,jsonObj){
	if (!isLoaded && !doReset && !jsonObj){
		var ac = $('searchVideoAgentCode').value;
		var asc = $('searchVideoStateCode').value;
		$('videoResults').innerHTML = "";
		if (ac && asc){
			var statObj = agent.setGenericStatus('Search for video producers in your area...','videoSearch',false,true);
			dom.addFormData("__vpForm","func","svp","hidden");	
			dom.addFormData("__vpForm","asAgentCode",ac,"hidden");
			dom.addFormData("__vpForm","asAgentStateCode",asc,"hidden");
			xhr.json(agent.xhrURL,"POST",agent.videoProducerSearch,[true,false,statObj],"__vpForm");			
		}else{
			alert("Sorry - we need a State & Agent Code to give this a try.");
		}
	}else if(isLoaded && jsonObj){
		dom.removeObject(statusObject);
		if (jsonObj.match){	//we fouind some matches
		
			dom.addNode("Here are some nearby studios:",'videoResults','h3',{},{});
			//console.info()
			dom.addNode($('videoHints').innerHTML,'videoResults','div',{className:'videoHintDialog'},{});
			var vp = jsonObj.vp;
			for (var i = 0; i<vp['distance'].length; i++){
				v = xhr.getDataRow(vp,i);
				var vDiv = dom.addNode('','videoResults','div',{className:'videoSearchResult'},{});
				var distVal = v.distance?(v.distance.toFixed(1)):'N/A'
				dom.addNode(v.vpBusinessName + '&nbsp;&nbsp;<span class="distance">distance: ' + distVal + ' miles</span>',vDiv,'h3',{},{});
				dom.addNode(v.vpAddress1,vDiv,'div',{className:'address'},{});
				dom.addNode(v.vpAddress2,vDiv,'div',{className:'address'},{});
				dom.addNode(v.vpCity + ', ' + v.vpState + '&nbsp;&nbsp;' + v.vpPostalCode,vDiv,'div',{className:'address'},{});
				
				dom.addNode('<b>Contact: </b> ' + v.vpSalutation + ' ' + v.vpFirstName + ' ' + v.vpLastName ,vDiv,'div',{className:'address'},{});
				dom.addNode('<b>Role: </b> ' + v.vpTitle ,vDiv,'div',{className:'address'},{});
				dom.addNode('<b>Phone: </b> ' + formatPhone(v.vpPhone) ,vDiv,'div',{className:'address'},{});
				dom.addNode('<b>E-Mail: </b> ' + v.vpEmail ,vDiv,'div',{className:'address'},{});
				
				console.info(v);
			}
			agent.FX.videosearch.slideOut();			
			agent.FX.videoresults.slideIn();
		}else{
			//no results found
			console.info(jsonObj);
		}
		
	}else if(doReset){
		agent.FX.videosearch.slideIn();
		agent.FX.videoresults.slideOut();
		$('videoResults').innerHTML = "";
	}else{
		//houston, we've gone awry.
		console.info("agent.videoProducerSearch failed");
	}
	dom.removeObject("__vpForm");
};

agent.sendVideoScript = function(isLoaded,statusObj){
	if (!isLoaded){
		var ac = $('sendScriptAgentCode').value;
		var asc = $('sendScriptStateCode').value;
		if (ac && asc){
			//statusObj = agent.setGenericStatus('Sending your script...','videoScript',false,true);
			dom.addFormData("__ssForm","func","svs","hidden");	
			dom.addFormData("__ssForm","asAgentCode",ac,"hidden");
			dom.addFormData("__ssForm","asAgentStateCode",asc,"hidden");
			var ssForm 		= $("__ssForm");
			ssForm.target 	= "__scriptDownload";
			ssForm.method 	= "POST"
			ssForm.action 	= agent.xhrURL
			ssForm.submit();
		}else{
			alert("Sorry - we need a State & Agent Code to give this a try.");
		}
	}else if(isLoaded){
		//dom.removeObject(statusObj);
		//if (jsonObj.status){	//we fouind some matches
		//	dom.addNode("The script is on its way.",'videoScript','div',{},{});
		//}else{
		//	//no results found
		//}
	}else{
		//houston, we've gone awry.
		console.info("agent.videoProducerSearch failed");
	}
	dom.removeObject("__vpForm");
};


agent.setGenericStatus = function(sMsg,sParentObj,isNegative,showProgress,sObject){	
	if ($(sParentObj) || $(sObject)){
		var noteColor = (isNegative)?"#CC0717":"#999";
		var sObj = $(sObject);
		if (!sObj){
			var rndID = '__status_' + xhr.rnd();
			sObj = dom.addNode('',sParentObj,'div',{id:rndID},{});
		}
	
		if (showProgress){
			sMsg = "<img src='" + rootPath + "images/interface/loading_small.gif' border='0'/> " + sMsg;
		}
		var statusFX = new Fx.Styles(sObj,{duration:400, wait:false});
		statusFX.start({	
			opacity:0
		}).chain(function(){// executes immediately after completion of above effect
			if (sMsg){
				sObj.style.color = noteColor;
				sObj.innerHTML = sMsg;
				this.start({opacity:1});
			}		
		});
		return sObj;
	}
};