var modified=true;

var errPositive = "Enter a number greater than zero";
var errEmail = "Enter a valid email address of the form mailbox@domain.com";
var errEmailList = "Enter a valid email address of the form mailbox@domain.com.\nYou can send to multiple addresses by separating them with semi-colons ';'";
var errMailbox = "Enter a valid mailbox name";
var errDomain = "Enter a valid domain name, e.g. domain.com";
var errPeriod = "Enter a valid period, i.e. a number followed by s, m, h, or d";
var errScript = "Enter a valid script file (.fts), e.g. script.fts ";
var errBytes = "Enter a valid size, i.e. a number followed by b, Kb, Mb, or Gb";
var errPort = "Enter a port number, i.e. a number between 0 and 65535";
var errIP = "Enter a valid IP address, e.g. 192.168.0.1";
var errSubnet = "Enter a valid subnet mask, e.g. 255.255.128.0";
var errNumber = "Enter a number";
var errPath = "Enter a valid path.";

// system.serverid
//
var FTGATE_LITE		= 1;
var FTGATE_OFFICE	= 2;
var FTGATE_PRO		= 3;

// mailbox.type
//
var MBX_DAEMON	= 1;
var MBX_NULL		= 2;
var MBX_USER		= 3;
var MBX_LIST		= 4;
var MBX_AUTO		= 5;
var MBX_ROBOT		= 6;
var MBX_GROUP		= 7;
var MBX_DOMAIN	= 8;
var MBX_DSN			= 9;
var MBX_ALIAS		= 10;

// server type
//
var SERVER_SMTP		= 100;
var SERVER_POP3		= 101;
var SERVER_WEB		= 102;
var SERVER_LDAP		= 103;
var SERVER_HTTP		= 104;
var SERVER_PT2PT	= 105;
var SERVER_REPLICATOR = 106

// Domain types
//
var DOMAIN_LOCAL	= 200;
var DOMAIN_REMOTE = 201;

// Schedule type
//
var SCHEDULE_TYPE	= 300;

// SmartPop type
//
var SMARTPOP_TYPE	= 400;

var ADVANCED_NONE	= 0;
var ADVANCED_OFF	= 1;
var ADVANCED_ON		= 2;

var CONTENT_UNSET		= 0
var CONTENT_TERSE		= 1
var CONTENT_NORMAL	= 2
var CONTENT_VERBOSE	= 3

var BUTTONS_ADVANCED	= 1
var BUTTONS_CONTENT		= 2
var BUTTONS_HELP			= 4

// Web Admin Mailbox list columns
//
var SHOW_COMMON		= 1
var SHOW_DEPT		= 2
var SHOW_WAITING	= 4
var SHOW_RECEIVED	= 8
var SHOW_SENT		= 16
var SHOW_ACCESSED	= 32

// Web Mail list columns
//
var SORT_FROM = 0;
var SORT_SUBJECT = 1;
var SORT_DATE = 2;
var SORT_SIZE = 3;
var SORT_TO = 4;
var SORT_MASK = 127;
var SORT_UP = 1

var COMMAND_BASE	= 1000;
var COMMAND_ADVANCED	= 1000;
var COMMAND_CONTENT		= 1001;
var COMMAND_NAVTREE		= 1002;

setModified(false);

if (!document.images) {}
else {
  left0 = new Image();
  left0.src  = dir+"leftup.gif";
  left1 = new Image();
  left1.src = dir+"leftupon.gif";
}

function round(val)
{
	var a = val;
	a = a.toString();
	var dot = a.indexOf(".");
	if (dot!=-1)
	{
		if (a.slice(dot+1, dot+2)=="0")
			a = a.slice(0, dot);
		else
			a = a.slice(0, dot+2);
	}

	return a;
}

function niceBytes(bytes)
{
	if (bytes < 1024)
		document.write(bytes);
	else if (bytes <1024*1024)
		document.write(round(bytes/1024)+"Kb");
	else if (bytes<1024*1024*1024)
		document.write(round(bytes/(1024*1024))+"Mb");
	else
		document.write(round(bytes/(1024*1024*1024))+"Gb");
}

function sigFigs(number, figs)
{
	return Math.round(Math.round(number*figs)/figs);
}

function toNiceBytes(bytes)
{
	if (bytes < 1024)
		return bytes;
	else if (bytes <1024*1024)
		return round(bytes/1024,1)+"Kb";
	else if (bytes<1024*1024*1024)
		return round(bytes/(1024*1024),10)+"Mb";
	else
		return round(bytes/(1024*1024*1024),100)+"Gb";
}

function niceDate(numDate)
{
	if (numDate==0)
		document.write("&nbsp;")
	else
	{
		d = new Date();
		d.setTime(numDate*1000);

		s = new String();

		if (navigator.appName.indexOf("Netscape",0)!=-1)
			s = d.toLocaleString();
		else
		{
			s = d.toString();

			var i = s.indexOf('U');
			if (i!=-1)
				s = s.slice(0,i-1);
		}

		document.write(s);
	}
}

function setModified(flag)
{
	if (modified!=flag)
	{
		modified=flag;
		setCookie("modified", flag, false);
	}
}

function getModified()
{
	return modified;
}

function getModifiedRemote()
{
	return getCookie("modified")=="true";
}

function checkModified()
{
	if (getModified())
	{
		if (!window.confirm("Discard changes?"))
			return false;
	}

	return true;
}

function st(text)
{
	if (text)
		window.status=text;
	else
		window.status=window.defaultStatus;

	return true;
}

function isEmail(string)
{
	// validate the address
	var s1=string.lastIndexOf("@");
	if (s1==-1)
		return false;

	var domain=string.slice(s1+1);
	var name=string.slice(0, s1);
	//
	// check that its a valid domain address
	//

	if (!isDomain(domain))
	{
		if (!domain.match(/^\[[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+\]$/))
			return false;
	}

	// limit on first character
	var s_special = "<>()[]\\.,;:@\"";

	if (s_special.indexOf(name.slice(0,1))!=-1)
		return false;

	return true;
}

function isEmailList(string)
{
	var start=0;

	while (string.charAt(start)==' ')
		start++;

	var pos = string.indexOf(";", 0);
	if (pos==-1 && start>=string.length)
		return false;

	if (start>string.length)
		pos=-1;

	while(pos!=-1)
	{
		if (!isEmail(string.slice(start, pos)))
			return false;

		start = pos+1;
		while (string.charAt(start)==' ')
			start++;

		pos = string.indexOf(";", start);
	}

	if (start<string.length)
	{
		if (!isEmail(string.slice(start, string.length)))
			return false;
	}

	return true;
}

function isDomain(name)
{
	if (name.search(/^[A-Za-z0-9]+((\.|-|_)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/)!=-1)
		return true;
	else
		return false;
}

function isAddr(addr)
{
	if (addr.search(/^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$/)!=-1)
		return true;
	else
		return false;
}

function isDigit(c)
{
	switch (c)
	{
	case "0":
	case "1":
	case "2":
	case "3":
	case "4":
	case "5":
	case "6":
	case "7":
	case "8":
	case "9":
		return true;
	}

	return false;
}

function isNumber(number)
{
	var index=0;

	if (number=="")
		return true;

	while (isDigit(number.charAt(index)))
		index++;

	return index==number.length;
}

function isPort(port)
{
	return isNumber(port)&&(port>=0)&&(port<65536);
}

function isBytes(bytes)
{
	var index=0;

	if (bytes=="")
		return true;

	while (isDigit(bytes.charAt(index)))
		index++;

	if (index==bytes.length)
		return true;

	if (bytes.charAt(index)==".")
	{
		index++;

		if (index==bytes.length)
			return true;

		while (isDigit(bytes.charAt(index)))
			index++;

		if (index==bytes.length)
			return true;
	}

	switch (bytes.charAt(index))
	{
	case "b":
	case "B":
		index++;
		break;

	case "k":
	case "K":
	case "m":
	case "M":
	case "g":
	case "G":
		index++;
		if (bytes.charAt(index)!="b" && bytes.charAt(index)!="B")
			return false;
		index++;
		break;

	default:
		return false;
	}

	return (index==bytes.length)
}

function isScript(script)
{
	if (script.length<5)
		return false;

	return true;
}

function isPositive(number)
{
	return isNumber(number)&&(number>0);
}

function onHelp()
{
	var index;
	var s=window.location.href;

	s = s.slice(s.indexOf("/",7)+1);
	if ((index=s.indexOf("?"))!=-1)
		s=s.slice(0, index);

	var help = window.open("/help/index.fts?href="+s, "WebMailHelp", "toolbar=1,menubar=1,location=0,resizable=1,scrollbars=1,width=300");
//	var help = window.open("/help.fts?href="+s, "WebMailHelp");
	help.focus();
}

var AMP_REMOVE	= 0;
var AMP_PUTBACK	= 1;
function ampersand(action, text)
{
	if (action==AMP_REMOVE)
		text = text.replace(/&/, "%26");
	else
		text = text.replace(/%26/, "&");

	return text;
}

function isUsername(string)
{
	var s_special = "<>()[]\\.,;:'";

	if (string=="")
		return false;

	if (s_special.indexOf(string.slice(0,1))!=-1)
		return false;

	if ((string.indexOf("@")!=-1)||(string.indexOf('"')!=-1)||(string.indexOf(' ')!=-1))
		return false;

	return true;
}
