{ 
		var m_isSecuredSite=0,m_iTimer=0,bSubmit=true,bTest=false;
		var m_sApplicationUrl='GISAPI.Dll?pageid=1030300&objectid=1&classid=1000000';
		var m_sVersionCookieName='version';
		var m_sVersion = '3.6.0';
		var m_sDomainName='',m_sUsrName='',m_sPsw='';
		var m_bIsVersion=false;
		var sSubmitButtSrc,sMouseOverSubmitButtSrc='provider/images/log_clr_bn.gif?v='+m_sVersion;
		var NO_NEED_CHANGE_PSW=0, NEED_CHANGE_PSW=1,NOW_CHANGE_PSW=2;
		var m_iNeedChangePassword = 0,m_bChangePsw=false;
					
		function setCookie(sName, sValue)
		{		
			if (navigator.cookieEnabled)
			{				
				var oTimeNow = new Date();
			    oTimeNow.setYear(oTimeNow.getYear() + 1);
   				var sExpirationDate = oTimeNow.toUTCString();

				var sCockie = sName + "=" + escape(sValue) + ";expires=" + sExpirationDate + ";";				
				document.cookie =  sCockie;
		    }
		}
		
		function getCookie(sName)
		{
			if (navigator.cookieEnabled)
			{			
				var aCookie = document.cookie.split(";");
				for (var i=0; i < aCookie.length; i++)
				{
					var aCrumb = aCookie[i].split("=");
					if (aCrumb[0].indexOf(sName)!=-1)
					{
						return unescape(aCrumb[1]);
					}
				}
				return('');
		    }

		  // a cookie with the requested name does not exist
		  return null;
		}
				
		function retrieveLoginInfo()
		{
			var sCookie=null,oTxtUserName,oTxtPassword,oTxtDomain,sVersion;
			var oVersionSection,bWrite=false;
		 
			sCookie=getCookie('UID');
			oTxtUserName=getDomElement('TXT_UserName');
			oTxtPassword=getDomElement('TXT_Password');
			
			if (sCookie!= null)
			{
			
				if (oTxtUserName.value.length==0)
				{
				   if (sCookie.length>0)
				   {
					  oTxtUserName.value = sCookie;				
					  oTxtPassword.focus();
					}
					else
						oTxtUserName.focus();
						
					oTxtPassword.select();
					bWrite=true;
				}				
			}	
			else
				oTxtUserName.focus();
			
			sVersion=getCookie(m_sVersionCookieName);			
			if (sVersion!=m_sVersion)	
			{
				oVersionSection=getDomElement('VersionSection');
				oVersionSection.className="Shown";
				m_bIsVersion=true;
			}
			else
			{
				m_bIsVersion=false;
			}	
				
			if (bWrite)
			{
				oTxtDomain=getDomElement('TXT_Domain');
				oTxtDomain.value=getCookie('Domain');
			}
			
			/*debugger;
			changeUI();
			*/
		}	
		
	function submitLoginForm() 
	{
	  var oUserName,oPassword,oDomain;
	  var sDomainError="",sPswError="",sUsrError="";
	  sDomainError="";
	  sPswError="";
	  sUsrError="";
	  SetError(' ');
		
		
			if (bSubmit)
			{		

				bSubmit=false;	
				if (true==m_bChangePsw)	
				{
					sPswError="Please enter your new password.";
					sDomainError="Please confirm your portfolio.";
				}
				else
				{
					sUsrError="Please enter your user name.";
					sPswError="Please enter your password.";
					sDomainError="Please enter your portfolio.";
				}
				
				oUserName = getDomElement('TXT_UserName');
				oPassword = getDomElement('TXT_Password');	
				oDomain=getDomElement('TXT_Domain');
				
				if (isEmpty(oUserName.value))
				{
					
					oUserName.focus();
					SetError(sUsrError);
					bSubmit=true;
				    return;
				}
		
				if (isEmpty(oPassword.value))
				{
					oPassword.focus();
					SetError(sPswError);
					bSubmit=true;
				    return;
				}
				
				if (isEmpty(oDomain.value))
				{
					oDomain.focus();
					SetError(sDomainError);
					bSubmit=true;
				    return;
				}
				
				if (true==m_bChangePsw)	
				{
					if (oPassword.value!=oUserName.value)
					{
						if (oPassword.value==oDomain.value)
						{
							Login(m_sUsrName, m_sPsw,m_sDomainName,true,oPassword.value);
						}
						else
						{
						 SetError("Password and Confirm are not the same.");					 
						 bSubmit=true;
					     return;
						}
					}
					else
					{
					 SetError("Password and User Name can not be the same.");					 
					 bSubmit=true;
				     return;
					}
				}
				else
					Login(oUserName.value, oPassword.value,oDomain.value,false);
			}
		
	}
	
	////////////////////////////////////////////////////////////////////////////
	//function loginResponse is activated by Broker(applet) when it get response
	//of async submit of login
	//////////////////////////////////////////////////////////////////////////////
	function loginResponse(Response)
	{
	  
	  var Arguments;
  	  var ErrorDescription,sResolution;	  
							
	    Arguments = Response.getArguments();    		
		
	    if (!(Arguments == null))
	    {           			
	        if (Response.getResult())
	        {            		
	            //gets value
				try
				{            
					  m_isSecuredSite = Arguments.getNamedItem('SECURED_SITE');			
					  m_iNeedChangePassword = Arguments.getNamedItem('NEED_CHANGE_PASSWORD');							  
				}
				catch(e)
				{
				     //alert('exception')
			 		m_isSecuredSite		  = 0;
			 		m_iNeedChangePassword = 0;
				}
								
				switch(parseInt(m_iNeedChangePassword))
				{
					case NO_NEED_CHANGE_PSW:
					{
						var lKilledPreviousSessions = Arguments.getNamedItem('KILLED_PREVIOUS_SESSIONS');

						if (lKilledPreviousSessions == 1)
						{
							alert("A user with the same login details is already logged in into the application, this user will be disconnected.\nPlease note that you may also see this message if you had improperly logged out of the application during your last session.");
						}

						ActvitiesAfterLogin(false);
						break;
					}
					case NEED_CHANGE_PSW:
					{					
						m_sApplicationUrl = 'GISAPI.Dll?pageid=172030100&objectid=-1&classid=172000000';
						ActvitiesAfterLogin(false);
						break;
					}
					case NOW_CHANGE_PSW:
					{					
						changeUI();
						SetError("You are required to change your password at first logon");
						m_bChangePsw=true;				
						bSubmit=true;													
						break;
					}
				}				
			}
	        else
	        {           
				ErrorDescription = Arguments.getNamedItem('ERROR_DESCRIPTION');		   			
				if ((null == ErrorDescription) || ('undefined' == ErrorDescription)) ErrorDescription = "Unknown Login Error";
				SetError(ErrorDescription);		    		    
				backToBegining();
	        }			
	    }
	    else
	    {
			backToBegining();
			SetError("Unknown Login Error");
	    }    
	}
	
	function changePswResponse(Response)
	{	  
	  var Arguments;
  	  var ErrorDescription,sResolution;	  
		
	    Arguments = Response.getArguments();
		m_isSecuredSite = Arguments.getNamedItem('SECURED_SITE');    
	    if (!(Arguments.isEmpty()))
	    {           
	        if (Response.getResult())
	        {         
				m_iNeedChangePassword=0;
				SetError("Your password has been changed.");
				ActvitiesAfterLogin(true);				
			 }
	        else
	        {           
				ErrorDescription = Arguments.getNamedItem('ERROR_DESCRIPTION');		   			
				SetError(ErrorDescription);		    		    
				backToBegining();
	        }			
	    }
	    else
	    {
			backToBegining();
			SetError("Unknown Change Password Error");
	    }    
	}
	//////////////////////////////////////////////////////////
	//sets all flags and controls to their initialised state
	////////////////////////////////////////////////////////
	function backToBegining()
	{
		document.body.style.cursor="default";
		disableSubmitButton(false);
		bSubmit=true;
	}
	//////////////////////////////////////////////////////////
	//checks if there are:
	//1. link parameter in the url
	//2. need to change password
	//if one of them then redirect to instance container page
	/////////////////////////////////////////////////////////
	function redirectUrl()
	{
		var sNewUrl,loc,lLinkId,sHref;
		//looking for linkid i.e. url opened from email
		sHref = window.location.href;
		loc = sHref.search("link=");

		if (loc != -1)
		{
			lLinkId =  sHref.substr(loc + 5,7);
			m_sApplicationUrl = 'GISAPI.Dll?pageid=172030100&objectid='+ lLinkId + '&classid=172000000';
		}
		/*
		else if (m_iNeedChangePassword ==1)
		{
			m_sApplicationUrl = 'GISAPI.Dll?pageid=172030100&objectid=-1&classid=172000000';
		}
		*/
		window.location.href=SetUrl(m_sApplicationUrl);					
	}
	
	function checkAccelerator()
	{
		var oFrame = getDomElement('AcceleratorFrame');
		if (oFrame ==null || oFrame.readyState != 'complete')
		{
			window.setTimeout('checkAccelerator();',1000);
		}
		else
		{
			finishAccelerator();
		}
	}
	function finishAccelerator()
	{
		setCookie(m_sVersionCookieName, m_sVersion);
		redirectUrl();
	}
	
	function ActvitiesAfterLogin(bChangePsw)
	{
		var oUserName,oPassword,oDomain;
		var oAccelerator,sUrl,oVersionChkBx;
	
		oUserName = getDomElement('TXT_UserName');
	    oPassword = getDomElement('TXT_Password');			
	    oDomain=getDomElement('TXT_Domain');
		
		setCookie('UID', oUserName.value);
		if (true==bChangePsw)
		{
			
			setCookie('Domain', m_sDomainName);
		}
		else
			setCookie('Domain', oDomain.value);
			
		document.body.style.cursor="default";
		
		if (m_bIsVersion==true)
		{			
			oVersionChkBx=getDomElement('VersionChkBx');
			if (oVersionChkBx.checked)
			{
				var oAcceleratorPage = document.getElementsByName('AcceleratorPage')[0];
	   			oAcceleratorPage.className = "Shown";				
				oAccelerator = document.getElementsByName('AcceleratorSection')[0];
				sUrl =SetUrl('GISAPI.Dll?PageId=169030100&ObjectId=-1&ClassId=169000000');
				oAccelerator.insertAdjacentHTML('afterbegin','<IFRAME SRC="' + sUrl + '" + ID="AcceleratorFrame" NAME="AcceleratorFrame" width="100%" height="100%" framespacing="0" border="0" scrolling="no" frameborder="0"></IFRAME>');
				checkAccelerator();
			}			
			else
			{
				setCookie(m_sVersionCookieName, m_sVersion);
				redirectUrl();				
			}
		}
		else
		  redirectUrl();	
	}
	
	function changeUI()
	{
	 var oUserName,oDomainLbl,oPswLbl;
	 var oPassword,oDomain,oVersionSection,sStr,oDomainTd;
		sStr='&nbsp;&nbsp;<input TYPE="password" SIZE="10" id="TXT_Domain" name="TXT_Domain" onkeypress="CatchKey()"  tabindex="2" >'
		
		oUserName = getDomElement('TXT_UserName');		
		oPassword = getDomElement('TXT_Password');			
	    oDomain=getDomElement('TXT_Domain');
		oVersionSection=getDomElement('VersionSection');
		oDomainTd=getDomElement('domainTd');
		
		oUserName.className='ReadOnlyField';		
		oUserName.disabled=true;		
		oPswLbl=getDomElement('pswLbl');
		oDomainLbl=getDomElement('domainLbl');		
		
		oPswLbl.innerText='New Password';		
		oDomainLbl.innerText='Confirm Password';						    		
		oVersionSection.className="Hidden";
		m_bIsVersion=false;		
		m_sDomainName=oDomain.value;

		oDomainTd.removeChild(oDomain);
		oDomainTd.insertAdjacentHTML("afterBegin",sStr);
		m_sUsrName=oUserName.value;
		m_sPsw=oPassword.value;
		oPassword.value='';

	}
	
	
	function SetUrl(sApplicationUrl)
	{  
	  var sUrl			  = new String(window.location.href)  
	  var arUrl			  = sUrl.split('/');
	  var sNewUrl		  = new String();	  	  	  
	  var pointPos		  = sUrl.lastIndexOf('.htm')
	  var lastPos         = sUrl.lastIndexOf('/');
	  var questionMarkPos = sUrl.indexOf("?");//assumed that in url itself there is no "?"
	  var arUrl;
	  
	  
		  if (questionMarkPos != -1)
		  {
			sUrl = sUrl.slice(0,questionMarkPos);
		  }		
		  
	      if (pointPos!=-1) // filename the at the end (http://devweb/login.htm)
	      {
		
	         var sTempUrl=new String(sUrl.substring(0,lastPos));
	         sTempUrl+='/'+sApplicationUrl;       
	      }
	      else if (lastPos==(sUrl.length-1)) // slash the last character (http://devweb/)
	      {
			sTempUrl=sUrl;
	        sTempUrl+=sApplicationUrl;
	      }
	      else // (http://devweb)
			{
	  			sTempUrl=sUrl;
			    sTempUrl+='/'+sApplicationUrl;	
			}

	        arUrl=sTempUrl.split('/');
		for(var i=0;i<arUrl.length;i++)
		{
		  if (i==0)
		  {
		       if (m_isSecuredSite==1)
				   sNewUrl='https:'
			    else
				   sNewUrl='http:'
		  }
		  else
		  {		
				sNewUrl+=arUrl[i];
		  }
		  
		  if (i!=(arUrl.length-1))
		      sNewUrl+='/';
		}
		
		return(sNewUrl);
	}

	function Login(UserName,Password,Domain,bChangePsw,sNewPsw)
	{
	  var LoginManager,Response;
	  var ErrorDescription,sResolution;

	    LoginManager = document.Broker.getLoginManager(); 		
	    sResolution=GetUserResolution();	    
		//this function does async submit 

		if (false==bChangePsw)
		{
			LoginManager.Login(UserName,Password,sResolution,Domain,"loginResponse"); 	    
		}
		else
		{
			LoginManager.ChangePassword(UserName,Password,sNewPsw,sResolution,Domain,"changePswResponse");
		}
			
		putProcessingMsg();
	}

	function CatchKey()
	{	
		if(event.keyCode == '13')
		{
			event.keyCode = '0';	
			submitLoginForm();			
		}
	}
		
		

	function SetError(Text)
	{					
		var olbError = getDomElement('lblError');
		olbError.innerText = Text;
	}

	function changeImg(bFlag)
	{
	  var oImgButt=getDomElement('SubmitButt');
		if (bFlag)
		{
			//change src to new one
			sSubmitButtSrc=new String(oImgButt.src);		
			oImgButt.src=sMouseOverSubmitButtSrc;
		}
		else
		{
			//change src to original
			oImgButt.src=sSubmitButtSrc;
		}
			
	}
	function openLoginWindow(MyPage,MyWidth,MyHeight,bResizeable,bscrollbars,IsSunWindow,WindowName)
	{			
		if(MyWidth == null)
			MyWidth = screen.availWidth - 100;
		if(MyHeight == null)
			MyHeight = screen.availHeight - 100;	
		if(bResizeable == null)
			bResizeable = 'no';
		if(bscrollbars == null)
			bscrollbars = 'no';
		if(IsSunWindow == null)
			IsSunWindow = 'false';
		if(WindowName == null)
			WindowName = null;
		
		var Features = 'Fullscreen=no';
			Features += ',width='  + MyWidth;
			Features += ',height=' + MyHeight;
			Features += ',top=' + (screen.availHeight-MyHeight)/2;
			Features += ',left=' +  (screen.availWidth-MyWidth)/2;
			Features += ',scrollbars=' + bscrollbars;
			Features += ',center=no';
			Features += ',resizable=' + bResizeable; 
			Features += ',status=no';
			Features += ',history=no';
			Features += ',toolbar=no';
			Features += ',menubar=no';
			Features += ',location=no';
			
			window.open(MyPage,WindowName,Features);
	}
	
	function isBrokerReady()
	{
	 var bResult=true;
	 
		if (!(document.Broker.readyState=='complete' || document.Broker.readyState==4)) 
		{
			SetError("The Login page has not finished loading. Please try again later.");
			bSubmit=true;
			bResult=false;
		}
		else
			bResult=true;
			
		return(bResult);		
	}
	//////////////////// get an element in the document (DOM 1 standard) ///////////////////////////
	function getDomElement(ID)
	{
		var oElements = document.getElementsByName(ID)
		if (oElements.length == 0)
		{
			return (null);
		}
		var oElement = oElements[0]
		if (oElement == null)
		{
			return (null);
		}	
		else
		{
			return(oElement);
		}
	}
	////////////////////////////////////////////////////////////////////////////////
	// function isEmpty(s)														  //
	//																			  //
	//	checks if string is empty	or not					 					  //
	////////////////////////////////////////////////////////////////////////////////

	function isEmpty(s)
	{
	 var bResult=0,regExp,index=0;;
		 regExp=/\s+/;                            
		 if ((s == null) || (s.length == 0))
			   bResult=1;
		 else {
		     for(var i=0 ; i<parseInt(s.length);i++){
		        if (regExp.test(s.charAt(i)))
		           index++;
			}
			if (index==parseInt(s.length))
			    bResult=1;
		 }  	 

		return(bResult);
	}
	function disableSubmitButton(bDisable)
	{
	  if (bDisable)
		getDomElement('SubmitButt').disable=true;
	  else
		getDomElement('SubmitButt').disable=false;
	}
	
	function GetUserResolution()
	{
		var siLargeSizeHighResEn = '0' // Width > 800, Colors > 256
		var siLargeSizeLowResEn = '1'  // Width > 800, Colors <= 256
		var siSmallSizeHighResEn = '2' // Width <= 800, Colors > 256
		var siSmallSizeLowResEn = '3'  // Width <= 800, Colors <= 256		
		var scrh = screen.Height;
		var scrw = screen.Width;
		var scrClrdpth = screen.colorDepth;
		var sResultResolution;


		if (scrClrdpth>8)
		{
			if (scrw > "800" ) 
				sResultResolution=siLargeSizeHighResEn;
			else
				sResultResolution=siSmallSizeHighResEn;
		}
		else
		{
			if (scrw > "800" )
				sResultResolution=siLargeSizeLowResEn;
			else
				sResultResolution=siSmallSizeLowResEn;
		}						
			
		return(sResultResolution);
	}
	
	function putProcessingMsg()
	{
		SetError("Processing login... .");
	}
}  