var STR_PB_BAE_HEADER = "STSA";

var STR_LIMIT_AMOUNT	= "/[0-9]{1,11}[.|,]{0,1}[0-9]{0,2}/";
var STR_LIMIT_PLMTS		= "/[0-9]{1,11}[.|,]{0,1}[0-9]{0,2}/";
var STR_LIMIT_AMOUNT_NOTIF = "/[*]{1}|[0-9]{1,11}[.|,]{0,1}[0-9]{0,2}/";

var STR_LIMIT_BAE		= "/[0-9]{8}/";
var STR_LIMIT_PERSONID	= "/[0-9]{9}/";
var STR_LIMIT_FINCENTER	= "/.{1,7}/";
var STR_LIMIT_BIN		= "/[0-9]{10}|[?]{10}|[ ]|/";
var STR_LIMIT_ACCOUNT	= "/[0-9]{10}/";

var STR_LIMIT_ACCOUNT_F_CCY		= "/.{1,33}/";
var STR_LIMIT_PAYEE_NAME_F_CCY	= "/.{1,65}/";
var STR_LIMIT_CMN_NAME_F_CCY	= "/.{0,65}/";
var STR_LIMIT_PMT_CODE_F_CCY	= "/.{1,13}/";
var STR_LIMIT_CORR_BANK_F_CCY	= "/.{0,27}/";
var STR_LIMIT_DESCRIPTION_F_CCY = "/.{0,65}/";


var STR_LIMIT_MFNUMBER		= "/[0-9]{8}/";
var STR_LIMIT_BRBANKCODE	= "/.{0,10}/";
var STR_LIMIT_DT_KT_NAME	= "/.{1,26}/";
var STR_LIMIT_BENEF	= "/.{1,26}/";
var STR_LIMIT_EGN			= "/[0-9]{10}/";
var STR_LIMIT_BULSTAT		= "/[0-9]{13}|[0-9]{9}/";
var STR_LIMIT_BULSTAT_EGN_BOTH		= "/[0-9]{9}([0-9]{4}|[0-9]{1}){0,1}/";
var STR_LIMIT_TAXNUMBER		= "/[0-9]{10}/";
var STR_LIMIT_DATE			= "/[0-9]{2}[.]{1}[0-9]{2}[.]{1}[0-9]{4}/";
var STR_LIMIT_TEMPLATE_NAME = "/.{1,64}/";
var STR_LIMIT_DESCRIPTIONS	= "/.{1,126}/";

var STR_LIMIT_NUMBER_STANDART = "/[0-9]{1,10}/";
var STR_LIMIT_NUMBER_NOTZERO = "/[1-9]{1}[0-9]{0,9}/";
var STR_LIMIT_DOCUMENT_TYPE	= "/[1-9]{1}/";
var STR_LIMIT_PARAGRAPH	= "/[0-9]{1,6}/";
var STR_LIMIT_BIN_PAYEE	= "/[0-9]{10}|[?]{10}/";
var STR_LIMIT_DOCUMENT_NUMBER	= "/.{0,33}/";
var STR_LIMIT_SHNAME	= "/.{1,32}/";

var STR_EXPDAYS	= "/[0-9]{1,2}/";
var STR_LIMIT_10	= "/[0-9]{10}/";
var STR_LIMIT_11	= "/[0-9]{11}/";
var STR_LIMIT_7 = "/[0-9]{7}/";
var STR_LIMIT_8 = "/[0-9]{7,8}/";
var STR_LIMIT_6 = "/[0-9]{6}/";

var STR_LIMIT_16	= "/[0-9]{1,16}/";
var STR_LIMIT_25	= "/.{1,25}/";
var STR_LIMIT_30	= "/.{1,30}/";
var STR_LIMIT_35	= "/.{1,35}/";
var STR_LIMIT_CYR_35	= "/[^a-zA-Z]{1,35}/";
var STR_LIMIT_40	= "/.{1,40}/";
var STR_LIMIT_32	= "/.{1,32}/";
var STR_LIMIT_60	= "/.{1,60}/";
var STR_LIMIT_15	= "/[0-9]{1,15}/";
var STR_LIMIT_17	= "/[0-9]{1,17}/";
var STR_LIMIT_20	= "/.{1,20}/";
var STR_LIMIT_35_OPTIONAL	= "/.{0,35}/";
var STR_LIMIT_105	= "/.{1,105}/";
var STR_LIMIT_105_OPTIONAL	= "/.{0,105}/";
var STR_LIMIT_LATIN_35	= "/^[a-zA-Z0-9\"][a-zA-Z0-9\" ()-\\/,.]{1,35}/";
var STR_LIMIT_LATIN_105 = "/^[a-zA-Z0-9\"][a-zA-Z0-9\" ()-\\/,.]{1,105}/";
var STR_LIMIT_CYR_105 =  "/[^a-zA-Z]{1,105}/";
var STR_LIMIT_CYR_105_OPTIONAL =  "/[^a-zA-Z]{0,105}/";
var STR_LIMIT_LATIN_140 = "/^[a-zA-Z0-9\"][a-zA-Z0-9\" ()-\\/,.]{1,105}/";
var STR_LIMIT_LATIN_140_OPTIONAL = "/[a-zA-Z0-9\" ()-\\/,.]{0,140}/";
var STR_LIMIT_LATIN_35_OPTIONAL	= "/[a-zA-Z0-9\" ()-\\/,.]{0,35}/";
var STR_LIMIT_CUSTOMERID = "/.{1,18}/";
var STR_LIMIT_CVV2 = "/[0-9]{3}|[*]{0}/";
var STR_LIMIT_ATLEAST_ONE = "/.+/";
var STR_LIMIT_NUMBER_OPTIONAL = "/[0-9]{0,12}/";
var STR_LIMIT_AMOUNT_OPTIONAL= "/[0-9]{1,9}[.|,]{0,1}[0-9]{0,2}|.{0}/";

var STR_LIMIT_IBAN = "/BG{1}[0-9]{2}[A-Z0-9]{18}/";
var STR_LIMIT_BIC = "/[A-Z]{6}[A-Z0-9]{2}/";
var STR_LIMIT_SWIFTN = "/[A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3}){0,1}|.{0}/";//old swift davahme i malki bukwi

var STR_LIMIT_SWIFT_FCCY = "/^[A-Z0-9]{1,11}$/";
var STR_LIMIT_SWIFT_LATIN_35 = "/^[A-Za-z0-9\/?:\(\)-.,\'\+ ]{1,35}$/";
var STR_LIMIT_VALUE_DATE_F_CCY = "/SPT|TDY|TOM/";

var STR_LIMIT_128 = "/.{1,128}/";
var STR_LIMIT_128_OPTIONAL = "/.{0,128}/";
var STR_LIMIT_4 = "/([1-9]{1}[0-9]{3})|([0-9]{1}[1-9]{1}[0-9]{2})|([0-9]{2}[1-9]{1}[0-9]{1})|([0-9]{3}[1-9]{1})/";

var STR_LIMIT_HOUR = "/[0-9]{2}[:][0-9]{2}/";
var STR_LIMIT_BNB_NUMBER = "/[0-9]{10}|.{0}/";
var STR_LIMIT_EMAIL = "/.{1,}[@]{1}.{1,}[.]{1}[a-zA-Z]{2,4}|.{0}/";
var STR_LIMIT_EMAIL_MANDATORY = "/.{1,}[@]{1}.{1,}[.]{1}[a-zA-Z]{2,4}/";
var STR_LIMIT_SPECIAL ="/[^a-zA-Z<>\+_\|\{\}\(\)~!@\$%\^&\*\[\\]]{1,35}/";
var STR_LIMIT_SPECIAL_105 ="/[^a-zA-Z<>\+_\|\{\}\(\)~!@\$%\^&\*\[\\]]{1,105}/";
var STR_LIMIT_LATIN_LETTERS_35 = "/[a-zA-Z\" ()-\\/,.]{1,35}/";
var STR_LIMIT_PHONE = "/[0-9 +]{1,35}/";
var STR_LIMIT_PHONE_OPTIONAL = "/[0-9 +]{0,35}/";
var STR_LIMIT_MOBILE_CODE = "/88|89|87/";
var STR_LIMIT_MOBILE_PHONE = "/[0-9]{7}/"

var STR_LIMIT_BNB_NUMBER_OBLIGATORY = "/[0-9]{10}/";

var STR_LIMIT_NAME_ON_CARD = "/[a-zA-Z]{1,20}[ ]{1}[a-zA-Z]{1,20}/";

var STR_LIMIT_NOT_EMPTY_512 = "/.{1,512}|.{0}/"
var STR_LIMIT_NOT_EMPTY_1024 = "/.{1,1024}|.{0}/"
var STR_LIMIT_NOT_EMPTY_256 = "/.{1,256}|.{0}/"
var STR_LIMIT_NOT_EMPTY = "/..*/";


var STR_LIMIT_16_20	= "/[0-9]{13,20}/";
var STR_LIMIT_LATIN_60	= "/[a-zA-Z0-9 ]{1,60}/";
var STR_LIMIT_CVV2 = "/[0-9]{3}/";

var STR_LIMIT_NUMBER2 = "/[0-9]{1,2}/";
var STR_LIMIT_YEAR1 = "/[1-7]{1}/";

var STR_LIMIT_CARD = "/[0-9]{14,17}/";
var STR_LIMIT_CARD_NUMBER = "/[0-9]{16,17}/";
var STR_LIMIT_CARD_NUMBER_OPTIONAL = "/[0-9]{16,17}|.{0}/";

var STR_LIMIT_256 = "/.{1,256}/";
var STR_LIMIT_256_OPTIONAL = "/.{0,256}/";

var STR_LIMIT_50 = "/.{1,50}/";
var STR_LIMIT_STR_16 = "/.{1,16}/";

var STR_LIMIT_NUM_LET_50 = "/[a-zA-Zа-яА-Я0-9/_:.&?% -]{1,50}/";
var STR_LIMIT_NUM_LET_256 = "/[a-zA-Zа-яА-Я0-9/_:.&?% -]{1,256}/";
var STR_LIMIT_STR_LATIN_NUM_16 = "/[a-zA-Z0-9]{1,16}/";
var STR_LIMIT_RGB_COLOR = "/^[a-fA-F0-9]{3}$|^[a-fA-F0-9]{6}$/";

/***************************************************************
*	CheckEGN()
*	Description:	Function for validating EGN.
*	Author:			Vasil Bachvarov
*	Company:		DAIS - Software, Electronics and Trade, Ltd.
*	Date:			08.10.2003
*	Example:		8103204285
****************************************************************/
function CheckEGN(sEGN)
{
	if (sEGN.length!=10) return false;
	
	var arrWeightVector = new Array(2,4,8,5,10,9,7,3,6);
	var sum = 0;
	
	for (var k=0; k<9; k++) { 
		sum += new Number(sEGN.charAt(k).valueOf()) * arrWeightVector[k]; 
	}
	
	sum = (sum % 11) % 10;
	
	if ((new String(sum))!=sEGN.charAt(9)) return false;
	
	var nDay = new Number(sEGN.substring(4, 6));
	var nMonth = new Number(sEGN.substring(2, 4));
	var nYear = new Number(sEGN.substring(0, 2));
	
	if (31<nDay) return false;
	
	if (!((nMonth>=1 && nMonth<=12) || (nMonth>=21 && nMonth<=32) || (nMonth>=41 && nMonth<=52))) return false
	
	return true;
}

function CheckSWIFT(sSWIFT)
{
	if (sSWIFT.length!=8 && sSWIFT.length!=11 ) return false;
	
	for (var k=0; k<6; k++)
	{
		var c = sSWIFT.charAt(k);
		
		if((c>='A' && c<='Z') || (c>='a' && c<='z')) 
			{
							
			}
		else
		{
			return false;
		}
	}

	
	return true;
}

/***************************************************************
*	CheckTaxNumber()
*	Description:	Function for validating tax number.
*	Author:			Vasil Bachvarov
*	Company:		DAIS - Software, Electronics and Trade, Ltd.
*	Date:			08.10.2003
*	Example:		1212121220
****************************************************************/
function CheckTaxNumber(sTaxNumber)
{
	if (sTaxNumber.length!=10) return false;

	var arrWeightVector = new Array(4,3,2,7,6,5,4,3,2);
	var sum = 0;
	
	for (var k=0; k<9; k++)
	{
		sum += new Number(sTaxNumber.charAt(k).valueOf()) * arrWeightVector[k];
	}
	
	sum = (11-sum%11)%10;
	
	if (1==sum) return false;
	
	return ((new String(sum))==sTaxNumber.charAt(9));
}

/***************************************************************
*	CheckBULSTAT_9()
*	Description:	Function for validating BULSTAT 9.
*	Author:			Vasil Bachvarov
*	Company:		DAIS - Software, Electronics and Trade, Ltd.
*	Date:			08.10.2003
*	Example:		121212114
****************************************************************/
function CheckBULSTAT_9(sBULSTAT)
{
	if (sBULSTAT.length!=9) return false;

	var arrWeightVector = new Array(1,2,3,4,5,6,7,8);
	var arrWeightVector1 = new Array(3,4,5,6,7,8,9,10);
	var sum = 0;
	
	for (var k=0; k<8; k++)
	{
		sum += new Number(sBULSTAT.charAt(k).valueOf()) * arrWeightVector[k];
	}
	
	sum = sum%11;
	
	if (10==sum)
	{
		sum = 0;
		for (var k=0; k<8; k++)
		{
			sum += new Number(sBULSTAT.charAt(k).valueOf()) * arrWeightVector1[k];
		}
		
		sum = (sum%11)%10;
	}
	
	return ((new String(sum))==sBULSTAT.charAt(8));
}

/***************************************************************
*	CheckBULSTAT_13()
*	Description:	Function for validating BULSTAT 9.
*	Author:			Vasil Bachvarov
*	Company:		DAIS - Software, Electronics and Trade, Ltd.
*	Date:			08.10.2003
*	Example:		1212121140008
****************************************************************/
function CheckBULSTAT_13(sBULSTAT)
{
	if (sBULSTAT.length!=13) return false;
	
	if (!CheckBULSTAT_9(sBULSTAT.substring(0, 9))) return false;

	var arrWeightVector = new Array(2,7,3,5);
	var arrWeightVector1 = new Array(4,9,5,7);
	var sum = 0;
	
	for (var k=8; k<12; k++)
	{
		sum += new Number(sBULSTAT.charAt(k).valueOf()) * arrWeightVector[k-8];
	}
	
	sum = sum%11;
	
	if (10==sum)
	{
		sum = 0;
		for (var k=8; k<12; k++)
		{
			sum += new Number(sBULSTAT.charAt(k).valueOf()) * arrWeightVector1[k-8];
		}
		
		sum = (sum%11)%10;
	}
	
	return ((new String(sum))==sBULSTAT.charAt(12));
}

function CheckBULSTAT(sBULSTAT)
{
	if (CheckBULSTAT_9(sBULSTAT)) return true;
	if (CheckBULSTAT_13(sBULSTAT)) return true;
	return false;
}

/***************************************************************
*	CheckAccountNumber()
*	Description:	Function for validating account number and BIN.
*	Author:			Vasil Bachvarov
*	Company:		DAIS - Software, Electronics and Trade, Ltd.
*	Date:			24.10.2003
*	Example:		1234567890
****************************************************************/
function CheckAccountNumber(strAccNo)
{
	
	if (strAccNo.length!=10) return false;
	
	var arrWeightVector = new Array(2,4,8,5,10,9,7,3,6);
	var sum = 0;
	
	for (var k=0; k<9; k++) { 
		sum += new Number(strAccNo.charAt(k).valueOf()) * arrWeightVector[k]; 
	}
	
	sum = (sum % 11) % 10;
	
	if ((new String(sum))!=strAccNo.charAt(9)) return false;
	
	return true;
}

function CheckBIN(strBIN)
{
	if (""==strBIN) return true;
	if ("0000000000"==strBIN) return true;
	return CheckAccountNumber(strBIN);
}

/***************************************************************
*	Convert2BISERASymbols(str2)
*	Description:	Function for checking BISERA payment system symbols given string str2.
                    Not valid symbols are replaced with "?".
*	Author:			Anelia Brezoeva
*	Company:		DAIS - Software
*	Date:			01.06.2004
****************************************************************/
function Convert2BISERASymbols(str2)
{
	var str = str2.toUpperCase();
	var l = str.length;
	var res = "";

	//anyone 20090511 "Достъп и обмен на данни чрез БИСЕРА" Версия 3.1/18.09.2007
	var arrBISERASymbols = new Array("А", "Б", "В", "Г", "Д", "Е", "Ж", "З", "И", "Й", "К", "Л", "М", "Н", "О", "П", "Р", "С", "Т", "У", "Ф", "Х", "Ц", "Ч", "Ш", "Щ", "Ъ", "Ь", "Ю", "Я", "{", "}", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", ":", ";", "<", "=", ">", "?", "@", "!", '"', "#", "%", "&", "'", "(", ")", "*", "+", ",", "-", ".", "/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", " ");
    
	for (var k=0; k<l; k++)
	{
		var c = str.charAt(k);//uppercased
		var c2 = str2.charAt(k);//original
		
		var isValidBiseraSymbol = false;
		
		for (var i = 0; i < arrBISERASymbols.length; i++) {
		    if (c == arrBISERASymbols[i]) 
		        isValidBiseraSymbol = true;		   
		}
		if (isValidBiseraSymbol) 
		    {
			    res += c2;				
		    }
	    else
	    {
		    res += "?";        }
	}
	return res;
}

function checkForBisera(strobj)
{

	var cnt = strobj.length;
	var testBisera="";

	for (var i=0; i<cnt; i++)
		{
			var str=eval("document.forms[0]."+strobj[i]+".value");//value to check			
			
			str=TrimString(str);		
					
			if (str!="") 
			{
				testBisera = Convert2BISERASymbols(str);
				
				if(testBisera.charAt(0)=="-")
					testBisera="?"+testBisera.substring(1);
								
				if(str!=testBisera)
				{					
					eval("tmp = document.forms[0]."+strobj[i]);				
					tmp.value = testBisera;
					tmp.focus();					
					alert(STR_BISERA_CHECK);
					return true;
				}
			}		
		}	
	return false;
	
}


function checkemail( str){

var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i
	if (filter.test(str))
	{
		return true	
	}
	
	return false
}
/***************************************************************
*	CheckIBANInternational()		
*	Description:	Function for validating International IBANs
*	Author:			Anelia Brezoeva, Vladi kaza kak da smqtam modul-a
*	Company:		DAIS - Software
*	Date:			12.4.2006
*	Example:		BG33AAAA12311012345678
****************************************************************/
function CheckIBANInternational(sIBAN) 
{
    if (sIBAN.length == 0) return true;
    var arrLettersToNumbers = new Array();
    arrLettersToNumbers[65] = 10;
    arrLettersToNumbers[66] = 11;
    arrLettersToNumbers[67] = 12;
    arrLettersToNumbers[68] = 13;
    arrLettersToNumbers[69] = 14;
    arrLettersToNumbers[70] = 15;
    arrLettersToNumbers[71] = 16;
    arrLettersToNumbers[72] = 17;
    arrLettersToNumbers[73] = 18;
    arrLettersToNumbers[74] = 19;
    arrLettersToNumbers[75] = 20;
    arrLettersToNumbers[76] = 21;
    arrLettersToNumbers[77] = 22;
    arrLettersToNumbers[78] = 23;
    arrLettersToNumbers[79] = 24;
    arrLettersToNumbers[80] = 25;
    arrLettersToNumbers[81] = 26;
    arrLettersToNumbers[82] = 27;
    arrLettersToNumbers[83] = 28;
    arrLettersToNumbers[84] = 29;
    arrLettersToNumbers[85] = 30;
    arrLettersToNumbers[86] = 31;
    arrLettersToNumbers[87] = 32;
    arrLettersToNumbers[88] = 33;
    arrLettersToNumbers[89] = 34;
    arrLettersToNumbers[90] = 35;

    //първите 4 знака се преместват на края
    modifiedIBAN = sIBAN.substring(4, sIBAN.length) + sIBAN.substring(0, 4);

    transformedIBAN = "";
    //буквите се заменят с числа v transformedIBAN
    for (var k = 0; k < sIBAN.length; k++) {
        var c = modifiedIBAN.charAt(k);
        if (c >= 'A' && c <= 'Z') {
            //letter
            transformedIBAN += arrLettersToNumbers[modifiedIBAN.charCodeAt(k)];
        }
        else if (c >= '0' && c <= '9') {
            //number
            transformedIBAN += c;
        }
        else
            return false;
    }

    strbase = transformedIBAN.substring(0, transformedIBAN.length - 2) + "00";

    //ostatyk za base (bez controlno chislo)

    k = DAISModule(strbase, 97);

    var ctrlNumber = new Number(sIBAN.substring(2, 4))

    if ((98 - k) != ctrlNumber)
        return false; //controlno chislo ne sywpada s izchislenoto

    //ostatyk za IBAN
    k = DAISModule(transformedIBAN, 97)

    if (k != 1)
        return false; //newalidno kontrolno chislo

    return true;
}

/***************************************************************
*	CheckIBAN()		
*	Description:	Function for validating BG IBANs, uses CheckIBANInternational()
*	Author:			Anelia Brezoeva, Vladi kaza kak da smqtam modul-a
*	Company:		DAIS - Software
*	Date:			12.4.2006
*	Example:		BG33AAAA12311012345678
****************************************************************/
function CheckIBAN(sIBAN) {
    if (sIBAN.length != 22) return false;

    return CheckIBANInternational(sIBAN);
	
}

function DAISModule(strBigNumber,SmallNumber)
{
	k=0;
	for (var i=0; i<strBigNumber.length; i++)
	{		
		k=(10*k + new Number(strBigNumber.charAt(i))) % SmallNumber;		
	
	}
	return k;
}

function dateCompare(d1,d2)
	{
		if (d1>d2)
		return false;
		else
		return true;
	}
	
	function string2date(sDate)
	{
	var dDate;
	
	var dtCh= ".";
	var pos1=sDate.indexOf(dtCh);
	var pos2=sDate.indexOf(dtCh,pos1+1);
	var strDay=sDate.substring(0,pos1);
	var strMonth=sDate.substring(pos1+1,pos2);
	var strYear=sDate.substring(pos2+1);
	
	dDate = new Date(strYear,strMonth-1,strDay);
		
	return dDate;
	}

