﻿
var Windows					= new Object();
var	WindowIDs				= 0;
var	WindowZIndexes			= 1001;
var	WinMoveObject			= null;
var	WinResizeObject			= null;
var	WinResizeType			= null;
var	CursorStartPosition		= [0,0];
var	WinMoveOffsets			= [0,0];
var	WinAllCurtainsVisible	= false;

if(window.ActiveXObject){

	document.documentElement.attachEvent("onmousemove", WinStartMoveAndResize);
	document.documentElement.attachEvent("onmouseup", WinFinishMoveAndResize);
	document.documentElement.attachEvent("onselectstart", WinDisableSelection);
}
else{

	document.documentElement.addEventListener("mousemove", WinStartMoveAndResize, false);
	document.documentElement.addEventListener("mouseup", WinFinishMoveAndResize, false);

	document.onmousedown	= function(){return false;} 	
}

function Window(Owner, Uri, OnLoad, OnClose, ImgRoot, Width, Height, Resizable, x, y, Title){

	this.ID			= "WND_" + WindowIDs;
	this.Uri		= Uri;
	this.OnLoad		= OnLoad;
	this.OnClose	= OnClose;
	this.OnClosing	= null;
	this.ImgRoot	= ImgRoot;
	this.Width		= Width;
	this.Height		= Height;
	this.Resizable	= Resizable;
	this.Owner		= Owner
	this.Title		= Title;
	this.x			= x;
	this.y			= y;
	this.OnClosing	= null;
	this.Base		= null;
	this.R1			= null;
	this.R2			= null;
	this.R3			= null;
	this.R4			= null;
	this.R5			= null;
	this.C11		= null;
	this.C12		= null;
	this.C13		= null;
	this.C14		= null;
	this.C15		= null;
	this.C21		= null;
	this.C22		= null;
	this.C23		= null;
	this.C24		= null;
	this.C25		= null;
	this.C31		= null;
	this.C32		= null;
	this.C33		= null;
	this.C41		= null;
	this.C42		= null;
	this.C43		= null;
	this.C44		= null;
	this.C45		= null;
	this.C51		= null;
	this.C52		= null;
	this.C53		= null;
	this.C54		= null;
	this.C55		= null;
	this.Header		= null;
	this.HR1		= null;
	this.HC1		= null;
	this.HC2		= null;
	this.HC3		= null;
	this.Curtain	= null;
	this.Resizer	= null;
	this.Content	= null;
	this.OnPostBack	= null;
	this.Attributes	= new Object();
				
	this.Show = function(){
	
		if(this.Uri.split("?").length > 1){
		
			this.Uri	+= "&wndID=" + this.ID;
		}
		else{
		
			this.Uri	+= "?wndID=" + this.ID;
		}
				
		this.Resizer				= document.createElement("div");
		this.Resizer.className		= "WndResizer";
		this.Resizer.style.zIndex	= WindowZIndexes;
		
		this.Content				= document.createElement("iframe");
		this.Content.frameBorder	= "0";
		this.Content.src			= this.Uri;
		
		this.Curtain				= document.createElement("div");
		this.Curtain.className		= "WndCurtain";
		this.Curtain.style.zIndex	= WindowZIndexes;
		
		if(window.attachEvent){
		
			this.Curtain.attachEvent("onclick", this.InvokeBringToFront);
		}
		else{
		
			this.Curtain.addEventListener("click", this.InvokeBringToFront, false);
		}
		
		this.Header					= document.createElement("table");
		this.Header.className		= "WndBase";
		this.Header.cellSpacing		= "0";
		this.Header.cellPadding		= "0";
		this.Header.border			= "0";
		
		this.HR1					= this.Header.insertRow(0);
		this.HC1					= this.HR1.insertCell(0);
		this.HC2					= this.HR1.insertCell(1);
		this.HC3					= this.HR1.insertCell(2);
		
		this.HC1.className			= "WndHC1";
		this.HC1.innerHTML			= this.Title + "<img src=\""+ this.ImgRoot +"Design/Theme/Default/Window/018.gif\" alt=\"\">";
		this.HC2.innerHTML			= "<img src=\""+ this.ImgRoot +"Design/Theme/Default/Window/018.gif\" alt=\"\">";
		this.HC3.innerHTML			= "<img src=\""+ this.ImgRoot +"Design/Theme/Default/Window/018.gif\" alt=\"\">";
		
		this.HC2.className			= "WndHC2";
		this.HC3.className			= "WndHC3";
				
		if(window.attachEvent){
		
			this.HC1.attachEvent("onmousedown", this.InvokeMove);
			this.HC3.attachEvent("onclick", this.InvokeClose);
		}
		else{
		
			this.HC1.addEventListener("mousedown", this.InvokeMove, false);
			this.HC3.addEventListener("click", this.InvokeClose, false);
		}
				
		this.Base				= document.createElement("table");
		this.Base.className		= "WndBase";
		this.Base.cellSpacing	= "0";
		this.Base.cellPadding	= "0";
		this.Base.border		= "0";
		this.Base.style.left	= this.x + "px";
		this.Base.style.top		= this.y + "px";
		this.Base.style.zIndex	= WindowZIndexes;
				
		this.R1					= this.Base.insertRow(0);
		this.R2					= this.Base.insertRow(1);
		this.R3					= this.Base.insertRow(2);
		this.R4					= this.Base.insertRow(3);
		this.R5					= this.Base.insertRow(4);
				
		this.C11				= this.R1.insertCell(0);
		this.C11.className		= "WndC11";
		this.C11.innerHTML		= "<img src=\""+ this.ImgRoot +"Design/Theme/Default/Window/018.gif\" alt=\"\">";
		
		this.C12				= this.R1.insertCell(1);
		this.C12.className		= "WndC12";
		this.C12.innerHTML		= "<img src=\""+ this.ImgRoot +"Design/Theme/Default/Window/018.gif\" alt=\"\">";
		
		this.C13				= this.R1.insertCell(2);
		this.C13.className		= "WndC13";
		this.C13.innerHTML		= "<img src=\""+ this.ImgRoot +"Design/Theme/Default/Window/018.gif\" alt=\"\">";
		
		this.C14				= this.R1.insertCell(3);
		this.C14.className		= "WndC14";
		this.C14.innerHTML		= "<img src=\""+ this.ImgRoot +"Design/Theme/Default/Window/018.gif\" alt=\"\">";
		
		this.C15				= this.R1.insertCell(4);
		this.C15.className		= "WndC15";
		this.C15.innerHTML		= "<img src=\""+ this.ImgRoot +"Design/Theme/Default/Window/018.gif\" alt=\"\">";
		
		this.C21				= this.R2.insertCell(0);
		this.C21.className		= "WndC21";
		this.C11.innerHTML		= "<img src=\""+ this.ImgRoot +"Design/Theme/Default/Window/018.gif\" alt=\"\">";
		
		this.C22				= this.R2.insertCell(1);
		this.C22.className		= "WndC22";
		this.C22.innerHTML		= "<img src=\""+ this.ImgRoot +"Design/Theme/Default/Window/018.gif\" alt=\"\">";
		
		this.C23				= this.R2.insertCell(2);
		this.C23.className		= "WndC23";
		this.C23.appendChild(this.Header);
				
		this.C24				= this.R2.insertCell(3);
		this.C24.className		= "WndC24";
		this.C24.innerHTML		= "<img src=\""+ this.ImgRoot +"Design/Theme/Default/Window/018.gif\" alt=\"\">";
		
		this.C25				= this.R2.insertCell(4);
		this.C25.className		= "WndC25";
		this.C25.innerHTML		= "<img src=\""+ this.ImgRoot +"Design/Theme/Default/Window/018.gif\" alt=\"\">";
		
		this.C31				= this.R3.insertCell(0);
		this.C31.className		= "WndC31";
		this.C31.innerHTML		= "<img src=\""+ this.ImgRoot +"Design/Theme/Default/Window/018.gif\" alt=\"\">";
		this.C31.setAttribute("ResizeType", "W");
		
		this.C32				= this.R3.insertCell(1);
		this.C32.className		= "WndC32";
		this.C32.colSpan		= "3";
		this.C32.appendChild(this.Content);
		
		this.C33				= this.R3.insertCell(2);
		this.C33.className		= "WndC33";
		this.C33.innerHTML		= "<img src=\""+ this.ImgRoot +"Design/Theme/Default/Window/018.gif\" alt=\"\">";
		this.C33.setAttribute("ResizeType", "E");
		
		this.C41				= this.R4.insertCell(0);
		this.C41.className		= "WndC41";
		this.C41.innerHTML		= "<img src=\""+ this.ImgRoot +"Design/Theme/Default/Window/018.gif\" alt=\"\">";
		
		this.C42				= this.R4.insertCell(1);
		this.C42.className		= "WndC42";
		this.C42.innerHTML		= "<img src=\""+ this.ImgRoot +"Design/Theme/Default/Window/018.gif\" alt=\"\">";
		
		this.C43				= this.R4.insertCell(2);
		this.C43.className		= "WndC43";
		this.C43.innerHTML		= "<img src=\""+ this.ImgRoot +"Design/Theme/Default/Window/018.gif\" alt=\"\">";
		
		this.C44				= this.R4.insertCell(3);
		this.C44.className		= "WndC44";
		this.C44.innerHTML		= "<img src=\""+ this.ImgRoot +"Design/Theme/Default/Window/018.gif\" alt=\"\">";
		this.C44.setAttribute("ResizeType", "SE");
		
		this.C45				= this.R4.insertCell(4);
		this.C45.className		= "WndC45";
		this.C45.innerHTML		= "<img src=\""+ this.ImgRoot +"Design/Theme/Default/Window/018.gif\" alt=\"\">";
		this.C45.setAttribute("ResizeType", "SE");

		this.C51				= this.R5.insertCell(0);
		this.C51.className		= "WndC51";
		this.C51.innerHTML		= "<img src=\""+ this.ImgRoot +"Design/Theme/Default/Window/018.gif\" alt=\"\">";
		
		this.C52				= this.R5.insertCell(1);
		this.C52.className		= "WndC52";
		this.C52.innerHTML		= "<img src=\""+ this.ImgRoot +"Design/Theme/Default/Window/018.gif\" alt=\"\">";
		
		this.C53				= this.R5.insertCell(2);
		this.C53.className		= "WndC53";
		this.C53.innerHTML		= "<img src=\""+ this.ImgRoot +"Design/Theme/Default/Window/018.gif\" alt=\"\">";
		this.C53.setAttribute("ResizeType", "S");
			
		this.C54				= this.R5.insertCell(3);
		this.C54.className		= "WndC54";
		this.C54.innerHTML		= "<img src=\""+ this.ImgRoot +"Design/Theme/Default/Window/018.gif\" alt=\"\">";
		this.C54.setAttribute("ResizeType", "SE");
		
		this.C55				= this.R5.insertCell(4);
		this.C55.className		= "WndC55";
		this.C55.innerHTML		= "<img src=\""+ this.ImgRoot +"Design/Theme/Default/Window/018.gif\" alt=\"\">";
		this.C55.setAttribute("ResizeType", "SE");
		
		if(window.attachEvent){
		
			this.C31.attachEvent("onmousedown", this.InvokeResize);
			this.C33.attachEvent("onmousedown", this.InvokeResize);
			this.C44.attachEvent("onmousedown", this.InvokeResize);
			this.C45.attachEvent("onmousedown", this.InvokeResize);
			this.C53.attachEvent("onmousedown", this.InvokeResize);
			this.C54.attachEvent("onmousedown", this.InvokeResize);
			this.C55.attachEvent("onmousedown", this.InvokeResize);
		}
		else{
		
			this.C31.addEventListener("mousedown", this.InvokeResize, false);
			this.C33.addEventListener("mousedown", this.InvokeResize, false);
			this.C44.addEventListener("mousedown", this.InvokeResize, false);
			this.C45.addEventListener("mousedown", this.InvokeResize, false);
			this.C53.addEventListener("mousedown", this.InvokeResize, false);
			this.C54.addEventListener("mousedown", this.InvokeResize, false);
			this.C55.addEventListener("mousedown", this.InvokeResize, false);
		}
		
		document.body.appendChild(this.Base);
		document.body.appendChild(this.Curtain);
		document.body.appendChild(this.Resizer);
		
		this.AppendWindowID(this.Base);
		this.AppendWindowID(this.Curtain);
		this.AppendWindowID(this.Resizer);
		
		this.ResizeContent();
		this.AlignCurtain();
		this.AlignResizer();
		this.BringToFront();
		this.HideResizer();
		
		Windows[this.ID]	= this;
		
		WindowZIndexes++;
		WindowIDs++;
	}
	
	this.ShowCenter = function(){
	
		this.x	= ((document.documentElement.clientWidth + document.documentElement.scrollLeft) - this.Width) / 2;
		this.y	= ((document.documentElement.clientHeight + document.documentElement.scrollTop) - this.Height) / 2;
	
		this.Show();						
	}
	
	this.AppendWindowID = function(Node)
	{
		var	c;

		Node.setAttribute("hWnd", this.ID);

		for(c=0; c<Node.childNodes.length; c++){

			if(Node.childNodes[c].tagName){

				Node.childNodes[c].setAttribute("hWnd", this.ID);
				this.AppendWindowID(Node.childNodes[c]);
			}
		}
	}
	
	this.ResizeContent = function(){
		
		this.Resizer.style.width	= this.Width + "px";
		this.Resizer.style.height	= this.Height + "px";
									
		this.C13.style.width		= (this.Width - 20) + "px";
		this.C23.style.width		= (this.Width - this.C21.offsetWidth - this.C22.offsetWidth - this.C24.offsetWidth - this.C25.offsetWidth) + "px";
		this.C43.style.width		= (this.Width - this.C41.offsetWidth - this.C42.offsetWidth - this.C44.offsetWidth - this.C45.offsetWidth) + "px";
		this.C53.style.width		= (this.Width - this.C51.offsetWidth - this.C52.offsetWidth - this.C54.offsetWidth - this.C55.offsetWidth) + "px";
				
		this.C32.style.width		= (this.Width - this.C31.offsetWidth - this.C33.offsetWidth) + "px";
		this.C32.style.height		= (this.Height - this.C13.offsetHeight - this.C23.offsetHeight - this.C43.offsetHeight - this.C53.offsetHeight) + "px";
				
		this.Curtain.style.width	= (this.Width - this.C31.offsetWidth - this.C33.offsetWidth) + "px";
		this.Curtain.style.height	= (this.Height - this.C13.offsetHeight - this.C23.offsetHeight - this.C43.offsetHeight - this.C53.offsetHeight) + "px";
				
		this.C43.style.width		= (this.Width - this.C41.offsetWidth - this.C42.offsetWidth - this.C44.offsetWidth - this.C45.offsetWidth) + "px";
		this.C53.style.width		= (this.Width - this.C51.offsetWidth - this.C52.offsetWidth - this.C54.offsetWidth - this.C55.offsetWidth) + "px";
	
		this.HC1.style.width		= ((this.Width - this.C21.offsetWidth - this.C22.offsetWidth - this.C24.offsetWidth - this.C25.offsetWidth) - this.HC2.offsetWidth - this.HC3.offsetWidth) + "px";
	
		this.Content.style.width	= (this.Width - this.C31.offsetWidth - this.C33.offsetWidth) + "px";
		this.Content.style.height	= (this.Height - this.C13.offsetHeight - this.C23.offsetHeight - this.C43.offsetHeight - this.C53.offsetHeight) + "px";
	}
	
	this.AlignCurtain = function(){
	
		this.Curtain.style.left	= (this.x + this.C31.offsetWidth) + "px";
		this.Curtain.style.top	= (this.y + this.C13.offsetHeight + this.C23.offsetHeight) + "px";
	}
	
	this.AlignResizer = function(){
	
		this.Resizer.style.left	= this.x + "px";
		this.Resizer.style.top	= this.y + "px";
	}
	
	this.ShowCurtain = function(){
	
		this.Curtain.style.display	= "";
	}
	
	this.HideCurtain = function(){
	
		this.Curtain.style.display	= "none";
	}
	
	this.ShowResizer = function(){
	
		this.Resizer.style.display	= "";
	}
	
	this.HideResizer = function(){
	
		this.Resizer.style.display	= "none";
	}
	
	this.InvokeMove = function(e){
				
		var	hWnd	= FindWindowHandle(e);
		
			hWnd.PeakZIndex();
			hWnd.Move(e);		
	}
	
	this.Move = function(e){
	
		CursorStartPosition	= FindMousePosition(e);
		WinMoveOffsets		= [CursorStartPosition[0] - FindOffsetLeft(this.C23), CursorStartPosition[1] - FindOffsetTop(this.C23)]; 
		WinMoveObject		= this;
	}
	
	this.MoveTo = function(x, y){
	
		this.Base.style.left	= x + "px";
		this.Base.style.top		= y + "px";
		
		this.EndMove();
	}
	
	this.EndMove = function(){
	
		this.x	= Number(this.Base.style.left.split("px")[0]);
		this.y	= Number(this.Base.style.top.split("px")[0]);
		
		this.HideCurtain();
		this.AlignResizer();
		
		WinMoveObject			= null;
		WinAllCurtainsVisible	= false;
		CursorStartPosition		= [0,0];
		WinMoveOffsets			= [0,0];
		
		this.FocusContent();
	}
	
	this.InvokeClose = function(e){
	
		var	hWnd	= FindWindowHandle(e);
			hWnd.Close(e);	
	}
	
	this.Close = function(e){
	
		try
		{
			if(this.OnClosing != null && this.OnClosing != null)
				eval("this.Owner." + this.OnClosing + "(this);");
		}
		catch(Ex)
		{
			
		}
	
		WindowIDs[this.ID]	= null;
		
		document.body.removeChild(this.Base);
		document.body.removeChild(this.Curtain);
	}
	
	this.InvokeBringToFront = function(e){
	
		var	hWnd	= FindWindowHandle(e);
			hWnd.BringToFront(e);	
	}
	
	this.BringToFront = function(e){
	
		this.PeakZIndex();
		this.HideCurtain();
		this.FocusContent();
	}
	
	this.PeakZIndex = function(){
	
		this.Base.style.zIndex		= WindowZIndexes-1;
		this.Content.style.zIndex	= WindowZIndexes-1;
		
		for(var Key in Windows){
		
			if(Windows[Key].Base.style.zIndex >= this.Base.style.zIndex){
				
				Windows[Key].LowerZIndex();
			}
			else{
			
				Windows[Key].ShowCurtain();
			}
		}		
	}
	
	this.LowerZIndex = function(){
	
		var	Lows	= new Array();
		
		for(var Key in Windows){
			
			if(Windows[Key].Base.style.zIndex < this.Base.style.zIndex)
				Lows[Lows.length]	= Key;
		}
	
		this.Base.style.zIndex		= this.Base.style.zIndex - 1;
		this.Curtain.style.zIndex	= this.Base.style.zIndex;
		this.Resizer.style.zIndex	= this.Base.style.zIndex;
		this.ShowCurtain();
	
		for(var i=0; i<Lows.length; i++){
		
			if(Windows[Lows[i]].Base.style.zIndex >= this.Base.style.zIndex)
				Windows[Lows[i]].LowerZIndex();
		}
	}
	
	this.InvokeResize = function(e){
	
		var	hWnd	= FindWindowHandle(e);
			hWnd.Resize(e);	
	}
	
	this.Resize = function(e){
	
		WinResizeType		= FindAttributeValue(e, "ResizeType");		
		CursorStartPosition	= FindMousePosition(e);
		WinResizeObject		= this;
	}
	
	this.ResizeTo = function(Width, Height){
	
		this.Width	= Width;
		this.Height	= Height;

		this.ResizeContent();
		this.AlignCurtain();
		this.AlignResizer();
		this.BringToFront();
		this.HideResizer();
	}
	
	this.EndResize = function(){
		
		this.Width	= this.Resizer.clientWidth;
		this.Height	= this.Resizer.clientHeight;
		
		this.HideResizer();
		this.HideCurtain();
		this.ResizeContent();
		
		WinResizeObject			= null;
		WinAllCurtainsVisible	= false;
		CursorStartPosition		= [0,0];
				
		this.FocusContent();
	}
	
	this.FocusContent = function(){
	
		this.Content.focus();
	}
	
	this.InvokePostBack = function(){
		
		if(this.Owner != null && this.OnPostBack != null){
				
			eval("this.Owner." + this.OnPostBack + "(this);");
		}
	}
	
	this.AddAttribute = function(Name, Value){
	
		this.Attributes[Name]	= Value;
	}
}

function FindWindowHandle(e){

	if(e && e.target)
		return Windows[e.target.attributes["hWnd"].value];
	else
		return Windows[event.srcElement.attributes["hWnd"].value];
}

function FindAttributeValue(e, attr){

	if(e && e.target)
		return e.target.attributes[attr].value;
	else
		return event.srcElement.attributes[attr].value;
}

function FindMousePosition(e){

	if(e && e.target)
		return [e.clientX + document.documentElement.scrollLeft, e.clientY + document.documentElement.scrollTop];
	else
		return [event.clientX + document.documentElement.scrollLeft, event.clientY + document.documentElement.scrollTop];
}

function WinStartMoveAndResize(e){

	var	CursorPosition;

	if(WinMoveObject != null){
	
		CursorPosition	= FindMousePosition(e);
				
		if(CursorPosition[0] != CursorStartPosition[0] || CursorPosition[1] != CursorStartPosition[1]){
			
			ChangeCursorIcon("move");
			
			if(!WinAllCurtainsVisible){
			
				WinAllCurtainsVisible	= true;
				WinShowAllCurtains();
			}
			
			WinMoveObject.x					= (CursorPosition[0] - WinMoveOffsets[0] - 8);
			WinMoveObject.y					= (CursorPosition[1] - WinMoveOffsets[1] - 4);
		
			WinMoveObject.Base.style.left	= WinMoveObject.x + "px";
			WinMoveObject.Base.style.top	= WinMoveObject.y + "px";
			
			WinMoveObject.AlignCurtain();			
		}
	}
	
	if(WinResizeObject != null){
	
		CursorPosition	= FindMousePosition(e);
		
		if(CursorPosition[0] != CursorStartPosition[0] || CursorPosition[1] != CursorStartPosition[1]){
			
			WinResizeObject.ShowResizer();
		
			if(!WinAllCurtainsVisible){
			
				WinAllCurtainsVisible	= true;
				WinShowAllCurtains();
			}
			
			switch(WinResizeType)
			{
				case "SE":
					{
						ChangeCursorIcon("se-resize");

						if(CursorPosition[0] - WinResizeObject.x > 0)
							WinResizeObject.Resizer.style.width		= (CursorPosition[0] - WinResizeObject.x + 2) + "px";
						
						if(CursorPosition[1] - WinResizeObject.y > 0)
							WinResizeObject.Resizer.style.height	= (CursorPosition[1] - WinResizeObject.y + 2) + "px";
						
						break;
					}
				case "E":
					{
						ChangeCursorIcon("e-resize");

						if(CursorPosition[0] - WinResizeObject.x > 0)
							WinResizeObject.Resizer.style.width		= (CursorPosition[0] - WinResizeObject.x + 2) + "px";
							
						break;
					}
				case "S":
					{
						ChangeCursorIcon("s-resize");
						
						if(CursorPosition[1] - WinResizeObject.y > 0)
							WinResizeObject.Resizer.style.height	= (CursorPosition[1] - WinResizeObject.y + 2) + "px";
							
						break;
					}
			}
		}
	}
}

function WinFinishMoveAndResize(e){

	ChangeCursorIcon("default");

	if(WinMoveObject != null)
		WinMoveObject.EndMove();

	if(WinResizeObject != null)
		WinResizeObject.EndResize();
}

function WinDisableSelection(e){

	if(e && e.target){
	
		if(e.target.type != "text"){
		
			return false;
		}
	}
	else{
	
		if(event.srcElement.type != "text"){
		
			return false;
		}
	}
}

function WinShowAllCurtains(){

	for(var Key in Windows){
		
		Windows[Key].ShowCurtain();
	}
}

function WinHideAllCurtains(){

	for(var Key in Windows){
		
		Windows[Key].HideCurtain();
	}
}

function ChangeCursorIcon(Icon){

	document.body.style.cursor	= Icon;
}

function FindOffsetLeft(Sender){

	var	CurrentLeft	= 0;
	
	if(Sender){
	
		if(Sender.offsetParent){
		
			CurrentLeft	= Sender.offsetLeft;
			
			while(Sender = Sender.offsetParent){
			
				CurrentLeft	+= Sender.offsetLeft;
			}
		}
	}
		
	return CurrentLeft;
}

function FindOffsetTop(Sender){

	var	CurrentTop	= 0;
	
	if(Sender){
	
		if(Sender.offsetParent){
		
			CurrentTop	= Sender.offsetTop;
			
			while(Sender = Sender.offsetParent){
			
				CurrentTop	+= Sender.offsetTop;
			}
		}
	}
		
	return CurrentTop;
}