

  var winURL = '';
  var winTarget = '';
  var winWidth = '';
  var winHeight = '';
  var winLeft = '';
  var winTop = '';
  var winRes = '';
  var winScroll = '';
  var winLoc = '';
  var winStat = '';
  var winMenu = '';
  var winTool = '';
  
  function openWindow(winURL, winTarget, winWidth, winHeight, winLeft, winTop, winRes, winScroll, winLoc, winStat, winMenu, winTool)
    
  {
  
    // Universal Window Loader
        
    wwinRes = 'no';  // Resizable
    wwinScroll = 'no';  // Scrollbars
    wwinLoc = 'no';  // Location / Address
    wwinStat = 'no';  // Status bar
    wwinMenu = 'no';  // Menu bar
    wwinTool = 'no';  // Tool bar
    
    if (winRes == '1')
    {
      wwinRes = 'yes';
    }

    if (winScroll == '1')
    {
      wwinScroll = 'yes';
    }
    
    if (winLoc == '1')
    {
      wwinLoc = 'yes';
    }
    
    if (winStat == '1')
    {
      wwinStat = 'yes';
    }
    
    if (winMenu == '1')
    {
      wwinMenu = 'yes';
    }
    
    if (winTool == '1')
    {
      wwinTool = 'yes';
    }
                        
    var winProp = 'left=' + winLeft + ',top=' + winTop + ',width=' + winWidth + ',height=' + winHeight + ',resizable=' + wwinRes + ',scrollbars=' + wwinScroll + ',location=' + wwinLoc + ',status=' + wwinStat + ',menubar=' + wwinMenu + ',toolbar=' + wwinTool;
    aPopUp = window.open(winURL, winTarget, winProp);
 
	return aPopUp; 
}


// Open Modal Calendar Picker
function CmdOpenCalendar(ffield, intmode)

{				
	var currdate = document.getElementById(ffield).innerText;
	var winTarget = 'dt1';
	var winURL = 'Controls/Calendar/ModalCal.aspx?currdate=' + currdate + '&field=Form1.' + ffield + '&calmode=' + intmode;
	var props = "edge:sunken;scroll:no;dialogHeight:300px;dialogWidth:230px;status:no;help:no";			
	window.showModalDialog(winURL, window, props);
}
	

// Preserve Scroll Bar Routines
//
// These Functions Preserve The Position Of The Scrollbars
// When The Page Is Reloaded. The Routine Detects The Current Position
// And Write This Information To A Cookie Which Is Then Read Once The
// Page Is Reloaded. Using This Information The Scrollbars Are Then Set
// To The Values Stored Within The Cookie.

// Note:
//
// The Body TAG Must Contain The Following Calls
// For The Scrollbar Positions To Be Preserved
// <BODY onLoad="loadScroll()" onUnload="saveScroll()">

function setCookie(name, value, expires, path, domain, secure)
{
  var curCookie = name + "=" + escape(value) +
    ((expires) ? "; expires=" + expires.toGMTString() : "") +
    ((path) ? "; path=" + path : "") +
    ((domain) ? "; domain=" + domain : "") +
    ((secure) ? "; secure" : "");
  document.cookie = curCookie;
}

function getCookie(name)
{
  var dc = document.cookie;
  var prefix = name + "=";
  var begin = dc.indexOf("; " + prefix);
  if (begin == -1) {
    begin = dc.indexOf(prefix);
    if (begin != 0) return null;
  } else {
    begin += 2;
  }
  var end = document.cookie.indexOf(";", begin);
  if (end == -1) end = dc.length;
  return unescape(dc.substring(begin + prefix.length, end));
}

var db = (document.body) ? 1 : 0;
var scroll = (window.scrollTo) ? 1 : 0;

function saveScroll()
{		  
  if (!scroll) return;
  var now = new Date();
  now.setTime(now.getTime() + 365 * 24 * 60 * 60 * 1000);
  //var x = (db) ? document.body.scrollLeft : pageXOffset;
  //var y = (db) ? document.body.scrollTop : pageYOffset;
  var x = document.body.scrollLeft;
  var y = document.body.scrollTop;
  setCookie("xy", x + "_" + y, now);
}

function loadScroll()
{
  if (!scroll) return;
  var xy = getCookie("xy");
  if (!xy) return;
  var ar = xy.split("_");
  if (ar.length == 2) scrollTo(parseInt(ar[0]), parseInt(ar[1]));
}


function StripXML(s)

{

// Used to strip XML tags and replace them with nice versions

// Note these must be done in order, particularly the &amp;

re = new RegExp('\;', 'gi');

var s1 = s.replace(re, '');


re = new RegExp('&', 'gi');

var s2 = s1.replace(re, '&amp;');

re = new RegExp('<', 'gi');

s1 = s2.replace(re, '&lt;');


re = new RegExp('\'', 'gi');

s2 = s1.replace(re, '&apos;');

return s2;

}



// Removes unfriendly characters for html view. characters such as '<' and '>'
function stripHtml(s) {
	return s.replace(/\&/g, "&amp;").replace(/\</g, "&lt;").replace(/\>/g, "&gt;").replace(/\t/g, "&nbsp;&nbsp;&nbsp;").replace(/\n/g, "<br />");
}


function Check_Min_Max(MinValue, MaxValue)
{
	var ThisValue = event.srcElement.value;
	
	if (ThisValue != '') {
		if (ThisValue < MinValue) {
			alert("Invalid range: Must be between " + MinValue + " and " + MaxValue);
			event.srcElement.value = '';
			event.srcElement.focus();
		} else if (ThisValue > MaxValue) {
			alert("Invalid range: Must be between " + MinValue + " and " + MaxValue);
			event.srcElement.value = '';
			event.srcElement.focus();
		}
	}
}


function Check_Nums2()

{
    if ((event.keyCode < 48) || (event.keyCode > 57))
    {
        return false;
    }
}


function Check_Price()
{
	var strPercent = event.srcElement.value;
	var re;

	if ((event.keyCode < 48) || (event.keyCode > 57))
	{
		if ((String.fromCharCode(event.keyCode) != '.') && (String.fromCharCode(event.keyCode) != '$')) {
			return false;
		} else {
			if (String.fromCharCode(event.keyCode) == '.') {
				re = /\./g;
				if (strPercent.search(re) != -1) {
					return false;
				}
			} else {
				re = /$/g;
				if (strPercent.search(re) != -1) {
					return false;
				}
			}
		}
	}
}


function Check_Decimal()

{
	var strDecimal = event.srcElement.value;

	if ((event.keyCode < 48) || (event.keyCode > 57))
	{
		if (String.fromCharCode(event.keyCode) != '.') {
			return false;
		} else {
			var re = /\./g;
			if (strDecimal.search(re) != -1) {
				return false;
			}
		}
	}
}


function Check_Percent()
{
	var strPercent = event.srcElement.value;
	var re;

	if ((event.keyCode < 48) || (event.keyCode > 57))
	{
		if ((String.fromCharCode(event.keyCode) != '.') && (String.fromCharCode(event.keyCode) != '%')) {
			return false;
		} else {
			if (String.fromCharCode(event.keyCode) == '.') {
				re = /\./g;
				if (strPercent.search(re) != -1) {
					return false;
				}
			} else {
				re = /%/g;
				if (strPercent.search(re) != -1) {
					return false;
				}
			}
		}
	}
}

function FormatDecimal(obj, decplace)
 {
	var strNum = 0;
	var units = '';
	var multiplier = 0;
	var re = /\,|\%/g;

	if (decplace == null) {
		decplace = 0;
	}
	
	if (typeof(obj) == 'object') {
		strNum = obj.value;
		strNum = strNum.replace(re, '');
	} else {
		strNum = obj;
		strNum = strNum.replace(re, '');
	}

	if (strNum == '') {
		strNum = 0;
	}

	if (decplace > 0) {
		multiplier = Math.pow(10, decplace);
	}
		
	if (isNaN(strNum) == false) {
		if(isNaN(strNum))
		strNum = "0";
		sign = (strNum == (strNum = Math.abs(strNum)));
		
		if (decplace > 0) {
			strNum = Math.floor(strNum*multiplier+0.50000000001);
			units = (strNum%multiplier).toString();
			strNum = Math.floor(strNum/multiplier).toString();
		} else {
			strNum = Math.floor(strNum+0.50000000001);
			units = '';
			strNum = Math.floor(strNum).toString();
		}
						
		if (decplace > 1) {	
			var i = 0;
			var zeros = '';
			if(units.length < decplace) {
				for (i=units.length; i<decplace; i++) {
					units = units + '0';
				}		
			}
			units = zeros + units;
		}
	}
	
	if (decplace > 0) {
		obj.value = strNum.toString() + '.' + units.toString();
	} else {
		obj.value = strNum.toString();
	}
}


function CmdFormatPercent()
{
	var obj = event.srcElement;
	var strNum = obj.value;
	var strPercent = "0%";

	var re = /\%/g;
	if (strNum != '') {
		if (strNum.search(re) != -1) {
			strNum = strNum.replace(re, "");
		}
	} else {
		strNum = 0;
	}
	
	strPercent = strNum.toString() + "%";
	
	obj.value = strPercent;
}



function CmdFormatCurrency() 
{
	var strNum = 0;
	var multiplier = 0;
	var cents = '';
	var decimals = 2;
	var re = /HK|\$|\,|\u00A5|\u20AC|\u00A3/g;
	
	/*
		?= 00A5
		?= 00A3
		€ = 20AC
	*/
	var obj = event.srcElement;
	
	if (decimals == null) {
		decimals = 0;
	}
		
	if (typeof(obj) == 'object') {
		strNum = obj.value;
		strNum = strNum.replace(re, '');
	} else {
		strNum = obj;
		strNum = strNum.replace(re, '');
	}

	if (strNum == '') {
		strNum = 0;
	}

	if (decimals > 0) {
		multiplier = Math.pow(10, decimals);
	}
		
	if (isNaN(strNum) == false) {
		if(isNaN(strNum))
		strNum = "0";
		sign = (strNum == (strNum = Math.abs(strNum)));
		
		if (decimals > 0) {
			strNum = Math.floor(strNum*multiplier+0.50000000001);
			cents = (strNum%multiplier).toString();
			strNum = Math.floor(strNum/multiplier).toString();
		} else {
			strNum = Math.floor(strNum+0.50000000001);
			cents = '';
			strNum = Math.floor(strNum).toString();
		}
		
		if (decimals > 1) {	
			var i = 0;
			var zeros = '';
			if(cents.length < decimals) {
				for (i=cents.length; i<decimals; i++) {
					zeros = zeros + '0';
				}		
			}
			cents = zeros + cents;
		}

		for (var i = 0; i < Math.floor((strNum.length-(1+i))/3); i++)
		strNum = strNum.substring(0,strNum.length-(4*i+3))+','+
		strNum.substring(strNum.length-(4*i+3));
		if (cents == '') {
			strTotalCost = (((sign)?'':'-') + '$' + strNum);
		} else {
			strTotalCost = (((sign)?'':'-') + '$' + strNum + '.' + cents);
		}
		
		if (typeof(obj) == 'object') {
			obj.value = strTotalCost;
		} else {
			return strTotalCost;
		}
	} else {
		if (typeof(obj) == 'object') {
			obj.value = '';
			alert('Invalid price format.');
			return false;
		}
	}
}


function CmdFormatThisCurrency(strValue) 
{
	var strNum = 0;
	var multiplier = 0;
	var cents = '';

	strNum = strValue;

	if (strNum == '') {
		strNum = 0;
	}

	multiplier = Math.pow(10, 2);

	if (isNaN(strNum) == false) {
		if(isNaN(strNum))
		strNum = "0";
		sign = (strNum == (strNum = Math.abs(strNum)));
		strNum = Math.floor(strNum*multiplier+0.50000000001);
		cents = (strNum%multiplier).toString();
		strNum = Math.floor(strNum/multiplier).toString();
		
		var i = 0;
		var zeros = '';
		if(cents.length < 2) {
			for (i=cents.length; i<2; i++) {
				zeros = zeros + '0';
			}		
		}
		cents = zeros + cents;

		for (var i = 0; i < Math.floor((strNum.length-(1+i))/3); i++)
		strNum = strNum.substring(0,strNum.length-(4*i+3))+','+
		strNum.substring(strNum.length-(4*i+3));
		if (cents == '') {
			strTotalCost = (((sign)?'':'-') + '$' + strNum);
		} else {
			strTotalCost = (((sign)?'':'-') + '$' + strNum + '.' + cents);
		}
		
		return strTotalCost;
	} else {
		alert('Invalid price format.');
		return false;
	}
}


// New function to calculate new dates when more days/months/years are added
function DateAdd(startDate, numDays, numMonths, numYears)
{
	var returnDate = new Date(startDate.getTime());
	var yearsToAdd = numYears;
	
	var month = returnDate.getMonth()	+ numMonths;
	if (month > 11)
	{
		yearsToAdd = Math.floor((month+1)/12);
		month -= 12*yearsToAdd;
		yearsToAdd += numYears;
	}
	returnDate.setMonth(month);
	returnDate.setFullYear(returnDate.getFullYear()	+ yearsToAdd);
	
	returnDate.setTime(returnDate.getTime()+60000*60*24*numDays);
	
	return returnDate;

}

function YearAdd(startDate, numYears)
{
		return DateAdd(startDate,0,0,numYears);
}

function MonthAdd(startDate, numMonths)
{
		return DateAdd(startDate,0,numMonths,0);
}

function DayAdd(startDate, numDays)
{
		return DateAdd(startDate,numDays,0,0);
}

