// *D* differ from Common.inc
var GblPutAttach="",GblDynamicIndx="",GblSelectFolder="0";
var dayMSs,HourMSs;
dayMSs=1000*60*60*24;
HourMSs=1000*60*60;
var LayerFlg=1;
var tempdID,tempdVersion,tempFId,tempA,tempCID,tempPID,tempSID,tempEID,lGetCommonQstr,tempPFlag,PutAttach,tempstrEventName,tempElemName,TitleName,tempSF,tempDF;
var lCorpID="",lProjID="",lStructID="",lElemID, lFUID, lFolderID,lSessionID,lEmailID,lUserID,lEditRView,lDateFormat,LabelName,SysTray=0 ;
var lCAppID="";
var lStructApps,strEventName;
var lFName,lLName,lCurrDate,lUserName;
var GlbMasterTName;  
var GlbGroupXMLDoc; 
var GblSolo = 0,GblOnLoadOver=false,CTAfterLoad=false,Glb_GroupCount = 0,Glb_GroupLoadCount = 0;
var MonthName=new Array();
var gMenuTmr=null;
MonthName[0]="January";MonthName[1]="February";MonthName[2]="March";MonthName[3]="April";MonthName[4]="May";MonthName[5]="June";
MonthName[6]="July";MonthName[7]="August";MonthName[8]="September";MonthName[9]="October";MonthName[10]="November";MonthName[11]="December";
var WeekDay=new Array();WeekDay[0]="Sunday";WeekDay[1]="Monday";WeekDay[2]="Tuesday";WeekDay[3]="Wednesday";WeekDay[4]="Thrusday";WeekDay[5]="Friday";WeekDay[6]="Saturday";
var xsl_import,xsl_Include,xsl_stylesheet; // These are for Opera 
var iBrowser;// this variable is used for checking the browser
function OrchGeneric(){
    //Common for ServerSide & JS Starts
	this.BitAnd=I_BitAnd;
	this.GetLocalDate=I_GetLocalDate;
	this.GetLocalTime=I_GetLocalTime;
	this.GetDate=I_GetDate;
	this.GetDisplayName=I_GetDisplayName;
	this.GetDisplayNameEmailID=I_GetDisplayNameEmailID;
	this.GetToday=I_GetToday;
	this.CurrLocalST=I_CurrLocalST;
	this.GetPrefNow=I_GetPrefNow; 
	this.GetLocalST=I_GetLocalST; 
	this.GetCurrLocalTime=I_GetCurrLocalTime; 
	this.PutDomainSelBox=I_PutDomainSelBox;
	this.PutElemLinkedDomainSelBox=I_PutElemLinkedDomainSelBox;
	this.GetLinkedDomainXML=I_GetLinkedDomainXML;
	this.DateDiff=I_DateDiff;
	this.DateAdd=I_DateAdd;
	this.GetGMTDate=I_GetGMTDate;
	this.GetGMTTime=I_GetGMTTime;	
	this.GetElemPermXML=I_GetElemPermXML;
	this.TranformSP=I_TranformSP;
	this.TranformSS=I_TranformSS;
	this.TranformPP=I_TranformPP;
	this.TranformPS=I_TranformPS;
	this.TranformSPL=I_TranformSPL; 
	/*spelling mistake in previous function*/
	this.TransformSP=I_TranformSP;
	this.TransformSS=I_TranformSS;
	this.TransformPP=I_TranformPP;
	this.TransformPS=I_TranformPS;
	this.TransformSPL=I_TranformSPL; 
	this.TransformFillSpan=I_TransformFillSpan;
	this.AttachEvnt=I_AttachEvnt;
		
	this.CHECK_XML=I_CHECK_XML;
	this.GetXMLObj=I_GetXMLObj;
	this.GetXMLObj_Load=I_GetXMLObj_Load;
	this.HttpUrlGET=I_HttpUrlGET;
	this.HttpUrlPOST=I_HttpUrlPOST;
	this.TransOnDemand=I_TransOnDemand;
	this.GetFriendlySize=I_GetFriendlySize;
	this.URLEncode=I_URLEncode;
	this.GetObjSize=I_GetObjSize;	
	//NS functions only for Browser Trans
	this.PutDomainAutoResolve=I_PutDomainAutoResolve;
	this.PutUserAutoResolve=I_PutUserAutoResolve;
	this.PutDocAttachment=I_PutDocAttachment;
	this.PutDatePickerEx=I_PutDatePickerEx;
	this.Get_TemplateData=I_Get_TemplateData;
	this.SetTemplateData=I_SetDynTemplateData;
	this.Get_TemplateDataTD=I_Get_TemplateDataTD;
	this.ShowInIframe=I_ShowInIframe;
	this.RemoveAllTr=I_RemoveAllTr;
	this.Alert=I_Alert;
	this.GetCurrencyFormat = I_GetCurrencyFormat;
	
    //Class Functions Starts 
	this.SubStrCount=I_SubStrCount;
	this.FillFromSource=I_FillFromSource;
	this.FillFromXML=I_FillFromXML;
	this.SelectDefault=I_SelectDefault;
	this.HttpUrlGETAsync=I_HttpUrlGETAsync; //*
	this.HttpUrlPOSTAsync=I_HttpUrlPOSTAsync; //*
	this.GetProcessor=I_GetProcessor; //*
	this.GetDomDocument=I_GetDomDocument; //*
	this.SplitName=I_SplitName;
	
	this.PutSingleResolve=I_PutSingleResolve; //*
	this.PutCompanyResolve=I_PutCompanyResolve;
	this.MultiStr=I_MultiStr;
	this.CheckEmailID=I_CheckEmailID;
	this.DispEmailID=I_DispEmailID;
	this.DocIcon=I_DocIcon;
	this.GetDocIndent=I_GetDocIndent;
	this.setApp=I_setApp;
	this.getApp=I_getApp;
	this.IfEqualThen=I_IfEqualThen;
	this.FillToCc=I_FillToCc;
	
	this.GetCookie=I_GetCookie;
	this.SetCookie=I_SetCookie;
	this.GetNodes=I_GetNodes;
	this.PutLabel=I_PutLabel;
	this.GetExt=I_GetExt;
	this.GetElemPerm=I_GetElemPerm;
	this.GetClientSettings=I_GetClientSettings;
	this.Escape=I_Escape;
	this.ValURL=I_ValURL;
	this.GetText=I_GetText;
	this.ContextName=I_ContextName;
	this.TrimT=I_TrimT;
	this.Escape=escape;
	this.Resolve=II_Resolve;
	this.BuildOptions=I_BuildOptions;
	this.RoundOff=I_RoundOff;
	this.CnxtCluster=I_CnxtCluster;
}

if (navigator.userAgent.indexOf("MSIE")>-1)
	iBrowser=1;
else if(navigator.userAgent.indexOf("Opera")>-1)
	iBrowser=2;
else if(navigator.userAgent.indexOf("Firefox")>-1)
	iBrowser=3;
else 
	iBrowser=4;


function I_GetDate(dt)
{
	var retdt="";
	dt = Trim(dt);
	if( dt.length > 0 ){ 
		Arr1= dt.split("-");
		jsdt=Arr1[1]+"/"+Arr1[2]+"/"+Arr1[0] ;
		jsdt=new Date(jsdt) ;
		retdt=I_DisplayDate(jsdt);
	}
	return(retdt);
}

function I_SplitName(strName,charCount)
{
	var strRetVal = "";
	for( var i=0; i<strName.length; i++)
	{
		strRetVal = strRetVal + strName.charAt(i);
		if( i > 0 )
		{
			if( i % charCount == 0 ) strRetVal = strRetVal + "<BR>";
		}
	}
	return strRetVal;
}
function I_ShowInIframe(StrHtml,H,W,BodyStyle){  
	var IframeID="IFrame"+GetRandom() + GetRandom() + GetRandom();
	var rtn="<iframe src='../blank.htm' id='" + IframeID + "' scrolling='no' width='"+W+"' height='"+H+"' frameBorder='0' style='scroll:hidden'></iframe>";
	setTimeout("I_SetIFrameBody('" + IframeID +"','" + escape(StrHtml) +"','"+ BodyStyle +"')",300);
	return rtn;
}

function I_SetIFrameBody(IframeID,StrHtml,BodyStyle){
	IframeObj=document.frames[IframeID]; 	
	IframeObj.document.write("<body topMargin='0' leftMargin='0' style='"+ BodyStyle +"' >"+ unescape(StrHtml) +"</body>"); 
}

function I_Alert(s){alert(s);return "";}
/************ NOTE ******************/
/*************************************************************/
/*************************************************************/
/*****Starts--- (Following functions are included in common.inc also. There it will be server side JS)***/
var I_XMLSize=0,I_XSLSize=0;

function I_GetObjSize(x){
	if(x==1) return I_XMLSize;
	if(x==2) return I_XSLSize;
}

function I_URLEncode(url){
        return encodeURIComponent(url);
}
function I_GetFriendlySize(longVal){
	if(!longVal)longVal=0;
    var retVal;
	var AddStr;
	if (longVal >= 1073741824){
		retVal = longVal/1073741824;
		AddStr =  " GB";
	}	
	else
	if (longVal >= 1048576){
		retVal = longVal/1048576;
		AddStr =  " MB";
	}
	else
	if(longVal >=1024)
	{
		retVal = longVal/1024;
		AddStr =  " KB";
	}
	else
	{	
		retVal = longVal;
		AddStr =  " bytes";
	}
	retVal = Math.round(retVal * 100) /100 ;
	return retVal + AddStr;
}

function I_BitAnd(num1,num2){
	return num1 & num2;
}

//this function accepts xml as DOMDocument as well as string.LangVariables will be updated to xsl.
function I_TranformSPL(xmlstr,xslpath,langpath){ 
	if(typeof(xmlstr)=='object')
		return I_Tranform(xmlstr,I_GetXSLObjPL(xslpath,langpath),xslpath);
	else
		return I_Tranform(I_GetXMLObj(xmlstr,0),I_GetXSLObjPL(xslpath,langpath),xslpath);
}
 
//this function accepts xml as DOMDocument as well as string
function I_TranformSP(xmlstr,xslpath){
	if(typeof(xmlstr)=='object')
		return I_Tranform(xmlstr,I_GetXSLObjP(xslpath),xslpath);
	else
		return I_Tranform(I_GetXMLObj(xmlstr,0),I_GetXSLObjP(xslpath),xslpath);
}

//this function accepts xml as DOMDocument as well as string
function I_TranformSS(xmlstr,xslstr){ 
	if( typeof(xmlstr)=='object' && typeof(xslstr)=='object')
	    return I_TransformProcessor(xmlstr,xslstr);
    else if(typeof(xmlstr)=='object')
        return I_Tranform(xmlstr,I_GetXMLObj(xslstr,1));
	else
		if(typeof(xslstr)=='object')
			return I_TransformProcessor(I_GetXMLObj(xmlstr,0),xslstr);
	else
		return I_Tranform(I_GetXMLObj(xmlstr,0),I_GetXMLObj(xslstr,1));
}

function I_TranformPP(xmlpath,xslpath,MstrFlg){   
    return I_Tranform(I_GetXMLObjP(xmlpath),I_GetXSLObjP(xslpath),xslpath);
}

function I_TranformPS(xmlpath,xslstr){
	return I_Tranform(I_GetXMLObjP(xmlpath),I_GetXMLObj(xslstr,1));
}

function I_GetXSLObjPL(xslpath,lngpath){
	var xslObj=I_GetXSLObjP(xslpath,1);
	//if lang path sepcified then.load langxsl and append xsl:variable[@LANG
	if(lngpath!=""){
		var LabelXml=I_GetXMLObj_Load(lngpath,0);
		I_CHECK_XML(LabelXml);
		pLabelElement = LabelXml.documentElement;
		xslObj.setProperty("SelectionNamespaces",    "xmlns:xsl='http://www.w3.org/1999/XSL/Transform'");
		xslObj.setProperty("SelectionLanguage", "XPath");
		if(xslObj.documentElement.selectNodes("//xsl:variable[@name='LANG']").length>0)
			xslObj.documentElement.selectNodes("//xsl:variable[@name='LANG']").item(0).text = pLabelElement.xml;
		else
			return "Variable LANG is not Defined in the XSL";
	}
	return xslObj;
} 
function I_GetXMLObjP(xmlpath){  
	if(LayerFlg==1)
		return I_GetXMLObj(I_HttpUrlGET(xmlpath),0);	
	else
		return I_GetXMLObj_Load(xmlpath,0);	
}
 
function I_GetXSLObjP(xslpath){  
	if(LayerFlg==1)
		return I_GetXMLObj(I_HttpUrlGET(xslpath),1);
	else
		return I_GetXMLObj_Load(xslpath,1);
}
 
function I_HttpUrlGET(url){ 
	var xmlhttp = I_GetMSXMLObj("MSXML2.XMLHTTP.4.0");
	xmlhttp.open("GET",url, false);
	xmlhttp.send(null);
	return (xmlhttp.responseText);
}

function I_HttpUrlPOST(url,data){
	var xmlhttp = I_GetMSXMLObj("MSXML2.XMLHTTP.4.0");
	xmlhttp.open("POST",url, false);
	xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xmlhttp.send(data);
	return (xmlhttp.responseText);
}

function I_GetProcessor(xslpath,ParamArray){ 
	var CurrProcessor;
	if(iBrowser==1){ // Code for IE
		if(typeof(xslpath)=='object')
			CurrProcessor=I_GetXSLProcessor(xslpath,xslpath);
		else
			CurrProcessor=I_GetXSLProcessor(I_GetXSLObjP(xslpath,1),xslpath);  
		if(ParamArray){
			for (var key in ParamArray)
				CurrProcessor.addParameter(key, ParamArray[key]);  
		}
		return CurrProcessor;
	}
	else{ // Code for other browsers 
		var xslDoc;
		CurrProcessor	=	new  XSLTProcessor();
		if(typeof(xslpath)!='object'){
			try{
			xslDoc=	I_GetXsl(I_GetXMLObj(I_HttpUrlGET(xslpath),0),xslpath);
			CurrProcessor.importStylesheet(xslDoc);
			}catch(e){alert(e)}
		}
		else
			CurrProcessor.importStylesheet(xslpath);
		if(ParamArray){
			for (var key in ParamArray)
				CurrProcessor.setParameter("",key, ParamArray[key]);  
		}
		return CurrProcessor;
	}
}
 
function I_GetXSLProcessor(xslobj,xslpath){
    if(!xslpath)
		xslpath=0;
	//check for all imports and update the xsl object
	if(xslpath!=0 &&  LayerFlg==1)
		I_GetXsl(xslobj,xslpath);
	 
	//Download and load the CommonTemplates XSL template
	if(LayerFlg==1){
	    var ClGenericXSL;
		ClGenericXSL = I_GetXSLObjP("../js/OrchGenericFunctions.xsl");
		// Transfer the CommonTemplate XSL Nodes to Main XSL
		I_InsertTemplates(xslobj,ClGenericXSL);
	}
	else{
		var xslDoc = xslobj.documentElement;
	    var newNode = xslobj.createNode(1,"xsl:import","http://www.w3.org/1999/XSL/Transform") ;
	    newNode.setAttribute ("href",server.mappath("../JS/OrchGenericFunctions.xsl") );
	    FirstChild=xslobj.documentElement.childNodes(0);
	    xslDoc.insertBefore(newNode, FirstChild);
	}
	var xslTemplate=I_GetMSXMLObj("Msxml2.XSLTemplate.4.0");
    
	xslTemplate.stylesheet=xslobj; 
 
	var GenxslProcessor=xslTemplate.createProcessor;
	GenxslProcessor.addObject(OrchGenericObj, "urn:PointCross-GenericFunctions" );
	 
	XSLSize=xslobj.xml;
	XSLSize=XSLSize.length; 
	XSLSize=Math.round(XSLSize/1024);
	 
	return GenxslProcessor;
}

//input is xmlobject and xslt processor
function I_TransformProcessor(xmlObj,xsltProc){
	XMLSize=getXmlStr(xmlObj);
	XMLSize=XMLSize.length;
	XMLSize=Math.round(XMLSize/1024);
	
	if(iBrowser==1){
		xsltProc.input=xmlObj;  
		xsltProc.transform();
		return xsltProc.output ;
	}
	else{
		return getXmlStr(xsltProc.transformToDocument(xmlObj));
	}
}
 
function I_Tranform(xmlobj,xslobj,xslpath){   
	if(!xslpath)
		xslpath=0;
	var xslProcessor = I_GetXSLProcessor(xslobj,xslpath); 
	xslProcessor.input=xmlobj;  
	//assigning xsltprocessor and xmlobj to a variable which can be used for further transformations
 
	xslProcessor.transform();

	XMLSize=xmlobj.xml;
	XMLSize=XMLSize.length;
	XMLSize=Math.round(XMLSize/1024);
	 
	XSLSize=xslobj.xml;
	XSLSize=XSLSize.length; 
	XSLSize=Math.round(XSLSize/1024);
 
 	return xslProcessor.output ;
}

//this function is used for getting an insatnce of any object.
var msxmlVers=new Array("6.0","3.0","");
msxmlVers.Ver=""; 
function I_GetMSXMLObj(ClassV){
	var ClassNoV=ClassV,RtnObj=null;
	if (iBrowser!=1 && ClassV.indexOf("XMLHTTP")>-1)
		return CreateXHRObj();
	else
	{	
		if(ClassV.indexOf(".4.0")>-1) //now all request are for version 4.0
			ClassNoV=ClassV.substring(0,ClassV.length-4); 
	    if(msxmlVers.Ver==""){ 
	        for(var v=0;v<msxmlVers.length;v++){
	            try{
	                RtnObj=new ActiveXObject(ClassNoV+"."+msxmlVers[v]);
	                msxmlVers.Ver=msxmlVers[v];
	                break;
	            }catch(e){};
	        } 
	    }else
			RtnObj=new ActiveXObject(ClassNoV+"."+ msxmlVers.Ver); 
	    return RtnObj;
	}
}

function I_GetDomDocument(XSLFlag){  
    var ClientXML;
	if (XSLFlag != 1)
		ClientXML  = I_GetMSXMLObj("MSXML2.DOMDocument.4.0");
	else{
		ClientXML  = I_GetMSXMLObj("MSXML2.FreeThreadedDOMDocument.4.0"); 
		ClientXML.resolveExternals = true; 
if(msxmlVers.Ver=='6.0')  
        ClientXML.setProperty("AllowXsltScript", true);
   }
	return ClientXML;
}
  
  
function I_GetXMLObj(xmlstr,XSLFlag){   
    var ClientXML;
	try{
		if (XSLFlag != 1)
			ClientXML  = I_GetMSXMLObj("MSXML2.DOMDocument.4.0");
		else{
			ClientXML  = I_GetMSXMLObj("MSXML2.FreeThreadedDOMDocument.4.0"); 
			ClientXML.resolveExternals = true;   
			if(msxmlVers.Ver=='6.0')
		        ClientXML.setProperty("AllowXsltScript", true);
	    }		 
		ClientXML.async = false;
		ClientXML.validateOnParse = false;	
		ClientXML.loadXML(xmlstr);
		ClientXML.setProperty("SelectionLanguage", "XPath"); 
		}
		catch(e)
		{
			ClientXML=CreateDomObj(xmlstr,"false");
			ClientXML.validateOnParse = false;	
		}
	return I_CHECK_XML(ClientXML);
  }
   
    
function I_GetXMLObj_Load(xmlPath,XSLFlag){  
	var ClientXML;
	if(iBrowser==1){
		if (XSLFlag != 1) 
			ClientXML  = I_GetMSXMLObj("MSXML2.DOMDocument.4.0");	 
		else{
			ClientXML  = I_GetMSXMLObj("MSXML2.FreeThreadedDOMDocument.4.0"); 
			ClientXML.resolveExternals = true;   
		if(msxmlVers.Ver=='6.0')
			ClientXML.setProperty("AllowXsltScript", true);
		}	
		ClientXML.async = false;
		ClientXML.validateOnParse = false;	
		ClientXML.load(xmlPath);
		ClientXML.setProperty("SelectionLanguage", "XPath"); 
	}
	else{
		ClientXML=CreateDomObj("");
		ClientXML.async = false;
		ClientXML.validateOnParse = false;	
		ClientXML.load(xmlPath);
	}
	I_CHECK_XML(ClientXML);
	return ClientXML;
}

function I_CHECK_XML(XMLObj){
	if(!XMLObj.documentElement) 
		return XMLObj.parseError.reason;  
	else 
		return XMLObj;
}
if (iBrowser==2 )
{	
	xsl_import	="import";
	xsl_include	="include";
	xsl_stylesheet	="stylesheet";
}
else
{
	xsl_import	="xsl:import";
	xsl_include	="xsl:include";
	xsl_stylesheet	="xsl:stylesheet";
}

function I_GetXsl(parent,XslPath){
    var x;
	while (parent.getElementsByTagName(xsl_import).length > 0){
		x = parent.getElementsByTagName(xsl_import)[0].attributes[0].nodeValue;  
		I_AppendXsl(parent,I_GetXSLObjP(I_GetRelPath(XslPath,x)),xsl_import);
	}
	while (parent.getElementsByTagName(xsl_include).length > 0){
		x = parent.getElementsByTagName(xsl_include)[0].attributes[0].nodeValue;  
		I_AppendXsl(parent,I_GetXSLObjP(I_GetRelPath(XslPath,x)),xsl_include);
	}

	return parent;
}

function I_AppendXsl(parent,child,sNode){ 
	parent.getElementsByTagName(xsl_stylesheet)[0].removeChild(parent.getElementsByTagName(sNode)[0]);   
	I_InsertTemplates(parent,child);
}

function I_InsertTemplates(MainXSL,TemplateXSL){ 
	for(i=TemplateXSL.documentElement.childNodes.length-1;i>=0;i--){ 
		MainXSL.documentElement.insertBefore(TemplateXSL.documentElement.childNodes[i],MainXSL.documentElement.childNodes[0] ); 
	}
	return MainXSL;
}


function I_GetRelPath(SPath,ImpPath){
	var FImpPath = ImpPath.substring((ImpPath.lastIndexOf("../")==-1?0:ImpPath.lastIndexOf("../")+3));
	var ImpPCount = ImpPath.split("../").length-1;

	var sPCount = SPath.split("../").length-1;
	var sTFCount = SPath.split("/").length-1;
	var SFPath = SPath.substring((SPath.lastIndexOf("../")==-1?0:SPath.lastIndexOf("../")+3));
	SPath = SPath.substring(0,(SPath.lastIndexOf("/")==-1?0:SPath.lastIndexOf("/")+1));

	var sFCount = SFPath.split("/").length-1;

	var fol="";
	if (ImpPCount == 0) // NO "../" at all
	{
		FImpPath =SPath + ImpPath;
	}
	else if(sTFCount <= ImpPCount) // number of "../" exceeds original path
	{
		for (i=0;i<(ImpPCount-sFCount+sPCount);i++)
				fol = "../" + fol;
				
		FImpPath = fol + FImpPath;
	}
	else if (sFCount > ImpPCount) // With-in the named folders of original path
	{
		var sp = SFPath.split("/");
		for(i=0;i<(sFCount-ImpPCount);i++)
			fol= fol + sp[i] + "/";
			
		for (i=0;i<sPCount;i++)
				fol = "../" + fol;
					
		FImpPath = fol + FImpPath;
	}
	else //if (sFCount <= ImpPCount)  // Outside the named folders of original path
	{
		for (i=0;i<(sTFCount-ImpPCount);i++)
				fol = "../" + fol;
				
		FImpPath = fol + FImpPath;
	}

	 return FImpPath;
}

function I_SubStrCount(MainStr,InStr){
	var  Cnt=0;
	while(MainStr.indexOf(InStr)>-1){
		Cnt++;	
		MainStr=MainStr.substring(MainStr.indexOf(InStr)+2);
	}
	return Cnt;
}

// *D* 
function I_PutDomainSelBox(DomainType,CorpID,SelName,FnOnFill,FnOnChange,CssClass){  
	var rtn="<select name='"+SelName+"' id='"+SelName+"' class='"+CssClass+"' onChange='"+FnOnChange+"'></select>";
	      setTimeout('I_ClientDomainFill('
		  + DomainType + ',0,' + CorpID + ',0,\'' + SelName  + '\',\'' 
		  + FnOnFill  + '\',1)', 200 ); 
		  return rtn;
}
 
function I_GetGMTDate(dt){
	if(Trim(dt)=="")
		return "";
	dt=Trim(dt);
	jsdt=new Date(I_ConvertDate(dt)) ;
	//Date & Time.. then GMT diff is adjusted
	if(dt.indexOf(":")>-1) 
		jsdt=new Date(jsdt.getTime()-I_GMTDiff);
	return I_SaveDate(jsdt);
}

function I_GetGMTTime(dt){
	if(Trim(dt)=="")
		return "";
	dt=Trim(dt);
	jsdt=new Date(I_ConvertDate(dt)) ;
	
	//Date & Time.. then GMT diff is adjusted
	if(dt.indexOf(":")>-1) 
		jsdt=new Date(jsdt.getTime()-I_GMTDiff);
	return I_SaveDate(jsdt)+" "+I_SaveTime(jsdt);
}

//check input is date only or date and time
//if time then deduct gmtoffset also
function I_ConvertDate(dt){
	var datePart,TimePart="",Arr;
	datePart=dt;
	//with time 
	if(dt.indexOf(":")>-1){
		Arr=dt.split(" ");
		if(Arr.length>1)
			TimePart=" "+Arr[1];
		if(Arr.length>2)
			TimePart+=" "+Arr[2];
		datePart=Arr[0];
	}
	if(I_GD==1){
		Arr=datePart.split("/");
		datePart=Arr[1]+"/"+Arr[0]+"/"+Arr[2];
	}
	return datePart+TimePart;
}

function I_SaveDate(jsdt){
	return	I_GetInLen(jsdt.getMonth()+1)+"/"+I_GetInLen(jsdt.getDate())+"/"+jsdt.getFullYear();
}

function I_SaveTime(jsdt){
	var rtn,ampm;
	if(jsdt.getHours()>11)
		ampm=":00 PM";
	else 
		ampm=":00 AM";
	if(jsdt.getHours()>12)
		rtn= I_GetInLen(jsdt.getHours()-12) +":"+I_GetInLen(jsdt.getMinutes());
	else
		rtn= I_GetInLen(jsdt.getHours()) +":"+I_GetInLen(jsdt.getMinutes());
	return rtn +ampm;
}
/*****************/
var dayMilliSeconds=1000*60*60*24;  
function I_DateAdd(Interval,Count,Dt){
 if(Trim(Dt)=="")return "";   
 var i;
 var Date1=new Date(Dt); 
 var Minus=(Count+"").charCodeAt(0);  
 if(Interval.toLowerCase()=="m") {  
  Cnt=Math.abs(Count); 
  for(i=0;i<Cnt;i++){ 
   var _Mn=Date1.getMonth()+1;
   var _Yr=Date1.getFullYear(); 
   if(Minus==45){ 
    if(_Mn==1){
     _Mn=12;
     _Yr=_Yr-1;
    }else
     _Mn=_Mn-1; 
 
   }     
     
    DaysCount=DaysInMonth(_Mn,_Yr);  
    if(Minus==45)DaysCount=DaysCount*-1;
    Date1=new Date(I_DateAdd("d",DaysCount,Date1)); 
  }
 
 }else if(Interval.toLowerCase()=="w"){
  Cnt=Math.abs(Count); 
  for(i=0;i<Cnt;i++){    
    if(Minus==45)Count=-7;
    Date1=new Date(I_DateAdd("d",DaysCount,Date1));  
  } 
 }
 else if(Interval.toLowerCase()=="d")
{
    Count = eval(Date1.getDate()) + eval(Count);
    Date1.setDate(Count);
 }
// Date1=new Date(Date1.getTime()+(Count*dayMilliSeconds))
 return  I_GetInLen(Date1.getMonth()+1) + "/" +  I_GetInLen(Date1.getDate()) +"/" +Date1.getFullYear();  
}

function DaysInMonth(Mnth,Yr){   
   if(Mnth==4||Mnth==6||Mnth==9||Mnth==11)
        return 30;
   else {
    if(Mnth==2){
      if(CheckLeapYear(Yr))
       return 29;
      else
       return 28;
     }
    else
     return 31;
   }
}
function CheckLeapYear(VarYear){
   if ((VarYear/4)   != Math.floor(VarYear/4))   return false;
       if ((VarYear/100) != Math.floor(VarYear/100)) return true;
       if ((VarYear/400) != Math.floor(VarYear/400)) return false;
       return true; 
}
/***************/
function I_DateDiff(Interval,Date1,Date2){
	if(Trim(Date1)=="" || Trim(Date2)=="" )
		return "";
	Date1=new Date(Date1);
	Date2=new Date(Date2);
	if(Interval=="" || !Interval)
		Interval="d";
	if(Interval.toLowerCase()=="m") 
		return Math.round(((Date2.getFullYear()-Date1.getFullYear())*12)+Date2.getMonth()-Date1.getMonth());
	else if(Interval.toLowerCase()=="yyyy")
		return Math.round(Date2.getFullYear()-Date1.getFullYear());
	if(Interval.toLowerCase()=="h") 
		return Math.round((Date2.getTime()-Date1.getTime())/HourMSs);
	if(Interval.toLowerCase()=="n") 
		return Math.round((Date2.getTime()-Date1.getTime())/60000);
	if(Interval.toLowerCase()=="s") 
		return Math.round((Date2.getTime()-Date1.getTime())/60000);
	else
		return Math.round((Date2.getTime()-Date1.getTime())/dayMSs);
}

//output will be date only, Input can be date only or date and time in GMT/XSD
function I_GetLocalDate(dt){
	if(Trim(dt)=="")
		return "";
	return I_DisplayDate(I_GetLocDtObj(dt));
}

//output will be date and time. Input can be date only or date and time in GMT /XSD.
function I_GetLocalTime(dt){
	 
	if(Trim(dt)=="")
		return ""; 
	return I_DisplayDate(I_GetLocDtObj(dt))+" "+I_DisplayTime(I_GetLocDtObj(dt));  
}

function I_GetLocDtObj(dt){
    var jsdt="";
	dt=Trim(dt);
	if(dt.indexOf(".")>-1)
	    dt=dt.split(".")[0];
	//XSD
	if(dt.indexOf("-")>-1){
		//input date and time
		if(dt.indexOf("T")>-1){
			//first convert to js date object add gmt diff milliseconds
			Arr1=dt.split("T");
			jsdt= Arr1[1];
			Arr1=Arr1[0].split("-");
			jsdt=Arr1[1]+"/"+Arr1[2]+"/"+Arr1[0]+" "+jsdt;
			jsdt=new Date(jsdt) ;
			jsdt=new Date(jsdt.getTime()+I_GMTDiff) ;
		}
		else if(dt.indexOf(" ")>-1){
			//first convert to js date object add gmt diff milliseconds
			Arr1=dt.split(" ");
			jsdt= Arr1[1];
			Arr1=Arr1[0].split("-");
			jsdt=Arr1[1]+"/"+Arr1[2]+"/"+Arr1[0]+" "+jsdt;
			jsdt=new Date(jsdt) ;
			jsdt=new Date(jsdt.getTime()+I_GMTDiff) ;
		}
		//input date only
		else{
			Arr1= dt.split("-");
			jsdt=Arr1[1]+"/"+Arr1[2]+"/"+Arr1[0] ;
			jsdt=new Date(jsdt) ;
		}
	}
	 
	//GMT
	if(dt.indexOf("/")>-1){
		 
		//input date only. first convert to js date object 
		jsdt=new Date(dt) ;
		if(dt.indexOf(":")>-1)
		{
			 
			jsdt=new Date(jsdt.getTime()+I_GMTDiff) ; 
			 
		}
	}
	return jsdt;
}

//0=LastName, FirstName    1=FirstName LastName
function I_GetDisplayName(FName,LName){
	var rtn=", "; 
	if(I_GN==0){
		if((Trim(LName)=="")||(Trim(FName)==""))
			rtn="";
		rtn=LName + rtn + FName;
	}
	else
		rtn=FName+" "+LName;
	return rtn;
}

//0=LastName, FirstName    1=FirstName LastName if both are blank the emailid is returned
function I_GetDisplayNameEmailID(FName,LName,EmailID){
	var rtn=", "; 
	if((Trim(LName)=="")&&(Trim(FName)==""))
		return ""+EmailID;
	if((Trim(LName)=="null")&&(Trim(FName)=="null"))
			return EmailID;
	if(I_GN==0){
		if((Trim(LName)=="")||(Trim(FName)==""))
			rtn="";		
		rtn=LName + rtn + FName;
	}
	else	
		rtn=FName+" "+LName;

	return rtn;
}


function I_DisplayDate(jsdt){
	var rtn="";
	if(I_GD==1)
		rtn=I_GetInLen(jsdt.getDate())+"/"+I_GetInLen(jsdt.getMonth()+1)+"/"+jsdt.getFullYear();  
	else 
		rtn=I_GetInLen(jsdt.getMonth()+1)+"/"+I_GetInLen(jsdt.getDate())+"/"+jsdt.getFullYear();
	return rtn;
}

function I_DisplayTime(dt){
	var rtn,ampm,hr = dt.getHours();
	ampm = ( (hr > 12) ? (ampm="PM")  : (hr == 12) ? (ampm="PM") : (hr == 0) ? (ampm="AM") : (ampm="AM") );
    hr = ( (hr > 12) ? (hr-12)  : (hr == 12) ? (hr) : (hr == 0) ? (hr=12) : (hr) );
	rtn= hr +":"+I_GetInLen(dt.getMinutes());
	return rtn + " " +ampm;
}
 
function Trim(strText){ 
  strText=strText+"";
  // this will get rid of leading spaces 
  while (strText.substring(0,1) == ' ')
	  strText = strText.substring(1, strText.length);
  // this will get rid of trailing spaces 
  while (strText.substring(strText.length-1,strText.length) == ' ')
	  strText = strText.substring(0, strText.length-1);
  return strText;
} 

//Getting selected value from a collection of radio buttons
function GetRadioValue(RadioObj){
	for(j=0;j<RadioObj.length;j++){
		if(RadioObj[j].checked)
			return RadioObj[j].value;
	}	
} 

function GetRandom(){
	return Math.floor(Math.random()*100);
}

function I_GetInLen(s){
	s+="";
	if(s.length==1)
		s="0"+s;
	return s;
}
 
// *D* 
function I_PutElemLinkedDomainSelBox(DomainType,SElemID,CorpID,ProjID,SelName,FnOnFill,FnOnChange,CssClass){
	var rtn="<select name='"+SelName+"' id='"+SelName+"' class='"+CssClass+"' ></select>";
 	setTimeout('I_ClientDomainFill('+ DomainType + ',' + SElemID + ',' + CorpID + ','+ProjID +',\'' + SelName  + '\',\'' + FnOnFill  + '\',2)',1000);
	return rtn;
}

function I_MultiStr(count,str){
    var rtn="";
    for(var i=0;i<count;i++)
         rtn+= str;
    return rtn;    
}

function I_CheckEmailID( strXML,  EmailID){	
	//checks an emailid exists in resolved xml. ('E' node and 'E' attribute)
	//return -1 if node count is 0,0 if emailid dont exists,1 if exists.
	var rtn=-1; 
	var ResXml = OrchGenericObj.GetXMLObj(strXML,0);
	if(ResXml.documentElement.selectSingleNode ("E[@E='"+ EmailID +"']") )
		rtn=1; 
	else if(ResXml.documentElement.selectNodes("E").length>0)
		rtn=0;	 
 
	return rtn;
}
		
function I_DispEmailID(strXML, sepStr){
    var rtn="";
    var ResXML=OrchGenericObj.GetXMLObj(strXML,0);
    var NodesE=ResXML.documentElement.selectNodes("E");
    var count=NodesE.length;
    for(var i=0;i<count-1;i++)
        rtn+=NodesE[i].getAttribute("E") + sepStr;
    if(count>0)
        rtn+=NodesE[count-1].getAttribute("E"); 
    return rtn;
}  

function I_DocIcon(extn,DocFlg){
	var rtn="";
	if(DocFlg!=0)
		return "images/url.gif";
	extn=extn.toLowerCase();
	switch (extn){
		case ".doc":
			return "images/doc.gif";
		case ".rtf":
			return "images/rtf.gif";
		case ".xls":
			return "images/xls.gif";
		case ".ppt":
			return "images/ppt.gif";
		case ".pps":
			return "images/ppt.gif";
		case ".mpp":
			return "images/mpp.gif";
		case ".jpg":
			return "images/jpg.gif";
		case ".gif":
			return "images/gif.gif";
		case ".bmp":
			return "images/jpg.gif";
		case ".html":
			return "images/html.gif";
		case ".htm":
			return "images/html.gif";
		case ".xml":
			return "images/xml.gif";
		case ".xsl":
			return "images/xml.gif";
		case ".zip":
			return "images/zip.gif";
		case ".cab":
			return "images/zip.gif";
		case ".jpeg":
			return "images/jpg.gif";
		case ".jpe":
			return "images/jpg.gif";
		case ".txt":
			return "images/txt.gif";
		case ".exe":
			return "images/exe.gif";
		case ".mdb":
			return "images/mdb.gif";
		case ".hlp":
			return "images/hlp.gif";
		case ".mid":
			return "images/mid.gif";
		case ".mpeg":
			return "images/mov.gif";					
		case ".mov":
			return "images/mov.gif";					
		case ".avi":
			return "images/mov.gif";					
		case ".reg":
			return "images/reg.gif";					
		case ".vbp":
			return "images/vbp.gif";					
		case ".wab":
			return "images/wab.gif";					
		case ".wav":
			return "images/wav.gif";					
		case ".asp":
			return "images/asp.gif";	
		case ".js":
			return "images/js.gif";	
		case ".log":
			return "images/txt.gif";					
		case ".xpdi":
			return "images/zip.gif";			
		case ".ppa":
			return "images/ppt.gif";			
		case ".mpt":
			return "images/mpp.gif";			
		case ".mpd":
			return "images/mpp.gif";			
		case ".ini":
			return "images/ini.gif";					
		case ".bas":
			return "images/bas.gif";		
		case ".pdf":
			return "images/pdf.gif";
		case ".msg":
			return "images/msg.gif";						
		default:
			return "images/files.gif";					
	}  
}

function I_GetDocIndent( ParentImg,  Flg,  LVL,  DF){ 
	var rtn=ParentImg;
	var lLVL=3; 
	if(DF==1)//projfolders.xsl... consider LVL
		lLVL=eval(LVL);

	if(lLVL>2)
	{
		Img="I.gif";
		if(Flg==0)
			Img="emp.gif"; 
		rtn+= "<img src=\"images\\"+ Img + "\" align=\"absmiddle\" />";
	}
	return rtn;
}

var GblStructApps;
function I_setApp(subApp){
    GblStructApps=subApp;
    return "";
}

function I_getApp(){
	return GblStructApps;
} 
function I_IfEqualThen(Str1,Str2,Str3,Str4){ 
 if(typeof(Str1)!='string')Str1="";if(typeof(Str2)!='string')Str2="";
 if(typeof(Str3)!='string')Str3="";if(typeof(Str4)!='string')Str4="";    
    if(Str1==Str2)return Str3; 
    return Str4;
}
function I_FillToCc(InpXML,MF,RPLY,EmailID,ToCC){
    var rtn;  
    if(ToCC==0){ 
        if(InpXML=="" || RPLY==3)InpXML="<TO version='1.0'></TO>" ;
        rtn=InpXML;
        if(RPLY==1)
            rtn= MF; 
        
        if(RPLY==4){ 
            var ToSndrXmlObj=I_GetXMLObj(MF,0); //from
		    var ToNusrXmlObj=I_GetXMLObj(InpXML,0);  ///to
		    var tempEElem=ToSndrXmlObj.documentElement.getElementsByTagName("E").item(0);
		    var SenderE=tempEElem.getAttribute("E");
		    var SendNode=ToNusrXmlObj.documentElement.selectSingleNode("E[@E='" + SenderE + "']");
		    if(!SendNode || SenderE==EmailID)//if sender is not in TO already then only add
			    ToNusrXmlObj.documentElement.appendChild(tempEElem);
			
 		    SendNode = ToNusrXmlObj.documentElement.selectSingleNode("E[@E='" + EmailID + "']");   
		    if(SendNode)ToNusrXmlObj.documentElement.removeChild(SendNode);
		    rtn=ToNusrXmlObj.xml; 
        } 
    }else{
        if(InpXML=="" || RPLY==3 || RPLY=="1")InpXML="<CC version='1.0'></CC>" ;
        rtn=InpXML; 
        if(RPLY==4){
            var CCSndrXmlObj=I_GetXMLObj(InpXML,0); 
		    var CCNode = CCSndrXmlObj.documentElement.selectSingleNode("E[@E='" + EmailID + "']");
            if(CCNode)CCSndrXmlObj.documentElement.removeChild(CCNode);
		    rtn=CCSndrXmlObj.xml; 
        }
    }  
    return rtn;
}

/*****ENDS--- (Above functions are included in common.inc also. There it will be server side JS)***/
/*************************************************************/
/*************************************************************/

//Class Functions Starts 
//loops thru options and make the SelVal,SelText selected
function TodayDMY() { 
 var _Mnth=new Array();
 _Mnth[0]="JAN";_Mnth[0]="FEB";_Mnth[0]="MAR";_Mnth[0]="APR";_Mnth[0]="MAY";_Mnth[0]="JUN";
 _Mnth[0]="JUL";_Mnth[0]="AUG";_Mnth[0]="SEP";_Mnth[0]="OCT";_Mnth[0]="NOV";_Mnth[0]="DEC";
 var dt=new Date();
 return I_GetInLen(dt.getDay())+"-"+_Mnth[dt.getMonth()]+"-"+dt.getYear();
}

function I_GetToday(){
	var DT=new Date();
	return I_GetInLen((DT.getMonth()+1))+"/"+I_GetInLen(DT.getDate())+"/"+DT.getFullYear();
}

function I_CurrLocalST(){
	var  DT=new Date();
	var TimePart=I_DisplayTime(DT);
	var DtPart= I_GetToday() ;
	return DtPart + " " + TimePart;
}

//return current system date/time in user pref format.
function I_GetPrefNow(TimeAlso){
	var  DT=new Date();
	if(TimeAlso)
	    return I_DisplayDate(DT) + " " + I_DisplayTime(DT);
	else
	    return I_DisplayDate(DT) ;
}

function ConvertTo(strDt,FrmtType){
    var DT=new Date(strDt);
    switch (FrmtType){
		case 1://xsd CCYY-MM-DDThh:mm:ss 
            return DT.getFullYear()+"-"+I_GetInLen((DT.getMonth()+1)) +"-"+I_GetInLen(DT.getDate()) +"T"+I_GetInLen(DT.getHours()) +":"+I_GetInLen(DT.getMinutes()) +":"+I_GetInLen(DT.getSeconds());
		case 2://MonthNam - CCYY
		    return MonthName[DT.getMonth()]+"-"+DT.getYear();
		case 3://WeekDay, Month Date
		    return WeekDay[DT.getDay()].substring(0,3)+", "+ MonthName[DT.getMonth()].substring(0,3) +" "+I_GetInLen(DT.getDate());
		case 4:
			return "" ;//some other format
	}
}

function I_GetLocalST(GmtTime){
	if(GmtTime=="")return GmtTime;
	LocDtObj=I_GetLocDtObj(GmtTime);
	DT=new Date(LocDtObj);
	
	DtPart=I_GetInLen((DT.getMonth()+1))+"/"+I_GetInLen(DT.getDate())+"/"+DT.getFullYear()+ " " + I_DisplayTime(DT);
	return DtPart;
}
 
function I_GetCurrLocalTime(){
	var  DT=new Date();
	var TimePart=I_DisplayTime(DT);
	var DtPart=I_GetLocalDate(I_GetToday());
	return DtPart + " " + TimePart;
}

function I_SelectDefault(SelName,SelVal,SelText){
    var SelObj=document.getElementsByName(SelName)[0];
    for(var i=0;i<SelObj.options.length;i++){	 
        OptText=SelObj.options[i].text;
		OptValue=SelObj.options[i].value; 
		//Make SelVal Selected
		if(SelVal){
			if(Trim(OptValue+" ").toLowerCase()==Trim(SelVal+" ").toLowerCase())
				SelObj.options[i].setAttribute("selected",true);
		}
		//Make SelText Selected
		if(SelText){ 
			if(Trim(OptText+" ").toLowerCase()==Trim(SelText+" ").toLowerCase())
				SelObj.options[i].setAttribute("selected",true);
		}
	}
}

//loops thru Source XML and add options to Dest select box if FilterDomainID matches
function I_FillFromXML(SourceXML,DestName,FilterDomainID,SelVal,SelText){
    var EachN;
    var Nodes_N=SourceXML.selectNodes("N[PID=" + FilterDomainID +"]");
    var DObj=document.getElementsByName(DestName)[0];
    //remove all options if existing
    DObj.length=0;
    OptObj=new Option("");
    OptObj.setAttribute("value","");
    DObj.options[0] =OptObj;
    
    for(var i=1;i<=Nodes_N.length;i++){
        EachN=Nodes_N[i-1];
        OptText=EachN.selectSingleNode("T").text;
		OptObj=new Option(OptText);
		OptValue=EachN.selectSingleNode("ID").text;
		OptObj.setAttribute("value",OptValue);
		DObj.options[i] =OptObj;
		//Make SelVal Selected
		if(SelVal){
			if(Trim(OptValue+" ").toLowerCase()==Trim(SelVal+" ").toLowerCase())
				DObj.options[i].setAttribute("selected",true);
		}
		//Make SelText Selected
		if(SelText){ 
			if(Trim(OptText+" ").toLowerCase()==Trim(SelText+" ").toLowerCase())
				DObj.options[i].setAttribute("selected",true);
		}
     }
 }

//loops thru options of parent selbox and add options in Dest select box
function I_FillFromSource(SourceName,DestName,SelVal,SelText){
	var OptObj,OptValue,OptText;
	var PObj=document.getElementsByName(SourceName)[0];
	var DObj=document.getElementsByName(DestName)[0];
    //remove all options if existing
    DObj.length=0;
    var LEN=PObj.options.length;
	for(var i=0;i<LEN;i++){	 
		OptText=PObj.options[i].text;
		OptObj=new Option(OptText);
		OptValue=PObj.options[i].value;
		OptObj.setAttribute("value",OptValue);
		DObj.options[i] =OptObj;
		//Make SelVal Selected
		if(SelVal){
			if(Trim(OptValue+" ").toLowerCase()==Trim(SelVal+" ").toLowerCase())
				DObj.options[i].setAttribute("selected",true);
		}
		//Make SelText Selected
		if(SelText){ 
			if(Trim(OptText+" ").toLowerCase()==Trim(SelText+" ").toLowerCase())
				DObj.options[i].setAttribute("selected",true);
		}
	}
}

function I_GetElemPermXML(ArrElemID,CorpID,ProjID,SessionID){
	var qry="../JS/OrchGenericFunctions.asp?Param1=" + CorpID + "&Param2=" + ProjID + "&FuncIndx=4";
	var PostInfo="Param1="+ArrElemID;
	var xmlhttp = I_GetMSXMLObj("MSXML2.XMLHTTP.4.0");
	xmlhttp.open("POST", qry, false);
	xmlhttp.send(PostInfo); 
	return I_GetXMLObj(xmlhttp.responseText,0);
} 

function I_ClientDomainFill(DomainType,SElemID,CorpID,ProjID,SelName,FnOnFill,FnFlag){
	return  I_ClientDomainFillOnTimeout( DomainType ,SElemID , CorpID ,ProjID ,SelName ,FnOnFill,FnFlag ); 
} 


function I_GetLinkedDomainXML(VarName,DomainType,PrimaryDomainType,CorpID,FnOnFill){
	var qry="../JS/OrchGenericFunctions.asp?Param3=" + DomainType + "&Param4=" + PrimaryDomainType + "&Param1=" + CorpID + "&FuncIndx=3" ;
	var XMLObj		= I_GetMSXMLObj("MSXML2.DOMDocument.4.0"); 
		XMLObj.async	= false;
  
	var xmlhttp = I_GetMSXMLObj("MSXML2.XMLHTTP.4.0");
	xmlhttp.open("GET", qry, false);
	xmlhttp.send(null); 
 
	XMLObj.loadXML(xmlhttp.responseText);	
	if(!XMLObj.documentElement) 
		I_TriggerFunction(FnOnFill); 
	window[VarName]=XMLObj;
	I_TriggerFunction(FnOnFill); 
	return "";
}

function I_ClientDomainFillOnTimeout(DomainType,SElemID,CorpID,ProjID,SelName,FnOnFill,FnFlag){
 
	var qry="../JS/OrchGenericFunctions.asp?FuncIndx="+FnFlag+"&Param1=" + CorpID + "&Param2=" + ProjID + "&Param3=" + DomainType+ "&Param4=" + SElemID;
	var XMLObj		= I_GetMSXMLObj("MSXML2.DOMDocument.4.0");
		XMLObj.async	= false;

	var xmlhttp = I_GetMSXMLObj("MSXML2.XMLHTTP.4.0");
	xmlhttp.open("GET", qry, true);
	xmlhttp.onreadystatechange=function(){  
		if (xmlhttp.readyState==4){   
			XMLObj.loadXML(xmlhttp.responseText); 
			if(!XMLObj.documentElement){  
				I_TriggerFunction(FnOnFill); 
				return;
			}  
			I_FillSelectBox(DomainType,XMLObj.documentElement,SelName);
			I_TriggerFunction(FnOnFill); 
		}
	} ;
 
	xmlhttp.send(); 
	return "";
}

function I_TriggerFunction(FnOnFill){ 
	if(FnOnFill == '')
		return;  
	if(document.readyState=='complete')
		eval(FnOnFill);
	else{ 
		setTimeout("I_TriggerFunction('" +  FnOnFill  + "');",500);
		return;
	}
}

function I_sortNumber(a, b){
	return a - b;
}
 
function I_FillSelectBox(DomainType,DomXML,SelName){  
	var SelObj=document.getElementById(SelName),NodeID,LVL,Title,MinLVL;
 
	var DomainRoot=DomXML.selectSingleNode("Domain[@DomainType="+DomainType+"]");
	SelObj.setAttribute("StructID",DomainRoot.getAttribute("StructID"));
	//get min index
	for(var b=0;b<6;b++){
	    MinLVL=DomainRoot.selectSingleNode("N/L[.="+b+"]");
	    if(MinLVL){ 
	        MinLVL=MinLVL.text;
    	    break;
	    }
	}
 
	var MinLVLNodes=DomainRoot.selectNodes("N[L="+MinLVL+"]"); 
	
	I_AddNewOptions(SelObj,"","","","",1);
	
	var MinS="",MinLVLNodeID, MinLVLTITLE,CurrNode, C_Node;
	for(var k=0;k<MinLVLNodes.length;k++){
	    C_Node=MinLVLNodes[k];
		MinLVLNodeID=C_Node.selectSingleNode("ID").text;
		MinLVLTITLE=C_Node.selectSingleNode("T").text;
		if(C_Node.selectSingleNode("P")){
			I_AddNewOptions(SelObj,MinLVLNodeID,MinLVLTITLE,"", MinLVL,0);
			MinS="  ";
		} 
		DomainNodes=DomainRoot.selectNodes("N[P="+MinLVLNodeID+"]");
	
 		for(var i=0;i<DomainNodes.length;i++){
 		    C_Node=DomainNodes[i];
			NodeID=C_Node.selectSingleNode("ID").text;
			LVL=C_Node.selectSingleNode("L").text;
			I_AddNewOptions(SelObj,NodeID,C_Node.selectSingleNode("T").text,MinS, LVL,0);
			I_NextLevel(SelObj,DomainRoot ,NodeID,LVL,MinS,MinS+"  ");
		}
	}
}

function I_NextLevel(SelObj,DomainRoot,NodeID,LVL,PrevS,S){ 
	LVL++; 
	var NodeList=DomainRoot.selectNodes("N[P="+NodeID+"  and L="+LVL+"]");
	for(var j=0;j<NodeList.length;j++){  
	    ID=NodeList[j].selectSingleNode("ID").text;
		I_AddNewOptions(SelObj,ID,NodeList[j].selectSingleNode("T").text,S,LVL,0);
		PrevS=S;
		S+="  ";
		I_NextLevel(SelObj,DomainRoot,ID,LVL,PrevS,S);
		S=PrevS;
	}
}

function I_AddNewOptions(SelObj,NodeID,Txt,S,LVL,BlankOpt){ 
	if(Trim(Txt)=="" && BlankOpt==0)
		return;  
	var newOption = new Option (Txt);
	newOption.text =S+Txt;
	newOption.setAttribute("L",LVL);
	newOption.setAttribute("T",Trim(Txt));
	newOption.value = NodeID; 
	SelObj.options[SelObj.length]=newOption;
}
 
function I_GetSpace(LVL){
	var Rtn="";
	for(i=0;i<LVL-1;i++)
		Rtn+="  ";
	return Rtn;
}
 

function I_GetCookie(sName,SubName){
	var aCookie = document.cookie.split("; ");// cookies are separated by semicolons
	var CookieVal = null ;
	var bHasKeys;
	for (var i=0; i < aCookie.length; i++){
		var aCrumb = aCookie[i].split("=");
		bHasKeys = aCrumb.length >2 ? 1 : 0;
		if (sName == aCrumb[0]){ 
			var TempVal = aCookie[i];
			TempVal	= TempVal.substring(TempVal.indexOf(sName) + sName.length + 1,TempVal.length);
			if(SubName){	
				TempArr = TempVal.split("&");  // subcookie seperated by &
				for(var j=0;j < TempArr.length ; j++){
					if(TempArr[j].split("=")[0] == SubName){
						CookieVal =  TempArr[j].split("=")[1];
						//while loop is added since /+/g syantax does not work here
						while (CookieVal.indexOf("+") != -1) CookieVal = CookieVal.replace('+',' ');
						CookieVal = unescape(CookieVal);
						break;
					}
				}
			}
			else{
				if(bHasKeys)  
					CookieVal=TempVal;  
				else{ 
					CookieVal = aCrumb[1];
					//while loop is added since /+/g syantax does not work here
					while (CookieVal.indexOf("+") != -1) CookieVal = CookieVal.replace('+',' ');
					CookieVal = unescape(CookieVal);
				}
				break;
			}
		}
	}
	return CookieVal== null ? '' : CookieVal ;
} 
function I_SetCookie(cName, scName, cVal, expdays){ 
	var n,cHasKeys,nsc,x;
	var tempArr,tempArr2,cookieStr="";
	cVal = escape(cVal); 
	//check if cookie exists
	n = I_GetCookie(cName);
	//if cookie exists
	if(n)
	{
		//check if cookie has subs; //Set cHasKeys = 1 if cookie has subs, 0 if not
		tempArr = n.split("=");
		if(tempArr.length < 2)
			cHasKeys = 0;  //cookie does not have sub-cookies
		else
			cHasKeys = 1;  //cookie has sub-cookies
		
		//if cookie has sub-cookies
		if(cHasKeys==1)
		{
			//check if sub-cookie(scName) parameter is null
			if(scName==null)
			{
				//Overwrite cookie with new value
				cookieStr = cName + "=" + cVal;
			}
			else//if scName parameter is not null
			{
				//Check if sub cookie already exists
				nsc = I_GetCookie(cName,scName);
				//If sub cookie exists
				if(nsc)
				{
					//split cookie string into sub_cookies and sc values
					tempArr = n.split("&");
					//split ech sub 
					for(x=0;x<tempArr.length;x++)
					{
						tempArr2 = tempArr[x].split("=");//splits into sub name and sub Value
						
						if(tempArr2[0]==scName)//when subcookie matches parameter
						{
							tempArr[x] = tempArr2[0] + "=" + cVal;//set new Value
							if(x<(tempArr.length-1))
							{
								cookieStr = cookieStr + tempArr[x] + "&";
							}
							else
							{
								cookieStr = cookieStr + tempArr[x];
							}
						}
						else
						{
							if(x<(tempArr.length-1))
							{
								cookieStr = cookieStr + tempArr[x] + "&";
							}
							else
							{
								cookieStr = cookieStr + tempArr[x];
							}
						}
					}//end for
					//write cookie document.cookie = cName + "=" + cookieStr;
					cookieStr = cName + "=" + cookieStr;
				}
				else//if subcookie does not exist, cookie has sub cookies
				{
					//add scName to existing sub cookies
					cookieStr = cName + "=" + scName + "=" + cVal + "&" + n;
				}//end else part if sub cookie exists
			}//end if scName parameter not Null
		}
		else//if cookie does not have sub cookies
		{
			if(scName==null)
			{
				cookieStr = cName + "=" + cVal;
			}
			else
			{
				cookieStr = cName + "=" + scName + "=" + cVal;
			}
		}
	}
	else //if cookie does not exist, write cookie
	{
		if(scName==null)//if there is no sub cookie
		{
			//document.cookie = cName + "=" + cVal; write cookie name and cookie value
			cookieStr = cName + "=" + cVal;
		}
		else // if sub cookie is passed
		{
			//document.cookie = cName + "=" + scName + "=" +cVal //write cookie, sub and value
			cookieStr = cName + "=" + scName + "=" +cVal;
		}
	}if(expdays){ 
        var exdate=new Date();
        exdate.setDate(exdate.getDate()+expdays); 
        document.cookie = cookieStr + "; path=/;expires="+exdate.toUTCString();	   
	}else
		document.cookie = cookieStr + "; path=/;";	
}


function I_GetNodes(/*string*/ xml, /*string*/ xpath){
    if(Trim(xml+"")=='')xml="<R/>";
    return I_GetXMLObj(xml,0).documentElement.selectNodes(xpath);
}
var I_GD,I_CG,I_GN,I_GMTDiff=0;
I_GD=I_GetCookie("G","D");
I_CG=I_GetCookie("C","G") ;
if(I_CG!=0)I_GMTDiff=(I_CG*(-1))*60*1000;
I_GN=I_GetCookie("G","N") ;
dayMSs=1000*60*60*24;
HourMSs=1000*60*60;
 
var OrchGenericObj=new OrchGeneric();
//if enter key pressed then trigger the function
function EnterCallFun(FnStr){
	if(event.keyCode==13)eval(FnStr);
} 
function GetVirtualDirectory()
{ 
	StrInp=window.location.pathname;
	var VirDir="",counter=0;
	for(i=0;i<=StrInp.length;i++)
	{
		if(StrInp.substring(i,i-1)=='/')
			counter++;	
		if(counter==3) 
			 break; 
		else
			VirDir+= StrInp.substring(i,i-1);
	}
	return  VirDir;
}
 
function ChkValidNum(obj, lPrec){
    if (!((window.event.keyCode >=48) && (window.event.keyCode <= 57) || (window.event.keyCode == 8) ||(window.event.keyCode == 46) || (window.event.keyCode == 45) || (window.event.keyCode == 43) ) ){
        window.event.cancelBubble = true;
        window.event.keyCode = 0;
        return false;
    }
    var  objval = obj.value;
    var dotPos = objval.indexOf(".");
    if ( objval.indexOf("-") >=0 ){
        if (window.event.keyCode == 45 ){
            window.event.cancelBubble = true;
            window.event.keyCode = 0;
            return false;
        }
    }
    var stralert;
    if (dotPos >=0)
    {
        if (window.event.keyCode == 46 )
        {
            window.event.cancelBubble = true;
            window.event.keyCode = 0;
            return false;
        }
        var lTempPrec = objval.length - dotPos -1;
        if(lPrec <= lTempPrec)
        {
            stralert = lng_enter_only_after_decimal.replace("%1",lPrec);
            alert(stralert);
            window.event.cancelBubble = true;
            window.event.keyCode = 0;
            return false;
        }
    }
}
 //Load xml using xmlhttp async. FnOnFill will be triggered after that.
function I_HttpUrlGETAsync(url,FnOnFill){ 
	var xmlhttp =I_GetMSXMLObj("MSXML2.XMLHTTP.4.0");
	xmlhttp.onreadystatechange = function(){ 
		if(xmlhttp.readyState==4){ 
			var CurrResponseText=xmlhttp.responseText;
			eval(FnOnFill);
			return;
		}
	};
	xmlhttp.open("GET",url, true);
	xmlhttp.send(null); 
	return xmlhttp;
}

 //Load xml using xmlhttp async Post. FnOnFill will be triggered after that.
function I_HttpUrlPOSTAsync(url,PostInfo,FnOnFill)
{   
    var xmlhttp =I_GetMSXMLObj("MSXML2.XMLHTTP.4.0");
    xmlhttp.onreadystatechange = function()
    { 
		if(xmlhttp.readyState==4)
		{
			var ErMsg = xmlhttp.getResponseHeader("ErMsg");
			var CurrResponseText=xmlhttp.responseText;
			eval(FnOnFill);
			return;
		}
	};
	xmlhttp.open("POST",url, true);
	xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	xmlhttp.send(PostInfo);
	return xmlhttp;
}

//NS functions only for Browser Trans
var ArrArr=new Array();

function I_PutDatePickerEx(ArrXml){
    var objArr = new Array();
    xmlR= I_GetXMLObj(ArrXml[0].xml);
    var ArrColl = xmlR.documentElement.selectNodes("@*");
    for (var attr = ArrColl.nextNode(); attr != null; attr = ArrColl.nextNode())
        objArr[attr.nodeName] = attr.text;
    return PutDatePickerEx(objArr);
}
function I_PutDocAttachment(ArrXml){
    var objArr = new Array();
    xmlR= I_GetXMLObj(getXmlStr(ArrXml[0]));
    var ArrColl = xmlR.documentElement.selectNodes("@*");
    for (var attr = ArrColl.nextNode(); attr != null; attr = ArrColl.nextNode())
        objArr[attr.nodeName] = attr.text;
    return PutDocAttachment(objArr);  
}
function I_PutDomainAutoResolve(ArrXml,DomXML){   
    var objArr = new Array();
    xmlR= I_GetXMLObj(getXmlStr(ArrXml[0]));
    var ArrColl = xmlR.documentElement.selectNodes("@*");
    for (var attr = ArrColl.nextNode(); attr != null; attr = ArrColl.nextNode())
        objArr[attr.nodeName] = attr.text;
    ArrLen=ArrArr.length;
    ArrArr[ArrLen]=objArr;
    if(!DomXML){
		setTimeout("I_CallDomainResolveDef(ArrArr["+ArrLen+"],0)");
		return PutDomainAutoResolve(objArr);
	}else{
		xmlD= I_GetXMLObj(getXmlStr(DomXML[0])); 
		return PutDomainAutoResolve(objArr,xmlD);		
	}	
}

function I_PutSingleResolve(ArrXml){
	var objArr = new Array();
	xmlR= I_GetXMLObj(getXmlStr(ArrXml[0]));
    var ArrColl = xmlR.documentElement.selectNodes("@*");
    for (var attr = ArrColl.nextNode(); attr != null; attr = ArrColl.nextNode())
        objArr[attr.nodeName] = attr.text;
	return PutSingleResolve(objArr);
}

function I_PutCompanyResolve(ArrXml){
	var objArr = new Array();
	xmlR= I_GetXMLObj(getXmlStr(ArrXml[0]));
    var ArrColl = xmlR.documentElement.selectNodes("@*");
    for (var attr = ArrColl.nextNode(); attr != null; attr = ArrColl.nextNode())
        objArr[attr.nodeName] = attr.text;
	return PutCompanyResolve(objArr);
}
function I_PutUserAutoResolve(ArrXml){   
    var objArr = new Array();
    xmlR= I_GetXMLObj(getXmlStr(ArrXml[0]));
    var ArrColl = xmlR.documentElement.selectNodes("@*");
    for (var attr = ArrColl.nextNode(); attr != null; attr = ArrColl.nextNode())
        objArr[attr.nodeName] = attr.text;
    ArrLen=ArrArr.length;
    ArrArr[ArrLen]=objArr;
	setTimeout("I_CallUserResolveDef('"+objArr.InputID+"')",1000);  
    return PutUserAutoResolveEx(objArr);
}

function I_CallUserResolveDef(InpID){ 
	//try{AR_ResolveDefaultUsers(InpID);}catch(e){}
	try{AR_ResolveDefaults(InpID);}catch(e){}
}

function I_CallDomainResolveDef(InpID){
	try{AR_ResolveDefaultDomains(InpID);}catch(e){}
}

function I_Get_TemplateData (TableID){ 
    setTimeout("I_SetDynTemplateData('"+TableID+"')" ,10);
    return "";
}

function I_SetDynTemplateData (TableID){ 
    TableObj=document.getElementById(TableID+"_TEMPLATE");
	window[TableID+"_VAR"] = GetTemplateData(TableObj);
	
}
function GetTemplateData(TableID){
	 var strTableID=TableID.id;
	 if( strTableID.indexOf("_TEMPLATE") !=-1){  
		   strLen=strTableID.length;
		   TopTableId=strTableID.substr(0,strLen-9); 
	 }
	 var TempVar  = TableID.outerHTML; 
	 var TrLen=TableID.rows.length;
	 for(var t=0;t<TrLen;t++)TableID.deleteRow(0);
	  return TempVar;
}


function I_ReplaceAll(StrData,searchData,ReplaceStr){
	if(searchData+""==ReplaceStr+"")return StrData;
	var IndexPos = StrData.indexOf(searchData);
	while( IndexPos != -1){
		StrData = StrData.replace(searchData,ReplaceStr);
		IndexPos = StrData.indexOf(searchData);
	}
	return StrData ;
}

function getElemCollection(eName) {
   var collection = $$(eName);
   return (collection && !collection.length) ? [collection] :(!collection ? [] : collection);
} 
 
function GetXpos(Obj){
    var LeftPos=0;
    while (Obj.offsetParent){
            LeftPos += Obj.offsetLeft;
            LeftPos -= Obj.scrollLeft;
            Obj = Obj.offsetParent; 
    }
    return LeftPos;
}

function GetYpos(Obj){
    var TopPos=0;
    while (Obj.offsetParent){
            TopPos += Obj.offsetTop;
            TopPos -= Obj.scrollTop; 
            Obj = Obj.offsetParent; 
    }
    return TopPos;
}
  
  
//CHANGE TRACKER CODE STARTS
//Change Tracker Gbl Variables
var ArrTagName=new Array();ArrTagName[0]="INPUT";ArrTagName[1]="SELECT";ArrTagName[2]="TEXTAREA";
var I_GblCTXML,I_GblDTDXML,GblGroupsNode,GblFormObj=null,GblRootName="",GblNewIndexXML=OrchGenericObj.GetXMLObj("<R/>",0);
var GblRootID="",I_CtHierXML=OrchGenericObj.GetXMLObj("<R/>",0),GblRootX="";
//xsl used for sorting xml by Flag,TableName,Index.
var CT_SortXSL="<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'><xsl:output method='xml' omit-xml-declaration='yes'/><xsl:template match='/'><R><xsl:for-each select='//R/@*'><xsl:copy-of select='.' /></xsl:for-each><xsl:for-each select='//R/I'><xsl:sort select='@F'/><xsl:sort select='@T'/><xsl:sort select='@I'/><xsl:copy-of select='.' /></xsl:for-each></R></xsl:template></xsl:stylesheet>";
var CT_SortHierXSL="<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'><xsl:output method='xml' omit-xml-declaration='yes'/><xsl:template match='/'><R><xsl:for-each select='//R/@*'><xsl:copy-of select='.' /></xsl:for-each><xsl:for-each select='//R/I'><xsl:sort select='@F' data-type='number'/><xsl:sort select='@N'  data-type='number'/><!--xsl:sort select='@N'/--><xsl:copy-of select='.' /></xsl:for-each></R></xsl:template></xsl:stylesheet>";
var MasterProcessor,MasterXMLObj,GblDtdXMLPath,DefaultExpand,RetainCtXmlFlg=0,I_RetainCtXml;
var _g={};//object to be usesd to assign all global variables
function CtThematicTrans(){   
	GBL_CTFlag=1;
	if(!GblFormObj)GblFormObj=document.getElementsByTagName("FORM")[0];	 

	CT_EventToFormElements();
	//identifying the number of Groups and keeping the nodelist in gbl variable.
	try{
		GblGroupsNode=selectSingleNode(MasterXMLObj.documentElement,"Groups");
	}
	catch(e){}
	if(!GblGroupsNode)return;
	_g.ThGroups=selectNodes(GblGroupsNode,"Group[@Index!="+DefaultExpand+"]");  
	var CurrGroupNode,CurrGroupIndex,CurrGroupID,CurrGroupTFlg,SPANOBJ;
	_g.ThGroupsLen=_g.ThGroups.length
	//Global variable for GroupLenght for firing a function on load of all the groups
	Glb_GroupCount = _g.ThGroupsLen;
	_g.Loop=_g.ThGroupsLen>2?2:_g.ThGroupsLen;
	try{
		for(var x=0;x<_g.Loop;x++){
			CurrGroupNode=_g.ThGroups[x];
			CurrGroupIndex=CurrGroupNode.getAttribute("Index");
			CurrGroupID=CurrGroupNode.getAttribute("GroupID");
			CurrGroupTFlg=CurrGroupNode.getAttribute("TFlg");
			//call asynch 
			if(CurrGroupTFlg==0)
			{
				SPANOBJ=$("GroupSpan"+CurrGroupIndex);
				if(SPANOBJ){  
					SPANOBJ.setAttribute("Loading",1);
					QRY="&Param1="+lFUID+"&Param2="+lProjID+"&Param3="+lCorpID+"&Param4="+lElemID+"&Param5="+lFolderID+"&Param6="+lStructID+"&Param7="+CurrGroupID+"&Param8="+lEditRView;				
					var Postdata="Param1="+escape($$("hdnGUID").value)+"&Param2="+escape($$("SortXML").value);
					I_HttpUrlPOSTAsync("../js/OrchGenericFunctions.asp?FuncIndx=5"+QRY,Postdata,"ProcessGroups("+CurrGroupIndex+",CurrResponseText)");
				}
			}
		}
	}catch(e){}
} 

function ProcessGroups(GroupIndex,ResText,AE){ 
    //check all groups finished or not  

    if(_g.Loop<_g.ThGroupsLen){ 
var CurrGroupNode=_g.ThGroups[_g.Loop];
			var CurrGroupIndex=CurrGroupNode.getAttribute("Index");  
        SPANOBJ=$("GroupSpan"+CurrGroupIndex); 
        if(SPANOBJ){  

			var CurrGroupID=CurrGroupNode.getAttribute("GroupID");
			var CurrGroupTFlg=CurrGroupNode.getAttribute("TFlg");
			
	        SPANOBJ.setAttribute("Loading",1);
	        QRY="&Param1="+lFUID+"&Param2="+lProjID+"&Param3="+lCorpID+"&Param4="+lElemID+"&Param5="+lFolderID+"&Param6="+lStructID+"&Param7="+CurrGroupID+"&Param8="+lEditRView;				
	        var Postdata="Param1="+escape($$("hdnGUID").value)+"&Param2="+escape($$("SortXML").value);
	        I_HttpUrlPOSTAsync("../js/OrchGenericFunctions.asp?FuncIndx=5"+QRY,Postdata,"ProcessGroups("+CurrGroupIndex+",CurrResponseText)");
        }else{
        _g.Loop++;  
ProcessGroups(GroupIndex,ResText,AE);
return;
  

	}_g.Loop++; 
    } 
    I_TransformFillSpan(GroupIndex,ResText,AE);

}

function I_TransOnDemand(CurrGroupID,CurrGroupIndex,AE)
{
	var SPANOBJ,QRY;
	SPANOBJ=document.getElementById("GroupSpan"+CurrGroupIndex);	
	if(SPANOBJ){		
		SPANOBJ.setAttribute("Loading",1);
		QRY="&Param1="+lFUID+"&Param2="+lProjID+"&Param3="+lCorpID+"&Param4="+lElemID+"&Param5="+lFolderID+"&Param6="+lStructID+"&Param7="+CurrGroupID+"&Param8="+lEditRView;
		var Postdata="Param1="+escape($$("hdnGUID").value)+"&Param2="+escape($$("SortXML").value);
		I_HttpUrlPOSTAsync("../js/OrchGenericFunctions.asp?FuncIndx=5"+QRY,Postdata,"I_TransformFillSpan("+CurrGroupIndex+",CurrResponseText,"+AE+")");
	}
}


//for filling innerHTML of span tab.This is triggered once xml is available.
function I_TransformFillSpan(GroupIndex,ResText,AE){
    Glb_GroupLoadCount++;
	if(!AE)AE=0; 
	CXMLDoc=OrchGenericObj.GetXMLObj(ResText,0) ;
	GlbGroupXMLDoc=CXMLDoc;
    CurrSpanObj=document.getElementById("GroupSpan"+GroupIndex);
    MasterProcessor.addParameter("GroupIndex", GroupIndex); 
    MasterProcessor.addParameter("MasterTransform", 0);
    CurrSpanObj.innerHTML= OrchGenericObj.TranformSS(CXMLDoc,MasterProcessor);
    CurrSpanObj.setAttribute("Loading",2);
    try{GroupBeforeCT(GroupIndex);}catch(e){}
    if(AE==0)
    {
		CT_EventToObjElements(CurrSpanObj);
	}
    //a function is triggered after transform which can be used in xsl's 
    //for identifying the load is transform is over     
    try{GroupOnLoad(GroupIndex);}catch(e){}
    //For firing a function on load of all the groups
    if (Glb_GroupCount == Glb_GroupLoadCount )
		try{AllGroupsOnLoad();}catch(e){}
}

//is called when tab is clicked.If not loaded then start loading.
function TransformThisTab(GroupIndex){ 
    var SPANOBJ=document.getElementById("GroupSpan"+GroupIndex);
    if(SPANOBJ){
        if(!IsLoaded(SPANOBJ)) {
            CurrGroupNode=GblGroupsNode.selectSingleNode("Group[@GroupIndex=" + GroupIndex + "]");
            CurrGroupIndex=CurrGroupNode.getAttribute("Index");
            CurrGroupID=CurrGroupNode.getAttribute("GroupID");
            //call aynch
            SPANOBJ.setAttribute("Loading",1);
            QRY="&Param1="+lFUID+"&Param2="+lProjID+"&Param3="+lCorpID+"&Param4="+lElemID+"&Param5="+lFolderID+"&Param6="+lStrtID+"&Param7="+CurrGroupID;
            I_HttpUrlGETAsync("../js/OrchGenericFunctions.asp?FuncIndx=5"+QRY,"I_TransformFillSpan("+CurrGroupIndex+",CurrResponseText)");
        }
    }
}

//check whether this tab is already loaded or not.
function IsLoaded(SpanObj){
    if(!SpanObj.getAttribute("Loading")) 
        return false;
    else 
       return true; 
}

function InitializeCTXML(){
	I_GblCTXML=OrchGenericObj.GetXMLObj("<R/>",0); 
	LoadDTD_XML(); 
}

function ChangeTracked(){ 
	if(I_GblCTXML.documentElement.childNodes.length>0 || I_CtHierXML.documentElement.childNodes.length>0)
		return true;
	else
		return false;
}

function CT_EventToFormElements(){    
    for(i=0;i<GblFormObj.length;i++)
        CT_AttachEvent(GblFormObj[i]);   
    InitializeCTXML(); 
 
}

function LoadDTD_XML(){
	 //Load dtd xml using xmlhttp async
    I_HttpUrlGETAsync(GblDtdXMLPath,"I_SetDTDXML(CurrResponseText)");
}

function I_SetDTDXML(ResText){  
    I_GblDTDXML=OrchGenericObj.GetXMLObj(ResText,0) ; 
    try{eval(OnDTDLoad());}catch(e){}
    
    //Get the MasterTablename from this DTDXML
    var XObj = selectSingleNode(I_GblDTDXML.documentElement,"I[@C='FormStatus']");
    if(XObj)
    	GlbMasterTName = XObj.getAttribute("T");    
}

//function to collect the xpath and return the default value of the same from dtd 
//and assign it to correspodning input field.whose name is same as dtd xpath
function SetDTDDefault(xpath){ 
	XpathNode=selectSingleNode(I_GblDTDXML.documentElement,"I[@N='" + xpath + "']");
	if(XpathNode){    
		var DefObj=$$(xpath);
		if(Trim(DefObj.value+"")==""){
			if(XpathNode.getAttribute("D")) 
				DefObj.value=XpathNode.getAttribute("D");  
		}  
	}
}

/*this function will attach onpropertychange event to all form elements
whose name start with GblRootName(Forms$).If any value is there then it is considered as updated 
and event wont be attached to the same.Then first Form element is considered for addnew.
*/
function CT_EventToObjElements(CurrObj){
	if(GblRootName=="")GblRootName="Forms$";
    //loop thru each form elements and attachEvent
	var ct_Name="",ct_Value="";
	LEN=ArrTagName.length;
    for(var i=0;i<LEN;i++){ 
        ElemCollection=CurrObj.getElementsByTagName(ArrTagName[i]);
        ELEN=ElemCollection.length;
        for(var j=0;j<ELEN;j++){
            ct_Name=ElemCollection[j].name;
            if(ct_Name.indexOf(GblRootName)==0){
                CT_AttachEvent(ElemCollection[j]);   
            }
        }
    } 
}

function CT_AttachEventToDynObj(CurrObj){
	if(GblRootName=="")GblRootName="Forms$";
	//loop thru each form elements and attachEvent
	var ct_Name="",ct_Value=""; FlgDyn="";
	for(var i=0;i<ArrTagName.length;i++){ 
		ElemCollection=CurrObj.getElementsByTagName(ArrTagName[i]);
		ELEN=ElemCollection.length;
		for(var j=0;j<ELEN;j++){
			ct_Name=ElemCollection[j].name;
			if(ct_Name.indexOf(GblRootName)==0){ 
				ct_Value=ElemCollection[j].value; 
				if(i==0 && j==0){ //for adding dynamic index field
					I_AddChangeElem(ct_Name,ct_Value,0);  
					//This logic will have to be changed.
					FlgDyn=((((ct_Name.substr(0,ct_Name.lastIndexOf("$"))).substr(0,(ct_Name.substr(0,ct_Name.lastIndexOf("$"))).lastIndexOf("$"))).substr(0,((ct_Name.substr(0,ct_Name.lastIndexOf("$"))).substr(0,(ct_Name.substr(0,ct_Name.lastIndexOf("$"))).lastIndexOf("$"))).lastIndexOf("$"))).substr(0,(((ct_Name.substr(0,ct_Name.lastIndexOf("$"))).substr(0,(ct_Name.substr(0,ct_Name.lastIndexOf("$"))).lastIndexOf("$"))).substr(0,((ct_Name.substr(0,ct_Name.lastIndexOf("$"))).substr(0,(ct_Name.substr(0,ct_Name.lastIndexOf("$"))).lastIndexOf("$"))).lastIndexOf("$"))).lastIndexOf("$")))+((ct_Name.substr(0,ct_Name.lastIndexOf("$"))).substr(0,(ct_Name.substr(0,ct_Name.lastIndexOf("$"))).lastIndexOf("$"))).substr(((ct_Name.substr(0,ct_Name.lastIndexOf("$"))).substr(0,(ct_Name.substr(0,ct_Name.lastIndexOf("$"))).lastIndexOf("$"))).lastIndexOf("$"));
				}
				else if((Trim(ct_Value+" ")!="")&& (FlgDyn!="" && ct_Name!=FlgDyn)) { 
					I_AddChangeElem(ct_Name,'',1); }   //for checking default value and adding it as update
				else if(FlgDyn!="" && ct_Name!=FlgDyn)
					CT_AttachEvent(ElemCollection[j]);   
			}
		}
	} 
}

function CT_AttachEvent(Obj){ 
	if(GblRootName=="")GblRootName="Forms$";
	if(Obj.name){
	   ObjName=Obj.name;   
	if(ObjName.indexOf(GblRootName)==0)
	{
		if(iBrowser==1)
			Obj.attachEvent("onpropertychange",CT_TrackUpdate);
		else
			Obj.oninput	=	CT_TrackUpdate;
	}
    }
} 

function CT_TrackUpdate(){ 
	if(!CTAfterLoad){if(GblOnLoadOver)CTAfterLoad=true;}
	//only if value attribute is changed.
	
	var ct_ObjName;
	try{
		ct_ObjName=event.srcElement.name;
	}
	catch(ee){
		ct_ObjName=this.name;
	}
	I_AddChangeElem(ct_ObjName,'',1);
	//once change is tracked detach event
	if(iBrowser==1)
		event.srcElement.detachEvent("onpropertychange",CT_TrackUpdate);
	else
		this.oninput 	=	null;
	
	// for calcEngine. When the textbox is changed, pass the xpath and check if it is input to other field.
	// if yes then attach onchange event.
	if(lCAppID=='64' && lEditRView=='5')
	{
		var IsAttach=I_AttachEvnt(ct_ObjName);
		if(IsAttach)
		{    
			if(iBrowser==1)
				event.srcElement.attachEvent("onchange",calcAttach);
			else
				this.onchange=	calcAttach;
		}
	}
}
 
function calcAttach()
{
 CE();
}


function CT_TrackDelete(IndxObj){ 
    var ct_Value= IndxObj.value ; 
    var ct_Name=IndxObj.name; 
    var ct_Elem=ct_Name.substring(ct_Name.lastIndexOf(ct_Value)+ (""+ct_Value).length)  ;
    //first delete all child
    ct_Nodes=selectNodes(I_GblCTXML.documentElement,"I[starts-with(@N, '"+ ct_Name.substring(0,ct_Name.lastIndexOf(ct_Value))+ ct_Value +"$" + ct_Elem.substring(0,ct_Elem.indexOf('$'))  +"')]");
    for(m=0;m<ct_Nodes.length;m++){ 
		ct_TempElem = ct_Nodes[m];
		I_GblCTXML.documentElement.removeChild(ct_TempElem); 
	}
	
    //set delete flag if deleted.
    //if newly added and not done autosave then no need of tracking delete;
    if(ct_Value.charCodeAt(0)!=45 ) 
        I_AddChangeElem(ct_Name,ct_Value,2); 
    else{ //come to else which in turn check the same in GblNewIndexXML and send delete if its existing
		ct_IndxX=(ct_Name.substring(0,ct_Name.lastIndexOf("$"))).substring(0,(ct_Name.substring(0,ct_Name.lastIndexOf("$"))).lastIndexOf("$"));
		var DNode=selectSingleNode(GblNewIndexXML.documentElement,"I[@X='"+ ct_IndxX +"']");
		if(DNode) 
			I_AddChangeElem(ct_Name,ct_Value,2); 
	    else if(RetainCtXmlFlg==1){//some error happened.ctxml is retained. an item is deleted frm gui 
            var TmpXMLOBJ=I_GetXMLObj(getXmlStr(I_CtHierXML.documentElement),0);
            TmpXMLOBJ.setProperty("SelectionLanguage", "XPath");  
            TmpXMLOBJ.setProperty("SelectionNamespaces", "xmlns:CT='urn:PointCross-ChangeTracker'");
            var XpathStr=ct_Name.substring(0,ct_Name.substring(0,ct_Name.lastIndexOf("$")).lastIndexOf("$"));
            DNode=selectSingleNode(TmpXMLOBJ.documentElement,"//*[@CT:X='"+XpathStr+"']");
            if(DNode){
                ctFlag=DNode.getAttribute("CT:F"); 
                if(ctFlag=="0"){
                    DNode.parentNode.removeChild(DNode);
                    I_CtHierXML= TmpXMLOBJ;
                }
            }
        }
    }
}

function DelAllTracked(IndxObj){
    var ct_Value= IndxObj.value ; 
    var ct_Name=IndxObj.name; 
    var ct_Elem=ct_Name.substring(ct_Name.lastIndexOf(ct_Value)+ (""+ct_Value).length)  ;
    //first delete all child
    ct_Nodes=selectNodes(I_GblCTXML.documentElement,"I[starts-with(@N, '"+ ct_Name.substring(0,ct_Name.lastIndexOf(ct_Value))+ ct_Value +"$" + ct_Elem.substring(0,ct_Elem.indexOf('$'))  +"')]");
    for(m=0;m<ct_Nodes.length;m++){ 
		ct_TempElem = ct_Nodes[m];
		I_GblCTXML.documentElement.removeChild(ct_TempElem); 
	}
}
function DelTracked(Xpath){  
    var ct_Node=selectSingleNode(I_GblCTXML.documentElement,"I[@N='"+ Xpath +"']");
    if(ct_Node)
		I_GblCTXML.documentElement.removeChild(ct_Node); 
}
//will remove index from form element names.
function I_RemoveIndx(StrName){
	sArr=StrName.split("$");
	sArrLen=sArr.length;
	rtn=""; 	
	for(var i=0;i<sArrLen-1;i++){	
		ct_Curr =   sArr[i]; 		
		//index
		if( !IsIndex(ct_Curr))    
			rtn+= ct_Curr + "$"; 
	}	
	
	ct_Curr =   sArr[sArrLen-1];
	ct_Code =   ct_Curr.charCodeAt(0); 
	if(!isNaN(ct_Code))
		rtn+=ct_Curr ;		
	return rtn;
}

//F=0 for insert,1 for update, 2 for delete
function AppendCtXML(NewElemName,F,V){
	I_AddChangeElem(NewElemName,V,F);
	 //once change is tracked detach event
	if(iBrowser==1) 
		$$(NewElemName).detachEvent("onpropertychange",CT_TrackUpdate);
	else
		$$(NewElemName).oninput  = null; 
	if(V!='')$$(NewElemName).value=V;
}

//Add element to Gbl CT_XML doc
function I_AddChangeElem(NewElemName,V,M){ 
	//if (I_GblCTXML==null)I_GblCTXML=OrchGenericObj.GetXMLObj("<R/>",0);
     ct_NewElem=I_GblCTXML.createElement("I");
     ct_NewElem.setAttribute("N",NewElemName);
     ct_NewElem.setAttribute("F",M);
     ct_NewElem.setAttribute("I",V); 
     ct_NewElem.setAttribute("V",V); 
     I_GblCTXML.documentElement.appendChild(ct_NewElem);
}

function UpdateNewIndexXML(NewIndexXML){
	CurrIndexXML=OrchGenericObj.GetXMLObj(NewIndexXML,0);
	var IndexNodes=selectNodes(CurrIndexXML.documentElement,"I");
	ChildLen=IndexNodes.length; 
	for(var i=0;i<ChildLen;i++){ 
	    currX=IndexNodes[i].getAttribute("X");
	    exI=selectSingleNode(GblNewIndexXML.documentElement,"I[@X='" + currX + "']") ;
	    if(exI)
	        exI.setAttribute("NI",IndexNodes[i].getAttribute("NI"));
	    else{	        
		    MyNewNode = IndexNodes[i].cloneNode(true);
		    GblNewIndexXML.documentElement.appendChild(MyNewNode);
	    }
	}
}
//function return a boolean value. if error retains cthierxml
function UpdateIndexXML(NewIndexXML,RtnFlg){
	try{
		UpdateNewIndexXML(NewIndexXML); 		
		return true;
	}catch(e){
		if(RtnFlg==1)
			RetainCtHierarchyXML();
		return false;
	}
}

//call thi s for alerting tracked xml
function CT_SeeTrack(){ 
		alert(getXmlStr(I_GblCTXML.documentElement));
		
	}

//function will returns change tracked xml as flat <I> tags
function GetTrackedXML(IsQuickUpdate){ 
	if(!IsQuickUpdate)IsQuickUpdate=0;
	//ct was not activated.
	if(GBL_CTFlag!=1)return;
	
    try{
        a=I_GblCTXML.documentElement;
        b=I_GblDTDXML.documentElement;
    }catch(e){return false;}
    SetCTDefaultAttribute();    
    //all atributes of dbxml is set to CTxml
    var AttrColl = selectNodes(I_GblDTDXML.documentElement,"@*");
    for (var attr = AttrColl.nextNode(); attr != null; attr = AttrColl.nextNode())
        I_GblCTXML.documentElement.setAttribute(attr.nodeName,attr.text) ;
        
    ct_Nodes=selectNodes(I_GblCTXML.documentElement,"I");  
    var ct_ArrFileID=",";
    for(var i=0;i<ct_Nodes.length;i++){
        ct_eachNode=ct_Nodes[i];ct_FID=-1;
        ct_NextPart="";
        ct_Name=ct_eachNode.getAttribute("N");
        ct_Flag=ct_eachNode.getAttribute("F");
        ct_ActualName=ct_Name;	//actual Name
        if(IsQuickUpdate==1){
			//get fileID
			ct_FID=(ct_Name.substring(ct_Name.indexOf("$")+1)).substring(0,(ct_Name.substring(ct_Name.indexOf("$")+1)).indexOf("$"));
			if(isNaN(ct_FID)) continue;
			if(ct_ArrFileID.indexOf(","+ ct_FID +",")==-1) 
				ct_ArrFileID+= ct_FID +","; 
			ct_Name=(ct_Name.substring(ct_Name.indexOf("$")+1)).substring((ct_Name.substring(ct_Name.indexOf("$")+1)).indexOf("$")+1);
        }
		
        ct_ArrN=ct_Name.split("$");
        XPath =""; DTDName="";ct_lastIndx="";
      
        for(var j=0;j<ct_ArrN.length;j++){
            ct_Curr =   ct_ArrN[j];
            ct_Code =   ct_Curr.charCodeAt(0);
            //Is dynamic index  either -  or between 0 & 9. Elem/Attr wont start with same
            if( IsIndex(ct_Curr)) {
                ct_lastIndx = ct_Curr;  
                XPath+= "$["+ ct_Curr + "]"  ;
                ct_NextPart= ct_ArrN[j+1];
            }
            else if(!isNaN(ct_Code)){//ElemName  
                if(DTDName==""){ 
                    DTDName+= ct_Curr;
                    XPath+= ct_Curr;
                }
                else{ 
                    DTDName+= "$" +ct_Curr;
                    XPath+= "$" +ct_Curr;
                }
            }else{ //Is attribute
                XPath+=    "$";
                DTDName+= "$";
            }
        }  
        ct_Name=ct_ActualName; 
        //get table/column name
        ct_DBNode=selectSingleNode(I_GblDTDXML.documentElement,"I[@N='" + DTDName + "']") ;
      
        if(ct_DBNode){ 
            ct_eachNode.removeAttribute("N"); 
            ct_eachNode.setAttribute("X",XPath);
            if(ct_Flag!=2){
              var DataType;
				 if (ct_DBNode.getAttribute("DY"))
				 {
				    DataType = ct_DBNode.getAttribute("DY");
				    if (DataType == "CLOB")
				    {
				        ct_eachNode.text = $$(ct_Name).value;
				     }
					else
					    ct_eachNode.setAttribute("V",$$(ct_Name).value);
				 }
				 else
				       ct_eachNode.setAttribute("V",$$(ct_Name).value);
                //set back the onproperty change event to the Obj for further Change Tracking
                CT_AttachEvent($$(ct_Name));
            }
            ct_eachNode.setAttribute("T",ct_DBNode.getAttribute("T"));
            ct_eachNode.setAttribute("C",ct_DBNode.getAttribute("C"));
            ct_eachNode.setAttribute("I",ct_lastIndx); 
            ct_eachNode.setAttribute("FL",ct_FID); 
            if(IsQuickUpdate==1){
				try{   
					var ChgObj=$$(ct_Name); 
					if(ChgObj.getAttribute("D")==1){ 
						if(ChgObj.value==-1)
							ct_eachNode.setAttribute("F",0); 
					}	
				}catch(e){}
			}
        }else
            I_GblCTXML.documentElement.removeChild(ct_eachNode);  
    }   
    if(IsQuickUpdate==1){
		if(ct_ArrFileID==",")
			ct_ArrFileID="";
		else
			ct_ArrFileID=(ct_ArrFileID.substring(ct_ArrFileID.indexOf(",")+1)).substring(0,(ct_ArrFileID.substring(ct_ArrFileID.indexOf(",")+1)).length-1);
		I_GblCTXML.documentElement.setAttribute("ArrFileID",ct_ArrFileID);
	}
	RtnCTXML=I_TranformSS(getXmlStr(I_GblCTXML),CT_SortXSL);
	InitializeCTXML();

	return RtnCTXML;
} 

var CtPrevElem;
function AddElemToCtHierXML(ElemName){ 
	var ElemObj=I_CtHierXML.createElement(ElemName); 
	CtPrevElem.appendChild(ElemObj);
	return ElemObj; 
}

function GetElemPrimaryID(XP){ 
	var NewIndexNode=selectSingleNode(GblNewIndexXML.documentElement,"I[@X='"+ XP +"']");
	if(NewIndexNode) 
		return NewIndexNode.getAttribute("NI");
	else
		return 0;
}

//function will returns change tracked xml in the same Hierarchy of input xml.
// quick update is not taken care in this function.

function RetainCtHierarchyXML(){ 
	I_CtHierXML=I_RetainCtXml;
	RetainCtXmlFlg=1;
}
//these variables are back up of ctxml and hierxml in case of js error
var BI_GblCTXML,BI_CtHierXML, GblCtErr=false;
function GetCtHierarchyXML(){  
    CTAfterLoad=false; 
    try{
        a=I_GblCTXML.documentElement;
    }catch(e){return false;}  
      
	BI_GblCTXML=I_GblCTXML;
	BI_CtHierXML=I_CtHierXML;
	GblCtErr=false;
	try{
		//  make root elem from DTD root tag.
		var DTDRoot=I_GblDTDXML.documentElement.tagName;
		var DTDRootIDTY="",RootIDTY_X="";
		if(I_GblDTDXML.documentElement.getAttribute("IDTY"))
		    DTDRootIDTY=I_GblDTDXML.documentElement.getAttribute("IDTY");
		RootIDTY_X=DTDRoot+"$"+DTDRootIDTY+"$";
		if(RetainCtXmlFlg==0)
			I_CtHierXML=OrchGenericObj.GetXMLObj("<" + DTDRoot + "/>",0);  
	    
		//I_GblCTXML=OrchGenericObj.GetXMLObj(I_TranformSS(I_GblCTXML.documentElement.xml,CT_SortHierXSL),0); 
	    	
		var ct_Nodes=selectNodes(I_GblCTXML.documentElement,"I"); 
		var ct_NodesLen=ct_Nodes.length;
		var ct_Name,ct_eachNode,ct_Flag,ct_ArrN,ct_ArrNLen,GblRootUniqueID="",TmpInt;
		var ct_Curr,ct_Code,PrevDynIndx,ct_CData=0,IDTYNODE=null; 
		//	GblRootID not blank 
		if(DTDRootIDTY!=""){		
			GblRootUniqueID=$$(RootIDTY_X).value+"";
	    	if(GblRootUniqueID.charCodeAt(0)==45 || GblRootUniqueID==""){
				//  and check its value is <=0 then check its existing in GblIndexXml.			
				TmpInt=GetElemPrimaryID(RootIDTY_X);
				//	if existing use the new UniqueID or else use -1. if neagtvie the add F=0 and X=GblRootID
				if(TmpInt!=0)
					GblRootUniqueID=TmpInt+"";
				else
					GblRootUniqueID="-1";
			}
			
			if(RetainCtXmlFlg==0){
				I_CtHierXML.documentElement.setAttribute("CT:I",GblRootUniqueID);
				I_CtHierXML.documentElement.setAttribute("CT:Ins",I_GetCookie("S","InstanceID"));
				if(GblRootUniqueID.charCodeAt(0)==45  || GblRootUniqueID.charCodeAt(0)==48 )
					I_CtHierXML.documentElement.setAttribute("CT:F",0);	 
				else
					I_CtHierXML.documentElement.setAttribute("CT:F",1);	 
			}
			 //then add it as an attribute to root.    
		} 
		if(RetainCtXmlFlg==0){
			//adding name space as attribute
			I_CtHierXML.documentElement.setAttribute("CT:X",RootIDTY_X);	 
			I_CtHierXML.documentElement.setAttribute("xmlns:CT","urn:PointCross-ChangeTracker"); 
		}
		//  loop thru each <I> of I_GblCTXML.
	 
		for(var i=0;i<ct_NodesLen;i++){
			ct_eachNode=ct_Nodes[i];
			ct_Name=ct_eachNode.getAttribute("N");
			DTDName=I_RemoveIndx(ct_Name);
			InXpath=DTDRoot+"$"; 
			ct_CData=0;ct_DecFlg=0;DECObj=null;
			DTDNode=selectSingleNode(I_GblDTDXML.documentElement,"//*[@N='" + DTDName + "']");
			if(DTDNode){ 
				ct_CData=DTDNode.getAttribute("A");
				ct_DecFlg=DTDNode.getAttribute("H");
				ct_Flag=ct_eachNode.getAttribute("F");		
	 			ct_ArrN=ct_Name.split("$");
				ct_ArrNLen=ct_ArrN.length;
		 		PrevDynIndx="";
		 		PrevX="";
				
				CtPrevElem=I_CtHierXML.documentElement; 
			 
				//this loops check dynamic or not. if not then check elem exits or not.if not add
 				for(var j=1;j<ct_ArrNLen-1;j++){
 					ct_Curr =   ct_ArrN[j];
					ct_Code =   ct_Curr.charCodeAt(0);
					InXpath += ct_Curr + "$";
	 
					if(!isNaN(ct_ArrN[j+1].charCodeAt(0)) && j<=ct_ArrNLen-2){
						//Is dynamic index  either -  or between 0 & 9. Elem/Attr wont start with same
						if(IsIndex(ct_Curr) ) { 				
							//if negative check for nex index exists in GblIndexXml
							PrevX=InXpath + ct_ArrN[j+1];						
							if(ct_Code==45){	//PrevDynIndx=getlatestindex from GblIndexXml							 
								 ExistIndex=GetElemPrimaryID(PrevX); 
								 if(ExistIndex==0)
									PrevDynIndx= ct_Curr;								
								 else
									PrevDynIndx= ExistIndex;							
							}
							else    
								PrevDynIndx= ct_Curr;									
						}
						else{              
							XPath=ct_Curr;
							//if not dynamic then check with out xpath
							if(PrevDynIndx!="")
								XPath=ct_Curr + "[@*[1]='" + PrevDynIndx + "']";				
							//already exists in I_CtHierXML or not	
								 
							ElemNode=selectSingleNode(CtPrevElem,XPath);
							
							if(!ElemNode){					
								CtPrevElem=AddElemToCtHierXML(ct_Curr); 
								//add CT:I,CT:F,CT:X 
								if(PrevDynIndx!=""){
									CtPrevElem.setAttribute("CT:I",PrevDynIndx);
									//check for IDTY in dtd and set tht value also
									IDTYNODE=selectSingleNode(I_GblDTDXML.documentElement,"//*[@N='" + I_RemoveIndx(PrevX) + "']");
									if(IDTYNODE){
									    if(IDTYNODE.getAttribute("IDTY"))
									        CtPrevElem.setAttribute(IDTYNODE.getAttribute("IDTY"),PrevDynIndx); 
									}
									//if last item then only actual flag will go.else flag will always be 1
									if((j+3)==ct_ArrNLen)
										CtPrevElem.setAttribute("CT:F",ct_Flag);
									else
										CtPrevElem.setAttribute("CT:F",1);
									
									CtPrevElem.setAttribute("CT:X",PrevX); 
									CtPrevElem.setAttribute("xmlns:CT","urn:PointCross-ChangeTracker"); 
								}    
							}
							else	
								CtPrevElem=ElemNode;							
							PrevDynIndx=""; 	
						}
					} 
				} 
				
				//is last one attribute or element
				ct_Curr =   ct_ArrN[ct_ArrNLen-1];
				ct_Code =   ct_Curr.charCodeAt(0);
				Obj=$$(ct_Name); 
				
				if(!isNaN(ct_Code)){//Element 
					if(ct_Flag!=2){
						ElemNode=selectSingleNode(CtPrevElem,ct_Curr);
						if(!ElemNode)
							CtPrevElem=AddElemToCtHierXML(ct_Curr);  
						else
							CtPrevElem=ElemNode;
						ObjValue=CT_GetObjValue(Obj,ct_Name,ct_DecFlg); 
						if(ct_CData==1){
							CD=I_CtHierXML.createCDATASection(ObjValue);
							CtPrevElem.appendChild (CD);  
						}else 
							CtPrevElem.text=ObjValue;
					} 
				}else if(ct_Flag==1) {
					ObjValue=CT_GetObjValue(Obj,ct_Name,ct_DecFlg); 
					CtPrevElem.setAttribute(ct_ArrN[ct_ArrNLen-2],ObjValue);
				}
				if(ct_Flag==1) 	
					CT_AttachEvent(Obj); 
			}
		}
	
		InitializeCTXML();  
		I_RetainCtXml=I_CtHierXML; 
		I_CtHierXML=OrchGenericObj.GetXMLObj("<" + DTDRoot + "/>",0);
		RetainCtXmlFlg=0;
		return  getXmlStr(I_RetainCtXml.documentElement); 
		
    }catch(e){
		I_GblCTXML=BI_GblCTXML;
		I_CtHierXML=BI_CtHierXML; 
		HandleJSError(e.description, window.location.href, ct_Name);
		GblCtErr=true; 
		CTAfterLoad=true;
		return "";		  
    }
} 

function CT_GetObjValue(Obj,ObjName,DecFlag){ 
	if(DecFlag==1){ //dhtml editor id must be "DEC_" + HdnFieldName
		DECObj=document.getElementById("DEC_" +ObjName);  
		return DECObj.DOM.body.innerHTML;		
	}
	else
		return  Obj.value;
}

//for removing all the tr of a table and track change.This is called from  autofill.js
function I_RemoveAllTr(TblID){ 
    var TblObj=document.getElementById(TblID);	
    var TrLen=TblObj.rows.length;
    for ( var i=0;i<TrLen  ; i++){   
        CT_TrackDelete(TblObj.rows[0].getElementsByTagName("INPUT")[0]);
        TblObj.deleteRow(0);
    }
}

//this function is used for adding dynamic rows on load.
//This is required in case of dynamic rows are required by default.
function AddNewElemOnLoad(StrTableID,StrVariableName,InsertTop){
	if(!StrVariableName)StrVariableName='';
	if(!InsertTop)InsertTop='';  
	setTimeout("AddNewElem('" + StrTableID + "' , " + StrVariableName + " , " + InsertTop + ")",1000); 
}

//add New Dynamic Row
function I_AddNewElem(StrTableID,StrVariableName,InsertTop){  
	var StrVar;
	var TemplateTabObj;
	var TableObj		= document.getElementById(StrTableID);
	var TemplateTable	= TableObj.getAttribute("TEMPLATE_TABLE");
	var ParentTableIDStr= TableObj.getAttribute("THIS_PARENTTABLE");
	var ReplaceStr		= TableObj.getAttribute("REPLACE_INDEXSTR");
	if(!ReplaceStr)		ReplaceStr		= DEFAULT_REPLACE_STR;

	if(TemplateTable){
		StrVar = eval(TemplateTable + "_VAR" );
		TEMP_DIV.innerHTML = StrVar;
		TemplateTabObj	= document.getElementById(TemplateTable + "_TEMPLATE");
	}
	else{
		StrVar = eval(StrTableID + "_VAR" );
		TEMP_DIV.innerHTML = StrVar;	
		TemplateTabObj	= document.getElementById(StrTableID + "_TEMPLATE");
	}
	
	var LastFrmIndex;
	//if StrVariableName is not passed it can be set as an attribute of the table itself.
	if(!StrVariableName){
		if(TableObj.getAttribute("StrVariableName"))
			StrVariableName=TableObj.getAttribute("StrVariableName");	
	}
 
	if(StrVariableName){
		Str_Glb_varName = StrVariableName;
		var GlbVar = eval("window." + StrVariableName);
		GlbVar--;
		LastFrmIndex = GlbVar;  
		eval(Str_Glb_varName + "--");
	}
	else{
		LastFrmIndex = TableObj.getAttribute("FORMS_INDEX_VAL") ;
		if(LastFrmIndex)
			LastFrmIndex = eval(LastFrmIndex);
		else
			LastFrmIndex = 0;
			
		LastFrmIndex--;
		TableObj.setAttribute("FORMS_INDEX_VAL",LastFrmIndex)		;
	}	
	InsertPos=TableObj.rows.length;
	if(InsertTop==1)InsertPos=0;
	
	var NewRow  = TableObj.insertRow(InsertPos);
	var TemplateRowObj	= TemplateTabObj.rows[0];
	for(var j = 0 ; j < TemplateRowObj.cells.length ; j ++){
		var StrContent = TemplateRowObj.cells[j].innerHTML  ;
		StrContent = I_ReplaceAll(StrContent,ReplaceStr,LastFrmIndex);
		var CurrentTable = TableObj;
		while(ParentTableIDStr){
			var ParentTableObj		= document.getElementById(ParentTableIDStr);
			var ParentReplaceStr	= ParentTableObj.getAttribute("REPLACE_INDEXSTR");
 
			if(!ParentReplaceStr)
				ParentReplaceStr	= DEFAULT_REPLACE_STR;
			var ParentLastIndex		= CurrentTable.getAttribute("THIS_PARENT_INDEX");

			StrContent = I_ReplaceAll(StrContent,ParentReplaceStr,ParentLastIndex); 
			I_UpdateAttributes(TemplateRowObj,ParentReplaceStr,ParentLastIndex,0)	;
			CurrentTable = ParentTableObj;
			//each
			ParentTableIDStr = ParentTableObj.getAttribute("THIS_PARENTTABLE");
		}	
		TemplateRowObj.cells[j].innerHTML = StrContent;
		I_UpdateAttributes(TemplateRowObj.cells[j],ReplaceStr,LastFrmIndex,0)	;
		ParentTableIDStr= TableObj.getAttribute("THIS_PARENTTABLE");
	}
	
	swapNode(NewRow,TemplateRowObj);
	//here it will update Change Tracker
	I_UpdateAttributes(TemplateRowObj,ReplaceStr,LastFrmIndex,1)	;
	TEMP_DIV.innerHTML=  "";
	
	if(lCAppID=='64' && lEditRView=='5')
	{
	 DynSetFormula(TemplateRowObj,1);	//For CalcEngine to name the newly added fields in Excel. 
	}
	return LastFrmIndex;
}
//--------------
//add New Dynamic TD
function I_AddNewElemTD(StrTableID,StrVariableName,InsertTop){
  
	var StrVar;
	var TemplateTabObj;
	var TableObj		= document.getElementById(StrTableID);
	var TemplateTable	= TableObj.getAttribute("TEMPLATE_TABLE");
	var ParentTableIDStr= TableObj.getAttribute("THIS_PARENTTABLE");
	var ReplaceStr		= TableObj.getAttribute("REPLACE_INDEXSTR");
	if(!ReplaceStr)		ReplaceStr		= DEFAULT_REPLACE_STR;

	if(TemplateTable){
		StrVar = eval(TemplateTable + "_VAR" );
		TEMP_DIV.innerHTML = StrVar;
		TemplateTabObj	= document.getElementById(TemplateTable + "_TEMPLATE");
	}
	else{
		StrVar = eval(StrTableID + "_VAR" );
		
		TemplateTabObj	= document.getElementById(StrTableID + "_TEMPLATE");
		TEMP_DIV.innerHTML = TemplateTabObj.outerHTML;
	}
	
	var LastFrmIndex;
	
	if(StrVariableName){
		Str_Glb_varName = StrVariableName;
		var GlbVar = eval("window." + StrVariableName);
		GlbVar--;
		LastFrmIndex = GlbVar;
		setTimeout(Str_Glb_varName + "--",0);
	}
	else{
		LastFrmIndex = TableObj.getAttribute("FORMS_INDEX_VAL");
		if(LastFrmIndex)
			LastFrmIndex = eval(LastFrmIndex);
		else
			LastFrmIndex = 0;
			
		LastFrmIndex --;
		TableObj.setAttribute("FORMS_INDEX_VAL",LastFrmIndex);	
	}	

	InsertPos=TableObj.cells.length;

	if(InsertTop==1)InsertPos=0;
	
	var NewRow  = TableObj.insertCell(InsertPos);

	var TemplateRowObj	= TemplateTabObj.childNodes[0].rows[0];
	
	for(var j = 0 ; j < TemplateRowObj.cells.length ; j ++)
	{
		var StrContent = TemplateRowObj.cells[j].innerHTML ;
		StrContent = I_ReplaceAll(StrContent,ReplaceStr,LastFrmIndex);
		var CurrentTable = TableObj;
		while(ParentTableIDStr)
		{
			var ParentTableObj		= document.getElementById(ParentTableIDStr);
			
			var ParentReplaceStr	= ParentTableObj.getAttribute("REPLACE_INDEXSTR");

			if(!ParentReplaceStr)
				ParentReplaceStr	= DEFAULT_REPLACE_STR;
			var ParentLastIndex		= CurrentTable.getAttribute("THIS_PARENT_INDEX");

			StrContent = I_ReplaceAll(StrContent,ParentReplaceStr,ParentLastIndex); 
			I_UpdateAttributes(TemplateRowObj,ParentReplaceStr,ParentLastIndex,0)	;
			CurrentTable = ParentTableObj;
			//each
			ParentTableIDStr = ParentTableObj.getAttribute("THIS_PARENTTABLE");
		}	
		
		TemplateRowObj.cells[j].innerHTML = StrContent;
		I_UpdateAttributes(TemplateRowObj.cells[j],ReplaceStr,LastFrmIndex,0)	;
	}
	NewRow.innerHTML=TemplateRowObj.innerHTML;
	
	//here it will update Change Tracker
	I_UpdateAttributes(NewRow,ReplaceStr,LastFrmIndex,1);
	TemplateTabObj.innerHTML=TEMP_DIV.innerHTML;	
	TEMP_DIV.innerHTML=  "";
	return LastFrmIndex;
}

function I_Get_TemplateDataTD (TableID){ 
    setTimeout("I_SetDynTemplateDataTD('"+TableID+"')" ,10);
    return "";
}

function I_SetDynTemplateDataTD (TableID){ 
    TableObj=document.getElementById(TableID+"_TEMPLATE");
	window[TableID+"_VAR"] = GetTemplateDataTD(TableObj);
	
}

function GetTemplateDataTD(TableID){  
	var TempVar;
	var strTableID=TableID.id;
	if( strTableID.indexOf("_TEMPLATE") !=-1){  
	 	strLen=strTableID.length;
	 	TopTableId=strTableID.substr(0,strLen-9)	;
	}
	//alert(TableID);
	//var TempVar  =	TableID.outerHTML;
	//TableID.outerHTML = "";
	return TempVar;
}
//---------------

function I_UpdateAttributes(SourceObj,ReplaceStr,IndexStr,Flg){
	if(SourceObj.id)
		SourceObj.id = I_ReplaceAll(SourceObj.id,ReplaceStr,IndexStr) ;
	//loop thru each form elements and attachEvent
	var ct_Name="",ct_Value="";
	if(Flg==1)
	    CT_AttachEventToDynObj(SourceObj);	     
} 
//CHANGE TRACKER ENDS

function DoClientTransform(ParamArray,xmlObj){
	//additional values as added as parameters instead of DocumentElement Attributes.
	//Parameters arer passed as array.So it can be of any number.
	//These parameters will be having scope in all xsl's
	if(!xmlObj)xmlObj=MasterXMLObj;
	if(ParamArray){
		if (iBrowser==1){
			for (var key in ParamArray)
				MasterProcessor.addParameter(key, ParamArray[key]);  
		}
		else
			{
			for (var key in ParamArray)
				MasterProcessor.setParameter(key, ParamArray[key]);
		}
	}
    return OrchGenericObj.TranformSS(xmlObj,MasterProcessor) ;
}

var N_S = (navigator.appName.indexOf("Netscape") != -1);
var WD = document;
var PXX = document.layers ? "" : "px";

function FloatThisDiv(id, sx, sy)
{ 
	var el=WD.getElementById?WD.getElementById(id):WD.all?WD.all[id]:WD.layers[id];
	window[id + "_obj"] = el;
	if(WD.layers)el.style=el;
	el.cx = el.sx = sx;el.cy = el.sy = sy;
	el.sP=function(x,y){this.style.left=x+PXX;this.style.top=y+PXX;};
	el.flt=function()
	{
		var pX, pY;
		pX = (this.sx >= 0) ? 0 : N_S ? innerWidth : 
		document.documentElement && document.documentElement.clientWidth ? 
		document.documentElement.clientWidth : document.body.clientWidth;
		pY = N_S ? pageYOffset : document.documentElement && document.documentElement.scrollTop ? 
		document.documentElement.scrollTop : document.body.scrollTop;
		if(this.sy<0) 
		pY += N_S ? innerHeight : document.documentElement && document.documentElement.clientHeight ?
		document.documentElement.clientHeight : document.body.clientHeight;
		this.cx += (pX + this.sx - this.cx)/8;this.cy += (pY + this.sy - this.cy)/8;
		this.sP(this.cx, this.cy);
		setTimeout(this.id + "_obj.flt()", 40);
	};
	return el;
}

function DispStatusMessage(Msg,ForeCol,BgCol,ImgFlg){ 
	try{window.clearTimeout(GblMsgTimer);}catch(e){}  
	ComnSpnMessage.style.color= ForeCol;
	ComnSpnMessage.style.background= BgCol; 
	ComnSpnMessage.innerText=   Msg  ;
	ComnTblMessage.style.display="";
	ComnSpnMessage.style.display="";
	if(ImgFlg==1)
		ComnImgLoading.style.display="none";
	else
		ComnImgLoading.style.display="";	
}	

var GblMsgTimer;
function HideStatusMessage(MS){
	try{window.clearTimeout(GblMsgTimer);}catch(e){} 
	setTimeout("I_HideStatusMessage()",MS);
}

function I_HideStatusMessage(){
	 ComnTblMessage.style.display='none';
	 ComnSpnMessage.style.display='none';
	 ComnImgLoading.style.display='none' ;
	 window.clearTimeout(GblMsgTimer); 
}


function I_GetCurrencyFormat( Amount )
{
	
	var Delimiter = ",";
	var StrData = Amount;
//	alert("a");
	if (StrData != null && StrData != "")
	{
		var Arr = StrData.split( '.', 2 );
		var i = parseInt( Arr[0] );
		var Dec = "";
		if( Arr.length > 1 ) Dec = Arr[1];
		
		if( isNaN(i) ) 
		{ 
			Obj.value = '';
			return; 
		}
		var minus = '';
		if(i < 0) {minus = '-';}
		i = Math.abs(i);
		var n = ""+i;
		var a = [];
		while(n.length > 3)
		{
			var nn = n.substr(n.length-3);
			a.unshift(nn);
			n = n.substr(0,n.length-3);
		}

		if(n.length > 0) {a.unshift(n);}
		n = a.join(Delimiter);
		if(Dec.length < 1) 
			StrData = n; 
		else 
			StrData = n + '.' + Dec; 

		StrData = minus + StrData;
	}
//	alert("b");
	return StrData;
}

function GetCurrencyFormat(Obj)
{
	var Delimiter = ",";
	var StrData = ReplaceAll( Obj.value, Delimiter, "" );
	Obj.value = I_GetCurrencyFormat( StrData );
}

function GetForPOST(EName,_Data){	 
	var rtn=EName+ "=" + escape(_Data).replace( new RegExp( "\\+", "g" ), "%2B" ); 
	
	if(GblSolo) return rtn;
	
	//must split this before saving if exceeds limit 
	//Set the limit for field size.
	var FormLimit = 50000;	//102399 
 
	if (_Data.length > FormLimit){
		var TempVar = "";
		TempVar=_Data;
		rtn=EName+ "=" + escape(TempVar.substr(0, FormLimit)).replace( new RegExp( "\\+", "g" ), "%2B" ); 
		 
		TempVar = TempVar.substr(FormLimit);
		while (TempVar.length > 0){ 
			rtn+="&" + EName + "=" + escape(TempVar.substr(0, FormLimit)).replace( new RegExp( "\\+", "g" ), "%2B" ); 
			TempVar = TempVar.substr(FormLimit);
		}				
	}  	
	return rtn;
}

function DelAllChildNodes(Obj){
	var NodeColl=Obj.childNodes;
	var NodeLen=NodeColl.length;
	
	for(var j=0;j<NodeLen;j++)
		Obj.removeChild(NodeColl[0]); 
	return Obj;
}

function GetNotNullVal(NodeObj,AttrName){
	if(NodeObj.getAttribute(AttrName))
		return NodeObj.getAttribute(AttrName);
	else
		return "";
}

function IndexFrmName(s){
	sArr=s.split("$");
	sLen= sArr.length;
  
	for(var n=sLen-1;n>=0;n--){ 
		//index		
		if( IsIndex(sArr[n]) )  
			return sArr[n];  
	} 
	return "";
}
 
function IsIndex(StrIndx){
    var _Code =   StrIndx.charCodeAt(0);			
	//if not guid with 4 '-' / or first char '-' / first char between 0 & 9
	if( I_SubStrCount(StrIndx,"-")==4 || (_Code==45) ||( _Code>47 && _Code<58) )   
	    return true;
	else
	    return false; 
}	

//return whether index/uniqueid is new.ie, 0 or negative or guid
function IsNewIndex(StrIndx){
    if(StrIndx=="")return false;
    var _Code =   StrIndx.charCodeAt(0);			
	//if not guid with 4 '-' / or first char '-' / 0
	if( I_SubStrCount(StrIndx,"-")==4 || _Code==45 || _Code==48 )   
	    return true;
	else
	    return false; 
}		

//replace qry string value and returns.
//url,querystring name,new querystring value
//if not found add the same
function UpdateQS(QS,QN,QV){
    var _S=QS,F=0;
    QS="";
    var arrS=_S.split("?");
    QS=arrS[0]+"?";

    _S=arrS[1];	
    arrS=_S.split("&");
    var _NV="";

    for(var i=0;i<arrS.length;i++){
	    _NV=arrS[i].split("=");
	    if(_NV.length==2){
			if(i>0)
				QS+="&";	
			if(_NV[0].toLowerCase()==QN.toLowerCase()) {
				QS+=_NV[0] + "=" + QV;	
				F=1;
			}
			else
				QS+=_NV[0] + "=" + _NV[1];
		}
    }
    if(F==0)QS+= "&" + QN + "=" + QV;
    return QS;
}
function GetQSV(QS,QN){
    var QPos = QS.indexOf("?");
    if(QPos > 0)QS = QS.substring(QPos + 1,QS.length)
    QN=QN.toLowerCase();
    var TmpArr = QS.split("&"); 
    var PairArr;
    for(var i = 0; i < TmpArr.length; i ++){
	    PairArr = TmpArr[i].split("=");
	    if(PairArr[0].toLowerCase()==QN)return PairArr[1];
    }   
    return "";
}
function $(s){
    return document.getElementById(s);
}
function $$(s){
    if(!GblFormObj)
        return document.getElementsByName(s)[0];
    else
        return GblFormObj.elements[s];
}
function $$$(eName) {
   var collection = $$(eName);
   return (collection && !collection.length) ? [collection] :(!collection ? [] : collection);
}  
//html editor code starts-------
function PutEditor(Arr){
    //load xsl  
    _gTbSt[6]=Arr.FontFamily;
    _gTbSt[7]=Arr.FontSize;
    var _Arr=new Array();
    _Arr.Name=Arr.Name;
    _Arr.Value=document.getElementsByName(Arr.Name)[0].value;
    _Arr.FontFamily=Arr.FontFamily;
    _Arr.FontSize=Arr.FontSize;
    _Arr.SOLO=GblSolo;
    if(Trim(_Arr.Value)=="")_Arr.Value="<DIV></DIV>";
    
    var _Xml=I_GetXMLObj("<R/>",0);  
    var _Proc=I_GetProcessor("../JS/Editor.xsl",_Arr);
    document.write(I_TranformSS(_Xml,_Proc));
}
    
var _gCmd=new Array();
_gCmd[0]='Cut';_gCmd[1]='Copy';_gCmd[2]='Paste';_gCmd[3]='Undo';_gCmd[4]='Redo';
_gCmd[5]='bold';_gCmd[6]='italic';_gCmd[7]='underline';
_gCmd[8]='FormatBlock';_gCmd[9]='FontName';_gCmd[10]='FontSize';
_gCmd[11]='ForeColor';_gCmd[12]='Backcolor';
_gCmd[13]='justifyleft';_gCmd[14]='justifycenter';_gCmd[15]='justifyright';_gCmd[16]='InsertOrderedList';
_gCmd[17]='InsertUnOrderedList';_gCmd[18]='Outdent';_gCmd[19]='Indent';_gCmd[20]='CreateLink';_gCmd[21]='InsertImage';
var _gTbSt=new Array();
_gTbSt[5]=false;_gTbSt[6]=false;_gTbSt[7]=false;_gTbSt[11]='ForeColor';_gTbSt[12]='Backcolor';
_gTbSt[13]=false;_gTbSt[14]=false;_gTbSt[15]=false;_gTbSt[16]=false;
_gTbSt[17]=false;_gTbSt[18]=false;_gTbSt[19]=false;
_gTbSt[20]=false;

var _gDEC=null,_gCF=0,_gTbIT=null,_gTBC=0;
function UpdateEditor(EdName){
    var EdDiv=$("DEC_"+EdName);
    EdDiv.innerHTML=$$(EdName).value;
    _ActDEC(EdDiv); 
}
function LinkAddedImage(ImgTag,openWin) {
    openWin.close();
    ImgTag=window.location.protocol + "//" + window.location.hostname +  GetVirtualDirectory() + ImgTag;
    _ExecInsertImage(ImgTag);
}
function _ExecInsertImage(imgsrc){ 
	_Exec(21,'',imgsrc); 
}
function _Exec(CmdIndx,DynParam,vValue,e){  
	if(!_gDEC)return; 
	var event=getEventObj(e);
	if(CmdIndx==21){//insertimage
		if(!vValue){ 
			window.open("../Descriptors/AttachImage.asp?CrpID="+ lCorpID+"&PrjID="+ lProjID+"&StrtID=" +lStructID+ "&ElemID="+ lElemID,"imglist","resizable=yes,menubar=no,scrollbars=yes,width=450,height=200,left=125,top=230");
			return;
		} 
	}
	if(CmdIndx==11 || CmdIndx==12)//fore,back color
	{ 
		if(iBrowser==1)
			vValue = showModalDialog( "../Mails/inc/selcolor.htm","","font-family:Verdana; font-size:12; dialogWidth:30em; dialogHeight:30em" );
		else
			vValue=showModal("../Mails/inc/selcolor.htm");
	}
	if(DynParam){
		if(CmdIndx>7 && CmdIndx<11)//selectbox
			vValue=DynParam.options[DynParam.getAttribute("selectedIndex")].value;
		else{//group icons
			var _PS=DynParam.split(","); 
			for(var i=0;i<_PS.length;i++){
		try{
			var _TbSpn=event.srcElement.parentElement.parentElement; 
		}
		catch(er){
			var _TbSpn=event.target.parentNode.parentNode;
		} 
				_DECM(4,_TbSpn.childNodes[_PS[i]].childNodes[0]); 
			}
		}
	} 
	if(CmdIndx==20)
		document.execCommand(_gCmd[CmdIndx], false);
	else
		document.execCommand(_gCmd[CmdIndx], false, vValue);
	_gTbSt[CmdIndx]=true;
	if(event)
    	event.cancelBubble=true;
} 
function _DeActDEC(){
    _gCF=0;
}
//****
function _ActDEC(that){
if(!CTAfterLoad){if(GblOnLoadOver)CTAfterLoad=true;}
    _gDEC=that; 
    if(_gCF==0){
        var CtlID=_gDEC.id;
        var _InpObj=$$(CtlID.substring(4,CtlID.length));
        _InpObj.setAttribute("CF",1);
        _gTbIT=$("_TB"+CtlID.substring(4,CtlID.length)).childNodes;
        //_InpObj.value="";
        _gCF=1; 
    } 
      
    var Len=_gTbSt.length;
    var _CST=false,_ICN; 
    for(var i=5;i<Len;i++){
       if(i!=11 && i!=12){
            _CST=document.queryCommandValue(_gCmd[i]);
            if(_gTbSt[i]!=_CST){ 
                if(!(i== 8 ||  i==9 ||  i== 10)){
                    _ICN=_gTbIT[i].childNodes[0];
                    if(_CST)
                        _DECM(5,_ICN);
                    else
                        _DECM(4,_ICN) ;
                }else{//select box
                    if(_CST)
                        _gTbIT[i].value=_CST;
                }
                _gTbSt[i]=_CST;
            } 
        }
    } 
} 

//**** 

 
function _DECM(Evnt,image){
//Evnt 1=onMouseOver,2=onMouseout,3=onmousedown,4= Mouse out,5= force Mouse down.
//1,2,3 are toggle. 4,5 not toggle.
if(!_gDEC)return;
    var element,CN="";
    if(!image)image = event.srcElement;
        element = image.parentElement;
    if(Evnt==1){  //onMouseOver
        if(element.className=="tbButton")
            CN="tbButtonMouseOverUp";
    }else if(Evnt==2){//onMouseout
        if(element.className=="tbButtonMouseOverUp")
            CN="tbButton";
    }else if(Evnt==3){//onmousedown
        if(element.className=="tbButtonMouseOverDown")
            CN="tbButtonMouseOverUp";
        else
            CN="tbButtonMouseOverDown";
    } else if(Evnt==4){// Mouse out
        CN="tbButton";
    } else if(Evnt==5){//Force Mouse down
        CN="tbButtonMouseOverDown";
    } 
    
    if(CN!="")element.className=CN;
} 

function SaveEditors(){
  var arrDEC=$$$("HTMLEditors");
  var Len=arrDEC.length;
  var hdnObj=null,DECObj=null;
  for(var i=0;i<Len;i++){
    hdnObj=$$(arrDEC[i].value);
    if(hdnObj.getAttribute("CF")){
        if(hdnObj.getAttribute("CF")==1){
          DECObj=$("DEC_"+arrDEC[i].value);
	AppendCtXML(arrDEC[i].value,1,DECObj.innerHTML); 
          hdnObj.setAttribute("CF",0);
          _gCF=0;
        }
    }
  }
}
function CT_Editor(n){
    $$(n).setAttribute("CF",1);
}
function FocusEditor(n){
    $("DEC_"+n).focus();
}
 //html editor code Ends-------

function DoConfirmOnExit(Msg){
window.onbeforeunload = function() {
if(CTAfterLoad)
        return Msg;
    };
}
  
function GetHTMLEncode(StrText){ 
	var s;
	s=/&/g;
	StrText= StrText.replace(s,'&amp;');
	s=/</g;
	StrText= StrText.replace(s,'&lt;');
	s=/>/g;
	StrText= StrText.replace(s,'&gt;');
	s=/"/g;
	StrText= StrText.replace(s,'&quot;');
	
	return StrText;
}

  
function BuildAttachTitles(PutAttach){
var InpObj=$$(PutAttach);
var TableID=InpObj.getAttribute("Tb");
var DynamicIndx=InpObj.getAttribute("D");
SApps=InpObj.getAttribute("SA");
STEvname=InpObj.getAttribute("SE");ElN=InpObj.getAttribute("EN");
AttachDocs = $$$(DynamicIndx)
AttachLen = AttachDocs.length;
var Name1=DynamicIndx.substring(0,DynamicIndx.lastIndexOf("$")+1);
var Name2= DynamicIndx.substring(DynamicIndx.lastIndexOf("$"),DynamicIndx.length);
var DocTitles = "",CDocT="";
    for(var c=0;c<AttachLen;c++){ 
    LinkID = AttachDocs[c].value;
    NameU= Name1+LinkID+ Name2+"$T$";CDocT=$$(NameU).value;TitleName=CDocT;
    DocU = Name1+LinkID + Name2+"$I$";  DocID=$$(DocU).value;
    VNoU = Name1+LinkID+ Name2+"$VNo$"; VersionNo=$$(VNoU).value;	    
    FU   = Name1+LinkID + Name2+"$F$";  FId=$$(FU).value;	    
    CU   = Name1+LinkID + Name2+"$C$";  CID=$$(CU).value;	    
    PU   = Name1+LinkID + Name2+"$P$";  PID=$$(PU).value;	    
    SU   = Name1+LinkID + Name2+"$S$";  SID=$$(SU).value;	    
    EU   = Name1+LinkID + Name2+"$E$";  EID=$$(EU).value;	    
    AU   = Name1+LinkID + Name2+"$A$";  A=$$(AU).value;
    SFU   = Name1+LinkID + Name2+"$SF$";  SF=$$(SFU).value;
    DF   = Name1+LinkID + Name2+"$DF$";  DF=$$(DF).value;
    
    if(DocID=="" && FId=="" && CID=="" && PID=="" && SID=="" && EID==""){
    	DocTitles +="<span><span  id='SpnName_"+DocID+"' style='white-space:nowrap;'>&nbsp;"+TitleName+"&nbsp;</span><img align='absmiddle' width='12' height='12' onClick='_PutDelAR(\"" + LinkID+ "\",\"" +TableID+ "\"  )'; style='cursor:hand' title='" + lng_removeitem + "' src='../images/remove.gif'>;</span>";    
    }
    else
        DocTitles +="<span><span  id='SpnName_"+DocID+"' style='white-space:nowrap;' onmouseover='CreateMenu(\""+FId+"\",\""+CID+"\",\""+PID+"\",\""+SID+"\",\""+EID+"\",\""+A+"\",\""+DocID+"\",\""+VersionNo+"\",\""+PutAttach+"\",\""+I_URLEncode(STEvname)+"\",\""+ElN+"\",\""+SF+"\",\""+DF+"\")' onmouseout=\"UR_ClearTimer();DelayHideMenu()\">&nbsp;"+TitleName+"&nbsp;</span><img align='absmiddle' width='12' height='12' onmouseover='CancelEvent()' onClick='_PutDelAR(\"" + LinkID+ "\",\"" +TableID+ "\"  )'; style='cursor:hand' title='" + lng_removeitem + "' src='../images/remove.gif'>;</span>";
  
   }    
    $("Spn_"+PutAttach).innerHTML= DocTitles;
}


function RenameDocAttach(OutXML,PutAttach){
if(GblSolo=="1"){
        OutXML= OutXML.replace(/\+/g," ");
        OutXMLObj = OrchGenericObj.GetXMLObj(OutXML,0);
	   var ItmID=OutXMLObj.documentElement.selectSingleNode("//F/D").getAttribute("D");
	   var ItmName=OutXMLObj.documentElement.selectSingleNode("//F/D").getAttribute("T");
}
else{
      var DispFlg;
      var XmlObj = OrchGenericObj.GetXMLObj(getXmlStr(OutXML),0);
      var XmlNode=XmlObj.documentElement.selectNodes("//R/I/@NI");
      var XMLpath=XmlObj.documentElement.selectNodes("//R/I/@X")
       getItem = new Array(XmlNode.length)
       XPath = new Array(XMLpath.length)
       for(i=0;i<XmlNode.length;i++){
        getItem[i]=XmlNode(i).value;
        if(XmlNode.length==2){
          XPath[i]=XMLpath[i].value;
          var DIndex=XPath[i];
            if(DIndex.substring(DIndex.lastIndexOf("$")-2,DIndex.length+1)=="DE$")
               DispFlg=1;
        }
       }
       if(DispFlg!=1){
        ItmID=getItem[0];ItmName=getItem[1];
       } 
}
   var InpObj=$$(PutAttach); 
   var TableID=InpObj.getAttribute("Tb");
   var DynamicIndx=InpObj.getAttribute("D");
   var Name1=DynamicIndx.substring(0,DynamicIndx.lastIndexOf("$")+1);
   var Name2= DynamicIndx.substring(DynamicIndx.lastIndexOf("$"),DynamicIndx.length);
   var Cnt; 
   ArrN=DynamicIndx;	
   var AttCollect = $$$(ArrN); 
	for(var x=0; x < AttCollect.length; x++ ){
     tilte =$$(Name1+AttCollect[x].value+ Name2+"$T$").value;
     Docid =$$(Name1+AttCollect[x].value + Name2+"$I$").value;   
      if(Docid==ItmID){
        Cnt=AttCollect[x].value;
        break;
     }
 }  
      if(ItmName){
      InpName=Name1 + Cnt + Name2 +"$T$";
      $$(InpName).value= ItmName; 
     }
 }
function DocWithoutCntxt(InpXML,PutAttach){
    var AttachXML  =OrchGenericObj.GetXMLObj(InpXML,0);
    var Nodes=AttachXML.documentElement.selectNodes("I");
    var CreateXML=OrchGenericObj.GetXMLObj("<As/>",0);
    var ObjElem ;
    var InpObj=$$(PutAttach); 
    var TableID=InpObj.getAttribute("Tb");
    var DynamicIndx=InpObj.getAttribute("D");
    var Name1=DynamicIndx.substring(0,DynamicIndx.lastIndexOf("$")+1);
    var Name2= DynamicIndx.substring(DynamicIndx.lastIndexOf("$"),DynamicIndx.length);

    for(var i=0;i<Nodes.length;i++){ 
        NewIndx=AddNewElem(TableID);
	AppendCtXML(Name1 + NewIndx + Name2 + "$A$",1,'32');
	AppendCtXML(Name1 + NewIndx + Name2 + "$T$",1,getFileName(Nodes[i].text));
	AppendCtXML(Name1 + NewIndx + Name2 + "$File$",1,Nodes[i].text);
    }  
    BuildAttachTitles(PutAttach);
 
}

function UpdateDocAttach(AttachXML,PutAttach,FolderID){ 
var ChkFlg=0;
var Len;
if(PutAttach){
	if(GblSolo=="1"){
	   AttachXML= AttachXML.replace(/\+/g," ");
	   OutXMLObj = OrchGenericObj.GetXMLObj(AttachXML,0);
	    var XmlNode=selectNodes(OutXMLObj.documentElement,"//F/D");
	    Len=XmlNode.length;
	    if(Len=="0")
	       alert("Please select only the document");
	  
	    ItmID = new Array(Len)
	    ItmName = new Array(Len)
	     for(var i=1;i<=Len;i++){
	        ItmID[i] = XmlNode[i-1].getAttribute("D");ItmName[i]= XmlNode[i-1].getAttribute("N");
	     }
    }
    else{
		if(typeof(AttachXML)!='object')AttachXML=OrchGenericObj.GetXMLObj(AttachXML,0);
		var ItmID=selectSingleNode(AttachXML.documentElement,"I[@X='F$-1$D']").getAttribute("NI");
		var ItmName=selectSingleNode(AttachXML.documentElement,"I[@X='F$-1$D$T$']").getAttribute("NI");
		
		Len=1;
	}
    var InpObj=$$(PutAttach);
    AttachXML=OrchGenericObj.GetXMLObj("<As/>",0);
    var ObjElem ;
    for(var i=1;i<=Len;i++){ 
	    ObjElem = AttachXML.createElement("At");
	    ObjElem.setAttribute("A",32);
	    if(GblSolo=="1")
	    ObjElem.setAttribute("I",ItmID[i]);
	    else
	    ObjElem.setAttribute("I",ItmID);
	    ObjElem.setAttribute("IT",'');
	    ObjElem.setAttribute("VNo",1);
	    ObjElem.setAttribute("F",FolderID);
	    ObjElem.setAttribute("C",lCorpID);
	    ObjElem.setAttribute("P",lProjID);
	    ObjElem.setAttribute("S",lStructID);
	    ObjElem.setAttribute("E",lElemID);
	    if(GblSolo=="1")
	    ObjElem.setAttribute("T",ItmName[i]);
	    else
	    ObjElem.setAttribute("T",ItmName);
	    ObjElem.setAttribute("SF",'');
	    AttachXML.documentElement.appendChild(ObjElem);
	   
	}	
	ChkFlg=1;
}
if(!PutAttach){PutAttach=GblPutAttach;AttachXML;ChkFlg=2;}
var InpObj=$$(PutAttach);
var TableID=InpObj.getAttribute("Tb");
var DynamicIndx=InpObj.getAttribute("D");
var Name1=DynamicIndx.substring(0,DynamicIndx.lastIndexOf("$")+1);
var Name2= DynamicIndx.substring(DynamicIndx.lastIndexOf("$"),DynamicIndx.length);
if(ChkFlg!='1' || ChkFlg=='2'){
var DynTabObj=$(TableID);
	var inpN,UniID,Xp,Nodes;
	for( RowIndx=DynTabObj.rows.length-1; RowIndx>=0; RowIndx-- ){
		//get index field
		UniID=DynTabObj.rows[RowIndx].getElementsByTagName("INPUT")[0].value;
		Xp="At[@I='"+$$(Name1 + UniID + Name2+"$I$").value+"' and @VNo='"+$$(Name1 + UniID +Name2+"$VNo$").value+"']";
		Nodes=  selectSingleNode(AttachXML.documentElement,Xp);
		if(Nodes)
		    AttachXML.documentElement.removeChild(Nodes);
		else 
		    RemoveDynamicTR(DynTabObj.rows[RowIndx],TableID);	
	}
	GblPutAttach="";
	GblDynamicIndx="";
	GblSelectFolder="0";
}	



    var Nodes=selectNodes(AttachXML.documentElement,"//As/At");
    var FilePath="";
    for(var i=1;i<=Nodes.length;i++){
    NewIndx=AddNewElem(TableID);
    if(Nodes[i-1].getAttribute("File"))
        FilePath=Nodes[i-1].getAttribute("File");
    if(FilePath==""){
        ArrColl = selectNodes(Nodes[i-1],"@*");
	var attr;
        for (var attrCnt=0; ArrColl[attrCnt] != null; attrCnt++){
		attr=ArrColl[attrCnt];
	        InpName=Name1 + NewIndx + Name2 + "$" + attr.nodeName + "$";
		AppendCtXML(InpName,1,attr.text);
        }
    }else{
	AppendCtXML(Name1 + NewIndx + Name2 + "$A$",1,'32');
	AppendCtXML(Name1 + NewIndx + Name2 + "$T$",1,getFileName(FilePath));
	AppendCtXML(Name1 + NewIndx + Name2 + "$File$",1,FilePath);
    }	
}
    BuildAttachTitles(PutAttach);
}


function CancelEvent(){
window.event.cancelBubble = true;
window.event.keyCode = 0;
return false;
}

function _PutDelAR(ID,TblID){//delete  attachments
   if(!confirm(lng_confirmremove))return;
    var TblObj=$(TblID);
    var Len=  TblObj.rows.length; 
    for(var i=0;i<Len;i++){
      if(TblObj.rows[i].getElementsByTagName("INPUT")[0].value==ID){
         RemoveDynamicTR(TblObj.rows[i],TblID);
         PP=event.srcElement.parentNode.parentNode;
         PP.removeChild(event.srcElement.parentNode);
         break;
       }
    }
}

var DOC_UFrame=null;
function CreateMenu(FId,CID,PID,SID,EID,A,DocID,VNo,tempPutAttach,strEventName,ElemName,SF,DF){
    clientY=event.clientY
    clientX=event.clientX
    tempdID=DocID;tempdVersion=VNo;tempFId=FId;tempA=A;tempCID=CID;tempPID=PID;tempSID=SID;tempSF=SF;tempDF=DF;
    tempEID=EID;PutAttach=tempPutAttach;tempstrEventName=strEventName;tempElemName=ElemName;tempstrEventName='';tempElemName='';
    lGetCommonQstr="CrpID="+tempCID+"&PrjID="+tempPID+"&StrtID="+tempSID+"&ElemID="+tempEID+"&StructApps=&stEvName="+tempstrEventName+"&EventActive=&ContextType=&ElemName="+tempElemName+"&PrjViewType=&AttachAgendaFlag=&modViewType=0&LoadFrmTree=&FromDB=";
    if(gMenuTmr)window.clearTimeout(gMenuTmr);    
    try {gMenuTmr=setTimeout("CreateShowMenu()",2000); }catch(e){};
}


function CreateShowMenu(){
 //Buliding Menu in Iframe
    DOC_UFrame=document.getElementById("tempIFrame");
    if(!DOC_UFrame){ 
	    document.body.insertAdjacentHTML("beforeEnd","<iframe  scrolling='no'width='150' height='100' marginwidth='0' marginheight='0' frameBorder='0' style='border:1px black solid;margin:0;overflow:visible;' src='../blank.htm' id='tempIFrame' name='tempIFrame'></iframe>");
        DOC_UFrame=document.getElementById("tempIFrame");
        setTimeout("VersionMenu(false)",200);
    }
	else 
	    VersionMenu(true);
}  

function VersionMenu(TF){  
    if(!TF){
        inner_html="<script>function DelayHideMenu(){parent.DelayHideMenu()}</script>";
        inner_html+="<Div id='Div' width='150' height='100' onMouseover='parent.ClrHideMenu();' onMouseout='parent.DynVerHide(this)'>";
        inner_html+="<table cellpadding='0' cellspacing='0' width='150' height='100' style='text-decoration:none;font-family:verdana;font-style:regular;font-size:8pt;line-height:18px;padding-left: 6px;position: absolute;z-index: 100;background-color:#e5e5e5;BORDER-COLOR:black;cursor:hand;border:2'>";
        inner_html+="<tr><td onclick='parent.ClickOption(1);' onmouseover='parent.HightlightOption(this);' onmouseout='parent.RestoreOption(this);'>Get latest version</td></tr>";
//        inner_html+="<tr><td onclick='parent.ClickOption(2);' onmouseover='parent.HightlightOption(this);' onmouseout='parent.RestoreOption(this);'>Open Details</td></tr>";
        inner_html+="<tr><td onclick='parent.ClickOption(3);' onmouseover='parent.HightlightOption(this);' onmouseout='parent.RestoreOption(this);'>Navigate to Document</td></tr>";			
        if(GblSolo=="0")
              inner_html+="<tr><td onclick='parent.ClickOption(4);' onmouseover='parent.HightlightOption(this);' onmouseout='parent.RestoreOption(this);'>View Online</td></tr>";
        inner_html+="<tr><td onclick='parent.ClickOption(5);' onmouseover='parent.HightlightOption(this);' onmouseout='parent.RestoreOption(this);'>Rename</td></tr>";
        inner_html+="</table></Div>";	
        tempIFrame.document.write(inner_html);
    } 
    DOC_UFrame=document.getElementById("tempIFrame");
    if(DOC_UFrame){
        if(tempdID=='0')
            DOC_UFrame.style.display="none";
        else
            DOC_UFrame.style.display="";
        DOC_UFrame.style.position="absolute";		
        DOC_UFrame.style.top=clientY+10+document.body.scrollTop;
        DOC_UFrame.style.left=clientX+document.body.scrollLeft;
        document.detachEvent("onclick",DelayHideMenu);
    }
} 

function HightlightOption(tdref){
    tdref.style.color = "white";
	tdref.style.background = "navy";
}

function RestoreOption(tdref){
    tdref.style.color = "black";
	tdref.style.background ="#e5e5e5";		
}

function UR_ClearTimer(){
if(gMenuTmr)window.clearTimeout(gMenuTmr);
}

function ClickOption(i){
 
      switch (i){ 		    
		case 2://open details
	        Qrystr='../Documents/Common.asp?CrpID='+ tempCID+'&PrjID='+ tempPID+'&StrtID='+ tempSID+'&ElemID='+ tempEID+'&FolderId='+tempFId+'&DocId='+tempdID+'&VersionNo='+tempdVersion+'&PutAttach='+PutAttach+'&ReadOnlyFlag=0&AppID=32&viewid=12&StructApps=&PrjViewType=0&InboxFlg=0&PermFlag=';
	        window.open(Qrystr,"SOLO","resizable=yes,menubar=no,scrollbars=yes,screenX=100,screenY=100,top=100,left=100,width=700,height=600");
	        break;
	    case 3://Navigate to Document
	         if(GblSolo=="1"){
                  Qrystr="../Documents/Common.asp?CrpID="+tempCID+"&DocId="+tempdID+"&FolderId="+tempFId+"&PrjID="+tempPID+"&StrtID="+tempSID+"&ElemID="+tempEID+"&stEvName="+tempstrEventName+"&StructApps="+lStructApps+"&ContextType=&ElemName="+tempElemName+"&PrjViewType=1&AttachAgendaFlag=&modViewType=0&LoadFrmTree=1&ItmID=&AppID=32&HeaderType=0&viewid=33";
                  window.open(Qrystr,"","resizable=yes,menubar=no,scrollbars=yes,screenX=100,screenY=100,top=100,left=100,width=700,height=600");
             }         
            else {
                  Qrystr="../Documents/Common.asp?CrpID="+tempCID+"&DocId="+tempdID+"&FolderId="+tempFId+"&PrjID="+tempPID+"&StrtID="+tempSID+"&ElemID="+tempEID+"&stEvName="+tempstrEventName+"&StructApps=&ContextType=&ElemName="+tempElemName+"&PrjViewType=1&AttachAgendaFlag=&modViewType=0&LoadFrmTree=1&ItmID=&AppID=32&HeaderType=0&viewid=212";
                  window.open(Qrystr,"","resizable=yes,menubar=no,scrollbars=yes,screenX=100,screenY=100,top=100,left=100,width=700,height=600");
            }         
           break;
	    case 4://for view online 
	        requestbrava(tempFId,tempdID,tempdVersion,TitleName);
	        break;
	    case 5://Rename
	        RenameDocument(tempFId,tempdID,tempdVersion);
	        break;    
	    default://get latest version 
	        GetlatestVersion(tempCID,tempPID,tempSID,tempEID,tempA,tempFId,tempdID,tempdVersion,tempSF,tempPFlag,tempDF)
	        break;
    }
    HideVerMenu();
}

var _VerTmr=null;
function DelayHideMenu(){
 try{window.clearTimeout(_VerTmr);}catch(e){}  
       _VerTmr=setTimeout("HideVerMenu()",2000)
}

function HideVerMenu(){
    if(!DOC_UFrame)return;
	DOC_UFrame=document.getElementById("tempIFrame");	
	DOC_UFrame.style.display="none";
	document.detachEvent("onclick",DelayHideMenu);
	document.detachEvent("onmouseout",DelayHideMenu);
}

function ClrHideMenu(){
if (window._VerTmr)
clearTimeout(_VerTmr)
} 

function DynVerHide(e){ 
try{window.clearTimeout(_VerTmr);}catch(e){} 
 _VerTmr=setTimeout("HideVerMenu()",2000)
}

function SecureDocument(){
    alert("Secure Documents can be downloaded from online Orchestra");
    return false;
}

function GetlatestVersion(C,P,S,E,A,F,D,VNo,SF,Perm,DF){
    DR_UFrame=document.getElementById("DocumentOpen");
    if(!DR_UFrame){
	    document.body.insertAdjacentHTML("beforeEnd","<iframe style='display:' src='../blank.htm' scrolling='no'  frameborder='0' framespacing='0' id='DocumentOpen' name='DocumentOpen' width='100' height='100'></iframe>");
        IframeObj=document.frames["DocumentOpen"];
        IframeObj.document.write("<body topMargin='0' leftMargin='0'></body>");
    }
	if(DF == "1"){
		Qrystr='../Documents/Common.asp?CrpID='+ C+'&PrjID='+ P+'&StrtID='+ S+'&ElemID='+ E+'&FolderId='+F+'&DocId='+D+'&VersionNo='+VNo+'&ReadOnlyFlag=0&AppID=32&viewid=12&StructApps=&PrjViewType=0&InboxFlg=0&PermFlag='+Perm;
		window.open(Qrystr,"View Details","resizable=yes,menubar=no,scrollbars=yes,screenX=100,screenY=100,top=100,left=100,width=700,height=600");
	}
	else{
		if(GblSolo=="1"){
		    if(SF==2)
			    return SecureDocument();
		    else{       
			    var strQryStr="&CrpID="+C+"&PrjID="+P+"&StrtID="+S+"&ElemID="+E+"&FolderID="+F+"&DocID="+D+"&APPID=32&VIEWID=5&InBox=0";
			    var strUrl="../documents/DMSFetchDocument.asp?"+ strQryStr;
			    window.DocumentOpen.location.href=strUrl;
		    }    
		}
		else{
			var strQryStr = lGetCommonQstr+"&FolderId="+F+ "&DocId="+D+"&VersionNo=&Perm=" + Perm + "&SPID="+F+"&EGFlg=0";
			if(SF == 2){
				var strUrl = "../documents/DMSDownloadSecureDoc.asp?" + strQryStr ; 		
				window.open(strUrl,'',"height=150,width=300,top=100,left=100,status=yes,toolbar=no,menubar=no,location=no")
			}
			else{
			    strUrl="../documents/DMSFetchDocument.asp?"+strQryStr;
			    var SoloDocURL=strUrl+"&APPID=32&VIEWID=5&InBox=0";
			    var bFetch=true;
			    try{
			        bFetch=fnDragDropFetch(SoloDocURL,"32","true",strQryStr);
			    }
			    catch(e){}
                if(bFetch)
        			DocumentOpen.location.href = strUrl;
			}	
		} 
	}
}

function requestbrava(docFolderID,docidpar,docversionpar,docnamepar){
        var tempsessionID=GetCookie("S","S");
        docnamepar = escape(docnamepar);
        var wnameBrava = "WindowNam" + Math.round(Math.random()* 1000000) ;
	    var path="http://"+lServerPath+"/English/brava/bravawebkit.asp?SessionID="+tempsessionID+"&"+lGetCommonQstr+"&FolderID="+docFolderID+"&ItmID=" + docidpar + "&VerNo=" + docversionpar + "&Title=" + docnamepar + "&strEmailID=";	    
	    BravaRef = window.open(path,wnameBrava,"resizable=yes,menubar=no,scrollbars=no,screenX=100,screenY=100,top=100,left=100,width=700,height=600");
}


function RenameDocument(F,D,VNo){
   StrUrl = "../Documents/Common.asp?"+lGetCommonQstr+"&DocId="+D+"&FolderId="+F+"&VersionNo="+VNo+"&PutAttach="+PutAttach+"&ReadOnlyFlag=0&Appid=32&viewid=202"
   window.open(StrUrl,'',"resizable=yes,menubar=no,scrollbars=no,screenX=100,screenY=100,top=100,left=100,width=400,height=290");
}

function PutDocAttachment(ArrObj){ 
	if(!ArrObj.Name)
		ArrObj.Name="";
	if(!ArrObj.DynamicIndx)
		ArrObj.DynamicIndx="";
	if(!ArrObj.TableID)
		ArrObj.TableID="";
	if(!ArrObj.Output)
		ArrObj.Output="0";	
	if(!ArrObj.FolderID)
		ArrObj.FolderID="";
	if(!ArrObj.strEventName)
		ArrObj.strEventName="";
	if(!ArrObj.ElemName)
		ArrObj.ElemName="";	
    if(!ArrObj.SelectFolder)
		ArrObj.SelectFolder="0";	
    if(gPutAttName=="")//used only for drag drop
        gPutAttName=ArrObj.Name+"";
 
    var TmpQryStr="";	
        TmpQryStr="crpid="+lCorpID+"&prjid="+lProjID+"&strtid="+lStructID+"&elemid="+lElemID+"&";  
		 
    var st="<table class='small' cellpadding='0' cellspacing='0' width='100%' ondragover='DD_Attachment(\""+ ArrObj.Name +"\",true)' ondragenter='DD_Attachment(\""+ ArrObj.Name +"\",true)'><tr>"
    + "<td width='85px;'><div class='Inset'  onclick=\"GenFuncAttachement('"+ArrObj.Name+"')\" "
    + " onmouseover='DelayMenuS(\""+ ArrObj.Name +"\")'  "
    + " onmouseout='DelayMenuHCall(\""+ ArrObj.Name +"\")' NOWRAP='true' "
    + "style='text-decoration:underline;BACKGROUND-COLOR:#FFFFFF;width:75px'>"
    + "Attachments<img src='../images/downarrowthin.jpg' onmouseout='event.cancelBubble=true;' onmouseover='event.cancelBubble=true;' style='border:1px solid #819bc7'  "
    + "onclick=\"ClkArrThin('"+ArrObj.Name+"',1)\" align='absmiddle'></img></div><input type='hidden' Name='"+ArrObj.Name +"' D='"+ ArrObj.DynamicIndx +"' Tb='"+ArrObj.TableID+"' "
	+ "F='"+ArrObj.FolderID+"' SE='"+ArrObj.strEventName+"' EN='"+ArrObj.ElemName+"' FS='"+ ArrObj.SelectFolder +"'/>"
    + " &nbsp;&nbsp;&nbsp;<div id='PutAttMenu_"+ArrObj.Name +"' style='background:#e1e1e1;display:none;position:absolute;width:70px;"
    + " height:40px;BORDER: 2px outset; '>"
    + "<div style='padding-left:2px' onmouseover='OnOverOut(\""+ ArrObj.Name +"\",true)'"
    +" onmouseout='OnOverOut(\""+ ArrObj.Name +"\",false)' ><img style='cursor:hand' "
    + " alt='Browse Orchestra Documents' src='../images/browseDMS.gif'  onclick=\"GenFuncAttachement('"+ArrObj.Name+"')\"></img>"
	+ "</div><div><iframe style='border:0px;margin:0;scroll:hidden;width:70px' name='DFrame' frameborder='0' FRAMESPACING='0' marginHeight='0' marginWidth='0'vspace='0' width='100' height='25'  scrolling='no'noresize='noresize' "
	+ " src='../Documents/Common.asp?"+TmpQryStr+"FolderID="+ArrObj.FolderID+"&appid=32&viewid=201&viewDoc=2&EventActive=2&PutAttach="+ArrObj.Name+"&ATTACHFLG=1'>"       
	+ "</iframe></div>"
    + "</div></td>"
    + "<td><span  id ='Spn_"+ArrObj.Name +"' class='small' style='width:100%;'></span></td>"
    + "</tr></table>"
          
    if(ArrObj.Output==1)
		return st;
	else{
	    document.write (st);
		return ""
	}	
}

//for showing and hiding putatatch menu- starts
var gMenuTmr=null,gOverOption=false,gAttMenuObj=null;var tempFlg;
function ClkArrThin(CntName,TFlg){
tempFlg=TFlg;
    event.cancelBubble=true;
    var tmpObj=$('PutAttMenu_'+CntName); 
    if(tmpObj.style.display=='none')
        PutAttachMenuSH(CntName,'');
    else
        PutAttachMenuSH(CntName,'none');    
}

function DelayMenuHCall(CntName){ 
    try{window.clearTimeout(gMenuTmr);}catch(e){}  
    gMenuTmr=setTimeout("DelayMenuH('"+CntName+"')",1000);  
}
function DelayMenuH(CntName){
    if(!gOverOption){
        try{window.clearTimeout(gMenuTmr);}catch(e){} 
        if(tempFlg==1){
          PutAttachMenuSH(CntName,'block');
          tempFlg=0;
        }  
        else{
         if(PreAttachFlg!=0){
              PutAttachMenuSH(CntName,'none');    
          PreAttachFlg='';
         }
        }
    }    
}
function OnOverOut(CntName,TF){
    gOverOption=TF;
}
//onmouseover set timer for dropdowndisplay.
function DelayMenuS(CntName){
    try{window.clearTimeout(gMenuTmr);}catch(e){}  
    gMenuTmr=setTimeout("PutAttachMenuSH('"+CntName+"','')",1000); 
}

//onclick clear timer if any. 
var PreAttachFlg;

function PutAttachMenuSH(CntrlName,Disp){
    try{window.clearTimeout(gMenuTmr);}catch(e){}   
    gAttMenuObj=$('PutAttMenu_'+CntrlName); 
    gAttMenuObj.style.display=Disp;
    if(Disp=='none'){//detach event
	if (iBrowser==1)
		document.body.detachEvent('onclick',DocClickH); 
	else
		removeEventHandler(document.body,'onclick',DocClickH);
    }else{
	if(iBrowser==1)
		document.body.attachEvent('onclick',DocClickH); 
	else
		addEventHandler(document.body,'onclick',DocClickH);
    }
}

function DocClickH(){
    gAttMenuObj.style.display='none';
    document.body.detachEvent('onclick',DocClickH); 
}

//for showing and hiding putatatch menu- end 
function GenFuncAttachement(CntrlName){
    try{window.clearTimeout(gMenuTmr);}catch(e){} 
    try{//do pre attachment validation.like prompt for context selection.
        if(!PreAttach())
            return; 
    }catch(e){}
    
    GblPutAttach=CntrlName;
    GblDynamicIndx=$$(CntrlName).getAttribute("D") ; 
    GblSelectFolder=$$(CntrlName).getAttribute("FS") ;
    //Building the Querystring
    var currQrystr = GetMirrorContext();
    
    var wAttname = "WindowAttach";
    currQrystr=UpdateQS("?"+currQrystr,"streventname",I_URLEncode($$(CntrlName).getAttribute("SE")));
    currQrystr=UpdateQS(currQrystr,"FRMATTCNTRL","1");
    var strURL = "../Mails/DocumentAttachment.asp" + currQrystr  ;
    
    window.open(strURL,wAttname,"resizable=yes,menubar=no,scrollbars=yes,status=yes,width=900,height=435,left=50,top=200");
}

function GetMirrorContext(){
    var currQrystr;
    //Building the Querystring
    currQrystr = "CrpID=" + lCorpID + "&PrjID=" + lProjID + "&StrtID=" + lStructID + "&ElemID=" + lElemID +"&CopyLinkFlg=1&Perm=2&ProcessFlg=1&AppID=32&ViewID=33&RetViewID=2&GUI=0&Action=2&ATTACHFLG=1&VIEWTYPE=1&AttachAgendaFlag=1&modViewType=1&strEventName=&ElemName=&PrjViewType=1";
    return currQrystr;
}

var isDrg_Drp_CtrlLoaded = true,gPutAttName="";//gPutAttName is used only for  drag drop of docs
var strDDCtrlDIV="<DIV id='DDCtrlDIV' style='Display:none; POSITION: absolute;'> "
    + "<OBJECT id='DDCtrl' style='WIDTH: 5px; HEIGHT:5px' onerror='isDrg_Drp_CtrlLoaded=false;' classid='clsid:B262C679-278E-3525-92A2-15031194A6B3'></OBJECT>"
    + "</DIV>"
    +" <script LANGUAGE='JavaScript' FOR='DDCtrl' EVENT='DraggedEvent(lEventFlavor,EventXML)'> "
    +" DivObj.style.display  = 'none';"
    +" if(lEventFlavor != 2) { "
    +" if(lEventFlavor == 0) "
    +" PutAtatchDragDrop(EventXML);"
    +" else "
    +" alert(lng_drop_only_files_folders_allowed); }</script> "; 


function DragDropInit(MultiCntl){ 
    /*MultiCntl=true, the page contains multiple/dynamic attach controls.
    In case of multiple atatch contols, drag is allowed only near control.
    For single control in UI , drop can be done anywhere in body.
    */    
    if(!MultiCntl)MultiCntl=false;
    if(GblSolo=="1"){
        //set object only after load
        insertAdjacentHTML(document.body,"afterBegin",strDDCtrlDIV);
        $('DDCtrlDIV').outerHTML = $('DDCtrlDIV').outerHTML; 
        if(!MultiCntl){
            document.body.attachEvent('ondragover',DD_Attachment); 
            document.body.attachEvent('ondragenter',DD_Attachment); 
            return;
        }
    } 
    document.body.attachEvent('ondragenter', OnCanDragDrop);
	document.body.attachEvent('ondragover', OnCanDragDrop); 
}

function PutAtatchDragDrop(EventXML){ 
    var Arrobj;
    if(lCorpID!="" || lProjID!="" || lStructID!="" || lElemID!=""){
        var Qstr = "Common.asp?CrpID=" + lCorpID + "&PrjID=" + lProjID + "&AppID=32&StrtID=" + lStructID + "&ElemID=" + lElemID + "&InboxFlag=0&Perm=2&DocID=&VerNo=&VIEWID=117&PUTATTACH="+gPutAttName;
        //PostFields="ctxml=" + EventXML;
        PostFields= GetForPOST("ctxml",EventXML); 
        var retvalue=OrchGenericObj.HttpUrlPOST(Qstr,PostFields);
        if(retvalue!=""){
            Arrobj= retvalue.split(",");
            UpdateDocAttach(Arrobj[0],Arrobj[1],Arrobj[2])
        }else{
            ErrorMsg="You do not have Permission";
            UpdateMessageGUI(ErrorMsg,"maroon");
        }
    }
    else
        DocWithoutCntxt(EventXML,gPutAttName);
}
      
function OnCanDragDrop(){
    window.event.returnValue=false;
    window.event.cancelBubble=true;
}

function DD_Attachment(CntlName,NotBODY){
    if(GblSolo!="1"){
        OnCanDragDrop();
        return;
    } 
    var _TN=event.srcElement.tagName;
    if(NotBODY)gPutAttName=CntlName;  

	SetCtrlPosition();
	event.cancelBubble = true;
	if(!isDrg_Drp_CtrlLoaded)
		return; 
}

function SetCtrlPosition(){  
	DivObj=$("DDCtrlDIV");
    DivObj.style.display = "";
    DivObj.style.left=(event.clientX  + document.body.scrollLeft)-2  ;    
    DivObj.style.top=(event.clientY + document.body.scrollTop )-2; 
}
function I_PutLabel(XPath)
{
	var NodeObj= I_GblDTDXML.documentElement.selectSingleNode("I[@N='" + XPath + "']");
	if(NodeObj)
	{
		if(lLangID==0)
			LabelName = NodeObj.getAttribute("LE");
		else		
			LabelName = NodeObj.getAttribute("LS");
	}
	return LabelName;
}

function I_GetExt(filename){ 
    var lastDot = filename.LastIndexOf(".");
    if (lastDot > -1)
        return filename.substring(lastDot);
    else
        return "";
}

function I_GetElemPerm(){//used only in solo
    return "";
}
function I_GetClientSettings(){//used only in solo
    return "";
}
function I_Escape(s){return escape(s)} 
//It gives only filename from complete file path.
function getFileName(strPath){
	var dotIndx,indx;
	indx = strPath.lastIndexOf("\\");
	dotIndx = strPath.lastIndexOf(".");
	if ( dotIndx == -1 || dotIndx < indx ) dotIndx= strPath.length; 
	return (strPath.substr(indx+1,dotIndx-indx-1));

}
//It gives only filename.ext from complete file path.
function getFileNameExt(strPath){ 
	var indx = strPath.lastIndexOf("\\"); 
	if ( indx>0) 
	    return strPath.substr(indx+1);
	else
	    return strPath;
}
function I_AttachEvnt(tmpXpth)
{ 
    var xpath=tmpXpth.replace(/([$])([-]?)([\d]+)([$])/g,"$");	
    var NodeObj= selectSingleNode(I_GblDTDXML.documentElement,"I[@N='" + xpath + "']");
    if(!NodeObj)
        return false;
   else
   {
        Aflag = NodeObj.getAttribute("AF");   
        if(Aflag=='1')
            return true;
        else
            return false;
  }
}


//if the mail already has the ddocuments attached ie, 
//incase of draft or 2nd time if the user comes  for attaching document
// the aviliable documents are put in the listbox/ called on load 
function ShowOldAttachments(){  
    GblFormObj=document.forms[0];
	var OpenerObj=window.top.opener;
	if(OpenerObj == null)
	    return;
	    
	var DynIndex=OpenerObj.GblDynamicIndx;
	GblSelectFolder=OpenerObj.GblSelectFolder;//to allow selecting folder or not
	var DynParent=DynIndex.substring(0,DynIndex.lastIndexOf("$"));
    var DynChild=DynIndex.substring(DynIndex.lastIndexOf("$")+1);   
	var _tStr="";
	var TblID="TblAttach";
 	if(OpenerObj.GblPutAttach)//its from putattach control 
        TblID=OpenerObj.$$(OpenerObj.GblPutAttach).getAttribute("Tb");  
    var TblAttachObj=OpenerObj.$(TblID);
	
	if(TblAttachObj){ 
		var AttachLen=TblAttachObj.rows.length; 
		var TrObj,_T,_A,_File="",_SF="",NewOpt; 
		for(var i=0;i<AttachLen;i++){
			//get row
			TrObj=TblAttachObj.rows[i];
			AttachIndex=TrObj.getElementsByTagName("INPUT")[0].value;
			_tStr=DynParent + "$" + AttachIndex + "$" + DynChild;  
			_T=OpenerObj.$$(_tStr + "$T$").value;
			_A=OpenerObj.$$(_tStr + "$A$").value; 
            if(OpenerObj.$$(_tStr + "$File$"))//file path. case of open docs
                _File=OpenerObj.$$(_tStr + "$File$").value;
            if(OpenerObj.$$(_tStr + "$SF$"))//secure flag
                _SF=OpenerObj.$$(_tStr + "$SF$").value;
                
           AddToSelectDisp(i,_A,OpenerObj.$$(_tStr + "$C$").value,OpenerObj.$$(_tStr + "$P$").value,
           OpenerObj.$$(_tStr + "$S$").value,OpenerObj.$$(_tStr + "$E$").value,
           OpenerObj.$$(_tStr + "$IT$").value,OpenerObj.$$(_tStr + "$I$").value,
           OpenerObj.$$(_tStr + "$VNo$").value,OpenerObj.$$(_tStr + "$F$").value,
           OpenerObj.$$(_tStr + "$T$").value,_File,_SF,OpenerObj.$$(_tStr + "$DF$").value);
		}
	}
}

function AddToSelectDisp(_pIndx,_pA,_pC,_pP,_pS,_pE,_pIT,_pI,_pVNo,_pF,_pT,_pFile,_pSF,_pDF){
    SelectDisp.options[_pIndx]= new Option(_pT); 
    var NewOpt=SelectDisp.options[_pIndx];
    NewOpt.value = _pA;

    NewOpt.setAttribute("C",_pC);
    NewOpt.setAttribute("P",_pP);
    NewOpt.setAttribute("S",_pS);
    NewOpt.setAttribute("E",_pE);
    NewOpt.setAttribute("A",_pA);
    NewOpt.setAttribute("IT",'');
    NewOpt.setAttribute("I",_pI);
    NewOpt.setAttribute("VNo",_pVNo);
    NewOpt.setAttribute("F",_pF);
    NewOpt.setAttribute("T",_pT);   
    NewOpt.setAttribute("File",_pFile);
    NewOpt.setAttribute("SF",_pSF); 
    if(!_pDF)_pDF="0";
    NewOpt.setAttribute("DF",_pDF); 
}

function ShowOldOutlookAttachments(strAttachmentXML)
{
    //alert(strAttachmentXML);
    var Xml_Attachmnt = I_GetXMLObj(strAttachmentXML,0);
    for(var i=0; i < Xml_Attachmnt.documentElement.childNodes.length; i++)
    {
        var Xml_Elem = Xml_Attachmnt.documentElement.childNodes(i);
        AddToSelectDisp(i,Xml_Elem.getAttribute("A"),Xml_Elem.getAttribute("C"),Xml_Elem.getAttribute("P"),Xml_Elem.getAttribute("S"),Xml_Elem.getAttribute("E"),Xml_Elem.getAttribute("IT"),Xml_Elem.getAttribute("I"),Xml_Elem.getAttribute("VNo"),Xml_Elem.getAttribute("F"),Xml_Elem.getAttribute("T"),Xml_Elem.getAttribute("File"),Xml_Elem.getAttribute("SF"),Xml_Elem.getAttribute("DF"));
    }
    
    return true;
}

function AddToClipBoard(){ 
    var FormValue, FormText,AttXml,W=null;  
    if(window.parent.frames.length==3){//Solo 150 view  
        W=window.parent.frames[1];AttXml=W.AttachmentsXmlObj;}  
    else{//Solo & Online SingleTreeView 
        W=window.parent.frames[0];AttXml=W.AttachmentsXmlObj;}
    if(!AttXml){W= window.parent.frames[0].frames[1];AttXml=W.AttachmentsXmlObj;}//Online 150 View 
    
    if(AttXml){	
        //select documents only or documents + folder
        _lXpath="Document";
        if(GblSelectFolder=='1')_lXpath="*"; 
        var DocNodes=selectNodes(AttXml.documentElement,_lXpath);
        var _lLen=DocNodes.length;
        var _lOptLen,_lBool=true,_lObj=null,DocID='',_lSF='0';
        for(var i=0;i<_lLen;i++){
            //get docid or File
            //loop thru selectbox options and see its already there or not
            _lBool=true;
            _lOptLen=SelectDisp.options.length;
            _lObj=DocNodes[i];//each document node
            _lDocID=_lObj.getAttribute('Docid');
            _lFolderid=_lObj.getAttribute('Folderid');
            _lFile='';//only for Opendocs- solo
            _lT=_lObj.getAttribute('Filename');
            _lSF='0';
            _lDF=_lObj.getAttribute('DF');

           
            if(_lObj.getAttribute('File'))_lFile=_lObj.getAttribute('File');
            if(_lDocID!='0'){//document 
                _lComp1=_lDocID; 
                _lT=_lObj.getAttribute('Docname');
                _lSF=_lObj.getAttribute('SF');
            }else if(_lFile!=''){//File 
                _lComp1=_lFile; 
                _lT=getFileNameExt(unescape(_lObj.getAttribute('File'))); 
            }else{//folder 
                _lComp1=_lFolderid; 
                _lT=_lObj.getAttribute('FolderName');  
            } 
                
            for(var j=0;j<_lOptLen;j++){  
                if(_lDocID!='0')//document 
                    _lComp2=SelectDisp.options[j].I;
                else if(_lFile!='')//File  
                    _lComp2=SelectDisp.options[j].File; 
                else//folder
                    _lComp2=SelectDisp.options[j].F; 
                    
                if(_lComp1==_lComp2){
                    _lBool=false;
                    break;
                }
            } 
            if(_lBool==true){//not duplicate  
                AddToSelectDisp(SelectDisp.length,'32',lCorpID,lProjID,lStructID,lElemID,
                _lObj.getAttribute('ItemType'),_lDocID,_lObj.getAttribute('VersionNo'),
                _lFolderid,_lT,_lFile,_lSF,_lDF);
            }
        }
       		W.AttachmentsXmlObj=I_GetXMLObj("<Documents />");
    }
}

function getDocName(strPath){    
	var rtn=strPath; 
	var LastSlashPos = strPath.lastIndexOf("/");	
	if(LastSlashPos != -1) 			
		rtn=strPath.substring(LastSlashPos + 1,strPath.length); 
	return rtn;
}
   
function CreateAttachXML()
{ 
	var AttachXML=OrchGenericObj.GetXMLObj("<As/>",0); 
	var ObjOpts=SelectDisp.options;
	var OptLen=ObjOpts.length; 
	var ObjElem ;
	//AttachXML.documentElement.setAttribute("AgendaIndex");
	for(var i=0;i<OptLen;i++)
	{ 
		ObjElem = AttachXML.createElement("At");
		ObjElem.setAttribute("A",ObjOpts[i].getAttribute("A"));
		ObjElem.setAttribute("I",ObjOpts[i].getAttribute("I"));
		ObjElem.setAttribute("IT",'');
		ObjElem.setAttribute("VNo",ObjOpts[i].getAttribute("VNo"));
		ObjElem.setAttribute("F",ObjOpts[i].getAttribute("F"));
		ObjElem.setAttribute("C",ObjOpts[i].getAttribute("C"));
		ObjElem.setAttribute("P",ObjOpts[i].getAttribute("P"));
		ObjElem.setAttribute("S",ObjOpts[i].getAttribute("S"));
		ObjElem.setAttribute("E",ObjOpts[i].getAttribute("E"));
		ObjElem.setAttribute("T",getDocName(ObjOpts[i].getAttribute("T"))); 
		ObjElem.setAttribute("SF",ObjOpts[i].getAttribute("SF")); 
		ObjElem.setAttribute("File",ObjOpts[i].getAttribute("File")); 
		ObjElem.setAttribute("DF",ObjOpts[i].getAttribute("DF")); 
		AttachXML.documentElement.appendChild(ObjElem); 
	} 
	//call a fixed function in the opener window and pass the xmlobj 
  var OpenerObj=window.top.opener;
  
  if(OpenerObj != null)
  {
      if(OpenerObj.GblPutAttach)//its from putattach control 
        window.parent.opener.UpdateDocAttach(AttachXML);
      else
        window.parent.opener.OpenerAttachedDocs(AttachXML,1);
      
      window.parent.close();
   }
   else
   {
        _EML_ATTACH_XML = AttachXML.xml;
   }
}

function CancelAttachWindow()
{
  var OpenerObj=window.top.opener;
  if(OpenerObj != null)
    window.parent.close();
  else
    _EML_ATTACH_XML = "-1";
}

var _EML_ATTACH_XML = null;

function Get_Attachments_Xml()
{
    var tmp_val = _EML_ATTACH_XML;
    _EML_ATTACH_XML = null;
    return tmp_val;
}

 
function RemoveFromSelectBox(SrcObj){
    var LenSrcObj = SrcObj.length;
    for(var i = 0; i < LenSrcObj ; i++){
        if (SrcObj.options[i].selected == true){	
            temp=SrcObj.options[i].value;
            SrcObj.options[i] = null;
            LenSrcObj = SrcObj.length;
            i=i-1; 
        }
    }
}
//solo clientside transform chages starts    
var _TOTAL=0,_PAGENO=1,_TOTPAGES=0,_EACHPAGECOUNT=0,_START=0,_END=0,_ArrUpdateQry=new Array(),_ArrSort=new Array(),_URL='',_PAGING=true;
_ArrSort.SortBy="";_ArrSort.Order=0;   
var _TOTAL=0,_PAGENO=1,_TOTPAGES=0,_EACHPAGECOUNT=0,_START=0,_END=0,_ArrUpdateQry=new Array();
function _GetPageNo(){return _PAGENO;}
function _GetTotalPages(){return _TOTPAGES;}
function _NextPage(){
    _PAGENO++;
    _NavigteTo();
}
function _PrevPage(){
    _PAGENO--;
    _NavigteTo();
}

function _NavigateToFirst(){
    _PAGENO=1;
    _NavigteTo();
}
function _ReloadPage(){
    _NavigteTo();
}
function _UpdateExtraUI(){
    _EACHPAGECOUNT=_EACHPAGECOUNT*2; 
    _NavigateToFirst();
}
  
function _HideExtraUI(){//hide extra and update pageifo
   _EACHPAGECOUNT=_EACHPAGECOUNT / 2; 
   _NavigateToFirst();
  }
  
function _NavigteTo(){ 
    if(_PAGING==true){//no paging 
        _END=_PAGENO*_EACHPAGECOUNT;
        _START=_END-(_EACHPAGECOUNT-1);
        _URL=UpdateQS(_URL,"start",_START);
        _URL=UpdateQS(_URL,"end",_END); 
        //do xmlhttp and update only containerspan
    }
    _ReqpdateUI();
}      

function _OpenPage(inp){
    var pagenum = inp.value;
    if(pagenum != isNaN ){
        if(pagenum > 0 && pagenum <= _TOTPAGES){
            _PAGENO=eval(pagenum);
            _NavigteTo();
        }
        else
            alert("Enter  no between 1 and " + _TOTPAGES);
    }
}
  
function _ReqpdateUI(){    
    if(_PAGING==true){
        if(_ArrUpdateQry){
	        for (var key in _ArrUpdateQry)
	        _URL=UpdateQS(_URL,key, _ArrUpdateQry[key]);  
        } 
        _URL=UpdateQS(_URL,"rtnxml", "1"); 
        $('SpnLoading').style.display='';
        OrchGenericObj.HttpUrlGETAsync(_URL,"_UpdteGUI(xmlhttp)");
    }else
        document.location.href=_URL;
}

function _UpdteGUI(xhp){ 
    try{  
        var tmpxmlobj=OrchGenericObj.GetXMLObj(xhp.responseText,0); 
        _TOTAL=tmpxmlobj.documentElement.getAttribute("TOTAL"); 
        gModifiedDate=tmpxmlobj.documentElement.getAttribute("MD");
        _QstrArr.DASHVIEW="7";  
        $('spnDispContent').innerHTML= DoClientTransform(_QstrArr,tmpxmlobj);
        $('spnDispContent').style.display='';
        $('SpnLoading').style.display='none'; 
        _UpdatePageInfo();
   }catch(e){alert("Error in updating page....\n" +e.description);}
}

function _UpdatePageInfo(){
    _EACHPAGECOUNT=(_END-_START)+1;
    _TOTPAGES=parseInt(_TOTAL/_EACHPAGECOUNT) ;
    if(_TOTAL %_EACHPAGECOUNT>0) _TOTPAGES=_TOTPAGES+1;
    _PAGENO=parseInt(_END/_EACHPAGECOUNT) ;
    if(_END %_EACHPAGECOUNT>0) _PAGENO=_PAGENO+1;
    
    //prev icon or not
    if(_PAGENO>1)
        $('hrefPrev').style.display='';
    else
        $('hrefPrev').style.display='none';
    //next icon or not
    if(_PAGENO<_TOTPAGES)
        $('hrefNext').style.display='';
    else
        $('hrefNext').style.display='none';
    //currpageno
    $('InpCURRPAGE').value=_PAGENO;
    //totlpage no
    $('SpnTOTPAGES').innerText=_TOTPAGES;
    var xpth="";
    //update sort
    if(_ArrSort.SortBy!=""){
        for(var i=0;i<_ArrSort.length;i++){
            xpth=_ArrSort[i].Xpath;
            $('AscSort'+xpth.substring(1)).style.display='none';
            $('DescSort'+xpth.substring(1)).style.display='none';
            if(xpth==_ArrSort.SortBy){  
                if(_ArrSort.Order==1)
                    $('DescSort'+xpth.substring(1)).style.display='';
                else
                    $('AscSort'+xpth.substring(1)).style.display=''; 
            } 
        } 
    }

}

function DefineSort(n,d){ 
    var Len=_ArrSort.length;
    _ArrSort[Len]=new Array(); 
    _ArrSort[Len].Xpath=n;
    _ArrSort[Len].DataType=d;
}

function _SortMe(obj){
//identfy sortxpath,datatype
var strid=obj.id;
var xpth="@"+strid.substring(4,strid.length);
var Order=0;
var DataType=0;
var imgAsc=$('Asc'+strid);
if(imgAsc.style.display!='none')Order=1;
for(var i=0;i<_ArrSort.length;i++){
    if(_ArrSort[i].Xpath==xpth)
    DataType=_ArrSort[i].DataType; 
}
_ArrSort.SortBy=xpth;
_ArrSort.Order=Order;
xpth+="|"+Order;
xpth+="|"+DataType;  
_URL=UpdateQS(_URL,"sort",escape(xpth)); 
_PAGENO=1;
_NavigteTo();
}
//solo clientside transform chages starts

//Validate URL function
function I_ValURL(StrUrl)
{     
	var RegExpUrl = /(^((ht|f)tp(s?)\:\/\/|~\/|\/)?)([\w]+:\w+@)?([a-zA-Z]{1}([\w\-]+\.)+([\w]{2,5}))(:[\d]{1,5})?((\/?\w+\/)+|\/?)(\w+\.[\w]{3,4})?((\?\w+=\w+)?(&\w+=\w+)*)?/ ;//RegEx of Url
	var RegExpNet = /(^(\\\\)+)([\w]+:\w+@)?([a-zA-Z]{1})([\d]{1,5})?((\\?\w+\\)+|\\?)(\w+\.[\w]{3,4})?/ ;//RegEx of network shared file path
	if(StrUrl.match(RegExpUrl) || StrUrl.match(RegExpNet))
		return 1;
	else
		return 0;
}  
function I_GetText(strText,strLen){
    var divObj = document.createElement("div");
    divObj.innerHTML = strText;
    return divObj.innerText.substring(0,strLen);
}

function I_ContextName(C,P,S,E){ 
    var Inp="<R C='"+ C + "' P='"+ P + "' S='"+ S + "' E='"+ E + "' />";
    return I_HttpUrlPOST("?appid=1&viewid=27","Input="+escape(Inp)); 
}
function I_TrimT(T,L){return T.length>L?T.substring(0,L-3)+"...":T;}

//simple resolve starts
function RESOLVEMAIN(){
try{
	this.oPopup=window.createPopup();  
	this.oPopBody = this.oPopup.document.body;
	this.oPopBody.style.backgroundColor = "fffff7";
	this.oPopBody.style.border = "solid black 1px";   
	this.oPopBody.style.overflowY='auto'; 
	this.oPopBody.innerHTML="<div>hhjhj</div>";
	this.KeyUp=HandleKeyUp;this.Controls=new Array();this.Domains=new Array();
	this.Search="";this.XHP=null;this.Blur=HandleBlur;
	this.xslP=null; 
}
catch(e){}
}

var RSL=new RESOLVEMAIN();
function II_Resolve(a,b,c,d,e,f,g){//domaintype,text,name,namefield,valuefield,width,controlflg
    if(!g)g=1;if(!f)f=100;
    var r="<input class='SDtxtbox' W=\""+f+"\" onblur='RSL.Blur(this.value,\""+ a +"\",\""+ d +"\",\""+ e +"\",\""+ g +"\")'   onkeyup='RSL.KeyUp(this.value,\""+ a +"\",\""+ d +"\",\""+ e +"\",\""+ g +"\")' onfocus='RSL.KeyUp(this.value,\""+ a +"\",\""+ d +"\",\""+ e +"\",\""+ g +"\")' name=\""+ d +"\" value=\"" + b +"\"  style=width:"+f+"; />";
    r+="<input type='hidden' name=\""+e+"\" value=\""+c+"\" >";    
    r+="<img  onclick='RSL.KeyUp(\"\",\""+ a +"\",\""+ d +"\",\""+ e +"\",\""+ g +"\")'  src='../Images/bluearrow.gif' align='absMiddle' border='0'/>";
    return r;
}
function ResolveReadOnly(a){ 
var t=$$(a);
t.nextSibling.nextSibling.style.display="none";
t.onblur=null;t.readOnly=true;t.onclick=null;t.onfocus=null;

}
function HandleBlur(a,b,c,d,e){//searchstr,domaintype,namefield ,valuefield ,controlflg
    //loop thru control array.
    //if there ad not selected then do prevalidation.
    var AR=RSL.Controls;L=AR.length,Cflg=0;  
    for(var x=0;x<L;x++){
        if(AR[x].NameF==c){
            if(AR[x].Sel==1)return;  
            break;
        }
    }//controlflg,namefield,valuefield,name,value
 
    try{if(PreResolveValidation(e,c,d,a,'0')==false)return false;}catch(ee){}
 
}
function HandleKeyUp(a,b,c,d,e){//searchstr,domaintype,namefield ,valuefield ,controlflg
     var AR=RSL.Domains,L=AR.length,flg=false;   
	RSL.oPopup.hide();
    RSL.Search=Trim(a); 
    for(x=0;x<L;x++){if(AR[x].Type==b){ShoPOPUP(c,d,x,e);return;}}//namefield,valuefield,DomainI,controlflg

    if(flg==false){clearTimeout(RSL.LTmr);RSL.LTmr=setTimeout("HandleKeyUpSub(\""+a+"\",\""+b+"\",\""+c+"\",\""+d+"\",\""+e+"\")",300);}      //searchstr,domaintype,Namefield,controlflg
} 
function HandleKeyUpSub(a,b,c,d,e){//searchstr,domaintype,namefield,valuefield,controlflg   
    //request for this domainxml 
    try{RSL.XHP.abort();}catch(ee){}  
    var PostFields="FILL_TYP=5&FILL_SUBTYP="+ b +"&FILL_SEARCH=&FILL_SRCHID=11&FILL_DISP_ID=Forms$ABC&FILL_MULTIITEM=0&XML_TAGNAME=Domain&CHK_AUTOEMAIL=1&PR_DOMAINTYPE=&PR_DOMAINID=&STRTLVL=-1&ENDLVL=-1&mxcnt=0&cindx=0";
	RSL.XHP=I_HttpUrlPOSTAsync("../Contacts/NewAutoFill.asp?"+(document.location.href.split("?")[1]) + "&RequestFlag=1",PostFields,"ARDOMAIN(\"" + c + "\",\"" + d + "\",\"" + e + "\", CurrResponseText)");
} 
function ARDOMAIN(a,b,c,d){//namefield,valuefield,controlflg,ResXML,

    var L=RSL.Domains.length; 
    RSL.Domains[L]=new Array();  
    RSL.Domains[L].DomXML=I_GetXMLObj(d);  
    //RSL.Domains[L].DomXML=I_GetXMLObj_Load("Domain.xml");
    RSL.Domains[L].Type=RSL.Domains[L].DomXML.documentElement.getAttribute("SUBTYPE"); 
    ShoPOPUP(a,b,L,c);  
} 
function ShoPOPUP(a,b,c,d){//namefield,valuefield,DomainI,controlflg

    var AR=RSL.Controls;L=AR.length,flg=false,I=0;       for(var x=0;x<L;x++){if(AR[x].NameF==a){I=x;flg=true;break;}}
    if(flg==false){I=L;RSL.Controls[L]=new Array();RSL.Controls[L].NameF=a;RSL.Controls[L].ValueF=b; RSL.Controls[L].DomainT=RSL.Domains[c].Type;RSL.Controls[L].ControlF=d;
RSL.Controls[L].Obj=$$(a);RSL.Controls[L].W=RSL.Controls[L].Obj.W;
}  
RSL.Controls[I].Sel=0;
    if(RSL.xslP==null)RSL.xslP=OrchGenericObj.GetProcessor("../js/domain.xsl"); 
    RSL.xslP.addParameter("I",I);   
    RSL.xslP.addParameter("W",RSL.Controls[I].W+"");   
    var Nodes=RSL.Domains[c].DomXML.documentElement.selectNodes("D/Result[starts-with(translate(@TITLE,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz'),\""+RSL.Search.toLowerCase()+"\")]");
    var NodeLen=Nodes.length;  
    if(NodeLen>0){  
        RSL.xslP.addParameter("DomNodes", Nodes);
        RSL.oPopBody.innerHTML =   OrchGenericObj.TranformSS("<R/>",RSL.xslP);   
        RSL.oPopup.show(0, 22,RSL.Controls[I].W, NodeLen>10?200:(NodeLen*18)+35, RSL.Controls[I].Obj);   

    }
if(NodeLen==0 || RSL.Search!="")$$(b).value="";
 /*if(NodeLen==1){R_Click(I,Nodes[0].getAttribute("TITLE"),Nodes[0].getAttribute("ITEMID"),Nodes[0].getAttribute("DISP"));RSL.oPopup.hide();}*/
}
function R_Click(a,b,c,d){//controlI,Name,Value,disp
//pre validation. if fails return;
RSL.Controls[a].Sel=1;
try{if(PreResolveValidation(RSL.Controls[a].ControlF,RSL.Controls[a].NameF,RSL.Controls[a].ValueF,b,c)==false)return false;}catch(e){}
    var NF=$$(RSL.Controls[a].NameF); 
    NF.value=b; 
    NF.title=d; 
    $$(RSL.Controls[a].ValueF).value=c;     
}
function OpenURL(url){
	var strurl = unescape(url);
	var str=strurl.toUpperCase();
	var wwwpos=str.lastIndexOf("WWW.");
	if(wwwpos > -1 && wwwpos < 4)
		strurl="http://"+url;
	window.open(strurl);
}
//---------- the below 2 functions are used for Solo/Orchestra version compare-------------'
//return 0 if both are same.-1 i stra less than str2,1 if str1 greater than str2
function CompareVersion(str1 , str2 ){
	var fltArray1 = getFloatArray(str1);
	var fltArray2 = getFloatArray(str2);
	var endval 
	if(fltArray1.length  >= fltArray2.length)
	    endval = fltArray2.length;
	else
	    endval = fltArray1.length;
	
	for(var i = 0 ;i < endval; i++){
	    if (fltArray1[i] > fltArray2[i])
	        return 1;
	    else if (fltArray1[i] < fltArray2[i]) 
	        return -1;
	}

	if (fltArray1.length > fltArray2.length) 
	    return 1;
	else if (fltArray1.length < fltArray2.length) 
	    return -1;
	else
	    return 0;
}
	
function getFloatArray(strVal){
	var StrArr
	StrArr = strVal.split(".");
	var fltArray = new Array(StrArr.length); 
	for(var i = 0 ; i < StrArr.length; i++){
	    if (i == StrArr.length-1) 
	        fltArray[i] = eval("0." + StrArr[i]);
	    else
	        fltArray[i] = eval(StrArr[i]);
	}
	return fltArray;
}
//------------------------------------------------------------------------------------------'

function I_BuildOptions(ParamAttrib,ParamValue,flag)
{
  var opt = "";
  var Opt_Array = ParamAttrib.split("|");

  for(var i = 0; i < Opt_Array.length; i++)
  {
     if (ParamValue == Opt_Array[i])
	opt = opt + "<option selected value='"+ Opt_Array[i] + "' >" + Opt_Array[i] + "</option>"
     else
        opt = opt + "<option value='"+Opt_Array[i] +"' >"+Opt_Array[i] +"</option>"
  }

  return opt;
}

function I_RoundOff(numa,lprec){
    var num = new Number(numa);
    var Retval; 
		if (num != ""){
		 	if (lprec == 1){
		 	   	Retval = num.toFixed(2);
				}
			else if (lprec == 2)
				Retval = num.toFixed(1);
			else
				Retval = clng(numa);
		
		}
		else
		 	Retval="";
	
	
		return Retval;
}		

var _ArrCluster=new Array();
function GetClusterObj(i){
    return _ArrCluster[i];
}
function CnxtCluster(){ 
    this.DataXML=null;
    this.ParamXML=null;
    this.ParamXMLObj=null;
    this.GblSelID = '';
    this.GblSel = null;
    this.SelNode = '';
    var DivID="ClustDIV_"+ Math.floor(Math.random()*100) +""+Math.floor(Math.random()*100);
    this.DivID=DivID;
    //this will be the container div for the tree.initially it will be a empty div.
    //ReDraw() will do transform and fill this.
    this.UI="<div id=\""+ DivID +"\"></div>";
    this.ReDraw=ReDrawCluster;
    this.Xsl="";//xsl path 
    var Index=_ArrCluster.length; 
    this.Index=Index;
    _ArrCluster[Index]=this;
}
 
function ReDrawCluster(p){
    if(!p)p=0;
    //this.DivID  will give id of container DIV.
    //do transform and fill div innerhtml. usethis.DataXML and  this.ParamXML.     
    var Dxml=I_GetXMLObj(this.DataXML);
    var PxmlObj=I_GetXMLObj(this.ParamXML);
    this.ParamXMLObj=PxmlObj;
    var Index=this.Index;//this is the index of tree object array;
    var xslProc=I_GetProcessor("../JS/ClusterContext.xsl",null);	
    var RootT=PxmlObj.documentElement.getAttribute('RootText');
    if(!RootT)RootT=" All"
    xslProc.addParameter("Index",Index);
    xslProc.addParameter("Exp",PxmlObj.documentElement.getAttribute('E'));
    xslProc.addParameter("Lvl",PxmlObj.documentElement.getAttribute('L'));    
    xslProc.addParameter("CL",PxmlObj.documentElement.getAttribute('CL'));    
    xslProc.addParameter("PL",PxmlObj.documentElement.getAttribute('PL'));    
    xslProc.addParameter("SL",PxmlObj.documentElement.getAttribute('SL'));    
    xslProc.addParameter("EL",PxmlObj.documentElement.getAttribute('EL')); 
    xslProc.addParameter("RootT",RootT);  
    var DC=PxmlObj.documentElement.getAttribute('DispCount');
    if(!DC)DC="1";
    xslProc.addParameter("DC",DC); 
   
    try{
    $(this.DivID).innerHTML= I_TranformSS(Dxml,xslProc);}catch(ex){alert(ex.description);}
    var TempObj={};
    TempObj.OnEnter=function(){if(event.keyCode==13)OnEnterFun(Index);}
    document.body.attachEvent("onkeydown",TempObj.OnEnter);  

    //window.clipboardData.setData("Text",$(this.DivID).innerHTML);
    var SN=PxmlObj.documentElement.getAttribute('SN');
    var CollLI=$('RootUL'+Index).getElementsByTagName("LI");
    if(CollLI.length==0)return;
    
    if(SN=='Corp' || SN=='Proj'  || SN=='Strt'  || SN=='Elem'){//select first corp/proj/strt/elem
        var T="";
        for(var x=0;x<CollLI.length;x++){
            T=CollLI[x].T;
            if(T==SN){
                this.GblSel=CollLI[x].getElementsByTagName("A")[0]; 
                break;            
            }
        }    
    }
    else//root
        this.GblSel=CollLI[0].getElementsByTagName("A")[0];  
             
    ClickCluster(this.GblSel,this.Index,'Fn'); 
    //this.GblSel.scrollIntoView();
}  
function I_CnxtCluster(){
var a=new CnxtCluster();
return a.UI;
}
function _HiUnLight(obj,HU){
    if(HU==1){obj.style.background="#316ac5";obj.style.color="#FFFFFF";}else{obj.style.background="#FFFFFF";obj.style.color="black";}
}
function OnEnterFun(Index){  
    var ClusterObj=_ArrCluster[Index];  
    ClusterObj.ParamXMLObj=I_GetXMLObj(ClusterObj.ParamXML); 
    var FN=ClusterObj.ParamXMLObj.documentElement.getAttribute("OnEnter");   
    Obj=ClusterObj.GblSel;  
    if(FN!="")eval(FN); 
}
function ClickCluster(Obj,Index,Atr){ 
    var ClusterObj=_ArrCluster[Index]; 
    _HiUnLight(ClusterObj.GblSel,0);//unhighlight prev 
    ClusterObj.ParamXMLObj=I_GetXMLObj(ClusterObj.ParamXML); 
    var FN=ClusterObj.ParamXMLObj.documentElement.getAttribute(Atr);  
    if(FN!="")eval(FN);
    ClusterObj.GblSel=Obj;            
    _HiUnLight(ClusterObj.GblSel,1);//highlight new
}
/****************************   These Functions are Added For the cross browser Compatibilty ******************************/
function showModal(url)
{	var val;
	val = window.open(url,'','height=330,width=350,toolbar=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,modal=yes');
	return val;
}
function getXmlStr(xmlobj)
{
	if (iBrowser!=1){
		var serializer = new XMLSerializer();
		var xml = serializer.serializeToString(xmlobj);
		return xml;
	}
	else
	return xmlobj.xml;
}
function CreateDomObj(xmlstr,b_async)
{
	var domObj,Parser;
	domObj=document.implementation.createDocument("","",null);
	if (xmlstr=="" )
		return domObj;
	else{
		Parser=new DOMParser();
		domObj= Parser.parseFromString(xmlstr,"text/xml");
		domObj.async=b_async;
		return domObj;
	}
	
}
function nextSibling(n) 
{
	do n = n.nextSibling;
	while (n && n.nodeType != 1);
	return n;
 }
function CreateXHRObj()
{
	var xmlhttp=new XMLHttpRequest();
	return xmlhttp;
}

function addEventHandler(element,event,func)
{
	if(element.attachEvent){
		element.attachEvent(event,func);
	}
	else if(element.addEventListener){
		element.addEventListener(event,func);
	}
	else{
		element['on'+event]=func;
	}
}
function removeEventHandler(element,event,func)
{
	if(element.detachEvent){
		element.detachEvent(event,func);
	}
	else if(element.removeEventListener){
		element.removeEventListener(event,func);
	}
	else{
		element['on'+event]="";
	}
}
function getEventObj(e)
{
	var evntObj=(window.event)?(window.event):e;
	return evntObj;
}
function getEventX(evntObj)
{
	var event_X	=	(evntObj.x)?(evntObj.x):(evntObj.clientX);
	return event_X;
}
function getEventY(evntObj)
{
	var event_Y	=	(evntObj.y)?(evntObj.y):(evntObj.clientY);
	return event_Y;
}

//cross browser implementation of swapnode
function swapNode(n1,n2)
{
	if(iBrowser==1)
		n1.swapNode(n2);
	else
		n1.parentNode.insertBefore(n2.parentNode.removeChild(n2),n1);			
}
function selectSingleNode(sElem,sXPath) {
	try{
		return sElem.selectSingleNode(sXPath);
	}
	catch(ee){
		var oEvaluator = new XPathEvaluator();
		// FIRST_ORDERED_NODE_TYPE returns the first match to the xpath.
		var oResult = oEvaluator.evaluate(sXPath, sElem, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null);
		if (oResult != null) {
			return oResult.singleNodeValue;
		} 
		else {
			return null;
		}   
	}
}
function selectNodes(sElem,sXPath) {
	try{
		return sElem.selectNodes(sXPath);
	}
	catch(ee)
	{	
		var oEvaluator = new XPathEvaluator();
		var oResult = oEvaluator.evaluate(sXPath, sElem, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null);
		var aNodes = new Array();
		if (oResult != null) {
			var oElement = oResult.iterateNext();
			while(oElement) {
				aNodes.push(oElement);
				oElement = oResult.iterateNext();
			}
		}
		return aNodes;
	}
}

if(!document.documentElement.outerHTML){
	 Node.prototype.getAttributes = function(){
		  var attStr = "";
		  if(this && this.attributes.length > 0){
			   for(a = 0; a < this.attributes.length; a ++){
				attStr += " " + this.attributes.item(a).nodeName + "=\"";
				attStr += this.attributes.item(a).nodeValue + "\"";
				}
			}
		return attStr;
		}

	 Node.prototype.getInsideNodes = function(){
		if(this){
		   var cNodesStr = "", i = 0;
		   var iEmpty = /^(img|embed|input|br|hr)$/i;
		   var cNodes = this.childNodes;
			for(i = 0; i < cNodes.length; i ++){
				switch(cNodes.item[i].nodeType){
				 case 1 :
				  cNodesStr += "<" + cNodes.item[i].nodeName.toLowerCase();
				  if(cNodes.item[i].attributes.length > 0){
					cNodesStr += cNodes.item[i].getAttributes();
				  }
				  cNodesStr += (cNodes.item[i].nodeName.match(iEmpty))? "" : ">";
				  if(cNodes.item[i].childNodes.length > 0){
					cNodesStr += cNodes.item[i].getInsideNodes();
				  }
				  if(cNodes.item[i].nodeName.match(iEmpty)){
					cNodesStr += " />";
				  } else {
					cNodesStr += "</" + cNodes.item[i].nodeName.toLowerCase() + ">";
				  }
				  break;
				 case 3 :
					cNodesStr += cNodes.item[i].nodeValue;
				  break;
				 case 8 :
					cNodesStr += "<!--" + cNodes.item(i).nodeValue + "-->";
				  break;
				}
			}
		   return cNodesStr;
		}
	 }

	 Object.prototype.outerHTML.__defineGetter__ = function(){
		var strOuter = "";
		var iEmpty = /^(img|embed|input|br|hr)$/i;
		switch(this.nodeType){
			case 1 :
				strOuter += "<" + this.nodeName.toLowerCase();
				strOuter += this.getAttributes();
				if(this.nodeName.match(iEmpty)){
					strOuter += " />";
				} 
				else {
					strOuter += ">" + this.getInsideNodes();
					strOuter += "</" + this.nodeName.toLowerCase() + ">";
				}
			break;
			case 3 :
				strOuter += this.nodeValue;
			break;
			case 8 :
				cNodesStr += "<!--" + this.nodeValue + "-->";
			break;
		}
		return strOuter;
	 }

	Object.prototype.outerHTML.__defineSetter__ = function(str){
		  var iRange = document.createRange();
		  iRange.setStartBefore(this);
		  var strFragment = iRange.createContextualFragment(str);
		  var sRangeNode = iRange.startContainer;
		  iRange.insertNode(strFragment);
		  sRangeNode.removeChild(this);
	 }
}
 function insertAdjacentElement(elem,where,parsedNode)
	{
		try{
			elem.insertAdjacentElement(where,parsedNode);
		}
		catch(er)
		{
			switch (where){
			case 'beforeBegin':
				elem.parentNode.insertBefore(parsedNode,elem)
				break;
			case 'afterBegin':
				elem.insertBefore(parsedNode,elem.firstChild);
				break;
			case 'beforeEnd':
				elem.appendChild(parsedNode);
				break;
			case 'afterEnd':
				if (nextSibling(elem)) 
					elem.parentNode.insertBefore(parsedNode,nextSibling(elem));
				else elem.parentNode.appendChild(parsedNode);
				break;
			}
		}
	}

function insertAdjacentHTML(elem,where,htmlStr)
	{
		try{
			elem.insertAdjacentHTML(where,htmlStr);
		}
		catch(er)
		{
			var r = elem.ownerDocument.createRange();
			r.setStartBefore(elem);
			var parsedHTML = r.createContextualFragment(htmlStr);
			insertAdjacentElement(elem,where,parsedHTML);
		}
	}


function insertAdjacentText(elem,where,txtStr)
	{
		try{
			elem.insertAdjacentText(where,txtStr);
		}
		catch(er)
		{
			var parsedText = document.createTextNode(txtStr);
			insertAdjacentElement(elem,where,parsedText);
		}
	}

