/*A basic implementation of common @Functions in JavaScript, written by Tim Tripcony (http://www.timtripcony.com)*/AtFormula = function() {	var toArray = function(string) {		var newArray = [];		newArray.push(string);		return newArray;	}; // not needed yet, but will be	return {		Abs: Math.abs,		ACos: Math.acos,		ASin: Math.asin,		ATan: Math.atan,		Begins: function(string, substring) { return string.slice(0,substring.length) === substring; },		Char: String.fromCharCode,		ClientType: function() { return (navigator.appName === 'IBM Lotus Notes') ? 'Notes' : 'Web'; },		Contains: function(string, substring) { return string.indexOf(substring) > -1; },		Cos: Math.cos,		Count: function(list) { return (typeof list === 'string') ? 1 : list.length },		DbName: function() {			var address = location.pathname;			return [location.hostname,address.substring(1,address.search(/.nsf/i)) + '.nsf'];		},		DocFields: function() {			var dominoForm = document.forms[document.forms.length - 1];			var formFields = dominoForm.elements;			var fieldCount = formFields.length;			var fieldNames = [];			for (var fieldId = 0; fieldId < fieldCount; fieldId++) { fieldNames.push(formFields[fieldId].name); }			fieldNames.shift(); // the first field will always be named __Click			return fieldNames;		},		Elements: function(list) { return (typeof(list) === 'string') ? 0 : list.length },		Ends: function(string, substring) { return string.slice(string.length - substring.length) === substring; },		Exp: Math.exp,		Explode: function(string, separator) { return string.split(separator) },		GetField: function(fieldName) { return document.forms[document.forms.length - 1].elements[fieldName].value; },		Implode: function(textlistValue,separator) { return (typeof textlistValue === 'string') ? textlistValue : textlistValue.join(separator); },		Integer: Math.floor,		Left: function(string, search) {			var result;			if (typeof search === 'string') {				result = string.substring(0, string.indexOf(search));			} else {				result = string.substring(0, search);			}			return result;		},		LeftBack: function(string, search) {			var result;			if (typeof search === 'string') {				result = string.substring(0, string.lastIndexOf(search));			} else {				result = string.substring(0, string.length - search);			}			return result;		},		Log: Math.log,		LowerCase: function(string) { return string.toLowerCase(); },		Modulo: function(number1, number2) { return number1 % number2; },		Now: function() { return new Date(); },		Pi: function() { return Math.PI; },		Power: Math.pow,		ProperCase: function(string) {			return string.toLowerCase().replace(/\w+/g,function(s){				return s.charAt(0).toUpperCase() + s.substr(1);			});		},		Right: function(string, search) {			var result;			if (typeof search === 'string') {				result = string.substring(string.indexOf(search) + search.length);			} else {				result = string.substring(string.length - search);			}			return result;		},		RightBack: function(string, search) {			var result;			if (typeof search === 'string') {				result = string.substring(string.lastIndexOf(search) + search.length);			} else {				result = string.substring(search);			}			return result;		},		SetField: function(fieldName,value) { return document.forms[document.forms.length - 1].elements[fieldName].value = value; },		Sin: Math.sin,		Tan: Math.tan,		UpperCase: function(string) { return string.toUpperCase(); },		WebDbName: function() { return AtFormula.DbName()[1];}	};	}();
