var op={
	iff:null,
	mode:'all',
	langs:['PL','DE'],
	actual:null,
	apage:1,
	allowedLangs:{'polskojęzyczne':'PL','niemieckojęzyczne':'DE'},
	urlForMarks: temp_path + 'include/hib_connector.php?kid=111033&view=opinion&format=json&hib_mode=hotel_rating',
	urlForDetailedMark: temp_path + 'include/hib_connector.php?kid=111033&view=opinion_det&format=json&hib_mode=hotel_rating',
	data:{det_mark:{}},
	mainElementSelector : "#hib_right",
	isToolTipVisible:false,
	mainElement:null,
	modesTranslation:{pair:'Para',single:'Singiel',family:'Rodzina',friend:'Przyjaciele',all:'Wszyscy'},
	typesTranslation:{vacation:'Urlop',delegation:'Delegacja',wellnes:'Wellnes',ski:'Narty',other:'Inny'},
	// inicjalizacja wyświetlania opinii
	init:function(iff){
		this.iff = iff;
		this.mainElement = $(this.mainElementSelector);
		this.getData();
	},

	// pobranie danych do widoku listy opinii
	getData:function(){
		if (!this.data.marks) this.data.marks = {};
		$.getJSON( this.urlForMarks+ '&iff=' + this.iff + '&mode=' + this.mode+ '&lang='+ this.getLangs()+ '&apage='+ this.apage  , function(tmp){
			op.data.details = tmp.details;
			op.data.modes = tmp.details.type.split(',');
			op.data.modes.push('all');
			op.data.mark_headers = tmp.mark_headers;
			op.data.marks[op.mode] = tmp.marks;
			// wygenerowanie i wyświetlenie widoku pobranych danych
			op.showOpinion();			
		});
	},

	// pobranie danych do szczegółowego widoku jednej opinii
	getDetailedData:function(){
		//op.actual_mark_id = $(this).data('opinion');
		var num = op.actual = $(this).data('opinion');

		// jeżeli dane już są uniknięcie powtórnego pobierania
		if (!op.data.det_mark[num]){
			$.getJSON( op.urlForDetailedMark+ '&iff=' + op.iff + '&mode=' + op.mode + '&n=' + num + '&lang='+ op.getLangs() , function(tmp){
				op.data.det_mark[num] = {};
				op.data.det_mark[num].comments = tmp.comments;
				op.data.det_mark[num].details = tmp.details;
				op.data.det_mark[num].marks = tmp.marks;
				op.actual_mark_id = tmp.details.mark_id;
				// wygenerowanie i wyświetlenie widoku pobranych danych
				op.showDetailedOpinion();
			});
		} else {
			op.showDetailedOpinion();
		}
	},

	getLangs:function(){
		var l='';
		for (var n in this.langs){
			if(this.langs[n]!='') l+=this.langs[n]+'|';
		}
		return l.slice(0,-1);
	},

	createStructure:function(){
		var out = '<div class="tpl1_container">';
		out += '<div class="op_title"><div class="floatLeft" style="">Opinie gości <img src="/kunden_parameter/urlop/ibe_v2/images/info_hotelbewertung.gif" alt=""/></div><div class="langs floatRight"></div><div class="clearAll" style=""></div></div><ul class="op_menu"></ul><div class="op_marks"></div><div class="op_marks_list"></div>';
		out += '<div class="detailed"></div>';
		out += '<div class="clearAll"></div>';
		out += '</div>';
		this.mainElement.html(out);

		$('div.detailed').hide(); //css('display','none');
	},

	showMenu:function(){
		var out='';

		for (var n in this.data.modes){
			out+='<li';
			if (this.data.modes[n]==op.mode) out+=' class="selected"';
			out+='><span>'+this.modesTranslation[this.data.modes[n]]+'</span></li>';
		}
		$('ul.op_menu').html(out);

		for (var n in this.data.modes){
			$($('ul.op_menu').selector+' li:eq('+n+')').data('op_mode',this.data.modes[n]).click(function(){
				op.mode = $(this).data('op_mode');
				op.getData();
			});
		}
	},

	showLangs:function(){
		var out='';
		for (var n in this.allowedLangs){
			out+='<img src="/kunden_parameter/urlop/ibe_v2/images/opinions/flag_'+this.allowedLangs[n].toLowerCase()+'.png" alt="'+this.allowedLangs[n].toUpperCase()+'"';
			if (jQuery.inArray(this.allowedLangs[n], this.langs)==-1) out+=' class="inactive" title="pokaż '+n+' opisy"'; else out+='title="ukryj '+n+' opisy"';
			out+=' />';
		}
		$('div.langs').html(out);
		$('div.langs img').click(function(){
			// wyjście jeżeli kliknięto na jedyną aktywną flagę
			if (($('div.langs img').length - $('div.langs img.inactive').length)==1 && !$(this).hasClass('inactive')) return;

			//var clickedEl =  $(this);
			var clickedLang = $(this).attr('alt');
			var i=jQuery.inArray(clickedLang, op.langs);

//			clickedEl.toggleClass( 'inactive' );
			if (i==-1) { // dodanie elementu do tablicy
				op.langs.push(clickedLang);
			} else { // usunięcie elementu z tablicy
				op.langs.splice(i,1);
			}
			//op.createStructure();
			op.getData();

		});
	},

	showHeaders:function(){
		if (this.data.mark_headers){
			var out='<h1>Opinie gości(' + this.data.details.oceny + ')</h1>';
			var headers = this.data.mark_headers;

			for (n in headers){
				if (headers[n].type == this.mode || this.mode=='all'){
					var bg_movement=(headers[n].avg*100/6)+"%"; 
					out+='<div class="opinion row'+(n%2)+'"><h1>'+headers[n].title+'</h1>';
					out+='<table><tr><th>'+headers[n].signature+'</th><td>'+headers[n].age_range+'</td></tr>';
					out+='<tr><th>wystawiono</th><td>'+headers[n].fill_form_date.substr(0,7)+'</td></tr>';
					out+='<tr><th>podróżujący</th><td>'+headers[n].others.substr(13)+'</td></tr>';
					out+='</table>';
					if (headers[n].recomended==1){
						out+='<div class="recom">Polecany<br/><img src="/kunden_parameter/urlop/ibe_v2/images/opinions/polec.png" alt=""/></div>';
					} else {
						out+='<div class="recom">Niepolecany<br/><img src="/kunden_parameter/urlop/ibe_v2/images/opinions/niepolec.png" alt=""/></div>';
					}
					out+='<div class="summary">'+((headers[n].summary!='')?(headers[n].summary.substr(0,40)+'... '):'')+'<br><span>[+&nbsp;więcej]</span></div>';
					
					out+='<div class="mark">'+headers[n].avg+'<br /><div class="opinionsRecommend" style=""><div class="opinionsRecommendFill" style="width: '+bg_movement+';"/></div></div>';
					
					out+='</div>';
				}
			}

			// paginacja
			var allPages = Math.ceil(this.data.details.oceny/10);

			if (allPages>1)	{
				//out+='<div class="pager"><img alt="" src="/kunden_parameter/tui/ibe_v2/images/pfeil_'+((this.apage==1)?'grau':'blau')+'_l.gif"/><ul>';
				out+='<div class="pager"><div class="floatLeft" style="width: 40px;">Strona</div> <ul class="">';
				for (var n=1; n <= allPages ; n++) {
					out+='<li'+((n==this.apage)?' class="current"':'')+'>'+n+'</li>';
				}
				out+='</ul></div>';
				//out+='</ul><img alt="" src="/kunden_parameter/tui/ibe_v2/images/pfeil_'+((this.apage==allPages)?'grau':'blau')+'_r.gif"/></div>';
			}

			$('div.op_marks_list').html(out);

			for (n in headers){
				$($('div.op_marks_list').selector+' .opinion h1:eq('+n+')').data('opinion',(this.apage-1)*10+ parseInt(n)).click(op.getDetailedData);		
				$($('div.op_marks_list').selector+' .opinion .summary span:eq('+n+')').data('opinion',(this.apage-1)*10+parseInt(n)).click(op.getDetailedData);		
			}
			if (allPages>1)	{
				if (this.apage>1) $('.pager span:eq(0)').data('num',this.apage-1).click(this.changePage);
				if (this.apage<allPages) $('.pager span:eq(1)').data('num',this.apage+1).click(this.changePage);
				for (var n=0; n<allPages; n++ ){
					if (n+1!=this.apage) $('.pager li:eq('+n+')').data('num',n+1).click(this.changePage);
				}
			}
		}
	},
	// zmiana aktualnej strony listy opinii
	changePage:function(){
		op.apage=$(this).data('num');
		op.getData();
	},

	// wyświetlanie widoku listy opinii
	showOpinion:function(){
		this.createStructure();

		$('div.op_marks').html( this.showMarks( this.data.marks[this.mode] ));
		this.attachMarksToolTip( this.data.marks[this.mode] );
		this.showMenu();
		this.showHeaders();
		this.showLangs();
	},


	// wyświetlanie widoku szczegółowego jednej opinii
	showDetailedOpinion:function(){
		// ukrywanie divów z poprzedniego widoku
		// odsłanianie z bierzącego
		$('div.detailed').slideDown(500);
		$('div.langs, div.op_marks_list, div.op_title, ul.op_menu, div.op_marks').slideUp(500);
		$('div.op_marks .opinions').hide().css('height','0');

		// inicjalizacja zmiennych
		var out='<div class="op_navi" style="">';
		out+='<div class="op_navi" style="">';
			out+='<span class="inactive"><img src="/kunden_parameter/urlop/ibe_v2/images/steps_strzalka_lewa_kolo_fiolet.gif" alt="" style="vertical-align: middle;" /> poprzednia opinia</span>';
			out+='<span>Powrót</span>';
			out+='<span class="inactive">następna opinia <img src="/kunden_parameter/urlop/ibe_v2/images/steps_strzalka_prawa_kolo_fiolet.gif" alt="" style="vertical-align: middle;" /></span>';
		out+='</div>';
		var additional = '';
		var d =this.data.det_mark[ this.actual ];


		var x=111-(111/6*d.details.avg)+'px 0;';

		var xxx=(100/6*d.details.avg)+'%';

		
		
		out+='<div class="details"><h1>Ocena hotelu wystawiona przez '+d.details.signature+'</h1><table>';
		out+='<tr><th>Data oceny:</th><td>'+d.details.fill_form_date.substr(0,7)+'</td><th>Rodzaj:</th><td>'+this.typesTranslation[d.details.typ]+'</td></tr>';
		out+='<tr><th>Podróż jako:</th><td>'+this.modesTranslation[d.details.type]+'</td>';
		out+='<th>Wiek:</th><td>'+((d.details.age_range[0]=='>')?'>70':d.details.age_range.substr(0,2)+'-'+d.details.age_range.substr(2,4))+' lat</td></tr>';
		out+='</table><div>Hotel '+((d.details.recomended == '1')?'polecany':'niepolecany')+'<br /><img src="/kunden_parameter/urlop/ibe_v2/images/opinions/recommend_'+((d.details.recomended == '1')?'yes':'no')+'.gif" alt="" /></div>';
		//out+='<div>Średnia ocena: '+d.details.avg+'<img src="/kunden_parameter/urlop/ibe_v2/images/opinions/mark_big_mask.png" class="mark_pic" alt="" style="background-position:-'+x+'" /></div>';
		out+='<div style="margin: 0px;"><div style="margin-left: 5px;">Średnia ocena: '+d.details.avg+'</div><div class="opinionsRecommend" style="width: 100px; height: 15px;"><div class="opinionsRecommendFill" style="margin: 0px 0px 0px 0px; width: '+xxx+'; height: 15px;"/></div></div></div>';
		out+='</div>';

		// generowanie szczegółowej listy ocen
		out += this.showMarks( d.marks );

		// generowanie komentarzy gościa hotelowego
		if (d.details.summary!='') additional+='<h2>Ogólnie:</h2><p>'+d.details.summary+'</p>';
		for (n in d.comments){
			if (d.comments[n]!='' && d.comments[n]!='Dodaj swój komentarz') additional+='<h2>'+this.marks[n].name+':</h2><p>'+d.comments[n]+'</p>';
		}
		if (d.details.directions!='') additional+='<h2>Wskazówki:</h2><p>'+d.details.directions+'</p>';
		if (additional!='')	out += '<div class="additionals"><h1>Dodatkowe komentarze</h1>'+additional+'</div>';

		// wyświetlanie danych
		$('div.detailed').html(out);

		// podłączenie obsługi ToolTip'a
		this.attachMarksToolTip(d.marks);

		// podłączenie obsługi linków nawigacyjnych
		if (this.actual < this.data.details.oceny-1) $('.op_navi span:eq(2)').data( 'opinion' , this.actual+1 ).click(this.getDetailedData).removeClass('inactive');	
		if (this.actual > 0 ) $('.op_navi span:eq(0)').data( 'opinion' , this.actual-1 ).click(this.getDetailedData).removeClass('inactive');	
		$('.op_navi span:eq(1)').click(this.exitDetailedOpinion);
	},


	// przełączenie z widoku szczegółowego jednej opinii do widoku listy wszystkich opinii
	exitDetailedOpinion:function(){
		// zamknięcie ToolTipa
		op.closeToolTip();
		// przełączenie elementów składających się na widok
		$('div.langs, div.op_title, div.op_marks_list, ul.op_menu, div.op_marks').slideDown(500);
		$('div.op_marks .opinions').show().css('height','auto');
		$('div.detailed').slideUp(500);
	},


	attachMarksToolTip:function(m){
		// podłączanie obsługi ToolTip'a do wszystkich elementów
		$('.opinions:visible h1, .opinions:visible img, .opinions:visible span').data('marks',m
		
		// przy ruszseniu myszką ToolTip należy przesunąć
		// w chwili pierwszego poruszenia myszką ToolTip należy wygenerować
		).mousemove(
			function( e ){

				// generowanie nowego ToolTipa
				if (op.isToolTipVisible==false){

					// wstawienie ToolTipa do struktury dokumentu
					$('.opinions:visible').after('<div id="op_cloud"></div>');
					var inner = '<table>';
					var cat_id = this.parentNode.id.substr(2,1);
					var mark_data = $(this).data('marks');

					// generowanie zawartości
					for (n in op.marks[cat_id].details){
						inner+='<tr><th>'+op.marks[cat_id].details[n]+'</th>';
						if (mark_data['m_'+cat_id+'_'+n]) {
							var bg_movement=(mark_data['m_'+cat_id+'_'+n]*100/6)+"%"; 
							//inner+='<td><img src="/kunden_parameter/tui/ibe_v2/images/mark.gif" style="background-position:'+bg_movement+'"></td><td>'+mark_data['m_'+cat_id+'_'+n]+'</td></tr>';
							inner+='<td><div class="opinionsRecommend" style=""><div class="opinionsRecommendFill" style="width: '+bg_movement+';"/></div></td><td>'+mark_data['m_'+cat_id+'_'+n]+'</td></tr>';
						} else {
							inner+='<td colspan="2">brak oceny</td>';
						}
					}
					inner+='</table>';

					// wypełnienie elementu zawartością
					$('#op_cloud').html( inner );

					// ustawienie znacznika wskazującego, że ToolTip jest widoczny
					op.isToolTipVisible=true;
				}

				// po każdym poruszeniu myszą korekta położenia
				$('#op_cloud').css({'left':e.pageX+10,'top':e.pageY+10});

			}
		).mouseout(
			// zamknięcie ToolTipa w chwili opuszczenia obszaru do którego jest podłączony
			op.closeToolTip
		);
	},

	closeToolTip:function(){
		$('#op_cloud').remove();
		op.isToolTipVisible=false;
	},

	showMarks:function(hopinions){
		var out='<div class="opinions" >';
		for (var b in this.marks) {
			var bg_movement=(hopinions['m_'+this.marks[b].db_cat+'_0']*100/6)+"%"; 
			out+=('<div class="mark" id="m_'+this.marks[b].db_cat+'"><h1>' + this.marks[b].name + '</h1>');
			if (hopinions['m_'+this.marks[b].db_cat+'_0']) {
				var m = hopinions['m_'+this.marks[b].db_cat+'_0'] * 67/6 ;
				//out+=('<img src="/kunden_parameter/tui/ibe_v2/images/mark.gif" style="background-position:'+bg_movement+'"><span>'+hopinions['m_'+this.marks[b].db_cat+'_0']+'</span>');
				out+=('<div class="opinionsRecommend" style=""><div class="opinionsRecommendFill" style="width: '+bg_movement+';"/></div><span>'+hopinions['m_'+this.marks[b].db_cat+'_0']+'</span>');
			} else {
				out+=('brak oceny ogólnej');
			}
		out+=('</div>');
		}
		out+=('</div>\n');
		return out;
	},



	marks:{
		1:{name:'Hotel',db_cat:'1',page:2,details:{
			'1':'Czystość',
			'2':'Polecany dla rodziny',
			'3':'Polecany dla pary',
			'4':'Polecany dla singli',
			'5':'Polecany dla grupy',
			'6':'Godny polecenia',
			'0':'Ogólna ocena'}},
		2:{name:'Pokoje',db_cat:'2',page:2,details:{
			'1':'Czystość',
			'2':'Wielkość pokoju',
			'3':'Wyposażenie',
			'4':'Łazienka',
			'5':'Wystrój',
			'0':'Ogólna ocena'}},
		3:{name:'Obsługa',db_cat:'3',page:3,details:{
			'1':'Serwis hotelowy',
			'2':'Polskojęzyczny',	  
			'3':'Recepcja',
			'0':'Ogólna ocena'}},
		4:{name:'Położenie',db_cat:'4',page:3,details:{
			'1':'Odległość od plaży',
			'2':'Odległość od lotniska',
			'3':'Dostępność sklepów',
			'4':'Restauracje',
			'5':'Imprezy',
			'6':'Czas wolny',
			'0':'Ogólna ocena'}},
		5:{name:'Jedzenie',db_cat:'5',page:4,details:{
			'1':'Czystość',
			'2':'Wyżywienie',
			'3':'Napoje',
			'4':'All Inclusive',
			'0':'Ogólna ocena'}},
		6:{name:'Sport',db_cat:'6',page:4,details:{
			'1':'Możliwość upr. sportu',
			'2':'Sprzęt sportowy',
			'3':'Animacje',
			'4':'Tenis',
			'5':'Pole golfowe',
			'6':'Fitness',
			'0':'Ogólna ocena'}},
		7:{name:'Plaża',db_cat:'7',page:5,details:{
			'1':'Łatwość dotarcia',
			'2':'Wielkość',
			'3':'Wyposażenie',
			'4':'Gastronomia',
			'5':'Możliwość upr. sportu',
			'0':'Ogólna ocena'}},
		8:{name:'Basen',db_cat:'8',page:5,details:{
			'1':'Czystość',
			'2':'Wielkość',
			'3':'Godny polecenia',
			'4':'Zjeżdżalnia',
			'0':'Ogólna ocena'}},
		9:{name:'Rodzinny',db_cat:'9',page:6,details:{
			'1':'Animacje dla dzieci',
			'2':'Wyżywienie dla dzieci',
			'3':'Basen dla dzieci',
			'4':'Opieka nad dziećmi',
			'5':'Plac zabaw',
			'0':'Ogólna ocena'}}
	}
}
