	d=new Date();
	yearMax=d.getFullYear();	
	var lang="";
	var defaultYear= "";
	var startdate;
	var startCurrencyYear;		
	var startCurrencyMonth;	
	var startCurrencyDay;
	
	var fieldErrorMessages = new Array ();
	fieldErrorMessages[1]="Pole \"Dzień\" powinno zawierać 1 lub 2 cyfry'";
	fieldErrorMessages[2]="Pole \"Dzień\" powinno być liczbą z zakresu 1-31";
	fieldErrorMessages[3]="Pole \"Miesiąc\" powinno zawierać 1 lub 2 cyfry";
	fieldErrorMessages[4]="Pole \"Miesiąc\" powinno być liczbą z zakresu 1-12";
	fieldErrorMessages[5]="Pole \"Rok\" powinno składać się z 4 cyfr.";
	fieldErrorMessages[6]="Pole \"Dzień\" powinno być liczbą z zakresu 1-30.";
	fieldErrorMessages[7]="Pole \"Dzień\" powinno być liczbą z zakresu 1-28.";
	fieldErrorMessages[8]="Pole \"Dzień\" powinno być liczbą z zakresu 1-29.";
	fieldErrorMessages[9]="Pole \"Dzień\" powinno być liczbą z zakresu 1-31'";
	fieldErrorMessages[10]="To pole jest wymagane!";
	fieldErrorMessages[11]="";
	fieldErrorMessages[12]="Podana data powinna być z zakresu: "+startdate+" - "+d.getDate() + "." + (d.getMonth()+1) + "." +yearMax;
	var fieldErrorMessagesEN = new Array ();
	fieldErrorMessagesEN[1]="Field \"Day\" shall include 1 or 2 digits.";
	fieldErrorMessagesEN[2]="Field \"Day\" should contain a number within the range of 1-31.";
	fieldErrorMessagesEN[3]="Field \"Month\" shall include 1 or 2 digits.";
	fieldErrorMessagesEN[4]="Field \"Month\" should contain a number within the range of 1-12.";
	fieldErrorMessagesEN[5]="Field \"Year\" should include 4 digits.";
	fieldErrorMessagesEN[6]="Field \"Day\" should contain a number within the range of 1-30.";
	fieldErrorMessagesEN[7]="Field \"Day\" should contain a number within the range of 1-28.";
	fieldErrorMessagesEN[8]="Field \"Day\" should contain a number within the range of 1-29.";
	fieldErrorMessagesEN[9]="Field \"Day\" should contain a number within the range of 1-31.";
	fieldErrorMessagesEN[10]="This field is required!";
	fieldErrorMessagesEN[11]="";
	fieldErrorMessagesEN[12]="Provided date should be from range: "+startdate+" - "+d.getDate() + "." + (d.getMonth()+1) + "." +yearMax;
	var errorInPreviouslyFilledField = "False";
	var fieldNames = new Array ();
	fieldNames[0]='dateOfBirthDay';
	fieldNames[1]='dateOfBirthMonth';
	fieldNames[2]='dateOfBirthYear';
	
	var Months= new Array();
	Months[1]=31;
	Months[2]=28;
	Months[3]=31;
	Months[4]=30;
	Months[5]=31;
	Months[6]=30;
	Months[7]=31;
	Months[8]=31;
	Months[9]=30;
	Months[10]=31;
	Months[11]=30;
	Months[12]=31;
	
	
//function to block values which are not allowed
	function checkIfProperKeyValueWasPassed(e,whichPatternIsAllowed){
		// set event according to the browser 
		if(!e) e=window.event;
		// set proper object according to the browser
		if (!e.target) e.target=e.srcElement; 
		
		// set proper pattern to compare
		switch(whichPatternIsAllowed){
			case 1:
				patternString=/[^0-9]+/;
			
		}
		if (!((e.keyCode==37) || (e.keyCode==39) || (e.keyCode==8))){
			var fieldRefferingTo = document.getElementById (e.target.id);
			var fieldValue = Ltrim(fieldRefferingTo.value);
			var clearedString=fieldValue.replace(patternString,"");
			  if (clearedString!=fieldValue){ 
	                fieldRefferingTo.value=clearedString; 
	        } 

		}
	}
	

	//function to check if field is empty
	function checkIfEmpty (fieldValue){
		return fieldValue.length
	}
	
	// check if pattern is proper according to regular expressions
	function checkValidationPattern (patternToUse, fieldValueUsed) {
		validationPatternStatus=1;
		if (patternToUse.test(fieldValueUsed)==true) validationPatternStatus=0
		return validationPatternStatus
	}
	
	//reset birthday date pattern
	function resetPatternBirthday(){
		if (document.getElementById("dateOfBirthDay").value.length==0)	document.getElementById("dateOfBirthDay").value="DD";
		if (document.getElementById("dateOfBirthMonth").value.length==0) document.getElementById("dateOfBirthMonth").value="MM";
		if (document.getElementById("dateOfBirthYear").value.length==0)	document.getElementById("dateOfBirthYear").value=defaultYear;				 
	}
	
	// function check all neccessary options for specific field and return errorcode
	function checkAllNecessaryValidations (fieldValue, fieldType){
		var errorCodeReturned=-1;
		// make necessary checks according to the field type
		switch (fieldType){
	
			case "dateOfBirthDay":
				patternString=/^[0-9]{1,2}$/;
				if (checkIfEmpty(fieldValue)>0){
					if (checkValidationPattern(patternString,fieldValue)!=0){
						errorCodeReturned=1;
					}
					else{
						var monthValue=document.getElementById('dateOfBirthMonth').value;
						var yearValue=document.getElementById('dateOfBirthYear').value;
						if ((monthValue!='')&&(monthValue!='MM')) monthValue=parseInt(monthValue,10);
						if ((yearValue!='')&&(yearValue!='RRRR')) yearValue=parseInt(yearValue,10);
						if (monthValue!=''){
							if (monthValue!=2){
								monthDays=Months[monthValue]
							}
							else{
								if (yearValue!=''){
									if (!(((yearValue % 4 == 0) && (yearValue % 100 != 0))||(yearValue % 400 == 0))){
										monthDays=28;
									}
									else{
										monthDays=29;
									}
								}
								else{
									monthDays=29;
								}
							}
						}
						else{
							monthDays=31;
						}
						if	(monthDays==31){
							if(checkIfFromProperRange(fieldValue,1,31)>0) errorCodeReturned=9;
						}
						else if	(monthDays==30){
							if(checkIfFromProperRange(fieldValue,1,30)>0) errorCodeReturned=6;
						}
						else if	(monthDays==28){
							if(checkIfFromProperRange(fieldValue,1,28)>0) errorCodeReturned=7;
						}
						else{
							if(checkIfFromProperRange(fieldValue,1,29)>0) errorCodeReturned=8;
						}
					}
				}
				break
			case "dateOfBirthMonth":
				patternString=/^[0-9]{1,2}$/;
				if (checkIfEmpty(fieldValue)>0){
					if (checkValidationPattern(patternString,fieldValue)!=0){
						errorCodeReturned=3;
					}
					else{
							if (checkIfFromProperRange(fieldValue,1,12)>0) errorCodeReturned=4;
					}
				}
				break
			case "dateOfBirthYear":
				patternString=/^[0-9]{4}$/;
				if (checkIfEmpty(fieldValue)>0){
					if (checkValidationPattern(patternString,fieldValue)!=0){
						errorCodeReturned=5;
					}
				}
				break

				

		}
		return errorCodeReturned
		
	}
		
	//function to check if value is from proper range
	function checkIfFromProperRange(fieldValuePassed,minPassed,maxPassed){
		//if ((fieldValuePassed.toString()).substr(0,1)=='0') (fieldValuePassed.toString()).substr(1,1);
		var valueToCheck=parseInt(fieldValuePassed,10);
		if (valueToCheck<minPassed) {
			return 1	
		}
		else{
			if (valueToCheck>maxPassed){
				return 2
			}
			else{
			return -1	
			}
		}
	}
	
	//make validation
	function checkValidation (fieldName){
		
		//trim if necessary
		var fieldValue = document.getElementById ('contactForm').elements[fieldName].value;
		var fieldValue = Trim(fieldValue);			
		document.getElementById('contactForm').elements[fieldName].value=fieldValue;
		
		if (fieldName.indexOf('dateOfBirth')!=-1){
			
			//zamien wszystkie DD,MM,RRRR na puste
			dateOfBirthField1=document.getElementById('dateOfBirthDay');
			dateOfBirthField2=document.getElementById('dateOfBirthMonth');
			dateOfBirthField3=document.getElementById('dateOfBirthYear');
			if (dateOfBirthField1.value=="DD") document.getElementById('dateOfBirthDay').value="";
			if (dateOfBirthField2.value=="MM") document.getElementById('dateOfBirthMonth').value="";
			if (dateOfBirthField3.value==defaultYear) document.getElementById('dateOfBirthYear').value="";
					
			//zwaliduj wszystkie pola
			fieldValue1=document.getElementById('dateOfBirthDay').value;
			fieldValue2=document.getElementById('dateOfBirthMonth').value;
			fieldValue3=document.getElementById('dateOfBirthYear').value;
					
			var generalMessageToSet=""
			dateOfBirthFieldStatus1=checkAllNecessaryValidations(fieldValue1, 'dateOfBirthDay');
			dateOfBirthFieldStatus2=checkAllNecessaryValidations(fieldValue2, 'dateOfBirthMonth');
			dateOfBirthFieldStatus3=checkAllNecessaryValidations(fieldValue3, 'dateOfBirthYear');
					
			if (dateOfBirthFieldStatus1!=-1){
				if(lang=='PL'){
					generalMessageToSet=generalMessageToSet+" "+fieldErrorMessages[dateOfBirthFieldStatus1];
				}else{
					generalMessageToSet=generalMessageToSet+" "+fieldErrorMessagesEN[dateOfBirthFieldStatus1];
				}
				dateOfBirthField1.style.backgroundColor='#ffe4ec';
			}
			else{
				if (dateOfBirthField1.value.length==1) dateOfBirthField1.value="0"+dateOfBirthField1.value;
				dateOfBirthField1.style.backgroundColor='#ffffff';
			}
			if (dateOfBirthFieldStatus2!=-1){
				if(lang=='PL'){
					generalMessageToSet=generalMessageToSet+" "+fieldErrorMessages[dateOfBirthFieldStatus2];
				}else{
					generalMessageToSet=generalMessageToSet+" "+fieldErrorMessagesEN[dateOfBirthFieldStatus2];
				}
				dateOfBirthField2.style.backgroundColor='#ffe4ec';
			}
			else{
				if (dateOfBirthField2.value.length==1) dateOfBirthField2.value="0"+dateOfBirthField2.value;
				dateOfBirthField2.style.backgroundColor='#ffffff';
			}
			if (dateOfBirthFieldStatus3!=-1){
				if(lang=='PL'){
					generalMessageToSet=generalMessageToSet+" "+fieldErrorMessages[dateOfBirthFieldStatus3];
				}else{
					generalMessageToSet=generalMessageToSet+" "+fieldErrorMessagesEN[dateOfBirthFieldStatus3];
				}
				dateOfBirthField3.style.backgroundColor='#ffe4ec';
			}
			else{
				dateOfBirthField3.style.backgroundColor='#ffffff';
			}
					
			//sprawdz czy wiadomosc generalna jest dłuższa niż 0 - ustaw ją
			if (generalMessageToSet.length>0){
				
				errorInPreviouslyFilledField = "True";
				document.getElementById ('dateOfBirthError').innerHTML="<p>"+generalMessageToSet+"</p>";
				showHideBoth('dateOfBirth','show');
			}
			else {
				showHideBoth('dateOfBirth','hide');	
			}
					
			//zamień wszystkie puste na DD, MM, RR
			resetPatternBirthday();
		}
		
		
	}
	
	// show/hide exclamation
	function showHideExclamation (whichField,what){
		if (what=='show'){
			document.getElementById (whichField+'Exclamation').style.display='inline';
			document.getElementById (whichField+'Exclamation').style.visibility='visible';	
		}	
		else {
			document.getElementById (whichField+'Exclamation').style.display='none';
			document.getElementById (whichField+'Exclamation').style.visibility='hidden';	
		}	
	}
	
	// show/hide exclamation
	function showHideError (whichField,what){
		if (what=='show'){
			document.getElementById (whichField+'Error').style.display='block';
			document.getElementById (whichField+'Error').style.visibility='visible';	
		}	
		else {
	
			document.getElementById (whichField+'Error').style.display='none';
			document.getElementById (whichField+'Error').style.visibility='hidden';	
		}	
	}
	
	//show/hide exclamation and error
	function showHideBoth(whichField,what){
		showHideExclamation (whichField,what);
		showHideError (whichField,what);
	}
	
	//clear spaces from passed text
	function Trim(str, chars) {
		return Ltrim(Rtrim(str, chars), chars);
	}
	
	// clear spaces from left side
	function Ltrim(str, chars) {
		chars = chars || "\\s";
		return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
	}
	// clear spaces from right side
	function Rtrim(str, chars) {
		chars = chars || "\\s";
		return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
	}
	
	// function to set proper hint in assistant box
	function setHint(fieldName) {
		
		//  check which field was passed
		for (counter in fieldNames) {
			if (fieldNames[counter]==fieldName) {
				fieldNumber=counter;
			}
		}
		
		fieldCheck= SetFieldCheck(fieldName);
		
		if (document.getElementById (fieldCheck+'Exclamation')){
			if (document.getElementById (fieldCheck+'Exclamation').style.display!='block') {
				document.getElementById (fieldName).style.backgroundColor='#E4EDFC'; // set color if there were en error, you can't  set it in the style
			}
		}
	}
	
	// function to set proper id value for error and exclamation - problem occurs for telephone fields with extention number (1 error field - 2 telephone fields) or dates
	function SetFieldCheck(whichField){

		//if telephone number show proper error field
		if ((whichField.indexOf('homeTelephoneSmall')!=-1) || (whichField.indexOf('officeTelephoneSmall')!=-1)) { // check if this was short field 
			returnValue = whichField.substring (0,whichField.length-5);
		}
		else {
			returnValue=whichField;
		}
		
		// if date of birth show proper error field and reset pattern	
		if (whichField.indexOf('dateOfBirth')!=-1) {
			returnValue="dateOfBirth";	
			var comparison=document.getElementById(whichField);
			if((comparison.value=="DD") || (comparison.value=="MM") || (comparison.value==defaultYear)){
			comparison.value=""
			}
		}
		
	

		return returnValue
	}
	
	
	//submit check	
	function submitCheck(){
		
		generalErrorStatus=0;
		checkValidation('dateOfBirthDay');
		//check validation for exact birthdate if customer is adult
		if (document.getElementById('dateOfBirthError').style.display=='none'){	
			dateOfBirthField1=document.getElementById('dateOfBirthDay');
			dateOfBirthField2=document.getElementById('dateOfBirthMonth');
			dateOfBirthField3=document.getElementById('dateOfBirthYear');
			var isItWorthToCheck=true;
			if (dateOfBirthField1.value=="DD") isItWorthToCheck=false;
			if (dateOfBirthField2.value=="MM") isItWorthToCheck=false;
			if (dateOfBirthField3.value==defaultYear) isItWorthToCheck=false;	
			//validate all the fields
			fieldValue1=document.getElementById('dateOfBirthDay').value;
			fieldValue2=document.getElementById('dateOfBirthMonth').value;
			fieldValue3=document.getElementById('dateOfBirthYear').value;
			if (isItWorthToCheck) {
				daysCustomer=parseInt(fieldValue1,10);
				monthsCustomer=parseInt(fieldValue2,10)-1; // months in date class are counted from 0
				yearsCustomer=parseInt(fieldValue3,10);
				var currentTime = new Date();
				dayCompare=currentTime.getDate();
				monthCompare=currentTime.getMonth();
				yearCompare=currentTime.getFullYear()-18;
				//check if it is  special year and 29th of February and substract one
				if (!(((yearCompare % 4 == 0) && (yearCompare % 100 != 0))||(yearCompare % 400 == 0))){
					if ((monthCompare==1) &&(dayCompare==29)){
						DayNow=28;
					}
				}
				
				
				
			}
			resetPatternBirthday();
		}
		
		// check if date of birth empty	
		if (document.getElementById('dateOfBirthError').style.display=='none'){
			dateOfBirthField1=document.getElementById('dateOfBirthDay');
			dateOfBirthField2=document.getElementById('dateOfBirthMonth');
			dateOfBirthField3=document.getElementById('dateOfBirthYear');
						
			if (dateOfBirthField1.value=="DD") document.getElementById('dateOfBirthDay').value="";
			if (dateOfBirthField2.value=="MM") document.getElementById('dateOfBirthMonth').value="";
			if (dateOfBirthField3.value==defaultYear) document.getElementById('dateOfBirthYear').value="";
				
			
			//zwaliduj wszystkie pola
			fieldValue1=document.getElementById('dateOfBirthDay').value;
			fieldValue2=document.getElementById('dateOfBirthMonth').value;
			fieldValue3=document.getElementById('dateOfBirthYear').value;
			
			if ((fieldValue1=="")||(fieldValue2=="")||(fieldValue3=="")){
				if(lang=='PL'){
					document.getElementById ('dateOfBirthError').innerHTML="<p>"+fieldErrorMessages[10]+"</p>";
				}else{
					document.getElementById ('dateOfBirthError').innerHTML="<p>"+fieldErrorMessagesEN[10]+"</p>";
				}
				showHideBoth('dateOfBirth','show');
				generalErrorStatus=1;
			}else{
				daysCustomer=parseInt(fieldValue1,10);
				monthsCustomer=parseInt(fieldValue2,10)-1; // months in date class are counted from 0
				yearsCustomer=parseInt(fieldValue3,10);
				
				var currentTime = new Date();
				dayCompare=currentTime.getDate();
				monthCompare=currentTime.getMonth();
				yearCompare=currentTime.getFullYear();
				var dateOfBirthFlag=true;
				if (yearsCustomer>yearCompare){// definetely from the past
					dateOfBirthFlag=false;
				}else if (yearsCustomer==yearCompare){// validate months when years equal
					
					if (monthsCustomer>monthCompare){
						dateOfBirthFlag=false;
					}else if (monthsCustomer==monthCompare){//validate days when months equal
						
						if (daysCustomer>dayCompare){ 
							dateOfBirthFlag=false;
						}
						else{
							dateOfBirthFlag=true;
						}
					}
				}
				if (dateOfBirthFlag){
					startCurrencyYear= startdate.substring(6, 10);
					startCurrencyMonth= parseInt(startdate.substring(3, 5),10);
					startCurrencyDay= parseInt(startdate.substring(0, 2),10);
					daysCustomer=parseInt(fieldValue1,10);
					monthsCustomer=parseInt(fieldValue2,10); // months in date class are counted from 0
					yearsCustomer=parseInt(fieldValue3,10);
					if (yearsCustomer<startCurrencyYear){// definetely from the past
						dateOfBirthFlag=false;
					}else if (yearsCustomer == startCurrencyYear){// validate months when years equal
						if (monthsCustomer<startCurrencyMonth){
							dateOfBirthFlag=false;
						}else if (monthsCustomer == startCurrencyMonth){//validate days when months equal
							if (daysCustomer<startCurrencyDay){ 
								dateOfBirthFlag=false;
							}
							else{
								dateOfBirthFlag=true;
							}
						}
					}				
				}
				
				
				if (!dateOfBirthFlag){
					if(lang=='PL'){
						document.getElementById ('dateOfBirthError').innerHTML="<p>"+fieldErrorMessages[12]+"</p>";
					}else{
						document.getElementById ('dateOfBirthError').innerHTML="<p>"+fieldErrorMessagesEN[12]+"</p>";
					}
					showHideBoth('dateOfBirth','show');
					generalErrorStatus=1;
				}
		}
			resetPatternBirthday();
		}
		//check if error occured
		if (document.getElementById('dateOfBirthError').style.display=='block')generalErrorStatus=1;
		
		if (generalErrorStatus==0){
			return true
		}
		else {
			return false
		}
		
	}
