

window['BB_LAYER_CAPPING']=

function(sCapp){
	var that = this;
	
	var cookieNamePrefix = 'bb_capp_';
	var cookieExpiresPrefix = 'bb_expirecapp_';
	var capp={}; 
	var domena;
	this.init=function(d){
		domena = d || null;
		var keyNum = 0;
		var ciacha = getAllCookies();
		
		createCappFromString(sCapp);

		for(var key in ciacha){
			++keyNum;
			capp[key][2] = parseInt(ciacha[key],10);
		}
		
		
		return isCappingActive();
	}
	
	var isCappingActive=function(){
		var ciacha = getAllCookies();
		var deadCookies = {};
		
		var returnValue = true;

		for (var key in capp) {
			if(!(key in ciacha))
				deadCookies[key]=0;
		}

		initCookies(deadCookies);
		
		for (var key in capp) {
			if( !capp[key][2] ) {
				returnValue = false;  break;
			}
		}
		if( returnValue )
			for (var key in capp) {
				if( capp[key][2] > 0 ) {
					decreaseCookie(key);
				}
			}
		return returnValue;
	}
	
	var getAllCookies=function(){
		return getCookiesWithNamePrefix(cookieNamePrefix);
	}
	
	var initCookies=function(tab){
		tab = tab || capp;
		for(var period in tab) {
			var now=new Date().getTime();
			var seconds=getSeconds(period, capp[period][1]);
			var exp=seconds>0?(now+1000*seconds):0; // dla cookie per session expires =0
			createCookieAbsDate(
				cookieNamePrefix+period,
				capp[period][0],
				exp
			);
			createCookieExpireAbsDate(
				period,
				exp
			);
			
		}
	}
	
	var createCappFromString=function(s){
		var t=s.split(',');
		var c;
		var times;
		var num;
		var period;
		for(var i=0;i<t.length;i++){
			c=t[i].split('/');
			times=parseInt(c[0],10);
			num=parseInt(c[1],10);
			period=c[1].substr(new String(num).length);
			capp[period]=[times,num, times];
		}
	}
	
	var decreaseCookie=function(period){
		--capp[period][2];
		updateCookie(period);
	}
	
	var updateCookie=function(period){
		createCookieAbsDate(cookieNamePrefix+period,capp[period][2],that.readCookieExpire(period));
	}

	var getSeconds=function(period, num){
		var mins=0;
		var hours=0;
		var days=0;
		var weeks=0;
		var months=0;
		switch(period){
			case 'min':
				mins=num; break;
			case 'h':
				hours=num; break;
			case 'd':
				days=num; break;
			case 'w':
				weeks=num; break;
			case 'mon':
				months=num; break;
			case 'ses':
				return -1;
		}
		// jesli session<0 to znak minus
		return 60*(mins+60*(hours+24*(days+7*weeks+30*months)));
	}

	var createCookie=function(name,value,seconds) {
		createCookieAbsDate(name,value,date.getTime()+(seconds*1000))
	}

	var createCookieAbsDate=function(name,value,time) {
		if (time) {
			var date = new Date(time);
			var expires = "; expires="+date.toGMTString();
		}
		else var expires = "";
		var d = domena?"; domain="+domena:"";
		document.cookie = name+"="+value+expires+"; path=/"+d;
	}

	this.readCookie=function(name) {
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return null;
	}
	
	var getCookiesWithNamePrefix=function(pref){
		var asoc={};
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			var eq = 0;
			var key, value;
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(pref) == 0){
				eq = c.indexOf('=');
				key = c.substring(pref.length, eq);
				value = parseInt(c.substring(eq+1),10);
				asoc[key]=value;
			}
		}
		return asoc;
	}
	var createCookieExpireAbsDate=function(name, time){
			createCookieAbsDate(cookieExpiresPrefix+name,time,time)
	}
	
	var createCookieExpire=function(name, seconds){
		createCookieExpireAbsDate(name,date.getTime()+(seconds*1000)); 
	}
	
	this.readCookieExpire=function(name) {
		return parseInt(that.readCookie(cookieExpiresPrefix+name),10);
	}
	var eraseCookie=function(name) {
		createCookie(name,"",-1);
	}

}





