
var Modules_TMP = Array();
Modules_TMP["file_name"] = "forms.js";

Loaded_Modules["forms"] = Modules_TMP;

var MASK_NUMBER_NOT_REQUIRED = new String("0");
var MASK_NUMBER_REQUIRED = new String("9");
var MASK_LETTER_SMALL_NOT_REQUIRED = new String("a");
var MASK_LETTER_SMALL_REQUIRED = new String("z");
var MASK_LETTER_BIG_NOT_REQUIRED = new String("A");
var MASK_LETTER_BIG_REQUIRED = new String("Z");
var MASK_LETTER_ANY_NOT_REQUIRED = new String("t");
var MASK_LETTER_ANY_REQUIRED = new String("T");
var MASK_TEXT_CASE_INSIDE_BEGIN = new String("{");
var MASK_TEXT_CASE_INSIDE_END = new String("}");
var MASK_TEXT_CASE_INSIDE_UNCASE_CHAR = new String("~");

var MASK_TEXT_NOT_REQUIRED = new String("|");

var MASK_REG_LETTER_PL_SMALL = new String("ąćęłńóśźż");
var MASK_REG_LETTER_PL_BIG = new String("ĄĆĘŁŃÓŚŹŻ");
//var MASK_REG_LETTER_SEP = new String("ąćęłńóśźż");

var MASK_REG_EXP = new String("{{REGEXP}}");
var MASK_REG_EXP_SET = new String("{{REGEXPSET}}");
var MASK_REG_EXP_OPT = new String("{{REGEXPOPT}}");

var MASK_ATTRIBUTE_NAME = new String("mask");
var MASK_REG_ATTRIBUTE_NAME = new String("reg_mask");
var MASK_REG_SET_ATTRIBUTE_NAME = new String("reg_mask_set");
var MASK_REG_EXP_OPT_ATTRIBUTE_NAME = new String("reg_mask_opt");

/*
Rezultat reg:
nazwy parametrów, które powinny zawierać nazwy ogólnych odpowiednich klas css - dla rezultatu pomyślnego i błędnego.

Mechanizm obsługuje ponadto klasy dla zdarzeń.
Powinny one składać się z nazwy odpowiedniej klasy ogólnej oraz znaku _ i nazwy zdarzenia bez przedrostka on.
PRZYKŁAD:
Jeżeli klasa dla rezultatu pomyślnego nazywa się "css_reg_ok", wówczas klasa dodatkowa dla rezultatu pomyślnego przy zdarzeniu "onblur"
powinna nazywać się "css_reg_ok_blur"
*/
var MASK_CLASS_START_ATTRIBUTE_NAME = new String("css_reg_start");
var MASK_CLASS_OK_ATTRIBUTE_NAME = new String("css_reg_ok");
var MASK_CLASS_DEFAULT_WRONG_ATTRIBUTE_NAME = new String("css_reg_wrong");

var MASK_REG_EXP_OPT_DEFAULT = new String("");

var REG_EXP_SPECIAL_CHARS = new String("^$\\-*+?.()[]{}/");

var USER_TO_REG_ADD_TEXT_BSLH_ONLY_FOR_SPEC_CHARS = true;

/*
Rezultat reg: klasy domyślne - jeżeli atrybuty są nieustawione
*/
var MASK_CLASS_DEFAULT_OK = new String("css_reg_ok");
var MASK_CLASS_DEFAULT_WRONG = new String("css_reg_wrong");

/*
User mask:
0 - cyfra; niewymagana
9 - cyfra; wymagana
a - litera mała; niewymagana
z - litera mała; wymagana
A - litera duża; niewymagana
Z - litera duża; wymagana
t - litera dowolna; niewymagana
T - litera dowolna; wymagana
{TEXT} - dokładnie taki TEXT (wielkość liter także dokładnie taka sama)

Znak ~ umieszczony zaraz po znaczniku rozpoczynającym TEXT, oznacza nieważną wielkość liter.
Znak | umieszczony po znaczniku lub (jeżeli jest) po znaczniku wielkości liter(~) rozpoczynającym TEXT oznacza, że TEXT jest niewymagany; tzn może być, ale nie musi.

PRZYKŁAD:
{abC} - musi być wprowadzony dokładnie tekst: "abC"
{~abC} - musi być wprowadzony dokładnie tekst o treści: "abC", ale o dowolnej wielkości liter. Czyli może być także: "Abc", "ABC", "aBc" i td
{|abC} - tekst nie musi być wprowadzony, ale jeżeli już jest wprowadzony, musi być wprowadzony dokładnie tekst o treści: "abC".
{~|abC} - tekst nie musi być wprowadzony, ale jeżeli już jest wprowadzony, musi być wprowadzony dokładnie tekst o treści: "abC", ale o dowolnej wielkości liter. Czyli może być także: "Abc", "ABC", "aBc" i td


UWAGA!
Można także bezpośrednio uzywać definicji wyrażeń regularnych.
Wówczas nalezy maskę zefiniować następująco:
{{REGEXP}}WYR_REG{{REGEXPSET}}ZNAKI_AKCEPTOWANE{{REGEXPOPT}}OPCJE
gdzie:
WYR_REG - wyrażenie regularne, bez znaku otwierającego ^ i znaku zamykającego $
ZNAKI_AKCEPTOWANE - definiowane tak, jak by to był zbiór w wyrażeniu regularnym, pomijając znaki otwierające [ i zamykające ], np: a-zą - przyjmuje małe litery łacińskie i polskie ą
OPCJE - opcje wyrażenia regularnego, np (g, i)

*/

function GetUserMask_RegExp(pMask)
{
	var vResult = new String("");
	
	var vMask = new String(pMask);
	
	var vMask_TMP = new String(pMask);
	
	var i = 0;
	
	if (
			(pMask == null) &&
			(MASK_REG_EXP == null)
		)
	{
		vResult = "";
	}
	else
	{
		if (
				(pMask != null) &&
				(MASK_REG_EXP != null)
			)
		{
			vMask = Trim(vMask);
			vMask_TMP = vMask.substr(0, MASK_REG_EXP.length);
			vMask = vMask.substr(MASK_REG_EXP.length);
			
			vMask_TMP.toUpperCase();
			
			if (vMask_TMP == (new String(MASK_REG_EXP)).toUpperCase())
			{
				vResult = vMask;
				
				i = vResult.indexOf((new String(MASK_REG_EXP_SET)));
				
				if (i < 0)
				{
					i = vResult.indexOf((new String(MASK_REG_EXP_OPT)));
				}
				
				if (i >= 0)
				{
					vResult = vResult.substr(0, i);
				}
			}
		}
	}
	
	vResult = Trim(vResult);
	
	return(vResult);
}

function GetUserMask_RegExp_Set(pMask)
{
	var vResult = new String("");
	
	var vMask = new String(pMask);
	
	var i = 0;
	
	if (
			(pMask == null) &&
			(MASK_REG_EXP_SET == null)
		)
	{
		vResult = "";
	}
	else
	{
		if (
				(pMask != null) &&
				(MASK_REG_EXP_SET != null)
			)
		{
			vMask = Trim(vMask);
			vMask.toUpperCase();
			
			i = vMask.indexOf((new String(MASK_REG_EXP_SET)));
			
			if (i >= 0)
			{
				vResult = vMask.substr(i+MASK_REG_EXP_SET.length);
				
				i = vResult.indexOf((new String(MASK_REG_EXP_OPT)));
				
				if (i >= 0)
				{
					vResult = vResult.substr(0, i);
				}
			}
		}
	}
	
	vResult = Trim(vResult);
	
	return(vResult);
}

function GetUserMask_RegExp_Opt(pMask)
{
	var vResult = new String("");
	
	var vMask = new String(pMask);
	
	var i = 0;
	
	if (
			(pMask == null) &&
			(MASK_REG_EXP_OPT == null)
		)
	{
		vResult = "";
	}
	else
	{
		if (
				(pMask != null) &&
				(MASK_REG_EXP_OPT != null)
			)
		{
			vMask = Trim(vMask);
			vMask.toUpperCase();
			
			i = vMask.indexOf((new String(MASK_REG_EXP_OPT)));
			
			if (i >= 0)
			{
				vResult = vMask.substr(i+MASK_REG_EXP_OPT.length);
			}
		}
	}
	
	vResult = Trim(vResult);
	
	return(vResult);
}

function ConvertMask_User_To_RegExp(pUserMask, pGetFullResult)
{
	var vResult = null;
	
	var vGetFullResult = false;
	
	if (pGetFullResult != null)
	{
		vGetFullResult = pGetFullResult;
	}
	
	var vUserMask = pUserMask;
	
	var vMask_Reg_Full = "";
	var vMask_Reg = "";
	
	var vMask_Reg_Set = "";
	var vMask_Reg_Set_Array = new Array();
	
	var vMask_Reg_Opt = "";
	
	var vUserMask_IsRegExp = false;
	var vUserMask_IsRegExp_Set = false;
	
	var vTMP_Mask_Text_Inside_Started = false;
	var vTMP_Mask_Text_Inside_Started_Uncase = false;
	var vTMP_Mask_Text_Inside_Started_Required = true;
	
	var i = 0;
	var z = 0;
	
	var vMask_Reg_CurChar = "";
	var vMask_Reg_CurText = "";
	var vMask_Reg_Set_CurText = "";
	
	if (vUserMask != null)
	{
		vUserMask = new String(vUserMask);
		
		vUserMask = Trim(vUserMask);
		vMask_Reg = GetUserMask_RegExp(vUserMask);
		vMask_Reg_Set = GetUserMask_RegExp_Set(vUserMask);
		vMask_Reg_Opt = GetUserMask_RegExp_Opt(vUserMask);
		
		if (vMask_Reg == "")
		{
			vMask_Reg = "";
			vMask_Reg_Set = "";
			
			for (i=0; i<vUserMask.length; i++)
			{
				vMask_Reg_CurChar = "";
				vMask_Reg_CurText = "";
				vMask_Reg_Set_CurText = "";
				
				if (!vTMP_Mask_Text_Inside_Started)
				{
					vTMP_Mask_Text_Inside_Started = false;
					vTMP_Mask_Text_Inside_Started_Uncase = false;
					vTMP_Mask_Text_Inside_Started_Required = true;
					
					if (vUserMask.charAt(i) == MASK_TEXT_CASE_INSIDE_BEGIN)
					{
						vTMP_Mask_Text_Inside_Started = true;
						
						if (vUserMask.charAt(i+1) == MASK_TEXT_CASE_INSIDE_UNCASE_CHAR)
						{
							i++;
							vTMP_Mask_Text_Inside_Started_Uncase = true;
						}
						
						if (vUserMask.charAt(i+1) == MASK_TEXT_NOT_REQUIRED)
						{
							i++;
							vTMP_Mask_Text_Inside_Started_Required = false;
						}
						
						vMask_Reg_CurText = "(";
					}
					else
					{
						vMask_Reg_CurChar = vUserMask.charAt(i);
					}
				}
				else
				{
					if (vUserMask.charAt(i) == MASK_TEXT_CASE_INSIDE_END)
					{
						vMask_Reg_CurText = ")";
						
						if (vTMP_Mask_Text_Inside_Started_Required)
						{
							vMask_Reg_CurText += "{1}";
						}
						else
						{
							vMask_Reg_CurText += "?";
						}
						
						
						vTMP_Mask_Text_Inside_Started = false;
						vTMP_Mask_Text_Inside_Started_Uncase = false;
					}
					else
					{
						vMask_Reg_CurChar = vUserMask.charAt(i);
					}
				}
				
				if (vTMP_Mask_Text_Inside_Started)
				{
					if (vMask_Reg_CurChar != "")
					{
						z = -1;
						
						if (USER_TO_REG_ADD_TEXT_BSLH_ONLY_FOR_SPEC_CHARS)
						{
							z = REG_EXP_SPECIAL_CHARS.indexOf(vMask_Reg_CurChar);
						}
						
						if (
								(!USER_TO_REG_ADD_TEXT_BSLH_ONLY_FOR_SPEC_CHARS) ||
								(z >= 0)
							)
						{
							vMask_Reg_CurChar = "\\" + vMask_Reg_CurChar;
						}
						
						vMask_Reg_CurChar = new String(vMask_Reg_CurChar);
						
						vMask_Reg_CurText = "[";
						vMask_Reg_Set_CurText = "";
						
						if (vTMP_Mask_Text_Inside_Started_Uncase)
						{
							vMask_Reg_CurText += vMask_Reg_CurChar.toLowerCase();
							vMask_Reg_CurText += vMask_Reg_CurChar.toUpperCase();
							
							vMask_Reg_Set_CurText += vMask_Reg_CurChar.toLowerCase();
							vMask_Reg_Set_CurText += vMask_Reg_CurChar.toUpperCase();
						}
						else
						{
							vMask_Reg_CurText += vMask_Reg_CurChar;
							
							vMask_Reg_Set_CurText = vMask_Reg_CurChar;
						}
						vMask_Reg_CurText += "]";
						
						vMask_Reg_Set_Array["index_"+i] = vMask_Reg_Set_CurText;
					}
				}
				else
				{
					if (vMask_Reg_CurChar != "")
					{
						if (vMask_Reg_CurChar == MASK_NUMBER_NOT_REQUIRED)
						{
							vMask_Reg_CurText = "[0-9]?";
							vMask_Reg_Set_CurText = "0-9";
							
							vMask_Reg_Set_Array["key_"+vMask_Reg_CurChar] = vMask_Reg_Set_CurText;
						}
						if (vMask_Reg_CurChar == MASK_NUMBER_REQUIRED)
						{
							vMask_Reg_CurText = "[0-9]{1}";
							vMask_Reg_Set_CurText = "0-9";
							
							vMask_Reg_Set_Array["key_"+vMask_Reg_CurChar] = vMask_Reg_Set_CurText;
						}
						if (vMask_Reg_CurChar == MASK_LETTER_SMALL_NOT_REQUIRED)
						{
							vMask_Reg_CurText = "[a-z" + MASK_REG_LETTER_PL_SMALL + "]?";
							vMask_Reg_Set_CurText = "a-z" + MASK_REG_LETTER_PL_SMALL;
							
							vMask_Reg_Set_Array["key_"+vMask_Reg_CurChar] = "a-z";
							vMask_Reg_Set_Array["key_PL_SMALL"] = MASK_REG_LETTER_PL_SMALL;
						}
						if (vMask_Reg_CurChar == MASK_LETTER_SMALL_REQUIRED)
						{
							vMask_Reg_CurText = "[a-z" + MASK_REG_LETTER_PL_SMALL + "]{1}";
							vMask_Reg_Set_CurText = "a-z" + MASK_REG_LETTER_PL_SMALL;
							
							vMask_Reg_Set_Array["key_"+vMask_Reg_CurChar] = "a-z";
							vMask_Reg_Set_Array["key_PL_SMALL"] = MASK_REG_LETTER_PL_SMALL;
						}
						if (vMask_Reg_CurChar == MASK_LETTER_BIG_NOT_REQUIRED)
						{
							vMask_Reg_CurText = "[A-Z" + MASK_REG_LETTER_PL_BIG + "]?";
							vMask_Reg_Set_CurText = "A-Z" + MASK_REG_LETTER_PL_BIG;
							
							vMask_Reg_Set_Array["key_"+vMask_Reg_CurChar] = "A-Z";
							vMask_Reg_Set_Array["key_PL_BIG"] = MASK_REG_LETTER_PL_BIG;
						}
						if (vMask_Reg_CurChar == MASK_LETTER_BIG_REQUIRED)
						{
							vMask_Reg_CurText = "[A-Z" + MASK_REG_LETTER_PL_BIG + "]{1}";
							vMask_Reg_Set_CurText = "A-Z" + MASK_REG_LETTER_PL_BIG;
							
							vMask_Reg_Set_Array["key_"+vMask_Reg_CurChar] = "A-Z";
							vMask_Reg_Set_Array["key_PL_BIG"] = MASK_REG_LETTER_PL_BIG;
						}
						if (vMask_Reg_CurChar == MASK_LETTER_ANY_NOT_REQUIRED)
						{
							vMask_Reg_CurText = "[a-zA-Z" + MASK_REG_LETTER_PL_SMALL + MASK_REG_LETTER_PL_BIG + "]?";
							vMask_Reg_Set_CurText = "a-zA-Z" + MASK_REG_LETTER_PL_SMALL + MASK_REG_LETTER_PL_BIG;
							
							vMask_Reg_Set_Array["key_"+vMask_Reg_CurChar+"_1"] = "a-z";
							vMask_Reg_Set_Array["key_PL_SMALL"] = MASK_REG_LETTER_PL_SMALL;
							
							vMask_Reg_Set_Array["key_"+vMask_Reg_CurChar+"_2"] = "A-Z";
							vMask_Reg_Set_Array["key_PL_BIG"] = MASK_REG_LETTER_PL_BIG;
						}
						if (vMask_Reg_CurChar == MASK_LETTER_ANY_REQUIRED)
						{
							vMask_Reg_CurText = "[a-zA-Z" + MASK_REG_LETTER_PL_SMALL + MASK_REG_LETTER_PL_BIG + "]{1}";
							vMask_Reg_Set_CurText = "a-zA-Z" + MASK_REG_LETTER_PL_SMALL + MASK_REG_LETTER_PL_BIG;
							
							vMask_Reg_Set_Array["key_"+vMask_Reg_CurChar+"_1"] = "a-z";
							vMask_Reg_Set_Array["key_PL_SMALL"] = MASK_REG_LETTER_PL_SMALL;
							
							vMask_Reg_Set_Array["key_"+vMask_Reg_CurChar+"_2"] = "A-Z";
							vMask_Reg_Set_Array["key_PL_BIG"] = MASK_REG_LETTER_PL_BIG;
						}
					}
				}
				
				vMask_Reg = vMask_Reg + vMask_Reg_CurText;
			}
			
			vMask_Reg_Set = "";
			for (vMask_Reg_Set_Array_Key in vMask_Reg_Set_Array)
			{
				vMask_Reg_Set = vMask_Reg_Set + vMask_Reg_Set_Array[vMask_Reg_Set_Array_Key];
			}
		}
	}
	
	if (vMask_Reg != "")
	{
		vMask_Reg = "^" + vMask_Reg + "$";
	}
	
	if (vMask_Reg_Set != "")
	{
		vMask_Reg_Set = "^[" + vMask_Reg_Set + "]$";
	}
	
	if (pGetFullResult)
	{
		vResult = new Array();
		
		vResult[MASK_REG_ATTRIBUTE_NAME] = vMask_Reg;
		vResult[MASK_REG_SET_ATTRIBUTE_NAME] = vMask_Reg_Set;
		vResult[MASK_REG_EXP_OPT_ATTRIBUTE_NAME] = vMask_Reg_Opt;
	}
	else
	{
		vResult = vMask_Reg;
	}
	
	return(vResult);
}

function Input_SetMask_RegExp(pInput, pSetEvents, pMask_Reg, pMask_Reg_Set, pMask_Reg_Opt, pCss_Reg_OK, pCss_Reg_Wrong, pCss_Reg_Start)
{
	var vResult = false;
	
	var vSetEvents = false;
	
	var vMask_Reg = pMask_Reg;
	var vMask_Reg_Set = pMask_Reg_Set;
	var vMask_Reg_Opt = pMask_Reg_Opt;
	
	var vCss_Reg_Start = pCss_Reg_Start;
	
	var vCss_Reg_OK = pCss_Reg_OK;
	var vCss_Reg_Wrong = pCss_Reg_Wrong;
	
	var vUserMask = "";
	
	var vMask_Reg_Src = "";
	var vMask_Reg_Set_Src = "";
	var vMask_Reg_Opt_Src = "";
	
	var vCss_Reg_Start_Src = "";
	
	var vCss_Reg_OK_Src = "";
	var vCss_Reg_Wrong_Src = "";
	
	var vMask_Reg_Array = new Array();
	
	if (pSetEvents != null)
	{
		vSetEvents = pSetEvents;
	}
	
	if (pInput != null)
	{
		if (
				(vMask_Reg == null) ||
				(vMask_Reg_Set == null) ||
				(vMask_Reg_Opt == null)
			)
		{
			vUserMask = pInput.getAttribute(MASK_ATTRIBUTE_NAME);
			
			vMask_Reg_Array = ConvertMask_User_To_RegExp(vUserMask, true);
			
			if (vMask_Reg == null)
			{
				vMask_Reg_Src = pInput.getAttribute(MASK_REG_ATTRIBUTE_NAME);
				if (vMask_Reg_Src == null)
				{
					vMask_Reg = Trim(vMask_Reg_Array[MASK_REG_ATTRIBUTE_NAME]);
				}
				else
				{
					vMask_Reg = Trim(vMask_Reg_Src);
				}
			}
			
			if (vMask_Reg_Set == null)
			{
				vMask_Reg_Set_Src = pInput.getAttribute(MASK_REG_SET_ATTRIBUTE_NAME);
				if (vMask_Reg_Set_Src == null)
				{
					vMask_Reg_Set = Trim(vMask_Reg_Array[MASK_REG_SET_ATTRIBUTE_NAME]);
				}
				else
				{
					vMask_Reg_Set = Trim(vMask_Reg_Set_Src);
				}
			}
			
			if (vMask_Reg_Opt == null)
			{
				vMask_Reg_Opt_Src = pInput.getAttribute(MASK_REG_EXP_OPT_ATTRIBUTE_NAME);
				if (vMask_Reg_Opt_Src == null)
				{
					vMask_Reg_Opt = Trim(vMask_Reg_Array[MASK_REG_EXP_OPT_ATTRIBUTE_NAME]);
				}
				else
				{
					vMask_Reg_Opt = Trim(vMask_Reg_Opt_Src);
				}
			}
		}
		
		if (
				(vCss_Reg_Start == null) ||
				(vCss_Reg_OK == null) ||
				(vCss_Reg_Wrong == null)
			)
		{
			if (vCss_Reg_Start == null)
			{
				vCss_Reg_Start_Src = pInput.getAttribute(MASK_CLASS_START_ATTRIBUTE_NAME);
				if (vCss_Reg_Start_Src == null)
				{
					vCss_Reg_Start = pInput.className;
				}
				else
				{
					vCss_Reg_Start = vCss_Reg_Start_Src;
				}
			}
			
			if (vCss_Reg_Start == null)
			{
				vCss_Reg_Start = "";
			}
			else
			{
				vCss_Reg_Start = Trim(vCss_Reg_Start);
			}
			
			vCss_Reg_OK = MASK_CLASS_DEFAULT_OK;
			vCss_Reg_Wrong = MASK_CLASS_DEFAULT_WRONG;
		}
		
		pInput.setAttribute(MASK_REG_ATTRIBUTE_NAME, vMask_Reg, 0);
		pInput.setAttribute(MASK_REG_SET_ATTRIBUTE_NAME, vMask_Reg_Set, 0);
		pInput.setAttribute(MASK_REG_EXP_OPT_ATTRIBUTE_NAME, vMask_Reg_Opt, 0);
		
		pInput.setAttribute(MASK_CLASS_START_ATTRIBUTE_NAME, vCss_Reg_Start, 0);
		
		pInput.setAttribute(MASK_CLASS_OK_ATTRIBUTE_NAME, vCss_Reg_OK, 0);
		pInput.setAttribute(MASK_CLASS_DEFAULT_WRONG_ATTRIBUTE_NAME, vCss_Reg_Wrong, 0);
		
		if (vSetEvents)
		{
//			pInput.setAttribute("onkeypress", "return CheckMask_Event(this, event, true);\"", 0);
//			pInput.onkeypress = "return CheckMask_Event(this, event, true);\"";
//onkeypress=\"return CheckMask_Event(this, event, true);\" _onchange=\"return CheckMask_Event(this, event, false);\" 
		}
		
		vResult = true;
	}
	
	return(vResult);
}

function CheckMask(pInput, pCheckSet, pChar, pCheckMaskOnlyIfNotEmpty, pCheckOnlyIfDisplayShow)
{
	var vResult = false;
	
	var vCheckSet = false;
	
	var vChar = "";
	
	var vCheckMaskOnlyIfNotEmpty = false;
	
	var vCheckOnlyIfDisplayShow = true;
	
	var vIsEmpty = false;
	
	if (pCheckSet != null)
	{
		vCheckSet = pCheckSet;
	}
	
	if (pChar != null)
	{
		vChar = new String(pChar);
	}
	
	if (pCheckMaskOnlyIfNotEmpty != null)
	{
		vCheckMaskOnlyIfNotEmpty = pCheckMaskOnlyIfNotEmpty;
	}
	
	if (pCheckOnlyIfDisplayShow != null)
	{
		vCheckOnlyIfDisplayShow = pCheckOnlyIfDisplayShow;
	}
	
	var vMask_Reg = "";
	var vMask_Reg_Src = "";
	var vMask_RegExp = null;
	
	var vMask_Reg_Opt = MASK_REG_EXP_OPT_DEFAULT;
	var vMask_Reg_Opt_Src = "";
	
	var vCurrentText = "";
	
	var vDisplay_Value_U = new String("");
	
	var vIsDisplayShow = false;
	
	if (pInput != null)
	{
		vResult = true;
		
		vDisplay_Value_U = (new String(pInput.style.display)).toUpperCase();
		
		vIsDisplayShow = (vDisplay_Value_U != "NONE");
		
		vIsEmpty = (pInput.value == "");
		
		if (vCheckSet)
		{
			vMask_Reg_Src = pInput.getAttribute(MASK_REG_SET_ATTRIBUTE_NAME);
		}
		else
		{
			vMask_Reg_Src = pInput.getAttribute(MASK_REG_ATTRIBUTE_NAME);
		}
		
		vMask_Reg_Opt_Src = pInput.getAttribute(MASK_REG_EXP_OPT_ATTRIBUTE_NAME);
		if (vMask_Reg_Opt_Src != null)
		{
			vMask_Reg_Opt = Trim(vMask_Reg_Opt_Src);
		}
		
		if (vMask_Reg_Src != null)
		{
			vMask_Reg = vMask_Reg_Src;
		}
		
		if (vCheckSet)
		{
			vCurrentText = vChar;
		}
		else
		{
			vCurrentText = pInput.value;
		}
		
		vResult = true;
		
		if (vMask_Reg != "")
		{
			if (
					(
						(!vCheckOnlyIfDisplayShow) ||
						(
							vCheckOnlyIfDisplayShow &&
							vIsDisplayShow
						)
					) &&
					(
						vCheckSet ||
						(
							(!vCheckSet) &&
							(
								(!vCheckMaskOnlyIfNotEmpty) ||
								(
									vCheckMaskOnlyIfNotEmpty &&
									(!vIsEmpty)
								)
							)
						)
					)
				)
			{
				
				vMask_RegExp = new RegExp(vMask_Reg, vMask_Reg_Opt);
				
				if (vMask_RegExp != null)
				{
					vResult = vMask_RegExp.test(vCurrentText);
				}
			}
		}
	}
	
	return(vResult);
}

function CheckMask_Event(pInput, pEvent, pCheckSet, pCheckMaskOnlyIfNotEmpty)
{
	var vResult = false;
	
	var vCheckSet = false;
	
	var vCheckIt = true;
	
	var vUserMask = "";
	
	var vCharForSet = "";
	
	var vCSS = new String("");
	var vCSS_Main = new String("");
	var vCSS_Event =  new String("blur");
	
	if (pEvent != null)
	{
		vCSS_Event = (new String(pEvent.type)).toLowerCase();
	}
	
	var vNavigatorType = GetClientType();
	
	var vCharCode = 0;
	
	if (pCheckSet != null)
	{
		vCheckSet = pCheckSet;
	}
	
	if (pEvent != null)
	{
		switch (vNavigatorType)
		{
			case NAVIGATOR_TYPE_INTERNET_EXPLORER:
			{
				vCharCode = pEvent.keyCode;
				
				break;
			}
			case NAVIGATOR_TYPE_NETSCAPE:
			{
			}
			case NAVIGATOR_TYPE_FIREFOX:
			{
				vCharCode = pEvent.charCode;
				
				break;
			}
			case NAVIGATOR_TYPE_INNA:
			{
				vCharCode = pEvent.keyCode;
				
				break;
			}
			default:
			{
				vCharCode = pEvent.keyCode;
			}
		}
	}
	
	if (pInput != null)
	{
		vResult = true;
		
		vCSS = pInput.getAttribute(MASK_CLASS_START_ATTRIBUTE_NAME);
		
		if (vCheckSet)
		{
			vCheckIt = false;
			
			if (vCharCode >= 32)
			{
				vCheckIt = true;
				
				vCharForSet = String.fromCharCode(vCharCode);
			}
		}
		
		if (vCheckIt)
		{
			vResult = CheckMask(pInput, vCheckSet, vCharForSet, pCheckMaskOnlyIfNotEmpty);
			
			if (!vCheckSet)
			{
				if (vResult)
				{
					vCSS_Main = pInput.getAttribute(MASK_CLASS_OK_ATTRIBUTE_NAME);
				}
				else
				{
					vCSS_Main = pInput.getAttribute(MASK_CLASS_DEFAULT_WRONG_ATTRIBUTE_NAME);
				}
				
				vCSS = vCSS + " " + vCSS_Main + " " + vCSS_Main + "_" + vCSS_Event;
				
				vCSS = Trim(vCSS);
				
				pInput.className = vCSS;
//alert(pInput.className);
			}
		}
	}
	
	return(vResult);
}

function CheckMask_Start(pInput, pSetEvents)
{
	var vResult = false;
	
	var vSetEvents = false;
	
	var vUserMask = "";
	var vUserMask_IsRegExp = false;
	
	var vMask_Reg = "";
	var vMask_Reg_Src = "";
	var vMask_RegExp = null;
	
	var vTMP_Mask_Text_Inside_Started = false;
	
	var i = 0;
	
	var vUserMask_CurChar = "";
	
	var vMask_Reg_CurChar = "";
	var vMask_Reg_CurText = "";
	
	if (pSetEvents != null)
	{
		vSetEvents = pSetEvents;
	}
	
	vResult = Input_SetMask_RegExp(pInput, vSetEvents);
	
	return(vResult);
}

function CheckMask_Event_Form(pForm, pOnlyIfHaveMask, pCheckMaskOnlyIfNotEmpty)
{
	var vResult = true;
	var vResult_TMP = false;
	
	var vOnlyIfHaveMask = true;
	
	var vElement = null;
	
	var vTagName_TMP = null;
	
	var i = 0;
	
	if (pOnlyIfHaveMask != null)
	{
		vOnlyIfHaveMask = pOnlyIfHaveMask;
	}
	
	if (pForm != null)
	{
		if (pForm.elements != null)
		{
			for (i=0; i<pForm.elements.length; i++)
			{
				vElement = pForm.elements.item(i);
				
				vTagName_TMP = (new String(vElement.tagName)).toUpperCase();
				vMask_TMP = vElement.getAttribute(MASK_ATTRIBUTE_NAME);
				
				if (
//						(
//							(vTagName_TMP == "INPUT") ||
//							(vTagName_TMP == "TEXTAREA")
//						) &&
						(
							(!vOnlyIfHaveMask) ||
							(
								vOnlyIfHaveMask &&
								(vMask_TMP != null)
							)
						)
					)
				{
					vResult_TMP = CheckMask_Event(vElement, null, false, pCheckMaskOnlyIfNotEmpty);
					
					vResult = vResult && vResult_TMP;
				}
			}
		}
	}
	
	return(vResult);
}

function CheckMask_Start_Form(pForm, pSetEvents, pOnlyIfHaveMask)
{
	var vResult = true;
	var vResult_TMP = false;
	
	var vSetEvents = true;
	
	var vOnlyIfHaveMask = true;
	
	var vElement = null;
	
	var vTagName_TMP = null;
	
	var vMask_TMP = null;
	
	var i = 0;
	
	if (pSetEvents != null)
	{
		vSetEvents = pSetEvents;
	}
	
	if (pOnlyIfHaveMask != null)
	{
		vOnlyIfHaveMask = pOnlyIfHaveMask;
	}
	
	if (pForm != null)
	{
		if (pForm.elements != null)
		{
			for (i=0; i<pForm.elements.length; i++)
			{
				vElement = pForm.elements.item(i);
				
				vTagName_TMP = (new String(vElement.tagName)).toUpperCase();
				vMask_TMP = vElement.getAttribute(MASK_ATTRIBUTE_NAME);
				
				if (
//						(
//							(vTagName_TMP == "INPUT") ||
//							(vTagName_TMP == "TEXTAREA")
//						) &&
						(
							(!vOnlyIfHaveMask) ||
							(
								vOnlyIfHaveMask &&
								(vMask_TMP != null)
							)
						)
					)
				{
					vResult_TMP = CheckMask_Start(vElement, vSetEvents);
					
					vResult = vResult && vResult_TMP;
				}
			}
		}
	}
	
	return(vResult);
}

function CheckMask_Start_Full(pForm, pSetEvents, pOnlyIfHaveMask, pCheckMaskOnlyIfNotEmpty)
{
	var vResult = true;
	var vResult_TMP = false;
	
	var vSetEvents = true;
	
	if (pForm != null)
	{
		vResult_TMP = CheckMask_Start_Form(pForm, vSetEvents, pOnlyIfHaveMask);
		vResult = vResult && vResult_TMP;
		
		vResult_TMP = CheckMask_Event_Form(pForm, pOnlyIfHaveMask, pCheckMaskOnlyIfNotEmpty);
		vResult = vResult && vResult_TMP;
	}
//alert(document.getElementById("cena").getAttribute(MASK_REG_ATTRIBUTE_NAME));
//alert(document.getElementById("cena").getAttribute(MASK_REG_SET_ATTRIBUTE_NAME));

//alert(document.getElementById("email").getAttribute(MASK_REG_ATTRIBUTE_NAME));
//alert(document.getElementById("email").getAttribute(MASK_REG_SET_ATTRIBUTE_NAME));
	
	return(vResult);
}

