function closeWindow() { 
    if (navigator.appName=="Microsoft Internet Explorer") { 
        this.focus();
        self.opener = this;
        self.close(); 
    } else { 
        window.open('','_parent',''); 
        window.close(); 
    }
}

function textLength(value, minLength, maxLength){
	var vResult = validateResult(true, '');
	if(value && value != null && value != ''){
		if(value.length < minLength){
			vResult = validateResult(false, 'tooshort');
		}else if(value.length > maxLength){
			vResult = validateResult(false, 'toolong');
		}
	}
	return vResult;

}

function isNotEmpty(value){
    vResult = validateResult(false, 'code1');
    trim(value);
    value = value.replace(/%20/g,'');
	if(value && value != null && value != ''){
		vResult = validateResult(true, '');
	}
	return vResult;
}

function paramTest(value, param1, param2){
	var flag = true;
	alert("value: " + value + "\nparam1: " + param1 + "\nparam2: " + param2);
	return flag;
}

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

function validatePeselLenght(value) {
    return value.length == 11;
}

function validatePeselZeroes(value) {
    return value != '00000000000'
}

function isLeapYear(y) {
    return !(y % 4) && (y % 100) || !(y % 400) ? true : false;
}

function validatePeselDayCount(pesel) {
    var daysCountInMonth = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);    
    
    var year = pesel.substring(0, 2);
    var month = pesel.substring(2, 4);
    var day = pesel.substring(4, 6);    
	
   if (month.charAt(0) != '0' && month.charAt(0) != '1') {
        year = '20' + year;
        month = parseInt(month, 10) - 21;
    } else {
        year = '19' + year;
        month = parseInt(month, 10) - 1;
    }
    
    if (month != 1) {
        return day <= daysCountInMonth[month];
    } else {
        return ((isLeapYear(year) && day <= 29) || (day <= 28)) ? true : false; 
    }
}

function validatePeselControlSum(value) {
    var weights = new Array(1, 3, 7, 9, 1, 3, 7, 9, 1, 3);
    var sum = 0;
    for (var i = 0; i < 10; i++) {
        sum += weights[i] * value.charAt(i);
    }
    sum += 1 * value.charAt(i);
    
    return ((sum % 10) == 0) ? true : false;
}

function checkPesel(value){
    var vResult = validateResult(false, 'wrongvalue');
    if (value && value != null && value != '') {
        if (validatePeselLenght(value) && validatePeselZeroes(value) && validatePeselControlSum(value) && validatePeselDayCount(value)) {
            vResult = validateResult(true, '');
        }
    } else {
        vResult = validateResult(true, '');
    }
    return vResult;
}

function validateDate(value){
	var vResult = validateResult(false, 'code1');
	var formatczasu = 'dd-mm-yyyy';
	
	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 );
    
    
    if( value == null || value.length == 0 ) {
        vResult = validateResult(true, '');
    } else {    
	
	var dzien=value.substring(formatczasu.indexOf('dd'),formatczasu.indexOf('dd')+2);
	var mies=value.substring(formatczasu.indexOf('mm'),formatczasu.indexOf('mm')+2);
	var rok=value.substring(formatczasu.indexOf('yyyy'),formatczasu.indexOf('yyyy')+4);
	if(rok && rok >= 1900 && rok <= 2100){
		if(mies && mies > 0 && mies < 13){
			if(rok % 4 == 0){
				if(dzien > 0 && dzien <= mies2[mies-1]){
					vResult = validateResult(true, '');
				}
			}else{
				if(dzien > 0 && dzien <= mies1[mies-1]){
					vResult = validateResult(true, '');
				}
			}
		}
	}
    }
	return vResult;
}

function digits(value){
    var vResult = validateResult(true, '');
    if( value && value.length != 0 && !value.match(/^\d*$/) ) {
        vResult = validateResult(false, 'wrongvalue');
    }
    return vResult;
}

function letters(value){
    var vResult = validateResult(true, '');
    if(  value && value.length != 0 &&  !value.match(/^[a-zA-Z]*$/) ) {
        vResult = validateResult(false, 'wrongvalue');
    }
    return vResult;
}

function NIP_Javascript(value){
    var vResult = validateResult(true, '');
    if(value != null && value != ""){ 
	    if ( !value.match( /^[0-9]{3}-[0-9]{2}-[0-9]{2}-[0-9]{3}$/ )
	        && !value.match( /^[0-9]{3}-[0-9]{3}-[0-9]{2}-[0-9]{2}$/ )
	        && !value.match( /^[0-9]{10}$/ )) {
	        vResult = validateResult(false, 'wrongformat');
	    } 
	    else {   
	        var my_nums = value.replace(/-/g,'');
	        var valid_nums = "657234567";
	        var sum=0;
	        for (var temp = 8; temp >= 0; temp--)
	        sum += (parseInt(valid_nums.charAt(temp)) * parseInt(my_nums.charAt(temp)));
	        if ( (sum % 11) == 10 ? false : ((sum % 11) == parseInt(my_nums.charAt(9))) ) {
	            vResult = validateResult(true, '');
	        }
	        else {
	            vResult = validateResult(false, 'wrongvalue');
	        }
	    }
    }    
    return vResult;
}

function Obligatoryjne(value){
    var vResult = validateResult(false, 'code1');
    vResult = validateResult(true, '');
    return vResult;
}

function Email_Javascript(value){
    var vResult = validateResult(true, '');    
    if( value != "" && !value.match(/^([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})+$/) ) {
        vResult = validateResult(false, 'wrongvalue');
    }
    return vResult;
}
function REGON_Javascript(value){

    var tablica = new Array(8, 9, 2, 3, 4, 5, 6, 7);
    var vResult= validateResult(false, 'wrongvalue');   
    
    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 = validateResult(true, '');
            }        
        }        
    } 
    else {
        vResult = validateResult(true, '');
    }   
    return vResult;    
}

function NRB(value){
    var tablica = new Array(1,10,3,30,9,90,27,76,81,34,49,5,50,15,53,45,62,38,89,17,73,51,25,56,75,71,31,19,93,57);
    var vResult= validateResult(false, 'wrongvalue');
    
    value = value.replace(/ /g,'');
    
    if(value && value != null && value != ''){

        if( value.length == 26) {
            value = value+"2521";
            value = value.substring(2,30) + value.substring(0,2);
            var sum = 0;
            for(var i = 0; i < 30; i++){
                var ch = 1 * value.charAt(29-i);
                sum += tablica[i] * ch;
            }
            if( (sum % 97) == 1 ) {          
                vResult = validateResult(true, '');
            }    
        }       
    }
    else {
        vResult = validateResult(true, '');
    }    
    return vResult;
}

function IdentityCard(value){
    var tablica = new Array(7,3,1,0,7,3,1,7,3);
    var vResult= validateResult(false, 'wrongvalue');
    
    if(value && value != null && value != ''){
        var letters = {
            Set : function(foo,bar) {this[foo] = bar;},
            Get : function(foo) {return this[foo];}
        }
        letters.Set('A',10); letters.Set('B',11); letters.Set('C',12); letters.Set('D',13); letters.Set('E',14);
        letters.Set('F',15); letters.Set('G',16); letters.Set('H',17); letters.Set('I',18); letters.Set('J',19);
        letters.Set('K',20); letters.Set('L',21); letters.Set('M',22); letters.Set('N',23); letters.Set('O',24);
        letters.Set('P',25); letters.Set('Q',26); letters.Set('R',27); letters.Set('S',28); letters.Set('T',29); 
        letters.Set('U',30); letters.Set('V',31); letters.Set('W',32); letters.Set('X',33); letters.Set('Y',34); 
        letters.Set('Z',35);
    
        value = value.replace(/ /g,'');
        value = value.toUpperCase();
            
        if( value.length == 9) {
            var sum1 = 0;
            var sum1 = 0;
            var sum2 = 0;
            for(var i = 0; i < 3; i++){
                sum1 +=  tablica[i] * letters.Get(value.charAt(i));
            }
            for(var i = 4; i < 9; i++){
                sum2 +=  tablica[i] * value.charAt(i);
            }
            sum = sum1 + sum2;
            if( (sum % 10) == value.charAt(3) ) {          
                vResult = validateResult(true, '');
            }    
        }       
    } else {
        vResult = validateResult(true, '');
    }   
    return vResult;
}


function validMarks(value, marks){
    var vResult = validateResult(true, '');
    var i ;
    if( value == null || value.length == 0 ) {
        vResult = validateResult(true, '');
    } else {
        for( i=0; i < value.length ; ++i ) { 
            if( marks.indexOf(value.charAt(i)) < 0 ) {
                vResult= validateResult(false, 'wrongvalue');
                break;
            }
        }
    }
    return vResult;
}

function invalidMarks(value, marks){
    var vResult = validateResult(true, '');
    var i;
    if( value == null || value.length == 0 ) {
        vResult = validateResult(true, '');
    }  
    else {
        for( i = 0; i < value.length ; ++i ) { 
            if( marks.indexOf(value.charAt(i)) >= 0 ) {
                vResult= validateResult(false, 'wrongvalue');
                break;
            }
        }
    }  
    return vResult;
}

//TODO: funkcje spr. telefony do poprawki
function checkPhone(value){
	var vResult = validateResult(true, '');
    value = value.replace(' ','');
    value = value.replace(/%20/g,'');
    
    var subValue = value.substring(3,0);
    if (subValue == '+48') {
        if( value == null || value.length == 0 ) {
            vResult = validateResult(true, '');
        }else if(value && !value.match(/^[+]\d{11}$/) && !value.match(/\d{12}$/) ){        
    		vResult= validateResult(false, 'wrongvalue');
        }
    }
    
    return vResult;
}

function checkMobilePhone(value){
	var vResult = validateResult(false, 'wrongvalue');
	value = value.replace(' ','');
    value = value.replace(/%20/g,'');
    
    if( value != null && value.length > 0 ) {
    	var subValue = value.substring(3,0);    	
    	if (subValue == '+48' && value.match(/^[+]\d{11}$/)) {
    		vResult = validateResult(true, '');
    	}else if(value.match(/\d{11}$/)){
    		vResult = validateResult(true, '');
    	}else if (value.match(/\d{9}$/)){
    		vResult = validateResult(true, '');
    	}    	
    }else{
    	vResult = validateResult(true, '');
    }
    
    return vResult;
}

function checkMobilePhone2(value){
	var vResult = validateResult(false, 'wrongvalue');
	value = value.replace(' ','');
    value = value.replace(/%20/g,'');
    
    if( value != null && value.length > 0 ) {
    	if(value.match(/\d{11}$/) || value.match(/\d{9}$/)){
    		vResult = validateResult(true, '');
    	}   	
    }else{
    	vResult = validateResult(true, '');
    }
    
    return vResult;
}



function properNoun(value) {
    var vResult = validateResult(false, 'notProperNoun');
    if(value) {
        var b = true ;
        
        if( isUpper(value.charAt(0)) ) {
            vResult= validateResult(true, '');
        }
        
    } else {
        vResult = validateResult(true, '');
    }
    return vResult;
}

function intGreaterThan(value, compareValue) {
    var vResult = validateResult(true, '');
    
    if( value ) {
        if( !isInteger(value) ) {
            vResult = validateResult(false, 'wrongformat');
        } else {       
            if( parseInt(value) > parseInt(compareValue) ) {
                vResult = validateResult(true, '');
            }  
            else {
                vResult = validateResult(false, 'greaterThan');
            }
        }
    }
    return vResult;
}
function intLessThan(value, compareValue) {
    var vResult = validateResult(true, '');
    
    if( value ) {
        if( !isInteger(value) ) {
            vResult = validateResult(false, 'wrongformat');
        } else {       
            if( parseInt(value) < parseInt(compareValue) ) {
                vResult = validateResult(true, '');
            }  
            else {
                vResult = validateResult(false, 'lessThan');
            }
        }
    }
    return vResult;
}

function floatGreaterThan(value, compareValue) {
    var vResult = validateResult(true, '');
    
    if( value ) {
        value = value.replace(',','.');
        value = value.replace('%2C','.');
        compareValue = compareValue.replace(',','.');
        if( !isNumber(value.replace('.','')) ) {
            vResult = validateResult(false, 'wrongformat');
        } else {       
            if( parseFloat(value) > parseFloat(compareValue) ) {
                vResult = validateResult(true, '');
            }  
            else {
                vResult = validateResult(false, 'greaterThan');
            }
        }
    }
    return vResult;
}
function floatLessThan(value, compareValue) {
    var vResult = validateResult(true, '');
    
    if( value ) {
        value = value.replace(',','.');
        value = value.replace('%2C','.');
        compareValue = compareValue.replace(',','.');
        if( !isNumber(value.replace('.','')) ) {
            vResult = validateResult(false, 'wrongformat');
        } else {       
            if( parseFloat(value) < parseFloat(compareValue) ) {
                vResult = validateResult(true, '');
            }  
            else {
                vResult = validateResult(false, 'lessThan');
            }
        }
    }
    return vResult;
}

function anyLessThan(value, compareValue) {
	var vResult = validateResult(true, '');
	
	if( value ) {
		
        value = value.replace(',','.');
        value = value.replace('%2C','.');
		
		if (isInteger(value)) {
			vResult = intLessThan(value, compareValue);
		} else if ( isNumber(value.replace('.','') ) ) {
			vResult = floatLessThan(value, compareValue);
		} else {
			vResult = validateResult(false, 'wrongformat');
		}
	}
	return vResult;
}

function anyBiggerThan(value, compareValue) {
	var vResult = validateResult(true, '');
	
	if( value ) {
		
        value = value.replace(',','.');
        value = value.replace('%2C','.');
		
		if (isInteger(value)) {
			vResult = intGreaterThan(value, compareValue);
		} else if ( isNumber(value.replace('.','') ) ) {
			vResult = floatGreaterThan(value, compareValue);
		} else {
			vResult = validateResult(false, 'wrongformat');
		}
	}
	return vResult;
}

function amount(value){
    var vResult= validateResult(false, 'wrongformat'); 
    if(value && value != null && value != ''){
        value = value.replace(',','.');
        value = value.replace('%2C','.');
        if( isNumber(value.replace('.','')) ) {
            var comma = value.indexOf('.');
            if( comma > 0 )  { 
                var decPlaces = value.substring(comma+1);
                if( decPlaces.length == 2 ) {
                    vResult = validateResult(true, '');
                }
            }  
        } else {
            vResult = validateResult(false, 'NaN');
        }    
    } else {
        vResult = validateResult(true, '');
    } 
    return vResult;
}

function amountInHundreds(value){
   var vResult= validateResult(false, 'wrongvalue');

    if(value && value != null && value != ''){
        if( isNumber(value) ) {
            if( parseInt(value) && (value % 100) == 0 )  { 
                vResult = validateResult(true, '');    
            } 
        } else {
            vResult = validateResult(false, 'NaN');
        }      
    } 
    else {
        vResult = validateResult(true, '');   
    }   
    return vResult;
}

function plenipotentiaryEKidsAge(value, from, to) {
    var vResult = validateResult(true, '');
    
    if(value && value != null && value != ''){
        var today = new Date(); 
        if(!value.match( /^[0-9]{2}-[0-9]{2}-[0-9]{4}$/ ) ) {
            vResult = validateResult(false, 'wrongDate');
        }
        else {
        d = value.split("-");
        var byr = parseInt(d[2]); 
        var nowyear = today.getFullYear();
        var nowmonth = today.getMonth();
        var nowday = today.getDate();
        var bmth = parseInt(d[1],10)-1;   // radix 10!
        var bdy = parseInt(d[0],10);   // radix 10!

        if( (byr > nowyear || byr < 1900) || (bmth <0 || bmth >11) || (bdy <1 ) 
            || (byr == nowyear && bmth > nowmonth) || (byr == nowyear && bmth == nowmonth && bdy > nowday )  ) { 
            vResult = validateResult(false, 'wrongDate');
        }
        else {
            var age = nowyear - byr;
            if (bmth > nowmonth) 
            {
                age = age - 1;
            }  // next birthday not yet reached
            else if (bmth == nowmonth && nowday < bdy) {
                age = age - 1;
            }
            
            if( age > to ) {
                vResult = validateResult(false, 'tooOld');
            }
            if( age < from ) {
                vResult = validateResult(false, 'tooYoung');
            } 
        }
        }       
    }

    return vResult;
}


/**************************************/
/************* f zalezne **************/
/**************************************/

function equalFields(value1, value2, add1) {
    var vResult = validateResult(false, 'notEqual');
    if( value1 && value2 ) {
        if( value1 == value2 ) {
            vResult = validateResult(true, '');
        }
    }
    else {
        vResult = validateResult(true, '');
    }
    return vResult;
}

function notEqualFields(value1, value2, add1) {
    var vResult = validateResult(true, '');
    if( value1 && value2 ) {
        if( value1 == value2 ) {
            vResult = validateResult(false, 'equal');
        }
    }
    return vResult;
}

function periodNotShorter(value1, value2, add1) {
    var vResult = validateResult(true, '');
    if( value1 && value2 ) {
    	
    	var dateFormat = 'dd-mm-yyyy';
    	
    	var day1=value1.substring(dateFormat.indexOf('dd'),dateFormat.indexOf('dd')+2);
    	var month1=value1.substring(dateFormat.indexOf('mm'),dateFormat.indexOf('mm')+2);
    	var year1=value1.substring(dateFormat.indexOf('yyyy'),dateFormat.indexOf('yyyy')+4);
    	
    	var date1 = new Date();
    	var dateNow = new Date();
    	
    	date1.setFullYear(year1,month1 - 1,day1);
    
    	if(date1 > dateNow) {
    		var noOfMonths = date1.getMonth() - dateNow.getMonth() + (date1.getFullYear() - dateNow.getFullYear()) * 12;
    		if ( noOfMonths < parseInt(value2) ) {
    			vResult = validateResult(false, 'periodShorter');
    		}
    	} else {
    		vResult = validateResult(false, 'dateGreaterThanToday');
    	}
    	

    	
    }
    return vResult;
}

function dateNotAfter(value1, value2, add1) {
    var vResult = validateResult(true, '');
    if( value1 && value2 ) {
    	
    	var dateFormat = 'dd-mm-yyyy';
    	
    	var day1=value1.substring(dateFormat.indexOf('dd'),dateFormat.indexOf('dd')+2);
    	var month1=value1.substring(dateFormat.indexOf('mm'),dateFormat.indexOf('mm')+2);
    	var year1=value1.substring(dateFormat.indexOf('yyyy'),dateFormat.indexOf('yyyy')+4);
    	
    	var day2=value2.substring(dateFormat.indexOf('dd'),dateFormat.indexOf('dd')+2);
    	var month2=value2.substring(dateFormat.indexOf('mm'),dateFormat.indexOf('mm')+2);
    	var year2=value2.substring(dateFormat.indexOf('yyyy'),dateFormat.indexOf('yyyy')+4);
    	
    	var date1 = new Date();
    	var date2 = new Date();
    	
    	date1.setFullYear(year1,month1 - 1,day1);
    	date2.setFullYear(year2,month2 - 1,day2);
    	
    	if ( date1 > date2 ) {
    		vResult = validateResult(false, 'after');
    	}
    			
    }
    return vResult;
}

function lessThanField(value1, value2, add1) {
    var vResult = validateResult(false, 'notLess');
    if( value1 && value2 ) {
        if( value1 < value2 ) {
            vResult = validateResult(true, '');
        }
    } else {
        vResult = validateResult(true, '');
    }
    return vResult;
}

function greaterThanField(value1, value2, add1) {
    var vResult = validateResult(false, 'notGreater');
    if( value1 && value2 ) {
        if( value1 > value2 ) {
            vResult = validateResult(true, '');
        }
    } else {
        vResult = validateResult(true, '');
    }
    return vResult;
}

function oneNotEmpty(value1, value2, add1) {
    var vResult = validateResult(false, 'notEmpty');
    if( (value1 && value1.length > 0 ) || (value2 && value2.length > 0) ) {
            vResult = validateResult(true, '');
    }
    return vResult;
}

function getDateFromPesel(pesel) {
    var year = pesel.substring(0, 2);
    var month = pesel.substring(2, 4);
    var day = pesel.substring(4, 6);    
	
	// correct year	
    if (month.charAt(0) != '0' && month.charAt(0) != '1') {
        year = '20' + year;
    } else {
        year = '19' + year;
    }
    
    // correct month
    var month = parseInt(month, 10) - 1;
    
    return new Date(year, month, day);
}

function getBirthDateForAge(yearsOld) {
    var today = new Date();
    var birthYear = today.getFullYear() - yearsOld;
    var birthMonth = today.getMonth();
    var birthDay = today.getDate();
    return new Date(birthYear, birthMonth, birthDay);
}

function checkPeselEKids(value, fromAge, toAge){
    var vResult = validateResult(false, 'wrongvalue');
    
    vResult = checkPesel(value);
    
    if (vResult.status == true) {
        var dateToCheck = getDateFromPesel(value);
	    var fromDate = getBirthDateForAge(toAge);
        var toDate = getBirthDateForAge(fromAge);
        
        if (dateToCheck < fromDate) {
            vResult = validateResult(false, 'tooOld');
        } else if (dateToCheck > toDate) {
            vResult = validateResult(false, 'tooYoung');
        } else {
            vResult = validateResult(true, '');	    	
        }
    }		 

    return vResult;
}

function checkBinNrb(value, binList){
      
    var vResult = NRB(value);
    
    if (vResult.status == true) {
    	if(value && value != null && value != ''){
    		value = value.replace(/ /g,'');
	    	var bins = binList.split(',');
	        var bin = value.substring(2,10)
	        for(var i = 0; i < bins.length; i++){
	        	if( bin == bins[i]) {
	        		return vResult;
	        	}
	        }
	        
	        vResult = validateResult(false, 'noBinMatched');
    	}
    }

    return vResult;
}

/******************************************************/
/************* f zalezne dla klonow grup***************/
/******************************************************/


function equalCloneFields(valueList) {
    var vResult = validateResult(true, '');
    var values = eval(valueList);
    if( values && values.length > 0) {
    	for(var i = 1; i < values.length; i++){
        	if( values[0].toLowerCase() != values[i].toLowerCase() ) {
        	    vResult = validateResult(false, 'notEqual');
        	}
    	}
    }    
    return vResult;
}

function notEqualCloneFields(valueList) {
    var vResult = validateResult(true, '');
    var values = eval(valueList);
    if( values && values.length > 0) {
    	for(var j = 0; j < values.length - 1; j++){
	    	for(var i = j+1; i < values.length; i++){
	        	if( values[j].toLowerCase() == values[i].toLowerCase() ) {
	        	    vResult = validateResult(false, 'equal');
	        	}
	    	}
    	}
    }    
    return vResult;
}






function trim(str, chars) {
    return ltrim(rtrim(str, chars), chars);
}
 
function ltrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
 
function rtrim(str, chars) {
    chars = chars || "\\s";
    return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}
