﻿if (navigator.userAgent.indexOf('Mac')==-1&&top!=self)top.location=self.location;
if (false && document.location.protocol != 'https:') 
	document.location.href = 'https:' + document.location.href.substring(5,document.location.href.length);

var forms = function() {
	/* private */
	//	wyrazenia regularne do  sprawdzania poprawnosci danych
	var cheks 			= {
		email				: /^[a-zA-ZęóąśłżźćńĘÓĄŚŁŻŹĆŃ\-\_0-9\.]{1,}@[a-zA-ZęóąśłżźćńĘÓĄŚŁŻŹĆŃ\-\_0-9\.]{1,}\.\w{2,6}$/,
		stringStandard 		: /^[a-zA-ZęóąśłżźćńĘÓĄŚŁŻŹĆŃ\-\s]+$/,
		imie				: /^[a-zA-ZęóąśłżźćńĘÓĄŚŁŻŹĆŃ\-\s]{2,}$/,
		ulica				: /^[a-zA-ZęóąśłżźćńĘÓĄŚŁŻŹĆŃ\d]+[a-zA-ZęóąśłżźćńĘÓĄŚŁŻŹĆŃ\-\s\.\d]+$/,
		kodPocztowy			: /^\d\d[\-\.\s]{0,1}\d\d\d$/,
		nrLokalu			: /^\d+[\/\\a-zA-ZęóąśłżźćńĘÓĄŚŁŻŹĆŃ\-\_0-9\s]*$/,
		nrDomu				: /^\d+[\/\\a-zA-ZęóąśłżźćńĘÓĄŚŁŻŹĆŃ\-\_0-9\s]*$/,
		telefon				: /^\+*[0-9\-\(\)\+]{9,20}$/,
		data1				: /^\d{2}[-\s\.\\\/]{1}\d{2}[-\s\.\\\/]{1}\d{4}$/,
		data2				: /^\d{4}[-\s\.\\\/]{1}\d{2}[-\s\.\\\/]{1}\d{2}$/,
		dowodOsobisty 		: /^[a-zA-Z]{3}\d{6}$/,
		dochody				: /^[0-9]+[0-9\.\,]+$/,
		stringPierwszaLitera : /^[a-zA-ZęóąśłżźćńĘÓĄŚŁŻŹĆŃ][a-zA-ZęóąśłżźćńĘÓĄŚŁŻŹĆŃ\-\s\d]*$/
	};
	
	/* public */
	return {
		//	podstawowe funkcje dla formularzy
		resetForms: 				function() {
			$('form').each(function(){ 
				this.reset();
			});
		},
		validateFormForXmlValue: 	function(form) {
		//TEST 
			var elements = form.elemens;
			for (var i=0, ile=elements.length; i<ile; i++) {
				if ( elements[i].value && elements[i].value.indexOf('&') >= 0 ) 
					elements[i].value.replace(/&/g,' and ');
				if ( elements[i].value && elements[i].value.indexOf('<') >= 0 )
					elements[i].value.replace(/</g,' _ ');
				if ( elements[i].value && elements[i].value.indexOf('>') >= 0 ) 
					elements[i].value.replace(/>/g,' _ ');
			}
		},
		//	wyciaganie danych
		getDateFromPesel: 			function(pesel, type) {
			//TEST
			//	domyslnie type = 'date'
			if ( typeof type == 'undefined' || !type ) {
				type = 'date';
			}
			v = pesel.split('');
			var rok ='';
			var miesiac = parseInt(pesel[2]+pesel[3],10);
			if ( pesel[2] == '0' ) {
				miesiac = parseInt(pesel[3],10);
			}
			var dzien = pesel[4]+pesel[5];		
			datka=new Date();
			if ( miesiac>=80 ) {
				rok = '18'+pesel[0]+pesel[1];
				miesiac %= 80;
			} else if ( miesiac >= 60 ) {
				rok = '22'+pesel[0]+pesel[1];
				miesiac %= 60;
			} else if ( miesiac >= 40 ) {
				rok = '21'+pesel[0]+pesel[1];
				miesiac %= 40;
			} else if ( miesiac >= 20 ) {
				rok = '20'+pesel[0]+pesel[1];
				miesiac %= 20;
			} else { 
				var rok = '19' + pesel[0]+pesel[1];
			}			
			rok = parseInt(rok,10);
			miesiac = parseInt(miesiac,10);
			dzien = parseInt(dzien,10);

			if (type == 'object') {
				return { "rok" : rok, "miesiac" : miesiac, "dzien" : dzien };	
			} else if ( type == 'string' ) {
				return rok+'-'+miesiac+'-'+dzien;
			} else if ( type == 'date' ) {
				var data = new Date();
				data.setFullYear(rok);
				data.setMonth(miesiac-1);
				dzien = ( dzien == 30 ) ? 0 : dzien;
				data.setDate(dzien);
				return data
			}
		},
		getAgeFromPesel: 			function(pesel) {
			//TEST
			pesel = pesel.split('');
			var rok ='';
			var miesiac = parseInt(pesel[2]+pesel[3],10);
			if ( pesel[2] == '0' ) {
				miesiac = parseInt(pesel[3],10);
			}
			datka=new Date();
			if ( miesiac>=80 ) {
				rok = '18'+pesel[0]+pesel[1];
				miesiac %= 80;
			} else if ( miesiac >= 60 ) {
				rok = '22'+pesel[0]+pesel[1];
				miesiac %= 60;
			} else if ( miesiac >= 40 ) {
				rok = '21'+pesel[0]+pesel[1];
				miesiac %= 40;
			} else if ( miesiac >= 20 ) {
				rok = '20'+pesel[0]+pesel[1];
				miesiac %= 20;
			} else { 
				var rok = '19' + pesel[0]+pesel[1];
			}
			rok = parseInt(rok,10);
			miesiac = parseInt(miesiac,10);
			
			var rokNow = datka.getFullYear();
			var miesiacNow = datka.getMonth()+1;
			
			var lata = rokNow - rok;
			var miesiace = miesiacNow - miesiac;
			if ( miesiace < 0 ) {
				lata--;
			}
			return lata;
		},
		
		//	walidacja.
		v: {
			valid: 					function(value, type) {
			//TEST VERY VERY :)
				if ( cheks.hasOwnProperty(type) ) {
					var G = cheks[type];
					return G.test(value);
				}
				return false;
			},
			pesel:					function(pesel) {
				var tab_pesel = (pesel.trim()).split('');
				var w = new Array(1,3,7,9);
				var wk = 0;
				for (var i=0; i<=9; i++)
					wk = (wk + tab_pesel[i]*w[i%4]) % 10;
				var k = (10-wk) % 10;
				if ( tab_pesel[10] != k || !pesel.trim() ) 
					return false;
				return true;
			},
			minAge:					function(pesel, minAge) {
				return ( getAgeFromPesel(pesel) >= minAge );
			},
			//	... inne funkcje walidujace
			nrKonta: 				function(value) {
			//TEST
				var value = value.trim().replace(/\s/g,'');
				value = value.slice(2,10);
				value = value.split('');
				var wynik = 0;
				var wagi = new Array(7,1,3,9,7,11,3);
				for (var i=0; i<7; i++) {
					wynik += (parseInt(v[i],10)*wagi[i]);
				}
				wynik %= 10;
				if ( wynik == value[7] )
					return true;
				return false;
			},
			required: 				function(value) {
				if ( this.is('input[type="checkbox"]') ) {
					if ( this.is(':checked') ) {
						return true;
					} else {
						return false;
					}
				}
				if ( this.is('input[type="radio"]') ) {
					var selected = false;
					this.each(function(){
						if ( $(this).is(':checked') ) {
							selected = true;
						};
					});
					if ( selected ) {
						return true;
					} else {
						return false;
					}
				}
				return ( value && value != '' );
			},
			length: 				function(value, params) {
				//alert(params.length);
				if ( params.length != 2 ) {
					return false;
				} else {
					var a = params[0];
					var b = params[1];
				}
				//alert('length validating... value = '+value+ ' , a = '+a+' b = '+b);
				if ( !a || !f.number.isInteger(a) ) {
					a = MIN_VALUE;
				};
				if ( !b || !f.number.isInteger(b) ){ 
					b = MAX_VALUE;
				};
				var len = value.length;
				return ( len && len>=a && len<=b );
			},
			//	pusta walidacja
			empty:				function(){	return true; }
		}
	};
}();




