var STR_LIMIT_AMOUNT_INT	= "/[0-9]{1,11}/";
var STR_LIMIT_AMOUNT_FLOAT	= "/[0-9]{1,11}[.|,]{0,1}[0-9]{0,2}/";
var STR_LIMIT_EGN			= "/[0-9]{10}/";
var STR_LIMIT_BULSTAT		= "/[0-9]{13}|[0-9]{9}/";


function validate()
{
		var bo = true;
		//Declarations
		if (!(document.getElementById("cbDeclare1").checked && document.getElementById("cbDeclare2").checked ) )
			{
				bo = false;
				document.getElementById("AlertDeclare").style.display="block";
			}
		else
			document.getElementById("AlertDeclare").style.display="none";
		
		
		//not null
		for (var k=0; k<document.forms[0].elements.length; k++)
		{
			var s = document.forms[0].elements[k].id;
			
			if ( document.getElementById("Alert_"+s) )
			{	
				if ( document.getElementById(s).value == "" )
					{
						bo = false;
						document.getElementById("Alert_"+s).style.color="red";
					}
				else
					document.getElementById("Alert_"+s).style.color="black";
			}
			
		}
		
		//EGN
		if (!CheckEGN(document.getElementById("tbEGN").value) )
			{
				bo = false;
				document.getElementById("Alert_tbEGN").style.color="red";			
			}
		else
			document.getElementById("Alert_tbEGN").style.color="black";
			
		if ( (document.getElementById("tbPartnerEGN").value != "") || (document.getElementById("tbPartnerName").value) )
		{
			if (!CheckEGN(document.getElementById("tbPartnerEGN").value) )
				{
					bo = false;
					document.getElementById("Wrong_tbPartnerEGN").style.color="red";			
				}
			else
				document.getElementById("Wrong_tbPartnerEGN").style.color="black";	
		}
		else
			document.getElementById("Wrong_tbPartnerEGN").style.color="black";	
			
					
		//BULSTAT
		if (document.getElementById("tbCompanyBULSTAT").value != "")
		{
			if (!CheckBULSTAT(document.getElementById("tbCompanyBULSTAT").value))
				{
					bo = false;
					document.getElementById("Wrong_tbCompanyBULSTAT").style.color="red";			
				}
			else
				document.getElementById("Wrong_tbCompanyBULSTAT").style.color="black";		
		}
		else
			document.getElementById("Wrong_tbCompanyBULSTAT").style.color="black";			
		
		
		//PracticeYears
		if (document.getElementById("tbPracticeYears").value != "")
		{
			if (!StringValidater(document.getElementById("tbPracticeYears").value,STR_LIMIT_AMOUNT_INT))
				{
					bo = false;
					document.getElementById("Wrong_tbPracticeYears").style.color="red";			
				}
			else
				document.getElementById("Wrong_tbPracticeYears").style.color="black";		
		}
		else
			document.getElementById("Wrong_tbPracticeYears").style.color="black";	
			
		//tbYEARS_AT_CURRENT_ADDRESS
		if (document.getElementById("tbYEARS_AT_CURRENT_ADDRESS").value != "")
		{
			if (!StringValidater(document.getElementById("tbYEARS_AT_CURRENT_ADDRESS").value,STR_LIMIT_AMOUNT_INT))
				{
					bo = false;
					document.getElementById("Wrong_tbYEARS_AT_CURRENT_ADDRESS").style.color="red";			
				}
			else
				document.getElementById("Wrong_tbYEARS_AT_CURRENT_ADDRESS").style.color="black";		
		}
		else
			document.getElementById("Wrong_tbYEARS_AT_CURRENT_ADDRESS").style.color="black";	
			
		//tbLabourAgreementYear
		if (document.getElementById("tbLabourAgreementYear").value != "")
		{
			if (!StringValidater(document.getElementById("tbLabourAgreementYear").value,STR_LIMIT_AMOUNT_INT))
				{
					bo = false;
					document.getElementById("Wrong_tbLabourAgreementYear").style.color="red";			
				}
			else
				document.getElementById("Wrong_tbLabourAgreementYear").style.color="black";		
		}
		else
			document.getElementById("Wrong_tbLabourAgreementYear").style.color="black";									
		
					
					
		//LabourAgreementSalary
		if (!StringValidater(document.getElementById("tbLabourAgreementSalary").value,STR_LIMIT_AMOUNT_FLOAT) )
			{
				bo = false;
				document.getElementById("Alert_tbLabourAgreementSalary").style.color="red";			
			}
		else
			document.getElementById("Alert_tbLabourAgreementSalary").style.color="black";
			
		
			
		//CivilAgreementSalary
		if (document.getElementById("tbCivilAgreementSalary").value != "")
		{
			if (!StringValidater(document.getElementById("tbCivilAgreementSalary").value,STR_LIMIT_AMOUNT_FLOAT))
				{
					bo = false;
					document.getElementById("Wrong_tbCivilAgreementSalary").style.color="red";			
				}
			else
				document.getElementById("Wrong_tbCivilAgreementSalary").style.color="black";		
		}
		else
			document.getElementById("Wrong_tbCivilAgreementSalary").style.color="black";		
			
		
		
		//tbIncomeRent
		if (document.getElementById("tbIncomeRent").value != "")
		{
			if (!StringValidater(document.getElementById("tbIncomeRent").value,STR_LIMIT_AMOUNT_FLOAT))
				{
					bo = false;
					document.getElementById("Wrong_tbIncomeRent").style.color="red";			
				}
			else
				document.getElementById("Wrong_tbIncomeRent").style.color="black";		
		}
		else
			document.getElementById("Wrong_tbIncomeRent").style.color="black";	
			


		//tbIncomeOther
		if (document.getElementById("tbIncomeOther").value != "")
		{
			if (!StringValidater(document.getElementById("tbIncomeOther").value,STR_LIMIT_AMOUNT_FLOAT))
				{
					bo = false;
					document.getElementById("Wrong_tbIncomeOther").style.color="red";			
				}
			else
				document.getElementById("Wrong_tbIncomeOther").style.color="black";		
		}
		else
			document.getElementById("Wrong_tbIncomeOther").style.color="black";				
			
			
			
		//NameOnCard > 20
		if (document.getElementById("tbNameOnCard").value != "")
		{
			if( (document.getElementById("tbNameOnCard").value.length > 20)||(! CheckCyr(document.getElementById("tbNameOnCard").value)))
			{
				bo = false;
				document.getElementById("Alert_tbNameOnCard").style.color="red";			
			}
			else
				document.getElementById("Alert_tbNameOnCard").style.color="black";		
		}	
		return bo;
}
	

	
function StringValidater(str, strRegExpr)
{
	eval("var re = " + strRegExpr)
	var bRes = re.test(str);
	if(bRes)
	{//so strRegExpr a substring of the str but is it the whole string
		var strRes = str.replace(re, "");
		bRes = (strRes == "")
	}
	return bRes;
};//StringValidater


	
	
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;
}	


/***************************************************************
*	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;
}


function onChangeFamilyStatus()
	{
		document.getElementById("tbPartnerName"	).disabled = (document.getElementById("ddFamilyStatus").selectedIndex != 1);
		document.getElementById("tbPartnerEGN"	).disabled = (document.getElementById("ddFamilyStatus").selectedIndex != 1);
		document.getElementById("tbPartnerPhone").disabled = (document.getElementById("ddFamilyStatus").selectedIndex != 1);
		if (document.getElementById("ddFamilyStatus").selectedIndex != 1)
		{
			document.getElementById("tbPartnerName"	).value = "";
			document.getElementById("tbPartnerEGN"	).value = "";
			document.getElementById("tbPartnerPhone").value = "";
		}
	}
	
function onChangeLabourAgreement()
{
	if (document.getElementById("ddLabourAgreement").selectedIndex == 0)
	{
		document.getElementById("tbLabourAgreementYear").value = "";
		document.getElementById("tbLabourAgreementYear").disabled = true;
	}
	else if(document.getElementById("ddLabourAgreement").selectedIndex == 4)
	{
		document.getElementById("tbLabourAgreementYear").value = "";
		document.getElementById("tbLabourAgreementYear").disabled = true;
	}
	else
	{
		document.getElementById("tbLabourAgreementYear").disabled = false;
	}
}



// This function gets called when the end-user clicks on some date.
function selected(cal, date) {
  cal.sel.value = date; // just update the date in the input field.
  cal.callCloseHandler();
}

// And this gets called when the end-user clicks on the _selected_ date,
// or clicks on the "Close" button.  It just hides the calendar without
// destroying it.
function closeHandler(cal) {
  cal.hide();                        // hide the calendar
  
  // Revision on 2003.10.13
  if (null != cal.sel.onchange) cal.sel.onchange();
}

// This function shows the calendar under the element having the given id.
// It takes care of catching "mousedown" signals on document and hiding the
// calendar if the click was outside.
function showCalendar(id)
{
	//alert('hi');
  var el = document.getElementById(id);
  if(calendar != null)
  { // we already have some calendar created
    calendar.hide();                 // so we hide it first.
  }
  else
  {
  	Now = new Date();
  	
    // first-time call, create the calendar.
    var cal = new Calendar(true, null, selected, closeHandler);
    // cal.weekNumbers = false;
    cal.checkDisabled = check_myads;
    calendar = cal;                  // remember it in the global var
    cal.setRange(Now.getFullYear(), Now.getFullYear()+2);        // min/max year allowed.
    cal.create();
  }
  calendar.setDateFormat("dd.mm.y");    // set the specified date format
  calendar.parseDate(el.value);      // try to parse the text in field
  calendar.sel = el;                 // inform it what input field we use
  
  
  //calendar.showAtElement(el);        // show the calendar below it
  
  var p = Calendar.getAbsolutePos(el);
  calendar.showAt(p.x + el.offsetWidth - 200, p.y + el.offsetHeight);

  return false; 
}

function check_myads(nodw) {
	Now = new Date();
	
	iYear = Now.getFullYear(); 
	iMonth = Now.getMonth(); 
	iDay = Now.getDate();
	
	iaYear = nodw.getFullYear(); 
	iaMonth = nodw.getMonth(); 
	iaDay = nodw.getDate();
	
	vals = false;
	if (iYear == iaYear) {
		if (iMonth == iaMonth) {
			if (iaDay < iDay) { vals = true; } 
		}
		if (iaMonth<iMonth) {
			vals = true;
		}
	}
	if (iaYear>iYear) {
		vals = true;
	}
	
	return vals;
}



function CheckCyr(str2)
{
	var str = str2.toUpperCase();
	var l = str.length;
	var res = "";
	
	for (var k=0; k<l; k++)
	{
		var c = str.charAt(k);
		if(!(" "==c || (c>='А' && c<='Я')) )
			return false;
	}
	return true;
}
