//śął

function Utils(){
    var MO = this;
	
	
    this.isFloat = function(l){
	return l.match(/^\d+(\.\d+)?$/);
    };

    this.priceOK = function(l){
	return l.match(/^\d+(\.\d+)?$/) && l>0;
    };
	
    this.cleanUpFloat = function(l, positive){
	positive = typeof(positive) !== 'undefined';
	var result = parseFloat(String(l).replace(',', '.').replace(/[^1234567890\.\-)]/g, ''));
	result = isNaN(result) ? '' : result ;
	return  !positive || (positive && result > 0) ? result : '';
    };
	
    this.cleanUpInt = function(l, positive){
	positive = typeof(positive) !== 'undefined';
	var pattern = positive ? /[^1234567890]/g : /[^1234567890\-)]/g;
	var result = String(l).replace(pattern, '');
	result = isNaN(result) ? '' : result;
	return  !positive || (positive && result > 0) ? result : '';
    };
	
    this.limitString = function(string, limit, dots){
	return string.length<limit ? string : string.substr(0,limit)+(typeof(dots)!='undefined' && dots ? '...' : '');
    };

    this.ping = function(url){
	$('body').append('<img src="' + url +'" style="display:none;" />');
    };

    /**
	*	walidacja numeru konta
	*/
    this.checkNRB = function(nrb) {
	if (nrb.length != 26){
	    return 0;
	}
	var W = [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];
	nrb += "2521";
	nrb = nrb.substr(2) + nrb.substr(0,2);
		
	var Z =0;
	for (var i = 0; i < 30; i++){
	    Z += nrb[29-i] * W[i];
	}
	return Z % 97 == 1;
    };
	
    /**
	*	łączenie 2 obiektów
	*/
    this.mergeObjects = function(o1, o2){
	var result = {};
	for(var i in o1){
	    result[i] = o1[i];
	}
	for(var i in o2){
	    result[i] = o2[i];
	}
	return result;
    };
	
	
    /**
	*	serializacja formularza (do postaci obiektu)
	*/
    this.getFormData = function(form){
	var f = $(form);
	var data = {};

	f.find("input[type=text], input[type=checkbox]:checked, textarea, input[type=radio]:checked, select").each(function(){
	    var el = $(this);
	    var elName = el.attr('name');
	    if(elName){
		data[elName] = el.val();
	    }
	});
	return data;
    };

    this.isEmail = function(email){
	return email.match(/(^(.*)\s<([A-Za-z0-9._%+-]+@[^.][A-Za-z0-9.-]+\.[a-zA-Z]{2,4})>$|^[A-Za-z0-9._%+-]+@[^.][A-Za-z0-9.-]+\.[a-zA-Z]{2,4}$)/);
    };
	
    /**
	 *  parsowanie templatu
	 */
    this.parseTemplate = function(template, data){
	for(var k in data){
	    template = template.replace(new RegExp("\\{\\$" + k + "\\}", "g"), data[k]);
	}
	return template;
    }

    /**
	 * generowanie kalendarza
	 **/


    this.buildCal = function(m, y, cM, cH, cDW, cD){
	var mn=['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec','Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'];
	var day=['Nd', 'Pn', 'Wt', 'Śr', 'Cz', 'Pt', 'So'];
	var dim=[31,0,31,30,31,30,31,31,30,31,30,31];

	var oD = new Date(y, m-1, 1); //DD replaced line to fix date bug when current day is 31st
	oD.od=oD.getDay()+1; //DD replaced line to fix date bug when current day is 31st

	var todaydate=new Date(); //DD added
	var scanfortoday=(y==todaydate.getFullYear() && m==todaydate.getMonth()+1)? todaydate.getDate() : 0; //DD added

	dim[1]=(((oD.getFullYear()%100!=0)&&(oD.getFullYear()%4==0))||(oD.getFullYear()%400==0))?29:28;

	var t='<div class="'+cM+'"><table id="MeteorKalendarz" class="'+cM+'" cols="7" cellpadding="0" cellspacing="0"><tr class="month">';
	t+='<td colspan="7" class="'+cH+'">'+mn[m-1]+' - '+y+'</td></tr><tr class="daysofweek">';
	for(s=0;s<7;s++)t+='<td class="'+cDW+'">'+ day[s] +'</td>';
	t+='</tr><tr align="center">';
	for(i=1;i<=42;i++){
	    var x=((i-oD.od>=0)&&(i-oD.od<dim[m-1]))? i-oD.od+1 : '&nbsp;';
	    if (x==scanfortoday) //DD added
		x='<span id="today">'+x+'</span>' //DD added
	    t+='<td class="'+cD+'">'+x+'</td>';
	    if(((i)%7==0)&&(i<36))t+='</tr><tr align="center">';
	}

	return t+='</tr></table></div>';
    };
}


