//ąłśłąśłłąś

//alert = console.log;


function AppController(){
	var MO = this;
	var refLoader = null;
	this.queryData = [];
	
	//kontrolery
	this.controllers = [];
	
	this.init = function(){
		if(!IEBraker()){
			MO.queryData = parseQueryString(window.location.search.substr(1));
			setAjaxErrorHandler();
			refLoader = DialogFactory.get('loader');
			initControllers();
			initAuthMenu();
			collapsableBoxes();
			initializeDatepickers();
			userSessionKeeper();
						
			$.Lightbox.construct({
				show_linkback:	false,
				
				text: {
					download: 'otwórz w nowym oknie',
					image: 'zdjęcie',
					of: ' / ',
					close: 'zamknij X',
					closeInfo: 'kliknij gdziekolwiek aby zamknąć',
					help: {
						close: 'zamknij X',
						interact: ''
					}
				}
			});
			
			$("img.lightbox").each(function(){
				var img = $(this);
				var url = $(this).attr("src").replace(/tiny|small|medium/i, 'big');
				var title = $(this).attr("title");
				var a = '<a href="' + url + '" class="lightbox" title="' + title + '&nbsp;" />';
				img.wrap(a);
			});
			
			$("a.lightbox").lightbox();
			
			$('#fakeBody').show();
			$('#initialLoadingInfo').remove();
		}else{
		}
	};
	
	
	/** pokoazuje/chowa loader*/
	this.toggleLoader = function(b){
		if(b){
			refLoader.dialog('open');
		} else {
			refLoader.dialog('close');
		}
	};
	
	/**wyświetla ogólny komunikat o błędzie*/
	this.ErrorHandler = function(code, text){
		if(typeof(code) == 'undefined'){
			code = 1;
		}
		if(typeof(text) == 'undefined'){
			text = '<span style="text-align:justify;">Wystąpił błąd, który najprawdopodobniej jest w tej chwili naprawiany. Prosimy o cierpliwość i ponowną próbę później.</span>';
		}
		
		text+= '<br />Kod błędu: ' + code;
		
		DialogFactory.get('alert', { text:text});
	};
	
	
	/** rejestracja kontrolera */
	this.registerController = function(callback){
		MO.controllers.push(callback);
	};		
	
	/** inicjowanie kontrolerów */
	var initControllers = function(){
		for(var f in MO.controllers){
			MO.controllers[f].init();
		}
	};
	
	
	var setAjaxErrorHandler = function(){
		$("body").ajaxError(function(event, request, settings){
			MO.toggleLoader(false);
			if(request.status == 503){
				//DialogFactory.get('alert', { text: 'Usługa czasowo niedostępna.' });
			} else if(request.status == 401){
				//DialogFactory.get('alert', { text: 'Sesja użytkownika wygasła.<br/>Zaraz nastąpi przekierowanie na stronę logowania.', callbackOK : function(){
					window.location.reload();
				//} });
			} else if(request.status == 0){
				//DialogFactory.get('alert', { text: 'Nie można nawiązać połaczenia z serwerem.<br/> Sprawdź czy masz dostęp do Internetu.' });
			} else {
				//DialogFactory.get('alert', { text: 'Wystapił problem podczas połączenia z serwerem.' });
			}	   
		});
	};
	
	
    var parseQueryString = function(s) {
        var r, a, p;
        r = {};
        a = s.split('&');
        for (i = 0; i < a.length; i++) {
            p = a[i].split('=');
            if (p.length === 2 && p[0].length > 0) {
                r[p[0]] = unescape(p[1]);
            }
        }
        return r;
    };
    
    
	var collapsableBoxes = function(){	
		
		$('div.boxCollapsable').each(function(){
			var box = $(this);
			var html = '<div class="boxCollapseB">-</div>';
			box.find('.boxHeader').append(html);
			box.find('.boxCollapseB').click(function(){
				box.find('.boxBody').toggle();
				if(box.find('.boxBody:visible').length > 0){
					box.find('.boxCollapseB').html('-');
				} else {
					box.find('.boxCollapseB').html('+');
				}
			});
		});
		
		$('div.boxCollapsed').find('.boxBody').hide();
		$('div.boxCollapsed').find('.boxCollapseB').html('+');
	};
  
	var initAuthMenu = function(){
		if($("#authMenu")){
			var prev = $("#authMenu").css("left");
			$("#authMenu").hover(function(){
				$("#authMenu").css("left", "0");
			},
			function(){
				$("#authMenu").css("left", prev);
			});
		}
	};
	
	var initializeDatepickers = function(){
		var mn=['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec','Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'];
		var todaydate=new Date();
		var curmonth=todaydate.getMonth()+1;
		var curyear=todaydate.getFullYear();
		
		$("#kalendarzMain").html(buildCal(curmonth ,curyear, "main", "month", "daysofweek", "days"));
		scanfortoday = (curyear==todaydate.getFullYear() && curmonth==todaydate.getMonth()+1)? todaydate.getDate() : 0;
		$("h2#zegar").text(mn[curmonth-1] + " " + scanfortoday + ", " + curyear );
		
	};
	
	var userSessionKeeper = function(){
		_userSessionKeeperInterval = setInterval(function(){
			$.get('index.php?c=Ping');
		}, 2*60*1000);
	};	
	
	var IEBraker = function(){
		var rv = 10;
		if (navigator.appName == 'Microsoft Internet Explorer'){
			var ua = navigator.userAgent;
			var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
			if (re.exec(ua) != null){
				rv = parseFloat( RegExp.$1 );
			}
		}
		if(rv < 7.0){
			return true;
		}
		return false;
	};
	
	var 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>';
	};

	
		
}

var AC = new AppController();

$(function(){
	AC.init();
});