function is(variable) {
    return (typeof(variable) != 'undefined' && variable != null);
}

/**
 * test na liczbe dziesietna
 * @param float n liczba do sprawdzenia
 * @param bool o czy jest opcjonalna
 */
function isDecimal(n,o){var r=/\d+/;return o?true:r.test(n)}
/**
 * test czy liczba miesci sie w przedziale
 * @param {Object} n liczba do sprawdzenia
 * @param {Object} m minimum
 * @param {Object} x
 */
function isInSection(n,m,x){ return !isDecimal(n)?true:!(n<=x&&n>=m)}
/**
 * test adresu email
 * @param string e email
 */
function isEmail(e){
	var r=/^[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})\s*$/; return r.test(e)
}
function isEmailFull(e) {
var m=e.match(/^([^@<]*\s)?(<)?\s*([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})\s*(>)?\s*$/);
return ( m != null && ((m[2]!='' && m[5]!='') || (m[2]=='' && m[5]=='')));
}
/**
 * test domeny
 * @param string d domena
 */
function isDomain(d){var r=/(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})\s*$/;return r.test(d)}
/**
 * test na pusty string
 * @param string s lancuch do sprawdzenia
 * @param bool o czy test jest opcjonalny
 */
function isEmpty(s,o){return o?true:!(s.length==0||s==null)}
function isDate(s){var r=/^\d{4}-\d{2}-\d{2}$/;return r.test(s)}
/**
 * W moim przekonaniu metoda ta bedzie potrafila sprawdzi czy element jest tablica
 * @param {Object} element
 */
isArray = function(element){
    if(element.length) return true;
    else return false;
}

/**
 * Wariacja na temat rozpoznawania stringa ;-)
 * @param {Object} obj
 */
isString = function(obj){
    if(obj.constructor.toString().toLowerCase().indexOf("string") == -1) return false;
    else return true;
}
/**
 * no to jeszcze typy logiczne przywale
 * @param {Object} obj
 */
isBool = function(obj){
    if(obj.constructor.toString().toLowerCase().indexOf("boolean") == -1) return false;
    else return true;
}

/*-----------------------------------------------------------------*/
// sprawdza poprawnosc numeru nip
function check_nip(nip)
{
	error = 0;
	var wagi = new Array(9);
	var cyfry = new Array(10);
	var modulo = 11;
	maska = /^\d{2,3}(-\d{2,3}){3}$/;
	if (!maska.test(nip))
	{
		error =  1;
//		alert('1');
	}
	cyfra = /[0-9]/;
	wagi[0] = 6;
	wagi[1] = 5;
	wagi[2] = 7;
	wagi[3] = 2;
	wagi[4] = 3;
	wagi[5] = 4;
	wagi[6] = 5;
	wagi[7] = 6;
	wagi[8] = 7;
	l = 0;
	for (i = 0;i < nip.length ;i++ )
	{
		if (cyfra.test(nip.charAt(i)))
			cyfry[l++] = nip.charAt(i);
	}
	if (l != 10)
	{
		// za malo cyfr
		//alert('error');
		error = 1;
	}
	suma = 0;
	for (i = 0;i < wagi.length ;i++ )
		suma += wagi[i] * cyfry[i];
	
	if (suma % modulo != cyfry[9])
	{

		error = 1;
	}
	if (error == 0)
	{
		return true;
	}
	else 
	{
		return window.confirm('Numer NIP jest nieprawidlowy ! Kontynuowac ?');
	}
}
/**
 * Fukncja sprawdza poprawnosc Numeru Konta Bankowego
 */
function checkNRB(nrb){
    var re = /\D/g;
    nrb = nrb.replace(re, '');
    if(nrb.length != 26){
        alert("Niepoprawna długość numeru konta bankowego!");
        return false;
    }else{
        return true;
    }
}
/**
 * Funkcja uruchamiana apo zdarzeniu submit na formularzu rozpoczynajacym proces odzyskiwania hasla.
 */
function checkRecoveryForm(){
    //laduje do zmiennej lokalnej reference do formularza
    var f = document.forms['recoverform'];
    //zmiennna przechowujaca komunikat ktory ewentualnie uzytkownik otrzyma.
    var s = 'Podane dane są niepoprawne:';
    //tutaj mam stan walidacji
    var isOK = true;
    //wyrazenie sprawdzajace poprawnosc nazwy konta FTP
    var usernameRgxp = new RegExp("^[a-z0-9]+[a-z0-9-_]*[a-z]+[a-z0-9-_]*$", "i");
    var cutKeiRgxp = /\.kei\.pl$/i;
    
    f.elements['kei_recover_username'].value = trim(f.elements['kei_recover_username'].value);
    f.elements['kei_recover_password'].value = trim(f.elements['kei_recover_password'].value);
    f.elements['kei_recover_domain'].value = trim(f.elements['kei_recover_domain'].value);
    //jesli uzytkownik wpisal: dsierzy.kei.pl w polu konto ftp zakaldam ze poprawna nazwa jego konta jest dsierzy
    var ftp = f.elements['kei_recover_username'].value.replace(cutKeiRgxp, '');
    if(ftp.length == 0){
        s += "\n - Pusta nazwa użytkownika";
        isOK = false;
    }else{
        if(!usernameRgxp.test(ftp) ){
            s += "\n - Niepoprawna nazwa konta FTP";
            isOK = false;
        }
    }

    if(f.elements['kei_recover_password'].value.length == 0 ){
        s += "\n - Puste hasło";
        isOK = false;
    }
    
    if(f.elements['kei_recover_domain'].value.length == 0){
        s += "\n - Pusta domena";
        isOK = false;        
    }else{
        if(!isDomain(f.elements['kei_recover_domain'].value)){
            s += "\n - Niepoprawna nazwa domeny";
            isOK = false;
        }
    }
    
    if(isOK == false){
        alert(s);
        return false;
    }else{
        return true;
    }
}
