var modified=true;

// system.serverid
//
var FTGATE_LITE		= 1;
var FTGATE_OFFICE	= 2;
var FTGATE_PRO		= 3;

// mailbox.type
//
var MBX_POSTMASTER	= 0
var MBX_DAEMON		= 15
var MBX_NULL		= 12
var MBX_USER		= 7
var MBX_LIST		= 8
var MBX_GROUP		= 11
var MBX_DOMAIN		= 14
var MBX_DSN			= 13
var MBX_ALIAS		= 16

// 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_MINIMAL		= 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_SENT = 2;
var SORT_RECEIVED = 3;
var SORT_SIZE = 4;
var SORT_TO = 5;
var SORT_MASK = 127;
var SORT_UP = 1

var COLUMN_FROM_MIN		= 1024;
var COLUMN_TO_MIN		= 2048;
var COLUMN_SUBJECT_MIN	= 4096;
var COLUMN_SENT_MIN		= 8192;
var COLUMN_RECEIVED_MIN	= 16384;
var COLUMN_SIZE_MIN		= 32768;

var COMMAND_BASE		= 1000;
var COMMAND_ADVANCED	= 1000;
var COMMAND_CONTENT		= 1001;
var COMMAND_NAVTREE		= 1002;
var COMMAND_NAVCALENDAR	= 1003;

setModified(false);

function change(Name,Image,No)
{
	if (!document.images) {}
	else document[Name].src = eval(Image + No + ".src");
}

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 setModified(flag)
{
	if (modified!=flag)
	{
		modified=flag;
		ftgateSetCookie("modified", flag, false);
	}
}

function getModified()
{
	return modified;
}

function getModifiedRemote()
{
	return ftgateGetCookie("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");
		text = text.replace(/\?/, "%3F");
	}
	else
	{
		text = text.replace(/%26/, "&");
		text = text.replace(/%3F/, "\?");
	}
	
	return text;
}

function WMReplace(str, token, text, opera)
{
	var str2;

	if (opera)
	{
		var pos = str.indexOf(token);

		if (pos!=-1)
		{
			str2 = str.slice(0, pos);
			str2+=text;
			str2+= str.slice(pos+token.length, str.length)
		}
	}
	else
	{
		str2 = str.replace(token, text); 
	}

	return str2;
}

function isWordBreak(c)
{
	if (!c.match(/[a-z]|[A-Z]|[0-9]/))
	{
		if (c.indexOf("'")!=-1 || 
				c.indexOf("_")!=-1 ||
				c.indexOf("@")!=-1 ||
				c.indexOf("\\")!=-1 ||
				c.indexOf("/")!=-1 ||
				c.indexOf(":")!=-1)
			return false;

		return true;
	}

	return false
}

function isWord(word)
{
	if (word.length>DIC_MAXWORDLEN)
	{
		alert("You word is too long.\n\nThe maximum word length is <%=DIC_MAXWORDLEN%> characters.");
		return false;
	}

	if (!word.match(/^[a-z]|[A-Z]/))
	{
		alert("The first character must be a letter of the aphabet.")

		return false;
	}

	var index;
	for (index=1; index<word.length-1; index++)
	{
		if (isWordBreak(word.charAt(index)))
		{
			alert("You cannot use punctuation, or spaces in your word. "+index);
			return false;
		}
	}

	return true;
}

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;
}

function button(func, st, btn, id, img)
{
	var space = "' '";
	var st = "'"+st+"'";

	document.writeln("<BUTTON TYPE=\"BUTTON\"");
	document.writeln('onClick="javascript:'+func+'"');
	document.writeln('ID="'+id+'"');
	document.writeln('onMouseOver="return st('+st+');"');
	document.writeln('onMouseOut="return st('+space+');">');
	
	if (img)
	{
		document.writeln("<IMG SRC=\"/images/buttons/icons/"+img+"\">");
	}
	
	document.writeln(btn+"</BUTTON>");
	
	//document.writeln('<INPUT TYPE="BUTTON"');
	//document.writeln('onClick="javascript:'+func+'"');
	//document.writeln('ID="'+id+'"');
	//document.writeln('onMouseOver="return st('+st+');"');
	//document.writeln('onMouseOut="return st('+space+');"');
	//document.writeln('VALUE="'+btn+'">');
}

function isName(name)
{
	return ((name.indexOf("<",0)==-1)&&(name.indexOf("'",0)==-1)&&(name.indexOf(">",0)==-1)&&(name.indexOf("&",0)==-1)&&(name.indexOf("\"",0)==-1));
}

function isFolder(folder)
{
	if (folder.indexOf(":",0)!=-1||folder.indexOf("\\",0)!=-1||folder.indexOf("//",0)!=-1)
		return false;
	else
		return true;
}

function mbxTitleTabs(type, address, user, list, group)
{
	var start;
	var end;
	var tab;
	var img;
	
	if (type==MBX_USER)
	{
		start = USER_START;
		end = USER_END;
		tab = user;
		img = "user.gif";
		dialogTitle(address, "onApply()", "onCancelLocal()", "", "", img);
	}
	else if (type==MBX_LIST)
	{
		start = LIST_START;
		end = LIST_END;
		tab = list;
		img = "list.gif";
		dialogTitle(address, "onApply()", "onCancelLocal()", "", "", img);
	}
	else if (type==MBX_GROUP)
	{
		start = GROUP_START;
		end = GROUP_END;
		tab = group;
		img = "group.gif";
		dialogTitle(address, "onApply()", "onCancelLocal()", "", "", img);
	}

	showTabs(start, end, tab);
}

function buildList(listElement)
{
	var list="";
	
	if (listElement.selectedIndex!=-1)
	{
		var i;

		for (i=0; i<listElement.length; i++)
		{
			if (listElement.options[i].selected)
			{
				list+=listElement.options[i].value;
				list+="^";
			}
		}
	}
	
	return list;
}

function isNegative(number)
{
	if (isNumber(number))
	{
		if (number<0)
			return true;
	}

	return false;
}

function onLink(url)
{
	if (!checkModified())
		return;

	window.location.href=url;
}

function tzOffset(date)
{
	
	var today;
	
	if (date)
		today = date;
	else
		today = new Date();
	
	var hour = today.getHours();
	var hourUTC = today.getUTCHours();
	var diff = hour - hourUTC;
	
	if (today.getDate()<today.getUTCDate())
	{
		if (today.getMonth()!=today.getUTCMonth())
			diff+=24;
		else
			diff-=24;
	}
	else if (today.getDate()>today.getUTCDate())
	{
		diff+=24;
	}
	
	
	var timedifference = Math.abs(diff);
	var minute = today.getMinutes();
	var minuteUTC = today.getUTCMinutes();
	var minutedifference;

	var timezone;
	if (minute != minuteUTC && minuteUTC < 30 && diff < 0) { timedifference--; }
	if (minute != minuteUTC && minuteUTC > 30 && diff > 0) { timedifference--; }
	
	timedifference = timedifference*60*60
	
	if (minute != minuteUTC) {
		timedifference=timedifference+30*60
	}

	if (diff < 0) {
		timedifference= -timedifference;
	}
	
	return timedifference;
}

function isDst(date)
{
	var ret = false;

	var newyear = new Date(1970,0,1,23);
	var midyear = new Date(2004,6,1,23);
	
	var nyOffset = tzOffset(newyear);
	var myOffset = tzOffset(midyear);

	if (nyOffset<myOffset)
		ret=(tzOffset(date)!=tzOffset(newyear));
	else if (nyOffset>myOffset)
		ret=(tzOffset(date)!=tzOffset(midyear));
	
	return ret;
}

function mouseOver(element)
{
	if (!element.disabled)
		element.className = "buttonactive"; 
}

function mouseOverText(element,str)
{
	if (!element.disabled)
		element.className = "buttonactive"; 
	return st(str)
}

function mouseOut(element)
{
	if (!element.disabled)
		element.className = null; 
	return st(' ');
}

