function isValue(value){
    var flag = false;
    if(value && value != null && value != ''){
        flag  = true;
    }
    return flag;
}

function validateOFEAccount(value){
    var flag = false;
    if( value && value != null ) {
        var OFE_ACC_PATTERN = /^([0-9]){9}$/;
        flag = OFE_ACC_PATTERN.test( value );
    }
    return flag;
}

function validateCitySyntax(value){
    var flag = false;
    if( value && value != null ) {
        var CITY_PATTERN = /^([A-ZĘÓĄŚŁŻŹĆŃ]([A-ZĘÓĄŚŁŻŹĆŃ \-])*[A-ZĘÓĄŚŁŻŹĆŃ])$/;
        flag = CITY_PATTERN.test( value.toUpperCase() );
    }
    return flag;
}

function validateCitySyntaxOpt(value){
    var flag = false;
    if( value && value != null ) {
        flag = validateCitySyntax( value );
    } else {
        flag = true;
    }
    return flag;
}

function validateBDatePesel(params){
	var validationOK = true;
	try{
		var pesel = getValueQuestion(params[0]);
		var pm = Number(pesel.substr(2,2));
		var py = pesel.substr(0,2);
		var  n = Number(pesel.substr(2,1));
		var  x = parseInt(n/2) * 20;
		var  m = pm - x;
		var  y = '-1';
		switch(x){
			case 80: y='18'; break;
			case  0: y='19'; break;
			case 20: y='20'; break;
			case 40: y='21'; break;
			case 60: y='22'; break;
		}
		y += py;
		m = (m < 10) ? ('0'+m) : m ;
		var pDate = '' + pesel.substr(4,2) + m + y;
		var bDate = getValueQuestion(params[1]);
		bDate=bDate.replace('-','').replace('-','');
		if(Number(pDate) != Number(bDate)){
			validationOK = false;
		}
	}catch(e){
		validationOK = false;
	}
	return validationOK;
}

function validateProductionYearVsRegistrationDate(params) {
    var validationOk = false;
    try {
      var registrationDate = getValueQuestion(params[0]);
      var productionYear = getValueQuestion(params[1]);

      if(isValue(productionYear) && isValue(registrationDate) && (registrationDate.length == 10)) {
          var registrationYear = generateDate(registrationDate).getFullYear();
          if(registrationYear >= productionYear) {
              validationOk = true;
          }
      } else {
          validationOk = true;
      }
    } catch(e) {
        // NOP
    }
    return validationOk;
}

function validateP166dependant(params) {
    var validationOK = false;

    try{
        var personsCountValue = getValueQuestion(params[1]);

        if(isValue(personsCountValue)) {
            var personsCountNumberValue = Number(personsCountValue);
            var fieldNumberValue = Number(getValueQuestion(params[0]));
            var secondDependantNumberValue = Number(getValueQuestion(params[2]));
            var thirdDependantNumberValue = Number(getValueQuestion(params[3]));

            if(personsCountNumberValue == (fieldNumberValue + secondDependantNumberValue + thirdDependantNumberValue)) {
                validationOK = true;
            }
        } else {
            validationOK = true;
        }
    }catch(e) {}
    return validationOK;
}

function generateDate(value) {
    var date = null;
    if(value != null && '' != value) {
        var splitter = "-";
        var split = value.split(splitter);
        if (split && split != null && split.length == 3) {
            var year = Number(split[2]);
            var month = Number(split[1]);
            var day = Number(split[0]);

            date = new Date();
            date.setFullYear(year, month-1, day);
        }
    }
    return date;
}

function validateBeginDateTrip(params) {
    var validationOK = false;
    try{
        var fieldNumberValue = getValueQuestion(params[0]);
        if(isValue(fieldNumberValue)) {
            var isTeritory = ('NIE' == getValueQuestion(params[1]));

            var currentDate = new Date();
            var chosenDate = generateDate(fieldNumberValue);
            var endDate = generateDate(getValueQuestion(params[2]));

            if(isTeritory) {
                if(chosenDate > currentDate) {
                    validationOK = true;
                } else {
                    addErrorParameter('Początek ochrony ubezpieczeniowej musi być późniejszy niż 1 dzień');
                }
            } else {
                var fiveDaysLater = new Date();
                fiveDaysLater.setDate(currentDate.getDate() + 4);

                if(chosenDate > fiveDaysLater) {
                    validationOK = true;
                } else {
                    addErrorParameter('Początek ochrony ubezpieczeniowej musi być późniejszy niż 5 dni');
                }
            }

            if(chosenDate != null && endDate != null && chosenDate > endDate) {
                addErrorParameter('Data początku ubezpieczenia musi być mniejsza lub równa od daty końca ubezpieczenia');
                validationOK = false;
            }
        } else {
            validationOK = true;
        }
    }catch(e){}
    return validationOK;
}

function validateBeginDateTripInsidePol(params) {
    var validationOK = false;
    try{
        var fieldNumberValue = getValueQuestion(params[0]);
        if(isValue(fieldNumberValue)) {
            var isTeritory = ('TAK' == getValueQuestion(params[1]));

            var currentDate = new Date();
            var chosenDate = generateDate(fieldNumberValue);
            var endDate = generateDate(getValueQuestion(params[2]));

            if(isTeritory) {
                if(chosenDate > currentDate) {
                    validationOK = true;
                } else {
                    addErrorParameter('Początek ochrony ubezpieczeniowej musi być późniejszy niż 1 dzień');
                }
            } else {
                var fiveDaysLater = new Date();
                fiveDaysLater.setDate(currentDate.getDate() + 4);

                if(chosenDate > fiveDaysLater) {
                    validationOK = true;
                } else {
                    addErrorParameter('Początek ochrony ubezpieczeniowej musi być późniejszy niż 5 dni');
                }
            }

            if(chosenDate != null && endDate != null && chosenDate > endDate) {
                addErrorParameter('Data początku ubezpieczenia musi być mniejsza lub równa od daty końca ubezpieczenia');
                validationOK = false;
            }
        } else {
            validationOK = true;
        }
    }catch(e){}
    return validationOK;
}

function generateDateYearAfter(value) {
    var date = null;
    if(value != null && '' != value) {
        var splitter = "-";
        var split = value.split(splitter);
        if (split && split != null && split.length == 3) {
            var year = Number(split[2]);
            var month = Number(split[1]);
            var day = Number(split[0]);

            date = new Date();
            date.setFullYear(year+1, month-1, day);
            date.setDate(date.getDate()-1);
        }
    }
    return date;
}

function validateEndDateTrip(params) {
    var validationOK = false;
    var fieldValue = getValueQuestion(params[0]);
    var startDateValue = getValueQuestion(params[1]);

    if(isValue(fieldValue) && isValue(startDateValue)) {
        var chosenDate = generateDate(fieldValue);
        var startDate = generateDate(startDateValue);
            var dateYearAfter = generateDateYearAfter(startDateValue);

        if(chosenDate != null && startDate != null) {
                if(chosenDate >= startDate && chosenDate <= dateYearAfter) {
        			validationOK = true;
    			}
    	}
    }else{
    		validationOK = true;
    	}
    return validationOK;
}

function isValueAndIsNotZero(value){
    var flag = false;
    if( isValue(value) && value != '0' ){
        flag  = true;
    }
    return flag;
}

function isValueAndLengthLess15(value){
    var flag = false;
    if( value!=null && value.length<15 ){
        flag  = true;
    }
    return flag;
}

function isValueAndLengthLess16(value){
    var flag = false;
    if( value!=null && value.length<16 ){
        flag  = true;
    }
    return flag;
}

function isValueAndLengthEqual9(value){
    var flag = false;
    if( value!=null && value.length==9 ){
        flag  = true;
    }
    return flag;
}

function isValueAndLengthLess800(value){
    var flag = false;
    if( value!=null && value!="" && value.length<800 ){
        flag  = true;
    }
    return flag;
}
function isLengthLess800(value){
    var flag = false;
    if( value!=null && value.length<800 ){
        flag  = true;
    }else if(value==null || value==""){
    	flag  = true;
    }
    return flag;
}

function isValueAndLengthLess2000(value){
    var flag = false;
    if( value!=null && value!="" && value.length<2000 ){
        flag  = true;
    }
    return flag;
}
function isLengthLess2000(value){
    var flag = false;
    if( value!=null && value.length<2000 ){
        flag  = true;
    }else if(value==null || value==""){
    	flag  = true;
    }
    return flag;
}
function isLengthLess390(value){
    var flag = false;
    if( value!=null && value.length<390 ){
        flag  = true;
    }else if(value==null || value==""){
    	flag  = true;
    }
    return flag;
}

function isValueAndLengthLess1000(value){
    var flag = false;
    if( value!=null && value!="" && value.length<1000 ){
        flag  = true;
    }
    return flag;
}
function isLengthLess1000(value){
    var flag = false;
    if( value!=null && value.length<1000 ){
        flag  = true;
    }else if(value==null || value==""){
    	flag  = true;
    }
    return flag;
}

function isValueAndLengthMoreThan1(value){
    var flag = false;
    if( value!=null && value.length>1 ){
        flag  = true;
    }
    return flag;
}

function isNotEmptyNumber(value) {
    var flag = false;
    if(value.match(/^\d{3,4}$/)) {
        flag = true;
    }
    return flag;
}

function isNumberOrDecimalNumber(value) {
    var flag = false;
    if(value.match(/^\d{1,}[,]?\d{1,}$/)) {
        flag = true;
    }
    return flag;
}

function isNumberOrDecimalNumberMore999Less10000001(value) {
    var flag = false;
    if(value.match(/^\d{1,}[,]?\d{1,}$/)) {
        if(value>999 && value<10000001) {
			flag = true;
		}
    }
    return flag;
}

function isOnlyNotEmptyNumber(value) {
    var flag = false;
    if(value.match(/^\d{1,}$/)) {
        flag = true;
    }
    return flag;
}

function checkPostalCode(value){
    var flag = false;
    if(value && value != null && value != ''){
        if(value.match(/^\d{2}[-]\d{3}/)){
            flag = true;
        }
    }
    return flag;
}

function checkPostalCodeOpt(value){
    var flag = false;
    if(value && value != null && value != ''){
        if(value.match(/^\d{2}[-]\d{3}/)){
            flag = true;
        }
    }else{
    	flag = true;
    }
    return flag;
}

function checkPostFieldValue(value) {
    flag = false;
    if(value && value!=null && value!='' && value!='nieprawid\u0142owy kod pocztowy') {
        flag = true;
    }
    return flag;
}

function checkPostFieldValueOpt(value) {
    flag = false;
    if(value!='nieprawid\u0142owy kod pocztowy') {
        flag = true;
    }
    return flag;
}



function checkPesel(value){
    var tablica = new Array(1, 3, 7, 9, 1, 3, 7, 9, 1, 3);
    var dateMod = 20;
    var PESEL_PATTERN = /^([0-9]){11}$/;
    var flag = false;
    if(value && PESEL_PATTERN.test( value )){
        var sum = 0;

        for(var i = 0; i < 10; i++){
            sum += tablica[i] * value.charAt(i);
        }
        sum += 1 * value.charAt(i);
        if((sum % 10) == 0){
            flag = true;
        }

        if(flag) {
            flag = false
            var first = value.substr(0,2);
            var second = value.substr(2,2);
            var third = value.substr(4,2);

            if(second.charAt(0)=='0') {
                second = second.substr(1,1);
            }
            if(third.charAt(0)=='0') {
                third = third.substr(1,1);
            }

            var locNumDays = Array (31,0,31,30,31,30,31,31,30,31,30,31);

            for(ii = 0; ii < 100; ii += 20) {
                var endDate;
                var tempIi = 0;
                if(ii==0) {
                    tempIi = 19;
                } else if(ii==20) {
                    tempIi = ii;
                } else if(ii==40) {
                    tempIi = 21;
                } else if(ii==60) {
                    tempIi = 22;
                } else if(ii == 80) {
                    tempIi = 18;
                }

                yearSelected = '' + tempIi + '' + first;
                monthSelected = second - 1 - ii;

                if(monthSelected>=0 && monthSelected<12) {
                    if (monthSelected==1)
                    {
                        endDate	= new Date (yearSelected,monthSelected+1,1);
                        endDate	= new Date (endDate	- (24*60*60*1000));
                        numDaysInMonth = endDate.getDate()
                    }
                    else
                    {
                        numDaysInMonth = locNumDays[monthSelected];
                    }
                    if(third<=numDaysInMonth) {
                        flag = true;
                        break;
                    }
                }
            }

        }
    }
    return flag;
}

function checkPeselOpt(value){

    var flag = false;
    if(value == null || value == ''){
       flag = true;
    }else{
    	flag = checkPesel(value);
    }
    return flag;
}

function dateNotBeforeToday(value) {
    var correctDate = false;
    var PATTERN = /^[0-9]{2}-[0-9]{2}-[0-9]{4}$/;

	if (value && value != null && PATTERN.test(value)) {
    var splitter = "-";
    var split = value.split(splitter);
    if (split && split != null && split.length == 3) {
    	var year = Number(split[2]);
    	var month = Number(split[1]);
    	var day = Number(split[0]);
    	correctDate = true;
    	if ( year < 1900 || year > 2100 || month < 1 || month > 12  || day < 1 || day > 31) {
            correctDate = false;
    	}
    	if ( correctDate == true ) {
            switch ( month ) {
                case 4:
                case 6:
                case 9:
                case 11:
                    if ( day == 31 ){
                        correctDate = false;
                    }
                    break;
                case 2:
                    if ( day == 30 ){
                        correctDate = false;
                    }
                    if ( day == 29 && year % 4 != 0 ) {
                        correctDate = false;
                    }
                    if ( day == 29 && year % 100 == 0 && year % 400 != 0){
                        correctDate = false;
                    }
            }
    	}

    	if ( correctDate == true ) {
            correctDate = false;


            var currentDate = new Date();


            var maxDate = new Date();
            maxDate.setDate(maxDate.getDate() + 30);

	         var givenDate = new Date();
            givenDate.setFullYear(year, month-1, day);

            if(currentDate <= givenDate && givenDate <= maxDate) {
                correctDate = true;
            }
    	}
    	}
    }
    return correctDate;
}

function dateNotBeforeTheNextDayAndNotAfter30Days(value) {
    var correctDate = false;
    var PATTERN = /^[0-9]{2}-[0-9]{2}-[0-9]{4}$/;

	if (value && value != null && PATTERN.test(value)) {
		var splitter = "-";
		var split = value.split(splitter);
		if (split && split != null && split.length == 3) {
			var year = Number(split[2]);
			var month = Number(split[1]);
			var day = Number(split[0]);
			correctDate = true;
			if (year < 1900 || year > 2100 || month < 1 || month > 12 || day < 1 || day > 31) {
				correctDate = false;
			}
			if (correctDate == true) {
				switch (month) {
					case 4:
					case 6:
					case 9:
					case 11:
						if (day == 31) {
							correctDate = false;
						}
						break;
					case 2:
						if (day == 30) {
							correctDate = false;
						}
						if (day == 29 && year % 4 != 0) {
							correctDate = false;
						}
						if (day == 29 && year % 100 == 0 && year % 400 != 0) {
							correctDate = false;
						}
				}
			}

			if (correctDate == true) {
				correctDate = false;

				var nextDayDateDate = new Date();
				nextDayDateDate.setDate(nextDayDateDate.getDate() + 1);

				var maxDate = new Date();
				maxDate.setDate(maxDate.getDate() + 30);

				var givenDate = new Date();
				givenDate.setFullYear(year, month - 1, day);

				if (nextDayDateDate <= givenDate && givenDate <= maxDate) {
					correctDate = true;
				}
			}
		}
	}
    return correctDate;
}

function dateNotBeforeTheNextDay(value) {
    var correctDate = false;
    var PATTERN = /^[0-9]{2}-[0-9]{2}-[0-9]{4}$/;

    if (value && value != null && PATTERN.test(value)) {
    var splitter = "-";
    var split = value.split(splitter);
    if (split && split != null && split.length == 3) {
    	var year = Number(split[2]);
    	var month = Number(split[1]);
    	var day = Number(split[0]);
    	correctDate = true;
    	if ( year < 1900 || year > 2100 || month < 1 || month > 12  || day < 1 || day > 31) {
            correctDate = false;
    	}
    	if ( correctDate == true ) {
            switch ( month ) {
                case 4:
                case 6:
                case 9:
                case 11:
                    if ( day == 31 ){
                        correctDate = false;
                    }
                    break;
                case 2:
                    if ( day == 30 ){
                        correctDate = false;
                    }
                    if ( day == 29 && year % 4 != 0 ) {
                        correctDate = false;
                    }
                    if ( day == 29 && year % 100 == 0 && year % 400 != 0){
                        correctDate = false;
                    }
            }
    	}

    	if ( correctDate == true ) {
            correctDate = false;

            var nextDayDateDate = new Date();
            nextDayDateDate.setDate(nextDayDateDate.getDate() + 1);

            var maxDate = new Date();
            maxDate.setDate(maxDate.getDate() + 60);

	        var givenDate = new Date();
            givenDate.setFullYear(year, month-1, day);

            if(nextDayDateDate <= givenDate && givenDate <= maxDate) {
                correctDate = true;
            }

    	}
     }
    }
    return correctDate;
}

function upTo6digits(value) {
    var ok = false;
    try{
        var digits = Number(value);

        if(value.length > 0 && digits >= 0 && digits <= 999999) {
            ok = true;
        }
    }catch(e) {
        // celowe puste cialo
    }
    return ok;
}

function chceckDate(value){
    var flag = false;
	var PATTERN = /^[0-9]{2}-[0-9]{2}-[0-9]{4}$/;

	if(value && value != null && PATTERN.test(value)) {
    var mies1 = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
    var mies2 = new Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
    var splitter = "-";
    var split = value.split(splitter);

    if (split && split != null && split.length == 3) {
        var dzien = split[0];
        var mies = split[1];
        var rok = split[2];
        if (rok && rok >= 1900 && rok <= 2100) {
            if (mies && mies > 0 && mies < 13) {
                if (rok % 4 == 0) {
                    if (dzien > 0 && dzien <= mies2[mies - 1]) {
                        flag = true;
                    }
                }
                else {
                    if (dzien > 0 && dzien <= mies1[mies - 1]) {
                        flag = true;
                    }
                }
            }
        }
        }
    }
    return flag;

}

function validateEmail( value ){
    var result = false;
    var PATTERN = /^[a-zA-Z0-9]+(([\.\-_][a-zA-Z0-9])*[a-zA-Z0-9]*)*\@[a-zA-Z0-9]((\.)?[a-zA-Z0-9\-]*[a-zA-Z0-9])*(\.[a-zA-Z0-9]{2,4})+$/;
    if(value && value != null && PATTERN.test(value)) {
        result = true;
    }
    return result;
}

function validateEmailOpt( value ){
    var result = false;
    if(value == null || value=="") {
        result = true;
    }else{
    	result = validateEmail( value );
    }
    return result;
}

function isDateAfterCurrent(value) {
    var flag = false;
	var PATTERN = /^[0-9]{2}-[0-9]{2}-[0-9]{4}$/;

	if (value && value != null && PATTERN.test(value)) {
    var splitter = "-";

    var mies1 = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
    var mies2 = new Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );

    var split = value.split(splitter);

    if (split && split != null && split.length == 3) {
        var dzien = split[0];
        var mies = split[1];
        var rok = split[2];
        if (rok && rok >= 1900 && rok <= 2100) {
            if (mies && mies > 0 && mies < 13) {
                if (rok % 4 == 0) {
                    if (dzien > 0 && dzien <= mies2[mies - 1]) {
                        flag = true;
                    }
                }
                else {
                    if (dzien > 0 && dzien <= mies1[mies - 1]) {
                        flag = true;
                    }
                }
            }
        }

        if (flag) {
            currentDate = new Date();
            inputDate = new Date();
            inputDate.setFullYear(rok, mies - 1, dzien);
            if (currentDate > inputDate) {
                flag = false;
            }
        }
    }
    }
    return flag;
}

function isDateAfterCurrentOpt(value) {
	var flag = false;
	if(value == null || "" == value){
		flag= true;
	}else{
		flag = isDateAfterCurrent(value)
	}
	return flag;
}

function isDateBeforeCurrent(value) {
    var flag = false;
	var PATTERN = /^[0-9]{2}-[0-9]{2}-[0-9]{4}$/;

	if (value && value != null && PATTERN.test(value)) {
    var mies1 = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
    var mies2 = new Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
	var splitter = "-";

    var split = value.split(splitter);

    if (split && split != null && split.length == 3) {
        var dzien = split[0];
        var mies = split[1];
        var rok = split[2];
        if (rok && rok >= 1900 && rok <= 2100) {
            if (mies && mies > 0 && mies < 13) {
                if (rok % 4 == 0) {
                    if (dzien > 0 && dzien <= mies2[mies - 1]) {
                        flag = true;
                    }
                }
                else {
                    if (dzien > 0 && dzien <= mies1[mies - 1]) {
                        flag = true;
                    }
                }
            }
        }

        if (flag) {
            currentDate = new Date();
            inputDate = new Date();
            inputDate.setFullYear(rok, mies - 1, dzien);
            if (currentDate <= inputDate) {
                flag = false;
            }
        }
    }
    }
    return flag;
}

function isDateBeforeAndCurrent(value) {
    var flag = false;
	var PATTERN = /^[0-9]{2}-[0-9]{2}-[0-9]{4}$/;

	if (value && value != null && PATTERN.test(value)) {
    var mies1 = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
    var mies2 = new Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
	var splitter = "-";

    var split = value.split(splitter);

    if (split && split != null && split.length == 3) {
        var dzien = split[0];
        var mies = split[1];
        var rok = split[2];
        if (rok && rok >= 1900 && rok <= 2100) {
            if (mies && mies > 0 && mies < 13) {
                if (rok % 4 == 0) {
                    if (dzien > 0 && dzien <= mies2[mies - 1]) {
                        flag = true;
                    }
                }
                else {
                    if (dzien > 0 && dzien <= mies1[mies - 1]) {
                        flag = true;
                    }
                }
            }
        }

        if (flag) {

            inputDate = new Date();
            currentDate = new Date();
            inputDate.setFullYear(rok, mies - 1, dzien);
            if (currentDate < inputDate) {
                flag = false;
            }
        }
    }
    }
    return flag;
}

function isDateBeforeCurrentAndNotLessThan1800(value) {
    var flag = false;
	var PATTERN = /^[0-9]{2}-[0-9]{2}-[0-9]{4}$/;

	if (value && value != null && PATTERN.test(value)) {
		var mies1 = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
		var mies2 = new Array(31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
		var splitter = "-";

		var split = value.split(splitter);

		if (split && split != null && split.length == 3) {
			var dzien = split[0];
			var mies = split[1];
			var rok = split[2];
			if (rok && rok >= 1800 && rok <= 2100) {
				if (mies && mies > 0 && mies < 13) {
					if (rok % 4 == 0) {
						if (dzien > 0 && dzien <= mies2[mies - 1]) {
							flag = true;
						}
					}
					else {
						if (dzien > 0 && dzien <= mies1[mies - 1]) {
							flag = true;
						}
					}
				}
			}

			if (flag) {
				currentDate = new Date();
				inputDate = new Date();
				inputDate.setFullYear(rok, mies - 1, dzien);
				if (currentDate <= inputDate) {
					flag = false;
				}
			}
		}
	}
    return flag;
}

function isContactPhoneValid(value) {
    flag = false;
    var PATTERN = /^\d{8,9}$/;
    if(value && value!=null && PATTERN.test(value)) {
        flag = true;
    }
    return flag;
}

function validateVIN(value) {
    var ok = false;
    var PATTERN = /^[a-zA-Z0-9]{1,17}$/;
    if(value && value!=null && PATTERN.test(value)) {
        ok = true;
    }
    return ok;
}

function isChosenValue(value) {
    var ok = false;
    if(value && value!=null && value!='0') {
        ok = true;
    }
    return ok;
}

function validateCarsSerial(value) {
    flag = false;
    var PATTERN = /^[a-zA-Z0-9]{1,8}$/;
    if(value && value!=null && PATTERN.test(value)) {
        flag = true;
    }
    return flag;
}

function validateStatPhone(value) {
    flag = true;
    var PATTERN = /^\d{2}[ ]\d{7}$/;
    if(value && value!=null && !PATTERN.test(value)) {
        flag = false;
    }
    return flag;
}

function validateMobilePhone(value) {
    flag = true;
    var PATTERN = /^\d{3}[ ]\d{6}$/;
    if(value && value!=null && !PATTERN.test(value)) {
        flag = false;
    }
    return flag;
}

function validateAdressField(value) {
    flag = false;
    if(value && value!=null) {
        var splitArr = value.split(":");
        if(splitArr && splitArr!=null && splitArr.length==3) {
            if(splitArr[1]!=null && splitArr[1]!="") {
                flag = true;
            }
        }
    }
    return flag;
}

function validateAdressFieldOpt(value) {
    flag = false;
    if(value && value!=null) {
        var splitArr = value.split(":");
        if(splitArr && splitArr!=null && splitArr.length==3) {
            if(splitArr[1]!=null && splitArr[1]!="") {
                flag = true;
            }
        }
    }else{
    	flag = true;
    }
    return flag;
}

function validateActualKmNo(value) {
    flag = false;
    if(value && value!=null && !isNaN(value) && value<500000 && value>0) {
        flag = true;
    }
    return flag;
}

function isPresentMoreEvent1000LessEven1000000(value){
    flag = false;

    if(isValue(value)) {
        try{
            var digits = Number(value);

            if(digits >= 1000 && digits <= 1000000) {
                flag = true;
            }
        }catch(e) {
            // celowe pominiecie ciala
        }
    } else {
        flag = true;
    }
    return flag;
}

function isMoreEven1000LessEvent5000000(value){
    flag = false;

    if(isValue(value)) {
        try{
            var digits = Number(value);

            if(digits >= 1000 && digits <= 5000000) {
                flag = true;
            }
        }catch(e) {
            // celowe pominiecie ciala
        }
    } else {
        flag = true;
    }
    return flag;
}

function isMoreEven10000LessEven400000(value){
    flag = false;

    if(isValue(value)) {
        try{
            var digits = Number(value);

            if(digits >= 10000 && digits <= 400000) {
                flag = true;
            }
        }catch(e) {
            // celowe pominiecie ciala
        }
    } else {
        flag = true;
    }
    return flag;
}

function isMoreEven10000LessEven100000(value){
    flag = false;

    if(isValue(value)) {
        try{
            var digits = Number(value);

            if(digits >= 10000 && digits <= 100000) {
                flag = true;
            }
        }catch(e) {
            // celowe pominiecie ciala
        }
    } else {
        flag = true;
    }
    return flag;
}


function isMoreEven10000LessEven2000000(value){
    flag = false;

    if(isValue(value)) {
        try{
            var digits = Number(value);

            if(digits >= 10000 && digits <= 2000000) {
                flag = true;
            }
        }catch(e) {
            // celowe pominiecie ciala
        }
    } else {
        flag = true;
    }
    return flag;
}


function isMoreEvent1000LessEven50000(value){
    flag = false;

    if(isValue(value)) {
        try{
            var digits = Number(value);

            if(digits >= 1000 && digits <= 50000) {
                flag = true;
            }
        }catch(e) {
            // celowe pominiecie ciala
        }
    } else {
        flag = true;
    }
    return flag;
}

function isPresentMoreEvent1000LessEven50000(value){
    flag = false;

    if(value==null || value=="") {
    	flag = true;
    } else {
        try{
            var digits = Number(value);

            if(digits >= 1000 && digits <= 50000) {
                flag = true;
            }
        }catch(e) {
            // celowe pominiecie ciala
        }
    }
    return flag;
}

function isPresentMoreEvent1000LessEven100000(value){
    flag = false;

    if(value==null || value=="") {
    	flag = true;
    } else {
        try{
            var digits = Number(value);

            if(digits >= 1000 && digits <= 100000) {
                flag = true;
            }
        }catch(e) {
            // celowe pominiecie ciala
        }
    }
    return flag;
}

function isSthChosen(value){
    flag = false;

    try{
        if(isValue(value) && '0' != value) {
            flag = true;
        }
    }catch(e) {
        // celowy brak ciala
    }
    return flag;
}

function validateBirthdateAgainstPesel(params) {
	var validationOK = true;
	try{
		var pesel = getValueQuestion(params[1]);
		var pm = Number(pesel.substr(2,2));
		var py = pesel.substr(0,2);
		var  n = Number(pesel.substr(2,1));
		var  x = parseInt(n/2) * 20;
		var  m = pm - x;
		var  y = '-1';
		switch(x){
			case 80: y='18'; break;
			case  0: y='19'; break;
			case 20: y='20'; break;
			case 40: y='21'; break;
			case 60: y='22'; break;
		}
		y += py;
		m = (m < 10) ? ('0'+m) : m ;
		var pDate = '' + pesel.substr(4,2) + m + y;
		var bDate = getValueQuestion(params[0]);
		bDate=bDate.replace('-','').replace('-','');
		if(Number(pDate) != Number(bDate)){
			validationOK = false;
		}
	}catch(e){
		validationOK = false;
	}
	return validationOK;
}

function validateBirthdateAgainstPeselOpt(params) {

	var pesel = getValueQuestion(params[1]);
	var bDate = getValueQuestion(params[0]);
// bDate=bDate.replace('-','').replace('-','');
	if( ( pesel == null || pesel == '')  && ( bDate == null || bDate == '' )){
		return true;
	}else{
		return validateBirthdateAgainstPesel(params);
	}

	return false;
}

function checkNip(value){
	var result = false;
	if(/\d{10}/.test(value)){
		var weights = new Array(6,5,7,2,3,4,5,6,7);
        var j = 0, sum = 0, control = 0;
        var csum = eval(value.substring(value.length-1));
        for (var i = 0; i < 10 - 1; i++) {
            c = value.charAt(i);
            j = eval(c);
            sum += j * weights[i];
        }
        control = sum % 11;
        control = control == 10 ? 0 : control;
        result = control == csum ? true : false;
	} else{
		result = (value === '') ? true : false;
	}
	return result;
}

var ID_VALUES_MAP ={"0":0,"1":1,"2":2,"3":3,"4":4,"5":5,"6":6,"7":7,"8":8,"9":9,"A":10,"B":11,"C":12,"D":13,"E":14,"F":15,"G":16,"H":17,"I":18,"J":19,"K":20,"L":21,"M":22,"N":23,"O":24,"P":25,"Q":26,"R":27,"S":28,"T":29,"U":30,"V":31,"W":32,"X":33,"Y":34,"Z":35};
var ID_WEIGHTS=[7,3,1,0,7,3,1,7,3];
function checkIdentityCard(value){
	var result = false;
        var valueU = value.toUpperCase()
	if( /[A-Z]{3}\d{6}/.test(valueU) ){
		var sum=0;
		for(var i=0; i<valueU.length; i++){
			sum +=  (ID_VALUES_MAP[valueU.charAt(i)] * ID_WEIGHTS[i]);
		}
		result = (sum % 10 == valueU.charAt(3)) ? true : false;
	}
	return result;
}

function validateEndowedShare(params){
	var sum = 0, x;
	var noValueExists = true;
	var proportionalInsNumber = 0;
	for(var i=0; i<params.length; i++){
		x = getValueQuestion(params[i]);
		if(x) {
			var num = Number(x);
			if (num && num > 0) {
				sum += num;
				noValueExists = false;
			} else if(num==0) {
				proportionalInsNumber++;
			}
		} else if(x!='') {
			// wartosc musiala byc zmodyfikowana, wyrzucam blad
			return false;
		}
	}
	if(noValueExists){return true;} else
	if((sum + proportionalInsNumber )>100 && sum <=100 && sum>0) {
		addErrorParameter("Suma udziałów równa się 100 %. Wskazano uposażonych, którym nie można przypisać udziału %.");
		return false;
	} else if((sum < 0 || sum >100)) {
		addErrorParameter("Suma udziałów w świadczeniu dla uposażonych przekracza 100%!");
		return false;
	}
	return true;
}

function checkAgeUnder50(value){
	if(chceckDate(value)){
		var td = new Date();
		var d50 = new Date(td.getFullYear()-50, td.getMonth(), td.getDate());
		var vd = value.split('-');
		var bd = new Date(vd[2], vd[1]-1, vd[0]);
		if(d50 < bd){
			return true;
		}
	}
	return false;
}

function validateRepeatedEmail(params){
	var e1 = getValueQuestion(params[0]);
	var e2 = getValueQuestion(params[1]);
	return (e1 && e2 && e1==e2) ? true : false;
}

function validateNip(params){
	if('0' != getValueQuestion(params[1])){
		return true;
	} else {
		var nip = getValueQuestion(params[0]);
		if(nip!='' && checkNip(nip) ){
			return true;
		}
	}
	return false;
}

function validateNipOpt(params){
	if('0' != getValueQuestion(params[1])){
		return true;
	} else {
		var nip = getValueQuestion(params[0]);
		if(checkNip(nip) ){
			return true;
		}
	}
	return false;
}

function validateMartialRelationsDate(params) {
	var flag = true;
	var statementMartialRelations = getValueQuestion(params[2]);
	if(statementMartialRelations != 0) {
		var DATE_PATTERN = /^\d{2}[-]\d{2}[-]\d{4}/;
		var martialRelationsChangeDate = getValueQuestion(params[0]);
		var wedlockDate = getValueQuestion(params[1]);
		if(DATE_PATTERN.test(martialRelationsChangeDate) && DATE_PATTERN.test(wedlockDate)) {
			var splitMartial = martialRelationsChangeDate.split('-');
			var splitWedlock = wedlockDate.split('-');

			var martialDateObj = new Date(splitMartial[2], splitMartial[1]-1, splitMartial[0]);
			var wedlockDateObj = new Date(splitWedlock[2], splitWedlock[1]-1, splitWedlock[0]);

			if(martialDateObj < wedlockDateObj) {
				flag = false;
			}
		}
	}
	return flag;
}

function validatePeselGender(params){
	var flag = false;
	var pesel = getValueQuestion(params[1]);
	var genderNumber = pesel.substr(pesel.length - 2, 1);
	var gender = getValueQuestion(params[0]);
	if((genderNumber % 2) == gender  ){
		flag = true;
	}
	return flag;
}

function isSelect(value){
    var flag = false;
    if(value && value != null && value != '' && value != '0'){
        flag  = true;
    }
    return flag;
}

function showElementsCondOnAge(questionId, ageValue, elemsToPopulate) {
	var DATE_PATTERN = /^\d{2}[-]\d{2}[-]\d{4}/;

	// wylicz wiek uzytkownika
	var dateValue = $(componentId + questionId + '_ANSWER').value;
	if (dateValue && DATE_PATTERN.test(dateValue)) {
		var vd = dateValue.split('-');

		var pyear = parseInt(vd[2]);
		var pmonth = parseInt(vd[1]) - 1;
		var pday = parseInt(vd[0]);

		// Today info
		today = new Date();
		year = today.getFullYear();
		month = today.getMonth();
		day = today.getDate();

		// sprawdz czy jest ponizej 18 lat
		var age;
		if (month < pmonth) {
			age = year - pyear - 1;
		}
		else
			if (month > pmonth) {
				age = year - pyear;
			}
			else
				if (month == pmonth) {
					if (day < pday) {
						age = year - pyear - 1;
					}
					else
						if (day > pday) {
							age = year - pyear;
						}
						else
							if (day == pday) {
								age = year - pyear;
							}
				}

		// jesli jest ponizej - wywolaj odkrycie zafixowanego elementu
		if (age < ageValue) {
			showElements(elemsToPopulate);
		} else {
			hideElements(elemsToPopulate);
		}
	} else {
		hideElements(elemsToPopulate);
	}
	return true;
}

function validateOnePhoneNumberMinDependant(params){
	var validationResult = false;

	var phoneNo1 = getValueQuestion(params[0]);
	var phoneNo2 = getValueQuestion(params[1]);

	if( is9DigitNumber(phoneNo1) || is9DigitNumber(phoneNo2) ){
		// conajmiej jeden numer uzupelniony
		validationResult = true;
	}

	return validationResult;
}

function is9DigitNumber(value) {
    var flag = false;

    if( value.match(/^\d{9}$/)) {
        flag = true;
    }

    return flag;
}

function is9DigitNumberOrEmpty(value) {
    var flag = false;

    if( value.match(/^\d{9}$/) || value=='') {
        flag = true;
    }

    return flag;
}

function isOnlyNotNullLetters(value){
	var flag = false;

	if( value.match(/^[a-zA-ZąĄćĆęĘłŁńŃóÓśŚźŹżŻ-]+(([ ]?)[a-zA-ZąĄćĆęĘłŁńŃóÓśŚźŹżŻ-]+)*$/) ) {
        flag = true;
    }

    return flag;
}

function isOnlyLettersOrEmpty(value){
	if(value && value!='') {
		return isOnlyNotNullLetters(value);
	} else {
		return true;
	}
}

/*
 * Funkcja walidacyjna do kalkulatora skladki ubezpieczenia na zycie
 */
function isIncomeInRange(value){
	var validationResult = false;
	try{
		if(value){
			var valueSplitted = value.split("#");

			if(valueSplitted.length == 3){
				var val = Number(valueSplitted[0]);
				var min = Number(valueSplitted[1]);
				var max = Number(valueSplitted[2]);
				if(val >= min && val <= max){
					validationResult = true;
				}
			}
		}
	} catch (e) {
		/* console.log(e); */
	}
	return validationResult;
}

function digits(value) {
    var ok = false;
    var PATTERN = /^\d+$/;
    if(value && value!=null && PATTERN.test(value)) {
        ok = true;
    }
    return ok;
}

function digitsOpt(value) {
    var ok = false;
    var PATTERN = /^\d*$/;
    if(value && value!=null && PATTERN.test(value)) {
        ok = true;
    }else if(value==null || value==""){
    	ok = true;
    }
    return ok;
}
/*function validateHour( value ){
	var v0;
	var v1;
	var PATTERN1 = /^[0-2]?[1-9]$/;
	var PATTERN2 = /^[0-5]?[0-9]$/;
    var result = false;
    if(value && value!=null){
    	if(value.indexOf(":")>-1){
    		v0 = value.substring(0,value.indexOf(":"));
    		v1 = value.substring(value.indexOf(":")+1);
    		if(PATTERN1.test(v0)){
    			if(PATTERN2.test(v1)){
    				result = true;
    			}
    		}
    	}
    }
    return result;
}*/

function validateHour( value ){
	var v0;
	var v1;

    var result = false;
    if(value && value!=null){
    	if(value.indexOf(":")>-1){
    		v0 = value.substring(0,value.indexOf(":"));
    		v1 = value.substring(value.indexOf(":")+1);
    		if(v0.length > 1  && v0.charAt(0)=='0'){
    			v0 = v0.charAt(1)
    		}
    		if(v1.length > 1  && v1.charAt(0)=='0'){
    			v1 = v1.charAt(1)
    		}
    		if(Number(v0) < 24 && Number(v1) < 59){
    			result = true;
    		}
    	}
    }
    return result;
}

function validateYearBeforeCurrent(value){
	var result = false;
	var PATTERN = /^\d{4}$/;
	if(value && value!=null && PATTERN.test(value)){
		var year =  Number(value);
		var date = new Date();
		var currentYear = date.getFullYear();
		if(year <= currentYear && year > 1800){
			result = true;
		}
	}
	return result;
}

function validateRegon9Opt(value){

    var tablica = new Array(8, 9, 2, 3, 4, 5, 6, 7);
    var vResult= false

    if(value && value != null && value != ''){
        if(value.length == 7  ){
            value = "00"+value;
        }
        if( value.length == 9) {

            var sum = 0;

            for(var i = 0; i < 8; i++){
                sum += tablica[i] * value.charAt(i);
            }

            var contr = sum % 11;
            if( contr == 10 ) {
                contr = 0;
            }

            if(contr == value.charAt(8)){
                vResult = true;
            }
        }
    }
    else {
        vResult = true;
    }
    return vResult;
}

function validateRegonOpt(value){

    var tablica = new Array(2,4,8,5,0,9,7,3,6,1,2,4,8);
    var vResult= false

    if(value && value != null && value != ''){
        if((value.length == 7) || (value.length == 9)){
        	vResult = validateRegon9Opt(value);
        }
        if( value.length == 14) {

            var sum = 0;

            for(var i = 0; i < 13; i++){
                sum += tablica[i] * value.charAt(i);
            }

            var contr = sum % 11;
            if( contr == 10 ) {
                contr = 0;
            }

            if(contr == value.charAt(13)){
                vResult = true;
            }
        }
    }
    else {
        vResult = true;
    }
    return vResult;
}

function oneNotEmpty(params) {
    var flag = false;
    for(var i=0; i<params.length; i++){
    	var value = getValueQuestion(params[i]);
    	if(value && value.length > 0 ){
    		flag = true;
			break;
    	}
    }
    return flag;
}



function oneNotEmptyIfLastParamEqualsValue(params) {
    var flag = false;
	var lastValueParam = getValueQuestion(params[params.length-2]);
	var checkValue = params[params.length-1]
	if(lastValueParam==checkValue) {
	    for(var i=0; i<params.length-2; i++){
	    	var value = getValueQuestion(params[i]);
	    	if(value && value.length > 0 ){
	    		flag = true;
				break;
	    	}
	    }
	} else {
		//nie mamy co sprawdzac, warunek nie spelniony
		flag = true;
	}
    return flag;
}



function fieldsNotEmptyIfLastParamEqualsValue(params) {
    var flag = true;
	var lastValueParam = getValueQuestion(params[params.length-2]);
	var checkValue = params[params.length-1]
	if(lastValueParam==checkValue) {
	    for(var i=0; i<params.length-2; i++){
	    	var value = getValueQuestion(params[i]);
	    	if(!value || value.length == 0 ){
	    		flag = false;
				break;
	    	}
	    }
	}
    return flag;
}


