function clsRollOver()
{
		// Member Variables
			this._ns; // Netscape
			this._ie; // Internet Explorer
			this._OffsetX;
			this._OffsetY;
			this._Message;
			this._Width;
			this._Left;
			this._Top;
		//Display Tip Direction.
			this.NORMAL;
			this.LEFT;
			this.TOP;
			this.RIGHT;
			this.BOTTOM;
			this.WindowHandle;
			this.WindowHandleShadow;
			this._BrowserType;
			
			//this._OffsetX = 25;
			//this._OffsetY = 10;
			this._Message = "";
			this._Width = "0";
			this._ns = false;
			this._ie = false;
			
			NORMAL = 3;
			LEFT   = 1;
			//this.TOP    = 2;
			RIGHT  = 3;
			//this.BOTTOM = 4;
			
				
		// Public Methods of this class
			this.DetectBrowser = DetectBrowser;
			this.MoveWindow = MoveWindow;
			this.HideWindow = HideWindow;
			this.SetWidth   = SetWidth
			this.GetWidth   = GetWidth;
			this.IsNS		= IsNS;
			this.IsIE		= IsIE;
			this.GetBrowserType = GetBrowserType;
			this.ShowTipWindow = ShowTipWindow;
			//this.SetPosition = SetPosition;
			
			// Calling the method As Sort of Constructor.
			DetectBrowser();
			
			// Method Definitions.
			function IsNS()
			{
				return _ns;
			}
			function IsIE()
			{
				return _ie;
			}
			function DetectBrowser() // Some kind of a constructor
			{
				var dom;
				dom = (document.getElementById) ? true : false;
				this._ns = ((navigator.userAgent.indexOf("Gecko")>-1) && dom) ? true: false;
				this._ie = ((navigator.userAgent.indexOf("MSIE")>-1) && dom) ? true : false;
				if(this._ns == true) 
					this._BrowserType = "ns";
				else
					this._BrowserType = "ie";
				
				this._OffsetX = 25;
				this._OffsetY = 10;	
					
			}
			function SetPosition(Direction,PosX,PosY)
			{
				if (Direction == LEFT)
				{
					_Left = PosX - (_OffsetX + parseInt(_Width));
					_Top = PosY + _OffsetY;
					
				}
				else if(Direction == RIGHT || Direction == NORMAL)
				{	
					_Left = PosX + _OffsetX;
					_Top = PosY + _OffsetY;
					
				}	
				
				//this._Left = 100;
				//alert(this._Left);
			}
			function GetBrowserType()
			{
				return _BrowserType;
			}
			function HideWindow()
			{
				if(_ns == true)
				{	
					document.getElementById("DivHelpWindow").style.visibility = "hidden";
				}
				else //if (ie == true)
				{
					DivHelpWindow.style.visibility="hidden";
					DivShadowWindow.style.visibility="hidden";
				}
			}
			function ShowTipWindow(PosX,PosY,Msg)
			{
				// Relative to the screen.
				//window.status = e.screenX + "," + e.screenY ;	 IE + NS
				// e.x		IE
				var HWindow;
				var SWindow;
				var e; // for event object
				var Direction;
				var table;
//				_Message = Msg;
		
				Direction  = GetDirection(PosX,PosY);
				SetPosition(Direction,PosX,PosY);
				
				if (_ie== true)
				{
					HWindow = document.all["DivHelpWindow"];
					SWindow = document.all["DivShadowWindow"];
					SWindow.style.left = _Left;
					SWindow.style.top = _Top;
				}
				else if (_ns == true)
				{
					HWindow = document.getElementById("DivHelpWindow");
				}
				
				table = "<table width=100%><tr><td class='HelpBody'>" + Msg + "</td></tr></table>";
				
				HWindow.style.left = _Left;
				HWindow.style.top = _Top;
				
				HWindow.innerHTML = table;
				HWindow.style.visibility = "visible";
				if(_ie == true) 
				{
					SWindow.style.height = HWindow.offsetHeight;
					SWindow.style.visibility = "visible";
				}	
				WindowHandle = HWindow;
				WindowHandleShadow = SWindow;
			}
			function GetDirection(PosX, PosY)
			{
				// width of window in NetScape window.innerWidth
				// IE document.body.clientWidth  excluding Scrollbars width
				// IE document.body.offsetWidth including Scrollbars width
				// Reverse is the case for Netscape.
				var Direction = NORMAL;
				var Size;
				var WindowSize;
				
				if(_ie == true)
				{
					ScrollBarsWidth = document.body.offsetWidth - document.body.clientWidth;
					Size = PosX + parseInt(_Width) + ScrollBarsWidth;
					WindowSize = document.body.clientWidth; // Current size of window
				}
				else
				{
					ScrollBarsWidth = document.body.clientWidth - document.body.offsetWidth;
					Size = PosX + parseInt(_Width) + ScrollBarsWidth;
					WindowSize = window.innerWidth; // Current size of window
					window.status = document.body.clientWidth + " " + WindowSize
				}		
				if(Size >= WindowSize)
				{
					Direction = this.LEFT;
				}
				else if(PosX- parseInt(_Width)< 0)
				{
					Direction = this.RIGHT;
				}
				return Direction;	
			}
			function MoveWindow(PosX,PosY,Msg)
			{
				//alert(WindowHandle);
				var Direction;
				Direction  = GetDirection(PosX,PosY);
				SetPosition(Direction,PosX,PosY);
				
				
				if(typeof WindowHandle !="undefined" )
				{
					WindowHandle.style.left = _Left;
					WindowHandle.style.top = _Top;
				}
				
				if(typeof WindowHandleShadow !="undefined" )
				{
					WindowHandleShadow.style.left = _Left;
					WindowHandleShadow.style.top = _Top;
				}	
				//if(_ie == true)
				//{
					//document.all["DivHelpWindow"].innerHTML = table;
					
				//	SWindow.height = HWindow.offsetHeight;
				//}	
				//else if(_ns == true)
					//document.getElementById("DivHelpWindow").innerHTML = Msg;	
					
			}
			function SetWidth(w)
			{
				document.getElementById("DivHelpWindow").style.width = w;
				if(_ie)
					document.getElementById("DivShadowWindow").style.width = w;
				
				_Width = w;
			}
			function GetWidth()
			{
				return _Width;
			}
			
}// End of CLass clsRollOver
//***********************************************
// CLASS POSITION
//***********************************************
		function Position()
		{
			this.X;
			this.Y;
			this.DeterminePosition = DeterminePosition;
			function DeterminePosition(Type,e)
			{
				//e = ro.IsNS() ? arguments.callee.caller.arguments[0] : window.event; 
				var x,y;
				
				if (Type== "ie")
				{
					x = event.x;
					y = event.y;
					x = x + document.body.scrollLeft;
					y = y + document.body.scrollTop;
				}
				else if (Type == "ns")
				{
				
					//e = arguments.callee.caller.arguments[0];
					x = e.pageX;
					y = e.pageY;
				}
				this.X = x;
				this.Y = y; 
			}
		}
//***********************************************	
		// END OF CLASS POSITION
//***********************************************	

// CLient Program starts from here
// ************************************************
var ro;
var LinkItems = new Array(10);
var IsRollOverReady = false;

		function Init()
		{
			//initialize RollOver 
			var tmp;
			var Heading= "<b>EZBostonApartments.com</b><BR>";
			
			tmp = Heading + "A <B>Test</B> Help Menu for the Welcome Display!";
			LinkItems[1] = new Array(tmp);
			
			Heading= "<b>Sign In Header</b><BR>";
			tmp =  Heading + "Click on this to sign in!";
			LinkItems[2] = new Array(tmp);

			Heading= "<b>Unmapped objects</b><BR>";
			tmp =  Heading + "The TierDeveloper application allows the user to map an Object against a view in the database. The view Object has the same behavior as that of the table ";
			tmp += "Object i.e. user can define both read-only and transactional behavior. ";
		
			LinkItems[3] = new Array(tmp);
			
			Heading= "<b>Formula Field</b><BR>";
			tmp =  Heading + "TierDeveloper lets you define custom formula fields in an object that can span over one or more attributes of the Object. For example you can define a 'AllUnitsPrice' attribute"; 
			tmp += "that calculates the total price for all units of a specific product as illustrated below.<BR><BR><I>AllUnitsPrice = UnitPrice * UnitsInStock</I>";
			LinkItems[4] = new Array(tmp);
			
			Heading= "<b>Identity, Sequences, and Trigger</b><BR>";
			tmp =  Heading + "New feature added to TierDeveloper 4.0";
			LinkItems[5] = new Array(tmp);
			
			Heading= "<b>Static Object Queries</b><BR>";
			tmp =  Heading + "No help is available.";
			LinkItems[6] = new Array(tmp);
			
			Heading= "<b>Relationships</b><BR>";
			tmp =  Heading + "The 'Relationships' feature provides the facility to manage relationships at the Object level around the relationships that exist across database table entities."; 
			tmp += "It includes one-to-one, one-to-many and many-to-many types of relations defines at the database level. User Defined relationships are also supported.";
			LinkItems[7] = new Array(tmp);
			
			Heading= "<b>Stored Procedures</b><BR>";
			tmp =  Heading + "A stored procedure/custom method of a Object allows the client application to call stored procedure in the database. This facilitates any situations that cannot be handled through other characteristics of a Object. Both single-table"; 
			tmp += "and multi-table Objects support custom methods.";
			LinkItems[8] = new Array(tmp);
			
			Heading= "<b>Bulk Methods</B><BR>";
			tmp =  Heading + "Bulk Operations are designed to give you the ability to define <B>Bulk Update</B> and <B>Bulk Delete</B> operations. This improves performance because the client application does not have to make"; 
			tmp += "multiple round-trips to the database in order to update and delete multiple rows.";
			
			LinkItems[9] = new Array(tmp);
			
			Heading= "<b>Custom Operations</B><BR>";
			tmp =  Heading + "No help available"; 
			
			LinkItems[10] = new Array(tmp);
			
			Heading= "<b>Datasets and Typed Datasets</B><BR>";
			tmp =  Heading + "TierDeveloper provides the option for the user to generate DataSet interface for each of the Query methods in the generated components."; 
			tmp += "TierDeveloper provides the option for the user to generate Typed DataSet object that inherits DataSet class. It lets the user to use the DataSet in a more flexible and type-safe way.";
			
			//So for example DataSet interface support will expose "AllCustomersDS" method for 
			//a "AllCustomers" Query with the method interface given below. <BR><BR>public 
			//DataSet AllCustomersDS()
			
			LinkItems[11] = new Array(tmp);
			
			Heading= "<b>Serviced Components</B><BR>";
			tmp =  Heading + "By default TierDeveloper generates MTS complaint COM+ components (also known as serviced components), that rely on the services provided by MTS server. These services include transaction support, object pooling, security handling and some "; 
			tmp += "other services that are handled by MTS server for all the components deployed in it.";
				 
			LinkItems[12] = new Array(tmp);	 
			
			Heading= "<b>Non-MTS/Non-GAC Components</B><BR>";
			tmp =  Heading + "No help is available."; 
			 
			LinkItems[13] = new Array(tmp);
			
			Heading= "<b>Schema DDL Generation</B><BR>";
			tmp =  Heading + "TierDeveloper provides the option to generate DDL SQL Scripts for all the data sources i.e. offline schemas. Thus the user can generate DDL scripts to create "; 
			tmp += "databases in a local environment for testing purpose.";
				 
			LinkItems[14] = new Array(tmp);
			
			Heading= "<b>SQL Tool</B><BR>";
			tmp =  Heading + "<UL><LI>Immediately verify SQL syntax and results before embedding it in Objects.";
			tmp += "<LI>Edit SQL and compile/run in it directly.";
			tmp += "<LI>Output of SQL shown as a dynamic multi-column table.</UL>";
				 
			LinkItems[15] = new Array(tmp);
			
			Heading= "<b>Schema Validation & Synchronization</B><BR>";
			tmp =  Heading + "Schema validation allows the user to verify that the state of the offline schema associated with specific Data Source is valid against the target database schema."; 
			tmp += "TierDeveloper 4.0 has extended the Schema Synchronization functionality so as to provide a more flexible and transparent handling for schema synchronization."; 
			
			LinkItems[16] = new Array(tmp);
			
			Heading= "<b>ASP.NET Application</B><BR>";
			tmp =  Heading + "No help is available."; 
			
			LinkItems[17] = new Array(tmp);
			
			Heading= "<b>Windows Forms Application</B><BR>";
			tmp =  Heading + "No help is available."; 
			
			LinkItems[18] = new Array(tmp);
			 
			Heading= "<b>Windows Forms Application</B><BR>";
			tmp =  Heading + "TierDeveloper generates HTML-based designed documents for all its generated .NET components. This allows you to immediately see the entire design and use the code easily.";
			
			LinkItems[19] = new Array(tmp); 
			
			Heading= "<b>C# and VB.NET support</B><BR>";
			tmp =  Heading + "TierDeveloper allows you to generate code in either language.";
			
			LinkItems[20] = new Array(tmp); 
			
			Heading= "<b>SQL Server .NET Data Provider</B><BR>";
			tmp =  Heading + "TierDeveloper generate object code based on the SQL Native Data Provider. The .NET Framework Data Provider for SQL Server is a lightweight and optimized data provider that uses its own protocol to communicate with SQL Server without adding an OLE DB or Open Database Connectivity (ODBC) layer.";
		
			LinkItems[21] = new Array(tmp);
			
			Heading= "<b>Microsoft Access (OLEDB)</B><BR>";
			tmp =  Heading + "TierDeveloper now extends the supported database platforms to provide support for MS Access. Quickly generate, build and deploy your desktop and small-size windows and web applications using TierDeveloper powerful O/R mapping and code generation features.";
		
			LinkItems[22] = new Array(tmp);
			
			Heading= "<b>SQL Server 7.0/2000 (OLEDB)</B><BR>";
			tmp =  Heading + "TierDeveloper allows you to uses either SQL OLEDB Provider or SQL Native Data Provider to connect with MSSQL database server.";
		
			LinkItems[23] = new Array(tmp);
			
			Heading= "<b>Oracle 8i/9i (OLEDB & OracleClient)</B><BR>";
			tmp =  Heading + "TierDeveloper allows you to uses either Oracle OLEDB Provider or Oracle Native Data Provider to connect with Oracle (8i/9i/10g) database server.";
		
			LinkItems[24] = new Array(tmp);
			
			Heading= "<b>DB2 7.x/8.1 (OLEDB)</B><BR>";
			tmp =  Heading + "TierDeveloper uses DB2 OLEDB Provider to connect with DB2 7.x/8.1 database server.";
		
			LinkItems[25] = new Array(tmp);
			
			Heading= "<b>Multi-database support</B><BR>";
			tmp =  Heading + "A TierDeveloper project can support more than one databases at a time. Multi-database support is achieved by adding new database connections to the project file.";
		
			LinkItems[26] = new Array(tmp);
			
			Heading= "<b>VS.NET Integration</B><BR>";
			tmp =  Heading + "<UL><LI>All TierDeveloper features provided from within Visual Studio .NET";
			tmp += "<LI>Create or Open TierDeveloper project in VS.NET";
			tmp += "<LI>Map objects to tables along with custom attribute selection";
			tmp += "<LI>Create queries, related queries, stored procedure calls, bulk methods, and custom operations.";
			tmp += "<LI>Specify hooks, web services, multiple database connections, and parent/child relationships";
			tmp += "<LI>Generate code for objects";
			tmp += "<LI>Generate stored procedures for all SQL";
			tmp += "<LI>Generate web application";
			tmp += "<LI>Build, deploy, and run objects to MTS.";
			tmp += "<LI>Build deploy, and run web app to IIS.";
			tmp += "<LI>Much more.</LI></UL>";

			LinkItems[27] = new Array(tmp);
			
			Heading= "<b>Dynamic Queries</B><BR>";
			tmp =  Heading + "Same as normal queries but with following additional features<UL>";
			tmp += "<LI>Specify where-clause at run-time";
			tmp += "<LI>Output of dynamic query is a collection of objects (just like normal queries)</UL>";
			
			LinkItems[28] = new Array(tmp);
			
			Heading= "<b>Web Services</B><BR>";
			tmp =  Heading + "No help is available";
			
			LinkItems[29] = new Array(tmp);
			
			Heading= "<b>Custom Hooks</B><BR>";
			tmp =  Heading + "TierDeveloper facilitates the user to customize the generated code behavior through 'Custom Hooks' feature, where one can make use of the 'Custom Hooks Skeleton Classes' to specify the custom behavior without making changes in the generated code.";
			
			LinkItems[30] = new Array(tmp);
			
			Heading= "<b>Stored Procedures</B><BR>";
			tmp =  Heading + "TierDeveloper lets the user generate Stored Procedure scripts for all of the inline SQL Queries and then the generated components make use of these stored procedures instead of inline SQL.";
			
			LinkItems[31] = new Array(tmp);
			
			Heading= "<b>Parent-Child Relationships</B><BR>";
			tmp =  Heading + "The Relationship feature gives us the facility to manage the life cycle of child Objects through parent Objects. The parent object is responsible for managing all kinds of operations on child objects in a single transaction.  If any of the operation fails the whole transaction will roll back.";
			
			LinkItems[32] = new Array(tmp);
			
			Heading= "<b>.NET Remoting</B><BR>";
			//tmp =  Heading + "TierDeveloper lets you generate remotable components through Web Services. The WinForms Remoting Application is a web services client application allows you to test the functionality of the .NET components through Web Service interface.";
			tmp =  Heading + "TierDeveloper lets you generate remotable components through Web Services. The WinForms Remoting Application is a web services client application allows you to test the functionality of the .NET components through Web Service interface.";
			
			LinkItems[33] = new Array(tmp);
			
			Heading= "<b>Customizable ASP.NET GUI</B><BR>";
			tmp =  Heading + "TierDeveloper auto-generates XML Customization file that contains the meta-data definitions for the generated GUI layout. Simply edit the XML Customization file to customize the default layout for the generated ASP.NET Web App and WinForms App.";
			
			LinkItems[34] = new Array(tmp);
			
			Heading= "<b>Customizable WinForms GUI</B><BR>";
			tmp =  Heading + "TierDeveloper auto-generates XML Customization file that contains the meta-data definitions for the generated GUI layout. Simply edit the XML Customization file to customize the default layout for the generated ASP.NET Web App and WinForms App.";
			
			LinkItems[35] = new Array(tmp);
			
			Heading= "<b>Customizable Remote Client GUI</B><BR>";
			tmp =  Heading + "TierDeveloper auto-generates XML Customization file that contains the meta-data definitions for the generated GUI layout. Simply edit the XML Customization file to customize the default layout for the generated ASP.NET Web App and WinForms App.";
			
			LinkItems[36] = new Array(tmp);
			
			ro = new clsRollOver(); 
			ro.SetWidth("400");
			IsRollOverReady = true;
		}
		
		function MouseOut(e)
		{
			//if(typeof ro !="undefined" || typeof ro !=null)
			if(IsRollOverReady == true)
				ro.HideWindow();
		}
		
		function MouseMove(Index)
		{
			var x;
			var y;
			var e;
			var Pos = new Position();
			// You must have to check the mouse event in this function because netscape 
			// send events to fucntoin and they are lcoal.
			//if(typeof ro !="undefined" || typeof ro !=null)
			if(IsRollOverReady == true) // Is Rollover ready to use
			{
				if(ro.IsNS())
					e = arguments.callee.caller.arguments[0];
				
				Pos.DeterminePosition(ro.GetBrowserType(),e);	
				ro.MoveWindow(Pos.X,Pos.Y,LinkItems[parseInt(Index)]);
			}	
		}
		function MouseOver(Index)
		{
			var Pos = new Position();
			var e;
			//if(typeof ro !="undefined" || typeof ro !=null)
			if(IsRollOverReady == true)
			{
				if(ro.IsNS())
					e = arguments.callee.caller.arguments[0];
			
				Pos.DeterminePosition(ro.GetBrowserType(),e);
				ro.ShowTipWindow(Pos.X,Pos.Y,LinkItems[parseInt(Index)]);
			}	
		}

