var kalendar = new Class({
	initialize:function(div,mesec,godina,maxProslost,maxBuducnost,daniUNedelji,lista){
		// Ucitavamo parametre
		this.mesec            = mesec;
		this.godina           = godina;
		this.maxProslost      = maxProslost;
		this.maxBuducnost     = maxBuducnost;
		this.meseci           = Array("Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec");
		this.lista            = $(lista);

		this.selektovano = new Hash.Cookie('selektovanDatum', {duration: 3600});

		if (this.selektovano.get('mesec')==null || this.selektovano.get('mesec')==''){
			this.selektovano.extend({
			'mesec': this.mesec,
			'godina': this.godina,
			'dan': this.danSelektovan
			});
		}
		else {
			this.mesec  = this.selektovano.get('mesec');
			this.godina = this.selektovano.get('godina');
			this.danSelektovan    = this.selektovano.get('dan');
		}

		// Dani u nedelji
		this.div = div;

		// Kreiramo element sa datumima
		this.divDatumi = new Element('div',{'id':'datumi', 'styles':{
		'position':'relative',
		'float':'left'
		}
		});
		this.divDatumi.inject(this.div);

		// Dani u nedelji
		//this.dani = ['П','У', 'С', 'Ч', 'П', 'С', 'Н'];
		this.dani = daniUNedelji;

		// Generisanje
		this.generisi(mesec, godina);
		this.sliderMesecDatum();
		this.obeleziDatume(this.mesec,this.godina);
		//this.events();
	},
	generisi:function(mesec,godina){
		// Praznimo container za datume
		$(this.divDatumi).empty();

		if (mesec !=='' && godina !=='' || godina !== null && mesec !== null){

			this.dan = new Date( this.meseci[mesec-1]+" 1, " + godina );

		}
		else {
			this.dan = new Date();
		}
		this.i = 0;


		// Prvo ispisujemo nazive dana
		this.dani.each(function(item){
			this.elTh = new Element('a', {
			'id':'thDan',
			'class':'th',
			'text':this.dani[this.i],
			'styles':{
			'float':'left',
			'display':'block',
			'text-align':'center'
			}
			},this);

			this.elTh.inject(this.divDatumi);
			this.i++;

		}, this);

		// Odredjujemo broj dana razlike u prethodnom mesecu
		this.prethodniMesec = this.mesec - 2;
		this.naredniMesec   = this.mesec;
		this.prethodnaGodina = this.godina;
		this.narednaGodina = this.godina;

		// Proveravamo da li je prethodni mesec manji od Januara
		if (this.prethodniMesec < 0){
			prethodniMesec = 11;
			--this.prethodnaGodina;
		}

		// Proveravamo da li je naredni mesec veci od Decembra
		if (this.naredniMesec > 11){
			this.naredniMesec = 0;
			this.narednaGodina++;
		}

		// Proveravamo da li dan pocinje sa nedeljom ili ponedeljkom
		this.trenutniDan = this.dan.getDay() -1;

		// Uzimamo zadnji dan u mesecu
		this.zadnjiDan   = new Date( this.meseci[mesec-1]+" "+this.brojDana( this.mesec-1, this.godina )+",  " + this.godina).getDay()-1;



		//
		if (this.trenutniDan < 0){
			this.trenutniDan = 6;
		}
		// Uzimamo broj dana prethodnog meseca
		this.prethodniMesecBrojDana = this.brojDana(this.prethodniMesec,this.prethodnaGodina);

		// Kreiramo elemente
		for(this.i=this.prethodniMesecBrojDana - (this.trenutniDan-1); this.i <= this.prethodniMesecBrojDana ; this.i++){
			this.elTd = new Element('a', {
			'id':'tdDan',
			'class':'tdNeaktivni',
			'text':this.i,
			'styles':{
			'float':'left',
			'display':'block',
			'text-align':'center'
			}
			},this);
			this.elTd.inject(this.divDatumi);
		}

		// Ispisujemo datume
		for ( this.i=1; this.i <= this.brojDana(this.mesec-1,this.godina); this.i++ ){
			var klasa = '';
			if (this.danSelektovan == this.i){
				klasa = 'selektovan';
			}
			this.elTd = new Element('a', {
			'id':'tdDan',
			'class':'tdAktivni '+klasa,
			'text':this.i,
			'styles':{
			'float':'left',
			'display':'block',
			'text-align':'center'
			}
			},this);
			if (this.danSelektovan == this.i){
				this.targetDatumi = this.elTd;
			}
			this.elTd.inject(this.divDatumi);
		}

		// Ispisujemo dane narednog meseca
		if (this.zadnjiDan < 6){
			this.pocetak = 6 - this.zadnjiDan;
			for ( this.i=1; this.i <= this.pocetak; this.i++ ){
				this.elTd = new Element('a', {
				'id':'tdDan',
				'class':'tdNeaktivni',
				'text':this.i,
				'styles':{
				'float':'left',
				'display':'block',
				'text-align':'center'
				}
				}, this);
				this.elTd.inject(this.divDatumi);
			}
		}
		// Trazimo JSON
		this.zatrazi();
	},
	brojDana:function daysInMonth(iMonth, iYear){
		return 32 - new Date(iYear, iMonth, 32).getDate();
	},
	sliderMesecDatum:function(){

		// Kreiramo element slider
		this.slider = new Element('div', {'id':'slider'});
		this.slider.inject($('datumi'),'after');

		// Ubacujemo element slider Container, content
		this.sliderMesecCont = new Element('div', {'id':'sliderMesecCont','html':'<a id="goreMesec"><</a><a id="doleMesec">></a>'});

		// Pravimo container za gore-dole i mesec container
		this.sliderGodinaCont = new Element('div', {'id':'sliderGodinaCont', 'html':'<a id="goreGodina"><</a><a id="doleGodina">></a>'});

		// Pravimo container za gore-dole i godina container
		this.sliderMesecCont.inject($(this.slider));
		this.sliderGodinaCont.inject($(this.sliderMesecCont), 'after');

		// Mesec
		this.sliderMesecContainer = new Element( 'div', {'id':'sliderMesecContainer', 'class':'sliderMesecContainer'});
		this.sliderMesecContent = new Element( 'div', {'id':'sliderMesecContent','class':'sliderMesecContent'});

		// Godina
		this.sliderGodinaContainer = new Element( 'div', {'id':'sliderGodinaContainer', 'class':'sliderGodinaContainer'});
		this.sliderGodinaContent = new Element( 'div', {'id':'sliderGodinaContent','class':'sliderGodinaContent'});

		// Ubacujemo slider cont i content mesec
		this.sliderMesecContainer.inject( $( 'goreMesec' ), 'after' );
		this.sliderMesecContent.inject($(this.sliderMesecContainer));

		// Ubacujemo slider cont i content godina
		this.sliderGodinaContainer.inject( $( 'goreGodina' ), 'after' );
		this.sliderGodinaContent.inject($(this.sliderGodinaContainer));

		// Uzimamo visinu datuma kalendara
		this.visinaDatuma            = $( 'datumi' ).getSize( ).y;

		// Odredjujemo visinu containera selektora
		this.elementVisina           = Math.ceil(this.visinaDatuma / 6);
		this.visinaContainerSelektor = this.elementVisina * 6;
		this.visinaContent           = this.visinaContainerSelektor * 2;

		// Kreiramo mesece
		for (this.i=1; this.i <= 12; this.i++){
			this.el = new Element('a', {
			'class':'sliderIzbor',
			'text':this.i,
			'styles':{
			'display':'block',
			'text-align':'center'
			}
			},this);
			// Insertujemo mesece u slider
			this.el.inject(this.sliderMesecContent);
		}

		// Kreiramo godine
		for (this.i=this.maxProslost; this.i <= this.maxBuducnost; this.i++){
			this.elGod = new Element('a', {
			'class':'sliderIzbor',
			'text':this.i,
			'styles':{
			'display':'block',
			'text-align':'center'
			}
			},this);
			// Insertujemo mesece u slider
			this.elGod.inject(this.sliderGodinaContent);
		}

		// Definisemo stranicu za mesec i godinu
		this.stranicaMesec    = 0;
		this.brStranicaMesec  = $$('#sliderMesecContent a.sliderIzbor').length-1;
		this.slideMesecVisina = $(this.sliderMesecContainer).getSize().x;

		this.stranicaGodina   = 0;
		this.brStranicaGodina = $$('#sliderGodinaContent a.sliderIzbor').length-1;
		this.slideGodinaVisina = $(this.sliderGodinaContainer).getSize().x;


		// Sredjujemo sirinu conta za godinu
		this.sirinaContainerGodina = $$('#sliderGodinaContent a.sliderIzbor').length * $($$('#sliderGodinaContent a.sliderIzbor')[0]).getSize().x;
		$('sliderGodinaContent').setStyle('width',this.sirinaContainerGodina);

		// Obelezavamo selektovane slidere
		$(this.sliderMesecContent).getChildren().each(function(item){

			if ($(item).get('text')==this.mesec){
				$(item).addClass('selektovan');
				this.mesecSelektovan = $(item);
				this.pripremaPromeneSlidera('mesec', $$('#sliderMesecContent a.sliderIzbor').indexOf(item));
			}
		},this);

		$(this.sliderGodinaContent).getChildren().each(function(item){
			if ($(item).get('text')==this.godina){
				$(item).addClass('selektovan');
				this.godinaSelektovan = $(item);
				this.pripremaPromeneSlidera('godina', $$('#sliderGodinaContent a.sliderIzbor').indexOf(item));
			}
		}, this);

		// Startujemo events
		this.events();
		
	},
	pripremaPromeneSlidera:function( slider, stranica ){

		switch(slider){
			case 'mesec':
			this.stranicaMesec = stranica;
			if (this.stranicaMesec < 0){
				this.stranicaMesec = 0;
			}
			if ( this.stranicaMesec > this.brStranicaMesec ){
				this.stranicaMesec = this.brStranicaMesec;
			}

			this.pomeriStranicu(slider,this.stranicaMesec);
			break;

			case 'godina':
			this.stranicaGodina = stranica;
			if (this.stranicaGodina < 0){
				this.stranicaGodina = 0;
			}
			if ( this.stranicaGodina > this.brStranicaGodina ){
				this.stranicaGodina = this.brStranicaGodina;
			}

			this.pomeriStranicu(slider,this.stranicaGodina);
			break;
		}
		
	},
	pomeriStranicu:function(slider, stranica){
		switch (slider){
			case "mesec":
			this.top = -( stranica * this.slideMesecVisina );

			//		$('contFoto').fade(0);
			var fx = new Fx.Morph(this.sliderMesecContent,{duration: 'short', transition: Fx.Transitions.Sine.easeOut});
			fx.start({
			'left':this.top
			});
			break;

			case "godina":
			this.top = -( stranica * this.slideGodinaVisina );

			//		$('contFoto').fade(0);
			var fx = new Fx.Morph(this.sliderGodinaContent,{duration: 'short', transition: Fx.Transitions.Sine.easeOut});
			fx.start({
			'left':this.top
			});
			break;
		}
	},
	obeleziElement:function(tip, el){
		switch(tip){
			case "mesec":
			// Skidamo obelezje sa prethodno selektovanog meseca
			$(this.mesecSelektovan).removeClass('selektovan');
			// Obelezavamo novoizabrani element
			this.mesecSelektovan = el;
			$(this.mesecSelektovan).addClass('selektovan');
			this.mesec = $(this.mesecSelektovan).get('text');
			this.selektovano.set('mesec',this.mesec);
			break;
			case "godina":
			// Skidamo obelezje sa prethodno selektovane godine
			$(this.godinaSelektovan).removeClass('selektovan');
			// Obelezavamo novoizabrani element
			this.godinaSelektovan = el;
			$(this.godinaSelektovan).addClass('selektovan');
			this.godina = $(this.godinaSelektovan).get('text');
			this.selektovano.set('godina',this.godina);
			break;
		}
		this.generisi(this.mesec, this.godina);
		this.obeleziDatume(this.mesec,this.godina);
	},
	events:function(){

		// Events za datume
		$("datumi").addEvent('click',function(event){
			try{
				this.targetDatumi.removeClass('selektovan');
			}
			catch(error){

			}
			this.targetDatumi = $(event.target);
			this.targetDatumi.addClass('selektovan');

			if ( $(this.targetDatumi).tagName == 'A' ){

				this.danSelektovan = $(this.targetDatumi).get('text');
				this.selektovano.set('dan',this.danSelektovan);
				$('desavanja_na_dan').set('text',this.danSelektovan+'.'+this.mesec+'.'+this.godina+'.');
				this.zatrazi();

			}
		}.bind(this));

		// Event za slidere
		$("slider").addEvent('click', function(event){
			this.target = $(event.target);

			if ( $(this.target).tagName == 'A' ){

				switch( $(this.target).get('id') ){
					case "doleMesec":
					this.stranicaMesec++;
					this.pripremaPromeneSlidera('mesec', this.stranicaMesec);
					break;

					case "goreMesec":
					--this.stranicaMesec;
					this.pripremaPromeneSlidera('mesec', this.stranicaMesec);
					break;

					case"doleGodina":
					this.stranicaGodina++;
					this.pripremaPromeneSlidera('godina', this.stranicaGodina);
					break;

					case  "goreGodina":
					--this.stranicaGodina;
					this.pripremaPromeneSlidera('godina', this.stranicaGodina);
					break;

					default:

					switch ($(this.target).get('text').length){
						case 1:
						this.obeleziElement('mesec', this.target);
						break;
						case 2:
						this.obeleziElement('mesec', this.target);
						break;
						case 4:
						this.obeleziElement('godina', this.target);
						break;
					}

					break;
				}
			}
		}.bind(this));
	},
	/*
		Obelezavamo datume na kalendaru
	*/
	obeleziDatume:function(mesec,godina){
		
		var req = new Request.JSON({
			url:'upravljaci/upr_kalendar/upr_kalendar_ajax.php',
			onComplete:function(datumi){
				this.dani = new Array();
				this.datumi_postojeci = $$('#datumi a[class*=tdAktivni]');
				
				this.datumi_postojeci.each(function(item){
					this.dani.push(item.get('text'));
				}.bind(this));
				
				if (datumi!==null){
				datumi.each(function(item){
					this.datumi_postojeci[this.dani.indexOf(item.dan)].addClass('sadrzi');
				}.bind(this));
				}
			}
		}).get({'mesec':mesec,'godina':godina,'naredba':'obelezi_datume_desavanja'});
	},
	zatrazi:function(){
		var jsonRequest = new Request.JSON({
			url: "upravljaci/upr_kalendar/upr_kalendar_ajax.php",
	
			onComplete: function(result,response){
				$('lista').empty();
				//console.log(response);
				if (result!==null){
				result.each(function(item){
					if ( item.link !== '' ){
						this.link = item.link;
					}
					else {this.link='#';}
					var elDesavanje = new Element('a',{
					'href':this.link,
					'html':'<strong>'+ item.vreme + '</strong>&nbsp;' +item.naziv
					});
					elDesavanje.inject('lista');

				}.bind(this));
				}

			},
			onFailure:function(xhr){
				//console.log(xhr);
			}
		}).get({'naredba':'desavanja','dan':  this.danSelektovan, 'mesec': this.mesec, 'godina':this.godina},this);
		//console.log(jsonRequest);
	}
});
