﻿// JScript File
// JScript File
// JScript File

//Global Variables
var XmlHttp;

//Creating object of XMLHTTP For AJAX Method
function CreateXmlHttpNew()
	{
		//Creating object of XMLHTTP in IE
		try
		{
			XmlHttpFO = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch(e)
		{
			try
			{
				XmlHttpFO = new ActiveXObject("Microsoft.XMLHTTP");
			} 
			catch(oc)
			{
				XmlHttpFO = null;	
			}
		}
		//Creating object of XMLHTTP in Mozilla and Safari 
		if(!XmlHttpFO && typeof XMLHttpRequest != "undefined") 
		{
			XmlHttpFO = new XMLHttpRequest();
		}
	}
	
	//For Getting Symbol Drop Down Contains
	
	 function Get_Symbol(optS)
 {
		if(optS=="Inn")
		{
	 var InstName = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotes1_InstrumentType");
	 var Symbol = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotes1_Symbol");
 		var OptionType = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotes1_OptionType");
 		var StrikePrice = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotes1_StrikePrice");
		}
		else
		{
		 var InstName = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotesCtrl1_InstrumentType");   
		 var Symbol = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotesCtrl1_Symbol");
 		var OptionType = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotesCtrl1_OptionType");
 		var StrikePrice = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotesCtrl1_StrikePrice");                    
		}
		
 		
 		
 		
			if(InstName.value=="OPTIDX")
			{
				OptionType.options[1] = new Option();
				OptionType.options[1].value="PE";
				OptionType.options[1].text="PE";
				OptionType.options[2] = new Option();
				OptionType.options[2].value="CE";
				OptionType.options[2].text="CE";
			}
			else if(InstName.value=="OPTSTK")
			{
				OptionType.options[1] = new Option();
				OptionType.options[1].value="PA";
				OptionType.options[1].text="PA";
				OptionType.options[2] = new Option();
				OptionType.options[2].value="CA";
				OptionType.options[2].text="CA";
			}
			else
			{
				OptionType.length = 0;
				OptionType.options[0] = new Option();
				OptionType.options[0].value="";
				OptionType.options[0].text="Select Option Type";
				
				StrikePrice.length = 0;
				StrikePrice.options[0] = new Option();
				StrikePrice.options[0].value="";
				StrikePrice.options[0].text="Select Price";
			}
			
		CreateXmlHttpNew();
		document.body.style.cursor = "progress";
		var requestUrl = "GetSymbolAjax.aspx?timeStamp="+ new Date().getTime() +"&InstName="+InstName.value;
		//alert(requestUrl)
		if(XmlHttpFO)	{
					XmlHttpFO.onreadystatechange = function(){getSymbolResp(Symbol)};
					XmlHttpFO.open("GET", requestUrl,  true);
					XmlHttpFO.send(null);
				}
		
 }
 
 //Called when response comes back from server Only For Symbol
function getSymbolResp(ig_)
{

	// To make sure receiving response data from server is completed
	if(XmlHttpFO.readyState == 4)
	{
		
		// To make sure valid response is received from the server, 200 means response received is OK
		if(XmlHttpFO.status == 200)
		{		
			//alert(ig_)
			//var availSchemes   = document.getElementById(ig_);
			var strData = XmlHttpFO.responseText
			//alert(strData)
			if(strData != "") {	
			    
				var arrSchm = strData.split("|");
				ig_.length = 0; 	
				
				for(i=0; i<arrSchm.length-1; i++) {	
								
					var strSchm = arrSchm[i];
					var arrSchmCode = strSchm.split("~");
					
					ig_.options[i] = new Option();
					
					ig_.options[i].value = arrSchmCode[0];
					ig_.options[i].text = arrSchmCode[1];
				}
				
			}
			else {
					ig_.length = 0;
					ig_.options[0] = new Option(); 
					ig_.options[0].value = "";
					ig_.options[0].text = "Symbol not available";	
					
					
					/*to clear expiry date*/
                    var ExpDt = document.getElementById("ExpiryDate");
                     ExpDt.length = 0;
                     ExpDt.options[0] = new Option(); 
					 ExpDt.options[0].value = "";
					 ExpDt.options[0].text = "Select Expiry Date";
					 document.body.style.cursor = "auto";
					
					
					
			}
			document.body.style.cursor = "auto";	
		}
		else {
					ig_.length = 0;
					ig_.options[0] = new Option(); 
					ig_.options[0].value = "";
					ig_.options[0].text = "server is not ready";
					document.body.style.cursor = "auto";		
		}
	}
}

//End of Symbol Function///////////////////////////////////////////////////////////


function Get_ExpDateHome(optD)
 {
 if(optD=="Inn")
		{
	 var InstName = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotes1_InstrumentType");
		}
		
 		var Symbol = document.getElementById("Symbol");
 		var ExpiryDate = document.getElementById("ExpiryDate");
 				
		CreateXmlHttpNew();
		document.body.style.cursor = "progress";
		var requestUrl = "GetExpDateAjax.aspx?timeStamp="+ new Date().getTime() +"&InstName="+InstName.value +"&Symbol="+Symbol.value;
		//alert(requestUrl)
		if(XmlHttpFO)	{
					XmlHttpFO.onreadystatechange = function(){getDateResp(ExpiryDate)};
					XmlHttpFO.open("GET", requestUrl,  true);
					XmlHttpFO.send(null);
				}
		
 }
 
 //Called when response comes back from server Only For Symbol
function getDateRespHome(ig_)
{

	// To make sure receiving response data from server is completed
	if(XmlHttpFO.readyState == 4)
	{
		// To make sure valid response is received from the server, 200 means response received is OK
		if(XmlHttpFO.status == 200)
		{
			//alert(ig_)
			//var availSchemes   = document.getElementById(ig_);
			var strData = XmlHttpFO.responseText
			if(strData != "") {	
				var arrSchm = strData.split("|");
				ig_.length = 0; 	
				for(i=0; i<arrSchm.length-1; i++) {	
					var strSchm = arrSchm[i];
					var arrSchmCode = strSchm.split("~");
					ig_.options[i] = new Option();
					ig_.options[i].value = arrSchmCode[0];
					ig_.options[i].text = arrSchmCode[1];
				}
			}
			else {
					ig_.length = 0;
					ig_.options[0] = new Option(); 
					ig_.options[0].value = "";
					ig_.options[0].text = "Date not available";			
			}
			document.body.style.cursor = "auto";	
		}
		else {
					ig_.length = 0;
					ig_.options[0] = new Option(); 
					ig_.options[0].value = "";
					ig_.options[0].text = "server is not ready";
					document.body.style.cursor = "auto";		
		}
	}
}

//For Getting Expiry Date

//function Get_ExpDate(optD)
// {
// 
// 	    CreateXmlHttpNew();
//		document.body.style.cursor = "progress";
// 

// if(optD=="Inner")
//		{
//		
//	 var InstName = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotesCtrl1_InstrumentType");  
//	 var Symbol = document.getElementById("Symbol");
// 		var ExpiryDate = document.getElementById("ExpiryDate");
// 		
// 		var requestUrl = "GetExpDateAjax.aspx?timeStamp="+ new Date().getTime() +"&InstName="+InstName.value +"&Symbol="+Symbol.value;
//		}
//		else
//		{
//		
//		
//		
//		 var InstName = document.getElementById("ctl00_ContentPlaceHolder1_ddlDrpInstName").value;   
//		
//		  var arrInstName=InstName.split("|");
//		 var   FinalInstName=arrInstName[0];
//		
//		if(FinalInstName =='FUT') 
//		{
//		FinalInstName='FUTIDX';
//		}
//		if(FinalInstName =='OPT') 
//		{
//		FinalInstName='OPTIDX';
//		}
//		 

//		 var ExpiryDate = document.getElementById("ctl00_ContentPlaceHolder1_ddexpdate");
//		 
//		 var InstName =FinalInstName;
//        document.getElementById('ctl00_ContentPlaceHolder1_txthiddenInstName').value = InstName;
//    
//    
//       var Symbol =arrInstName[1];
//       document.getElementById('ctl00_ContentPlaceHolder1_txthiddensymbol').value = Symbol;
//  
//		
//		 
//		 
//		 var requestUrl = "GetExpDateAjax.aspx?timeStamp="+ new Date().getTime() +"&InstName="+FinalInstName;   
//		
//		
//		 
//		 
//		                   
//		}
//		
// 		
// 				
//	
//		
//		
//		if(XmlHttpFO)	{
//					XmlHttpFO.onreadystatechange = function(){getDateResp(ExpiryDate)};
//					XmlHttpFO.open("GET", requestUrl,  true);
//					XmlHttpFO.send(null);
//				}
//		
// }
// 
 
  function Get_ExpDate(optD)
 {
 if(optD=="Inn")
		{
		    var Symbol = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotesCtrl1_Symbol");
 		    var ExpiryDate = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotesCtrl1_ExpiryDate");
	        var InstName = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotesCtrl1_InstrumentType");
		}
		
 		
 				
		CreateXmlHttpNew();
		document.body.style.cursor = "progress";
		var requestUrl = "GetExpDateAjax.aspx?timeStamp="+ new Date().getTime() +"&InstName="+InstName.value +"&Symbol="+Symbol.value;
		//alert(requestUrl)
		if(XmlHttpFO)	{
					XmlHttpFO.onreadystatechange = function(){getDateResp(ExpiryDate)};
					XmlHttpFO.open("GET", requestUrl,  true);
					XmlHttpFO.send(null);
				}
		
 }
 
 
 
 //Called when response comes back from server Only For Symbol
function getDateResp(ig_)
{

	// To make sure receiving response data from server is completed
	if(XmlHttpFO.readyState == 4)
	{
		// To make sure valid response is received from the server, 200 means response received is OK
		if(XmlHttpFO.status == 200)
		{
			//alert(ig_)
			//var availSchemes   = document.getElementById(ig_);
			var strData = XmlHttpFO.responseText
			if(strData != "") {	
				var arrSchm = strData.split("|");
				ig_.length = 0; 	
				for(i=0; i<arrSchm.length-1; i++) {	
					var strSchm = arrSchm[i];
					var arrSchmCode = strSchm.split("~");
					ig_.options[i] = new Option();
					ig_.options[i].value = arrSchmCode[0];
					ig_.options[i].text = arrSchmCode[1];
				}
			}
			else {
					ig_.length = 0;
					ig_.options[0] = new Option(); 
					ig_.options[0].value = "";
					ig_.options[0].text = "Date not available";			
			}
			document.body.style.cursor = "auto";	
		}
		else {
					ig_.length = 0; 
					ig_.options[0] = new Option(); 
					ig_.options[0].value = "";
					ig_.options[0].text = "server is not ready";
					document.body.style.cursor = "auto";		
		}
	}
}

// End of Expiry Date Funtion////////////////////////////////////////////

//For Getting Strike Price 


function Get_StrikePrice(optP)
 {
 if(optP=="Inn")
		{
	     var InstName = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotes1_InstrumentType");
	     var Symbol = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotes1_Symbol");
 		 var ExpiryDate = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotes1_ExpiryDate");
 		 var OptionType = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotes1_OptionType");
 		 var StrikePrice = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotes1_StrikePrice"); 
		}
		else
		{
		 var InstName = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotesCtrl1_InstrumentType");   
		 var Symbol = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotesCtrl1_Symbol");
 		 var ExpiryDate = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotesCtrl1_ExpiryDate");
 		 var OptionType = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotesCtrl1_OptionType");
 		 var StrikePrice = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotesCtrl1_StrikePrice");                     
		}
		
 		
 		
 		//alert(ExpiryDate.value)		
		CreateXmlHttpNew();
		document.body.style.cursor = "progress";
		var requestUrl = "GetStrikePriceAjax.aspx?timeStamp="+ new Date().getTime() +"&InstName="+InstName.value +"&Symbol="+Symbol.value+"&ExpDate="+ExpiryDate.value+"&OptionType="+OptionType.value;
	
		
		if(XmlHttpFO)	{
					XmlHttpFO.onreadystatechange = function(){Get_StrikePriceResp(StrikePrice)};
					XmlHttpFO.open("GET", requestUrl,  true);
					XmlHttpFO.send(null);
				}
				
		
 }
 
 
 //Called when response comes back from server Only For Strike Price
function Get_StrikePriceResp(ig_)
{
	// To make sure receiving response data from server is completed
	if(XmlHttpFO.readyState == 4)
	{
	//alert(XmlHttpFO.status)
		// To make sure valid response is received from the server, 200 means response received is OK
		if(XmlHttpFO.status == 200)
		{
			//alert(ig_)
			//var availSchemes   = document.getElementById(ig_);
			var strData = XmlHttpFO.responseText;
			//alert(strData)
			if(strData != "") {	
			    
				var arrPrice = strData.split("|");
				ig_.length = 0; 	
				
				for(i=0; i<arrPrice.length-1; i++) {	
								
					var strPrice = arrPrice[i];
					var arrPriceCode = strPrice.split("~");
					
					ig_.options[i] = new Option();
					
					ig_.options[i].value = arrPriceCode[0];
					ig_.options[i].text = arrPriceCode[1];
				}
				
			}
			else {
					ig_.length = 0;
					ig_.options[0] = new Option(); 
					ig_.options[0].value = "";
					ig_.options[0].text = "Price not available";			
			}
			document.body.style.cursor = "auto";	
		}
		else {
					ig_.length = 0;
					ig_.options[0] = new Option(); 
					ig_.options[0].value = "";
					ig_.options[0].text = "server is not ready";
					document.body.style.cursor = "auto";		
		}
	}
}
 
 
 // End of Strike Price funtion ///////////////////////////////////////////////
 
 
 function ValidateFormHome(opt)
{

 if(opt=="Inn")
 {
 var InstType = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotes1_InstrumentType");
 }

	var Symbol   = document.getElementById("Symbol");
	var ExpDate  = document.getElementById("ExpiryDate");
	var OptType  = document.getElementById("OptionType");
	var StkPrice = document.getElementById("StrikePrice");
	
		if(InstType.value=="")
		{
			alert("Please select the Instrument Type before you proceed")
			return false;
		}
		else if((InstType.value=="OPTIDX")||(InstType.value=="OPTSTK"))
		{
			if(Symbol.value=="Select Symbol")	
			{
			alert("Please select Symbol before you proceed")
			return false;
			}
			else if(OptType.value=="")
			{
			alert("Please select Option Type before you proceed")
			return false;
			}
			else if(StkPrice.value=="Select Price")
			{
			alert("Please select Price before you proceed")
			return false;
			}
		}
		else 
		{
			if(Symbol.value=="Select Symbol")	
			{
			alert("Please select Symbol before you proceed")
			return false;
			}
		}
		var url="InstType="+InstType.value+"&Symbol="+Symbol.value+"&ExpDate="+ExpDate.value+"&OptType="+OptType.value+"&StkPrice="+StkPrice.value+"&Home=True&id=1";
		
		var strUrlDer="GetQuotes.aspx?"+url;
		 var newWindow = window.open(strUrlDer, '_parent'); 
			
            newWindow.focus(); 
            return false; 
//	if(opt=="Home")
//	{
//	//Redirecting from home page to inner
//	//window.location="  .aspx?id=1&url="+url+"";
//	}
//	else
//	{
//	//showing data in the same page
//	getFOQuotes(url);
//	}
}
 
 //For GetQiote Button Click
 function ValidateForm(opt)
{
 if(opt=="Inn")
 {
    var InstType = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotes1_InstrumentType");
    var Symbol   = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotes1_Symbol");
	var ExpDate  = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotes1_ExpiryDate");
	var OptType  = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotes1_OptionType");
	var StkPrice = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotes1_StrikePrice");
 }
 else
		{
		 var InstType = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotesCtrl1_InstrumentType");    
		 var Symbol   = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotesCtrl1_Symbol");
	     var ExpDate  = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotesCtrl1_ExpiryDate");
	     var OptType  = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotesCtrl1_OptionType");
	     var StkPrice = document.getElementById("ctl00_ContentPlaceHolder1_GetQuotesCtrl1_StrikePrice");                    
		}
		

	
	
		if(InstType.value=="")
		{
			alert("Please select the Instrument Type before you proceed")
			InstType.focus();
			return false;
		}
		else if((InstType.value=="OPTIDX")||(InstType.value=="OPTSTK"))
		{
			if(Symbol.value=="Select Symbol")	
			{
			alert("Please select Symbol before you proceed")
			Symbol.focus();
			return false;
			}
			else if(OptType.value=="")
			{
			alert("Please select Option Type before you proceed")
			OptType.focus();
			return false;
			}
			else if(StkPrice.value=="Select Strike Price")
			{
			alert("Please select Strike Price before you proceed")
			StkPrice.focus();
			return false;
			}
		}
		else 
		{
			if(Symbol.value=="Select Symbol")	
			{
			alert("Please select Symbol before you proceed")
			Symbol.focus();
			return false;
			}
		}
		
		var url="InstType="+InstType.value+"&Symbol="+Symbol.value+"&ExpDate="+ExpDate.value+"&OptType="+OptType.value+"&StkPrice="+StkPrice.value+"";
	if(opt=="Home")
	{
	//Redirecting from home page to inner
	//window.location="  .aspx?id=1&url="+url+"";
	}
	else
	{
	//showing data in the same page
	getFOQuotes(url);
	}
}
 
 
 //For Loading Data from FOQuotesData.aspx Using AJAX
function getFOQuotes(strUrl)
	{
	
		var FOQuotesTbl = document.getElementById("FOQuotesTbl");
		if(FOQuotesTbl.style.display=="none")FOQuotesTbl.style.display = "inline";
		
		// Put Chart Page 
		document.FOPChartImg.src="GetQuoteChart.aspx?"+ strUrl;
		//document.getElementById("LoadingID").src = "../App_Themes/Common/Images/spacer.gif";
//		document.getElementById("FO8").innerHTML = "<table align=center><tr><td ><img src =../App_Themes/HomeCommon/Homeimages/Ctrl-Loader.gif/></td></tr></table>";
		CreateXmlHttpNew();
		document.body.style.cursor = "progress";
		var requestUrl = "GetQuoteDataAjax.aspx?IpTrack="+ window.location.hostname +"&timeStamp="+ new Date().getTime() +"&"+ strUrl;
		
	
		if(XmlHttpFO)	{
		
					XmlHttpFO.onreadystatechange = function(){getFODataResp()};
					XmlHttpFO.open("GET", requestUrl,  true);
					XmlHttpFO.send(null);
				}
				
				
				
				
				
				
	}
	
//Called when response comes back from server Only For FO Quotes Data Response
function getFODataResp()
{

	// To make sure receiving response data from server is completed

	if(XmlHttpFO.readyState == 4)
	{
	
		// To make sure valid response is received from the server, 200 means response received is OK
		if(XmlHttpFO.status == 200)
		{
			var FO_QuoteData = XmlHttpFO.responseText;
			if(FO_QuoteData != "") {
				var arrRow = FO_QuoteData.split("|");
				//alert(arrRow);
				for(i=0; i<arrRow.length-1; i++)
				 {
					
						document.getElementById("FO"+i).innerHTML = arrRow[i];
				 }
				//document.getElementById("LoadingID").src = "../App_Themes/Common/Images/spacer.gif";
				document.body.style.cursor = "auto";
			}	
		}
		else
			document.getElementById("LoadingID").src = " ../App_Themes/Common/Images/ajax-loader.gif";
			
	}
}

 // End of GetQiote Button  Funtionallty
 
 
 function GetUrlHome()
{
var strurl=window.location.search;
//alert(strurl.indexOf("InstType=") )
if(strurl!="?id=1")
{
strurl=strurl.substring(10);
RedirectFOquotHom(strurl);
}

}



function Browser() {

  var ua, s, i;
  this.isIE    = false;
  this.isNS    = false;  
  this.version = null;
  ua = navigator.userAgent;
	s = "MSIE";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isIE = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  s = "Netscape6/";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }  
  
  s="Opera";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isIE = true;
    this.version = parseFloat(ua.substr(i + s.length));
    return;
  }

  // Treat any other "Gecko" browser as NS 6.1.

  s = "Gecko";
  if ((i = ua.indexOf(s)) >= 0) {
    this.isNS = true;
    this.version = 6.1;
    return;
  }
}

var browser = new Browser();

// Global object to hold drag information.

var dragObj = new Object();
dragObj.zIndex = 0;

function dragStart(event, id) {
    //alert("sdf");
  var el;
  var x, y;

  // If an element id was given, find it. Otherwise use the element being
  // clicked on.

  if (id)
    dragObj.elNode = document.getElementById(id);
  else {
    if (browser.isIE)
      dragObj.elNode = window.event.srcElement;
    if (browser.isNS)
      dragObj.elNode = event.target;

    // If this is a text node, use its parent element.

    if (dragObj.elNode.nodeType == 3)
      dragObj.elNode = dragObj.elNode.parentNode;
  }

  // Get cursor position with respect to the page.

  if (browser.isIE) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  if (browser.isNS) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }

  // Save starting positions of cursor and element.

  dragObj.cursorStartX = x;
  dragObj.cursorStartY = y;
  dragObj.elStartLeft  = parseInt(dragObj.elNode.style.left, 10);
  dragObj.elStartTop   = parseInt(dragObj.elNode.style.top,  10);

  if (isNaN(dragObj.elStartLeft)) dragObj.elStartLeft = 0;
  if (isNaN(dragObj.elStartTop))  dragObj.elStartTop  = 0;

  // Update element's z-index.

  dragObj.elNode.style.zIndex = ++dragObj.zIndex;

  // Capture mousemove and mouseup events on the page.

  if (browser.isIE) {
    document.attachEvent("onmousemove", dragGo);
    document.attachEvent("onmouseup",   dragStop);
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (browser.isNS) {
    document.addEventListener("mousemove", dragGo,   true);
    document.addEventListener("mouseup",   dragStop, true);
    event.preventDefault();
  }
}

function dragGo(event) {

  var x, y;

  // Get cursor position with respect to the page.

  if (browser.isIE) {
    x = window.event.clientX + document.documentElement.scrollLeft
      + document.body.scrollLeft;
    y = window.event.clientY + document.documentElement.scrollTop
      + document.body.scrollTop;
  }
  if (browser.isNS) {
    x = event.clientX + window.scrollX;
    y = event.clientY + window.scrollY;
  }

  // Move drag element by the same amount the cursor has moved.

  dragObj.elNode.style.left = (dragObj.elStartLeft + x - dragObj.cursorStartX) + "px";
  dragObj.elNode.style.top  = (dragObj.elStartTop  + y - dragObj.cursorStartY) + "px";

  if (browser.isIE) {
    window.event.cancelBubble = true;
    window.event.returnValue = false;
  }
  if (browser.isNS)
    event.preventDefault();
}

function dragStop(event) {

  // Stop capturing mousemove and mouseup events.

  if (browser.isIE) {
    document.detachEvent("onmousemove", dragGo);
    document.detachEvent("onmouseup",   dragStop);
  }
  if (browser.isNS) {
    document.removeEventListener("mousemove", dragGo,   true);
    document.removeEventListener("mouseup",   dragStop, true);
  }
}
