﻿String.prototype.LTrim = new Function("return this.replace(/^\\s+/, '')");
String.prototype.RTrim = new Function("return this.replace(/\\s+$/, '')");
String.prototype.Trim = new Function("return this.replace(/^\\s+|\\s+$/g, '')");
String.prototype.Quote = new Function("return this.replace(/\'/g, \"''\")");

function Val(str)
{
	if(!str)
		return 0;
		
	var regexp = /\s*[\+\-]?[0123456789]*\.?[0123456789]*/;
	var ret = regexp.exec(str.toString().replace(/[\$\%\#]/g, ' ').LTrim());
	
	if(ret == "")
		ret = 0;
		
	return parseFloat(ret);
};
 
function KeyValidator(code, range)
{
	switch(true)
	{
		case (code == 9):					//tab
		case (code == 8):					//backspace
		case (code == 46):					//delete
		case (code == 37):					//left arrow
		case (code == 39):					//right arrow
		case (range.indexOf(String.fromCharCode(code)) > -1):
			return;
	}
	return false;
};

function ControlKey(e)
{
	var key = e.keyCode;

	switch(key)
	{
		case 9:						//tab
			return;	
		case 8:						//backspace
			return;
		case 46:					//delete
			return;
		case 37:					//left arrow
			return;
		case 38:					//up arrow
			return;
		case 39:					//right arrow
			return;
		case 40:					//down arrow
			return;
		case 36:					//home
			return;
		case 35:					//end
			return;
		case 33:					//page up
			return;
		case 34:					//page down
			return;
	}

	return false;
}; 

function FilterKey(e, filter)
{
	var key = e.keyCode;

	switch(key)
	{
		case 9:						//tab
			return;	
		case 8:						//backspace
			return;
		case 46:					//delete
			return;
		case 37:					//left arrow
			return;
		case 39:					//right arrow
			return;

		default:
			if (filter.indexOf(String.fromCharCode(key)) > -1)
				return;
			break;
	}

	return false;
};
 
function RestrictKey(e, filter)
{
	var key = e.keyCode;

	switch(key)
	{
		case 9:						//tab
			return;	
		case 8:						//backspace
			return;
		case 46:					//delete
			return;
		case 37:					//left arrow
			return;
		case 39:					//right arrow
			return;

		default:
			if (filter.indexOf(String.fromCharCode(key)) == -1)
				return;
			break;
	}

	return false;
};
 
function AlphaKey(e)
{
	var key = e.keyCode;

	switch(key)
	{
		case 9:						//tab
			return;	
		case 8:						//backspace
			return;
		case 46:					//delete
			return;
		case 37:					//left arrow
			return;
		case 39:					//right arrow
			return;

		default:
			var filter = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
			if (filter.indexOf(String.fromCharCode(key)) > -1)
				return;
			break;
	}

	return false;
};
 
function NumericKey(e)
{
	var key = e.keyCode;

	switch(key)
	{
		case 9:						//tab
			return;	
		case 8:						//backspace
			return;
		case 46:					//delete
			return;
		case 37:					//left arrow
			return;
		case 39:					//right arrow
			return;

		default:

			var filter = "1234567890`abcdefghi";
			if (filter.indexOf(String.fromCharCode(key)) > -1)
				return;
			break;
	}

	return false;
};
 
function DecimalKey(e, me)
{
	var key = e.keyCode;

	switch(key)
	{
		case 9:						//tab
			return;	
		case 8:						//backspace
			return;
		case 46:					//delete
			return;
		case 37:					//left arrow
			return;
		case 39:					//right arrow
			return;

		case 190:
			if (me.value.indexOf(".") == -1)
				return;
			break;
			
		default:
			var filter = "1234567890`abcdefghi";
			if (filter.indexOf(String.fromCharCode(key)) > -1)
				return;
			break;
	}
	
	return false;
};

 
function NumberKey(e, me)
{
	var key = e.keyCode;

	switch(key)
	{
		case 9:						//tab
			return;	
		case 8:						//backspace
			return;
		case 46:					//delete
			return;
		case 37:					//left arrow
			return;
		case 39:					//right arrow
			return;

		default:


			switch(String.fromCharCode(key))
			{
				case "+":
					me.value = Math.abs(me.value);
					break;
					
				case "-":
					me.value = - Math.abs(me.value);
					break;
			
				case ".":
					if (me.value.indexOf(".") == -1)
						return;
					break;
			
				default:
					var filter = "1234567890`abcdefghi";
					if (filter.indexOf(String.fromCharCode(key)) > -1)
						return;
			}
			break;
	}
	
	return false;
};

function HexNumericKey(e)
{
	var key = e.keyCode;

	switch(key)
	{
		case 9:						//tab
			return;	
		case 8:						//backspace
			return;
		case 46:					//delete
			return;
		case 37:					//left arrow
			return;
		case 39:					//right arrow
			return;

		default:

			var filter = "ABCDEF1234567890`abcdefghi";
			if (filter.indexOf(String.fromCharCode(key)) > -1)
				return;
			break;
	}

	return false;
};
 
function EncodeURL(str) 
{
	return escape(str).replace(/\+/g, "%2B").replace(/%20/g, "+").replace(/\*/g, "%2A").replace(/\//g, "%2F").replace(/@/g, "%40").replace(/\\\\/g, "%5C");
};

function EncodeHTML(str) 
{
	return str.replace(/\"/g, "&quot;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/&/g, "&amp;");
};

function DecodeHTML(str)
{
	return str.replace(/&quot;/g, "\"").replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&amp;/g, "&");
};

function ParseFilename(filepath) 
{  
	if (!filepath || filepath.length == 0) 
		return "";  
		
	filepath = filepath.replace(/\\/g, "/");	
		
	var delimiter = filepath.lastIndexOf("/");  
	if (delimiter == -1) 
		return filepath;  

	return filepath.substr(delimiter + 1, filepath.length);  
};

function ParseExtension(filename) 
{  
	if (!filename || filename.length == 0) 
		return "";  
		
	var dot = filename.lastIndexOf(".");  
	if (dot == -1) 
		return "";  

	return filename.substr(dot + 1, filename.length);  
};

function ValidateEmail(email)
{
	if (email.match(/^([a-zA-Z0-9_\-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/g))
		return true;
	
	return false;
};

function FilterUnicode(text)
{
	var filters = 
	{
		"\xa0"   : " ",
		"\xa9"   : "(c)",
		"\xae"   : "(r)",
		"\xb7"   : "*",
		"\u2018" : "'",
		"\u2019" : "'",
		"\u201c" : '"',
		"\u201d" : '"',
		"\u2026" : "...",
		"\u2002" : " ",
		"\u2003" : " ",
		"\u2009" : " ",
		"\u2013" : "-",
		"\u2014" : "--",
		"\u2122" : "(tm)",
		"%xa0"   : " ",
		"%xa9"   : "(c)",
		"%xae"   : "(r)",
		"%xb7"   : "*",
		"%u2018" : "'",
		"%u2019" : "'",
		"%u201c" : '"',
		"%u201d" : '"',
		"%u2026" : "...",
		"%u2002" : " ",
		"%u2003" : " ",
		"%u2009" : " ",
		"%u2013" : "-",
		"%u2014" : "--",
		"%u2122" : "(tm)"
	};
	
	for (var key in filters) 
		text = text.replace(new RegExp(key, 'g'), filters[key]);

	return text;
};