/**
 * TestComplete VBScript brush for SyntaxHighlighter
 *
 * Copyright (C) 2009 AutomatedQA
 */
SyntaxHighlighter.brushes.VBScript = function()
{
	var keywords =	'And By(?:Ref|Val) Case Call Class Const Default Dim Do Each Else(?:If)? Empty End Eqv ' +
			'Erase Execute(?:Global)? Exit Explicit False For Function Get GoTo I[fns] Imp ' +
			'Let Loop Mod Next Not Nothing Null O[nr] Option Preserve Private Property Public ' +
			'Randomize ReDim Resume Select Set St[eo]p Sub Then To True Until Wend While With Xor';

	var functions = 'Abs Array Asc Atn CBool CByte CCur CDate CDbl Chr CInt CLng Cos CreateObject CSng CStr ' +
			'Date DateAdd DateDiff DatePart DateSerial DateValue Day Escape Eval Exp Filter Fix ' +
			'FormatCurrency FormatDateTime FormatNumber FormatPercent GetLocale GetObject GetRef ' +
			'Hex Hour InputBox InStr(?:Rev)? Int IsArray IsDate IsEmpty IsNull IsNumeric IsObject ' +
			'Join [LU](?:Bound|Case) Left Len LoadPicture Log [LR]?Trim Mid Minute Month(?:Name)? MsgBox ' +
			'Now Oct Replace RGB Right Rnd Round ScriptEngine ScriptEngineBuildVersion ' +
			'ScriptEngineMajorVersion ScriptEngineMinorVersion Second SetLocale Sgn Sin Space Split Sqr ' +
			'StrComp String StrReverse Tan Timer? TimeSerial TimeValue TypeName Unescape VarType ' +
			'Weekday(?:Name)? Year';

	var objects =	'Err';

	var constants = 'vbAbort vbAbortRetryIgnore vbApplicationModal vbArray vbBinaryCompare vbBlack vbBlue ' +
			'vbBoolean vbByte vbCancel vbCr vbCritical vbCrLf vbCurrency vbCyan vbDataObject vbDate ' +
			'vbDecimal vbDefaultButton[1-4] vbDouble vbEmpty vbError vbExclamation vbFalse vbFirstFourDays ' +
			'vbFirstFullWeek vbFirstJan1 vbFormFeed vbFriday vbGeneralDate vbGreen vbIgnore vbInformation ' +
			'vbInteger vbLf vbLong vbLongDate vbLongTime vbMagenta vbMonday vbNewLine vbNo vbNull ' +
			'vbNullChar vbNullString vbObject vbObjectError vbOK vbOKCancel vbOKOnly vbQuestion vbRed ' +
			'vbRetry vbRetryCancel vbSaturday vbShortDate vbShortTime vbSingle vbString vbSunday ' +
			'vbSystemModal vbTab vbTextCompare vbThursday vbTrue vbTuesday vbUseDefault vbUseSystemDayOfWeek ' +
			'vbVariant vbVerticalTab vbWednesday vbWhite vbYellow vbYes vbYesNo vbYesNoCancel';

	var TCObjects = 'ActiveXObjects ADO Aliases AQtime AQtime[4-6] AQtimeIntegration aqConvert aqDateTime ' +
			'aqEnvironment aqFile aqFileSystem aqUtils aqObject aqString BDE BuiltIn Consts DB DBTables ' +
			'DbgServices DDT DebugAgent DLL dotNET Events Files HISUtils Indicator IssueTracking ' +
			'KeywordTests LLPlayer LoadTesting Log ManualTestBuilder NameMapping NetworkSuite Objects ' +
			'OCR ODT Options PDA Project ProjectSuite Regions Runner Self slAQtime slPacker Storages ' +
			'Stores Sys Tables TestedApps TestSuites UserForms Utils Win32API Win32Controls ' +
			'WinCELLCollection WinCETestedApps WebTesting WebServices XML';

	var TCFunctions = '(?:Mk|In)Set';

	this.getVBSConstants = function(list) {
		return '\bvb(?:' + list.replace(/\bvb/gi, '').replace(/ /g, '|') + ')\b';
	};

	this.regexList = [
		{ regex: /(?:'|\bRem\b).*$/gim,					css: 'comments' },	// one line comments
		{ regex: /"(?:[^"\n]|"".)*"/g,					css: 'string' },	// strings
		{ regex: /(?:\b\d+\.?\d*|\.\d+)(?:e[+-]?\d+)?\b/gi,		css: 'value' },		// numbers 12345
		{ regex: /&(?:amp;)?h[a-f\d]+\b/gi,				css: 'value' },		// numbers &hF5D3
		{ regex: /#[a-z\d\/\-, :]+#/gi,					css: 'value' },		// date/time literals #5/9/2009 10:49 AM#
		{ regex: new RegExp(this.getKeywords(keywords), 'gi'),		css: 'keyword' },	// keywords
		{ regex: /\bError(?=\s[\s_]*(?:Resume|GoTo)\b)/gi,		css: 'keyword' }, 	// 'Error' in 'On Error' statements
		{ regex: new RegExp(this.getKeywords(functions), 'gi'),		css: 'functions' },	// functions
		{ regex: new RegExp(this.getKeywords(objects), 'gi'),		css: 'variable' },	// objects
		{ regex: new RegExp(this.getVBSConstants(constants), 'gi'),	css: 'constants' },	// constants
		{ regex: new RegExp(this.getKeywords(TCObjects), 'g'),		css: 'functions' },	// TestComplete global objects
		{ regex: new RegExp(this.getKeywords(TCFunctions), 'g'),	css: 'functions' }	// TestComplete global functions
	];
};

SyntaxHighlighter.brushes.VBScript.prototype	= new SyntaxHighlighter.Highlighter();
SyntaxHighlighter.brushes.VBScript.aliases	= ['vbscript', 'vbs'];

