var op={
	iff:null,
	kid:111004,
	mode:'all',
	langs:['PL','DE'],//,'DE'],
	apage:1,
	allowedLangs:{
		'polskojęzyczne':'PL',
		'niemieckojęzyczne':'DE'
	},
	urlForMarks: '?WSfile=hotel_rating&view=opinion&format=json&hib_mode=hotel_rating',
	urlForDetailedMark: '?WSfile=hotel_rating&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,el){
	this.iff = iff;
	this.mainElement = el;
	this.getData();
},
	
config:{
	mark_img:'/kunden_parameter/travelplanet/ibe_v2/images/meter-80.png',
	mark_img_width:80,
	show_detailed:'<span><a href="#" onclick="return false;"><span>więcej</span></a> »</span>',
	structure:'<div class="op_title"></div><div class="langs"></div><ul class="op_menu"></ul><div class="op_marks"></div><div class="detailed"></div><div class="pager op_pager"></div>',
	op_navi:'<div class="op_navi"><a class="navi"><span>« poprzednia opinia</span></a><a class="navi active"><span>powrót</span></a><a class="navi"><span>następna opinia »</span></a></div>'
		
},
	
texts:{
	mark_tpl:'({mark})',
	recomended:'<img src="/kunden_parameter/travelplanet/ibe_v2/images/hib/polec.png" alt="Polecany" title="Polecany"/>',
	notrecomended:'<img src="/kunden_parameter/travelplanet/ibe_v2/images/hib/niepolec.png" alt="Niepolecany" title="Niepolecany"/>'
},

// pobranie danych do widoku listy opinii
getData:function(){
	if (!this.data.marks) this.data.marks = {};
	$.getJSON( hib.config.connector + this.urlForMarks + '&kid='+this.kid+'&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');
	// jeżeli dane już są uniknięcie powtórnego pobierania
	if (!op.data.det_mark[op.actual_mark_id]){
		//			$.getJSON( hib.config.connector + op.urlForDetailedMark+ '&kid='+op.kid+'&iff=' + op.iff + '&mode=' + op.mode + '&mark_id=' + op.actual_mark_id+ '&lang='+ op.getLangs() , function(tmp){
		$.getJSON( hib.config.connector + op.urlForDetailedMark+ '&kid='+op.kid+'&iff=' + op.iff + '&mode=' + op.mode + '&n=' + op.actual_mark_id+ '&lang='+ op.getLangs() , function(tmp){
			op.data.det_mark[op.actual_mark_id] = {};
			op.data.det_mark[op.actual_mark_id].comments = tmp.comments;
			op.data.det_mark[op.actual_mark_id].details = tmp.details;
			op.data.det_mark[op.actual_mark_id].marks = tmp.marks;
			// 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(){
	this.mainElement.html(this.config.structure);
	$('div.detailed').hide();
},

showMenu:function(){
	var out='';

	for (var n in this.data.modes){
		if (this.modesTranslation[this.data.modes[n]]) {
			out+= '<li' + ((this.data.modes[n]==op.mode)?' class="selected"':'') + '><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.apage = 1;
			op.mode = $(this).data('op_mode');
			op.getData();
		});
	}
},

showLangs:function(){
	var out='';
	for (var n in this.allowedLangs){
		out+='<img src="/kunden_parameter/tui/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(){
		op.apage = 1;
		// 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) return
	var out=[];
	var headers = this.data.mark_headers;

	var num=0;
	for (var n in headers){
		if ( ( headers[n].type == this.mode || this.mode=='all' ) && num<10 ){
			var markval = headers[n].avg;
			out.push ( '<div class="opinionHeaders">');
			out.push('<h3>'+unescape(headers[n].title)+'</h3>' );
			out.push( this.drawMarkLine( markval, 'średnia ocena użytkownika') )
			out.push( '<p class="summary">'+((headers[n].summary!='')?(unescape(headers[n].summary.substr(0,180))+'... '):'')+this.config.show_detailed+'</p>' );
			out.push( (headers[n].recomended==1)?this.texts.recomended:this.texts.notrecomended  );
			out.push( '<p>Dodał: '+headers[n].signature+' ('+headers[n].fill_form_date+') </p>' );
			out.push( '</div>' );
			num++;
		}
	}
	$('div.detailed').after(out.join(''));




	for (var n in headers){
		//$($('div.op_marks_list').selector+' .opinion h1:eq('+n+')').data('opinion',headers[n].mark_id).click(op.getDetailedData);
        
		$('.opinionHeaders .summary>span:eq('+n+')').data('opinion',(this.apage-1)*10+parseInt(n)).live('click', op.getDetailedData );
	}

	//var ilosc = this.countVisibleOpinions();
	//if (ilosc>10) {

	if (this.data.details.oceny>10) {
		var op_pager = new pager( this.data.details.oceny, this.apage-1, 10,$('div.op_pager:eq(0)').get(0));
		with (op_pager) {
			nextLink='<u><span>następne</span></u>';
			prevLink='<u><span>poprzednie</span></u>';
			fieldTpl='<span>{val}</span>';
			onclick = function(a){
				op.changePage(a)
			};
			majorElement = '';
			minorElement = 'a';
			draw();
			}
	}
},
// zmiana aktualnej strony listy opinii
changePage:function( a ){
	op.apage = a / 10 + 1;
	op.getData();
},
	
countVisibleOpinions:function(){ 
	var c=0;
	for (var i in this.data.mark_headers){
		var h = this.data.mark_headers[i];
		if ((h.type == this.mode || this.mode=='all' ) && $.inArray( h.lang, this.langs )!=-1) c++;
	}
	return c;
},

// wyświetlanie widoku listy opinii
showOpinion:function(){
	this.createStructure();
	var h = this.showMarks( this.data.marks[this.mode] );
	$('div.op_marks').html( h );
	this.showAdditionalMark();
	this.attachMarksToolTip( this.data.marks[this.mode], '.op_marks div.mark_line' );
	this.showMenu();
	this.showHeaders();
	this.showLangs();
	hib.fitHeight();
},
	
showAdditionalMark:function(){
		
	var out = ['<div class="op_details">'];
	out.push( this.drawMarkLine( this.data.details.srednia , '<strong>Średnia ocena hotelu</strong>' ));
	//		out.push( this.drawMarkLine( this.evalAverageMark(this.data.modes[this.mode]) , 'Średnia w kat. '+ this.modesTranslation[this.mode] ));
	out.push( '<div class="mark_line"><span>Liczba ocen:</span><div class="op_detail_spacer"><strong>' + this.data.details.oceny + '</strong></div></div>');
	out.push( '<div class="mark_line"><span>% rekomendacji:</span><div class="op_detail_spacer"><strong>' + this.data.details.poleca_proc + ' %</strong></div></div>');
	out.push('</div>');
	$('div.op_marks').after(out.join(''));
},
		
// wyświetlanie widoku szczegółowego jednej opinii
showDetailedOpinion:function(){
	// ukrywanie divów z poprzedniego widoku
	// odsłanianie z bierzącego
	$('div.detailed').show();
	$('.langs, .opinionHeaders, .op_title, .op_details, .op_menu, .op_marks, .op_pager').hide( );

	// inicjalizacja zmiennych
	var out = [this.config.op_navi];
	var additional = '';
	var d = this.data.det_mark[ this.actual_mark_id];

	out.push('<h1>' + unescape(d.details.title) + '</h1>');
	out.push('<h2>Ocena wystawiona przez: ' + unescape(d.details.signature) + '</h2>' );
	out.push('<div class="additionals"><div class="det2"><table>')
	out.push('<tr><th>Data wystawienia:</th><td>'+d.details.fill_form_date+'</td></tr>')
	out.push('<tr><th>Rodzaj podróży:</th><td>'+this.typesTranslation[d.details.typ]+'</td></tr>')
	out.push('<tr><th>Podróż jako:</th><td>'+this.modesTranslation[d.details.type]+'</td></tr>');
	out.push('<tr><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.push('<tr><th>Rekomendacja:</th><td>'+((d.details.recomended)?'TAK':'NIE')+'</td></tr>');

	out.push('</table>')
	out.push(this.showMarks( d.marks ));
	out.push('</div>')

	// generowanie komentarzy gościa hotelowego
	if (d.details.summary!='') additional+='<h2>Ogólnie:</h2><p>'+d.details.summary+'</p>';
	for (var n=0; n<d.comments.length; n++){
		if (d.comments[n]!='' && d.comments[n]!='Dodaj swój komentarz' && this.marks[n+1]) {
			additional+='<h2>'+this.marks[n+1].name+':</h2><p>'+unescape(d.comments[n])+'</p>';
		}
	}
	if (d.details.directions!='') additional+='<h2>Wskazówki:</h2><p>'+unescape(d.details.directions)+'</p>';
	if (additional!='') out.push('<h1>Dodatkowe komentarze</h1>'+unescape(additional)+'</div>');

	// wyświetlanie danych
	$('div.detailed').html(out.join(''));

	// podłączenie obsługi ToolTip'a
	this.attachMarksToolTip(d.marks, '.additionals .op_marks_cloud div.mark_line');

	// podłączenie obsługi linków nawigacyjnych
	if ( op.actual_mark_id < op.data.details.oceny - 1 ) {
		$('.op_navi .navi:eq(2)').data('opinion',op.actual_mark_id+1).click(this.getDetailedData).addClass('active');
	}
	if ( op.actual_mark_id > 0 ) {
		$('.op_navi .navi:eq(0)').data('opinion',op.actual_mark_id-1).click(this.getDetailedData).addClass('active');
	}
	$('.op_navi span:eq(1)').click(this.exitDetailedOpinion);

	hib.fitHeight();
},

// przełączenie z widoku szczegółowego jednej opinii do widoku listy wszystkich opinii
exitDetailedOpinion:function(){
	// zamknięcie ToolTipa
	op.closeToolTip();
	$('.langs, div.opinionHeaders, .op_title, .op_details, .op_menu, .op_marks, .op_pager').show();
	$('div.detailed').hide();
	hib.fitHeight();
},
	
attachMarksToolTip:function(m, el){

	var num=0;
	// podłączanie obsługi ToolTip'a do wszystkich elementów
	// przy ruszseniu myszką ToolTip należy przesunąć
	// w chwili pierwszego poruszenia myszką ToolTip należy wygenerować

	$(el).data('marks',m)
	.each(
		function(){
			this.id='m_'+(++num)+'_0'
		}
		)
	.mousemove(
		function( e ){
			// generowanie nowego ToolTipa
			if (op.isToolTipVisible==false){

				// wstawienie ToolTipa do struktury dokumentu
				$('.op_marks').after('<div id="op_cloud"><div class="rShadow"></div><div class="bShadow"></div><div class="rbShadow"></div></div>');
				//var inner = ['<dl>'];
					
				var inner = ['<div class="op_marks_cloud">'];
				var cat_id = this.id.substr(2,1);
				var mark_data = $(this).data('marks');

				// generowanie zawartości
				for (n in op.marks[cat_id].details){
					inner.push(op.drawMarkLine( mark_data['m_'+cat_id+'_'+n], op.marks[cat_id].details[n] ));
				}
				inner.push('</div>');

				// wypełnienie elementu zawartością
				$('#op_cloud .rShadow').html( inner.join('') );

				// ustawienie znacznika wskazującego, że ToolTip jest widoczny
				op.isToolTipVisible=true;
			}

			// po każdym poruszeniu myszą korekta położenia
			op.moveToolTip(e.pageX+10,e.pageY+10);
		}
		).mouseout(
		// zamknięcie ToolTipa w chwili opuszczenia obszaru do którego jest podłączony
		op.closeToolTip
		);
},

moveToolTip:function(x,y){
			$('#op_cloud').css({'left':x,'top':y});
},

drawMark:function(mark_val){
	return '<div class="mark_backg"><div class="mark_foregr" style="width:' + (mark_val * op.config.mark_img_width/6) + 'px"></div></div>' + op.texts.mark_tpl.replace('{mark}', mark_val );
},

// buduje pełną linijkę oceny (nazwa, wskaźnik, ocena liczbowo)
drawMarkLine:function(mark_val, mark_title ){
	return '<div class="mark_line"><span>'+mark_title+'</span>' + ((mark_val)? this.drawMark(mark_val) : 'brak oceny' ) + '</div>';
},

closeToolTip:function(){
	$('#op_cloud').remove();
	op.isToolTipVisible=false;
},

showMarks:function(hopinions){
	var inner = ['<div class="op_marks_cloud">'];
	for (var b in this.marks) {
		inner.push( this.drawMarkLine( hopinions['m_'+this.marks[b].db_cat+'_0'], this.marks[b].name ) );
	}
	inner.push('</div>');
	return inner.join('');
},

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'
	}
}
}
}
