src/cm/media/js/site/f_text_view_frame.js
changeset 0 40c8f766c9b8
child 59 8a2d933209aa
equal deleted inserted replaced
-1:000000000000 0:40c8f766c9b8
       
     1 var gResetOtherFieldsOnFilterFieldChange = true;
       
     2 
       
     3 var myDefaultOuterLayoutSettings = {
       
     4 	center : {
       
     5 		paneSelector :".outer-center"
       
     6 	},
       
     7 	north : {
       
     8 		size :50,//30,
       
     9 		spacing_open :0,
       
    10 		closable :false,
       
    11 		resizable :false
       
    12 	}
       
    13 };
       
    14 
       
    15 var innerNorthPaneDefaults = {
       
    16 	'innerNorthPaneOpened' :'0',
       
    17 	'selectedTab' :'0'
       
    18 };
       
    19 
       
    20 onInnerNorthPaneClose = function() {
       
    21 	_setCookie('innerNorthPaneOpened', '0');
       
    22 	$('#add_comment_btn').css('top', 63) ;
       
    23 	return true;
       
    24 }
       
    25 
       
    26 onInnerNorthPaneOpen = function() {
       
    27 	_setCookie('innerNorthPaneOpened', '1');
       
    28 	$('#add_comment_btn').css('top', 149) ;
       
    29 	return true;
       
    30 }
       
    31 
       
    32 // DEFAULT LAYOUT SETTINGS
       
    33 var myDefaultInnerLayoutSettings = {
       
    34 	north : {
       
    35 		// size: 66, /* 66 for FF */
       
    36 		size :88, /* 66 for FF */
       
    37 		spacing_closed :8,
       
    38 		slidable :false,		
       
    39 		resizable :false, /* important */
       
    40 		togglerLength_closed :"100%",
       
    41 		togglerLength_open :"100%",
       
    42 		togglerAlign_closed :"center",
       
    43 		/* togglerContent_closed :"options", */
       
    44 		togglerTip_closed :gettext("click to show options"),
       
    45 		togglerTip_open :gettext("click to hide options"),
       
    46 		initClosed :false,
       
    47 		paneSelector :".inner-north",
       
    48 		onopen :"onInnerNorthPaneOpen",
       
    49 		onclose :"onInnerNorthPaneClose"
       
    50 	}
       
    51 };
       
    52 
       
    53 var outerLayout, innerLayout;
       
    54 layoutFrames = function() {
       
    55 
       
    56 	var innerNorthPaneOpened = $.cookie('innerNorthPaneOpened');
       
    57 	myDefaultInnerLayoutSettings.north.initClosed = (innerNorthPaneOpened === null) ? (innerNorthPaneDefaults['innerNorthPaneOpened'] == '0')
       
    58 			: (innerNorthPaneOpened == "0");
       
    59 
       
    60 	outerLayout = $('body').layout(myDefaultOuterLayoutSettings);
       
    61 	innerLayout = $('div.outer-center').layout(myDefaultInnerLayoutSettings);
       
    62 	
       
    63 	// to trigger add_comment_btn positioning
       
    64 	if (myDefaultInnerLayoutSettings.north.initClosed)
       
    65 		onInnerNorthPaneClose() ;
       
    66 	else 
       
    67 		onInnerNorthPaneOpen() ;
       
    68 }
       
    69 
       
    70 fillFilterTab = function() {
       
    71 	
       
    72 	var tab = $('#c_filter');
       
    73 	
       
    74 	var html = '<div style="float:right">' +
       
    75 				'<table>' +
       
    76 					'<tr>' +
       
    77 					'<td style="text-align:right;">' +
       
    78 					gettext('Text') +
       
    79 				'<td>&nbsp;</td>' +
       
    80 				'<td>' +
       
    81 					'<input id="filter_text" type="text"></input>' +
       
    82 					'<input id="c_filter_btn" type="button" value="' + gettext('Search') + '"></input>' +
       
    83 				'</td>' +
       
    84 					'</tr>' +
       
    85 					'<tr>' +
       
    86 						'<td colspan="3" style="text-align:right;">' +
       
    87 							'<input id="c_filterreset_btn" type="button" value="' + gettext('Reset') + '"></input>' +
       
    88 							'<input id="c_filterhideall_btn" type="button" value="' + gettext('Hide all Comments') + '"></input>' +
       
    89 						'</td>' +
       
    90 					'</tr>' +
       
    91 				'</table>' +
       
    92 			'</div>' +
       
    93 			'<table>' +
       
    94 				'<tr>' +
       
    95 					'<td style="text-align:right;">' +
       
    96 					gettext('Authors') +
       
    97 					'</td>' +
       
    98 					'<td>&nbsp;</td>' +
       
    99 					'<td>' +
       
   100 						'<select id="filter_name"></select>' +
       
   101 					'</td>' +
       
   102 					'<td>&nbsp;</td>' +
       
   103 					'<td style="text-align:right;">' +
       
   104 					gettext('States') +
       
   105 					'</td>' +
       
   106 					'<td>&nbsp;</td>' +
       
   107 					'<td>' +
       
   108 						'<select id="filter_state"></select>' +
       
   109 					'</td>' +
       
   110 				'</tr>' +
       
   111 				'<tr>' +
       
   112 					'<td style="text-align:right;">' +
       
   113 						gettext('Dates') +
       
   114 					'</td>' +
       
   115 					'<td>&nbsp;</td>' +
       
   116 					'<td>' +
       
   117 						'<select id="filter_date"></select>' +
       
   118 					'</td>' +
       
   119 					'<td>&nbsp;</td>' +
       
   120 					'<td style="text-align:right;">' +
       
   121 						gettext('Tags') +
       
   122 					'</td>' +
       
   123 					'<td>&nbsp;</td>' +
       
   124 					'<td>' +
       
   125 						'<select id="filter_tag"></select>' +
       
   126 					'</td>' +
       
   127 				'</tr>' +
       
   128 			'</table>';
       
   129 	tab.append($(html));	
       
   130 	
       
   131 	$("#c_filter input[type='text']").add("#c_filter select").addClass('c_filter_field') ;
       
   132 
       
   133 	$("#filter_name").add("#filter_date").add("#filter_tag").add("#filter_state").change(function() {
       
   134 		if (frames['text_view_comments'].readyForAction()) {
       
   135 			var elt = $(this) ;
       
   136 			frames['text_view_comments'].checkForOpenedDialog(null, function() {
       
   137 				//console.info($(this)) ;
       
   138 				//console.info(elt) ;
       
   139 				//applyFilter($(this)) ;
       
   140 				applyFilter(elt) ;
       
   141 			}) ;
       
   142 		}
       
   143 	});
       
   144 
       
   145 	$("#c_filter_btn").click(function() {
       
   146 		if (frames['text_view_comments'].readyForAction()) {
       
   147 			var elt = $("#filter_text") ;
       
   148 			frames['text_view_comments'].checkForOpenedDialog(null, function() {
       
   149 				applyFilter(elt) ;
       
   150 			}) ;
       
   151 		}
       
   152 	});
       
   153 
       
   154 	$('#filter_text').keyup( function(e) {
       
   155 		if (e.keyCode == 13) {$("#c_filter_btn").click();}
       
   156 	});
       
   157 
       
   158 	$("#c_filterreset_btn").click( function() {
       
   159 		if (frames['text_view_comments'].readyForAction()) {
       
   160 			frames['text_view_comments'].checkForOpenedDialog(null, function() {
       
   161 				resetFilter();
       
   162 			}) ;
       
   163 		}
       
   164 	});
       
   165 
       
   166 	$("#c_filterhideall_btn").click( function() {
       
   167 		if (frames['text_view_comments'].readyForAction()) {
       
   168 			frames['text_view_comments'].checkForOpenedDialog(null, function() {
       
   169 				frames['text_view_comments'].hideAll() ;
       
   170 			}) ;
       
   171 		}
       
   172 	});
       
   173 	
       
   174 }
       
   175 fillTopToolbar = function() {
       
   176 	
       
   177 	var parent = $('#outer-north');
       
   178 
       
   179 	var viewPrev = gettext('view previous comment') ;
       
   180 	var viewNext = gettext('view next comment') ;
       
   181 	var viewFirst = gettext('view first comment') ;
       
   182 	var viewLast = gettext('view last next comment') ;
       
   183 	var viewAll = gettext('view all comments') ;
       
   184 	var advancedInterface = gettext('toggle advance interface') ;
       
   185 	var print = gettext('print document with/without comments') ;
       
   186 	var exportDoc = gettext('export document with/without comments') ;
       
   187 	var fullscreen = gettext('toggle full screen view') ;
       
   188 	var feed = gettext('text feed') ;
       
   189 	var addComment = gettext('add a comment') ;
       
   190 
       
   191 	var html = '<div id="c-right-btn">' +
       
   192 		        '<img id="c_fullscreen_btn" src="' + sv_media_url + '/img/arrow_out.png" title="'+ fullscreen +'" alt="'+ fullscreen +'"/>' +      
       
   193 		        '<img id="c_print_btn" src="' + sv_media_url + '/img/printer.png" title="'+ print +'" alt="'+ print +'"/>' +         
       
   194 		        '<img id="c_export_btn" src="' + sv_media_url + '/img/page_go.png" title="'+ exportDoc +'" alt="'+ exportDoc +'"/>' +
       
   195 		        '<a target="_blank" href="' + frames['text_view_comments'].sv_text_feed_url + '"><img id="c_feed_btn" src="' + sv_media_url + '/img/feed.png" title="'+ feed +'" alt="'+ feed +'"/></a>' +         
       
   196 	        '</div>' +
       
   197 		    '<div id="c-msg-wrapper">' +
       
   198 			'</div>' + 
       
   199 			'<table style="margin-bottom:.3em;">' + 
       
   200 			'<tbody>' + 
       
   201 			'<tr>' + 
       
   202 			'<td>' +
       
   203 				'<span id="c_filter_results" >' +
       
   204 				'<b>&nbsp;<span id="c_f_res_nb_dis"></span></b>&nbsp;<span id="c_f_res_nb_dis_txt"></span>' +
       
   205 				'<span id="c_f_res_details">&nbsp;(' + gettext('filter:') + '&nbsp;<span id="c_f_res_nb_com"></span>/<span id="c_f_res_nb_tot_com"></span>&nbsp;<span id="c_f_res_nb_com_txt"></span>&nbsp;<span id="c_f_res_nb_rep"></span>/<span id="c_f_res_nb_tot_rep"></span><span id="c_f_res_nb_rep_txt"></span>)</span>' +
       
   206 				'</span>' +
       
   207 			'</td>' +
       
   208 			'<td>' +
       
   209 			'<span id="browse_section">' +
       
   210 			', ' + gettext('browse by:') + ' ' + 
       
   211 				'<select id="browse_by">' + 
       
   212 				'<option value="scope">' + gettext('location') + '</option>' +
       
   213 				'<option value="modif_thread">' + gettext('modification') + '</option>' +
       
   214 				'</select>' + 
       
   215 			'</span>' +
       
   216 			'</td>' + 
       
   217 			'<td width="40" align="right">' + 
       
   218 				'<a href="#" id="c_browse_first"><img title="'+ viewFirst +'" alt="'+ viewFirst +'" src="' + sv_media_url + '/img/control_fastbackward_blue.png"/></a>' +
       
   219 				'<a href="#" id="c_browse_prev"><img title="'+ viewPrev +'" alt="'+ viewPrev +'" src="' + sv_media_url + '/img/control_playback_blue.png"/></a>' +
       
   220 			'</td>' +
       
   221 			'<td width="50" align="center">' +
       
   222 					'<span id="c_browse_indx_scope">-</span>' +
       
   223 					'<span id="c_browse_indx_modif_thread" style="display: none;">-</span>' +
       
   224 					'/' +
       
   225 					'<span id="c_browse_indx_total"></span>' + 
       
   226 			'</td>' +
       
   227 			'<td width="40" align="left">' +
       
   228 				'<a href="#" id="c_browse_next"><img title="'+ viewNext +'" alt="'+ viewNext +'" src="' + sv_media_url + '/img/control_play_blue.png"/></a>' +
       
   229 				'<a href="#" id="c_browse_last"><img title="'+ viewLast +'" alt="'+ viewLast +'" src="' + sv_media_url + '/img/control_fastforward_blue.png"/></a>' +
       
   230 			'</td>' +
       
   231 			'<td width="20" align="left">' +
       
   232 			'<a href="#" id="c_browse_all"><img title="'+ viewAll +'" alt="'+ viewAll +'" src="' + sv_media_url + '/img/view_all.png"/></a>' +
       
   233 			'</td>' +
       
   234 			'<td width="20" align="left">' +
       
   235 				'<a href="#" id="c_advanced_btn"><img title="'+ advancedInterface +'" alt="'+ advancedInterface +'" src="' + sv_media_url + '/img/application_split.png"/></a>' +
       
   236 			'</td>' +
       
   237 			'<td width="20" align="left">' +
       
   238 				'<a href="#" id="c_thread_unthread"><img id="c_thread_unthread_img"/></a>' +
       
   239 			'</td>' +
       
   240 			'</tr>' +
       
   241 			'</tbody>' +
       
   242 			'</table>' ;
       
   243 	parent.prepend($(html));
       
   244 
       
   245 	$("#add_comment_btn").click( function() {
       
   246 		if (frames['text_view_comments'].readyForAction()) {
       
   247 			frames['text_view_comments'].checkForOpenedDialog(null, function() {
       
   248 				frames['text_view_comments'].gSync.showCommentForm(null) ;
       
   249 			}) ;
       
   250 		}
       
   251 	});
       
   252 
       
   253 	var showBrowseIndx = function() {
       
   254 		$("#browse_by option").each(function() {
       
   255 			$("#c_browse_indx_"+this.value).hide() ;
       
   256 		}) ;
       
   257 		$('#c_browse_indx_' + $('#browse_by').val()).show() ;
       
   258 	};
       
   259 	
       
   260 	var first_browse_by_val = $.cookie('browse_by');
       
   261 	first_browse_by_val = (first_browse_by_val == null) ? "location" : first_browse_by_val ;
       
   262 	_setCookie('browse_by', $('#browse_by').val());
       
   263 	$("#browse_by option[value="+ first_browse_by_val +"]").attr("selected", true);
       
   264 	showBrowseIndx() ;
       
   265 	
       
   266 	$("#browse_by").change(function() {
       
   267 		_setCookie('browse_by', $('#browse_by').val());
       
   268 		showBrowseIndx() ;
       
   269 	});
       
   270 	
       
   271 	var lBrowse = function(whereto) {
       
   272 		if (frames['text_view_comments'].readyForAction()) 
       
   273 			frames['text_view_comments'].checkForOpenedDialog(null, function() {
       
   274 				frames['text_view_comments'].browse($('#browse_by').val(), whereto); 
       
   275 			}) ;
       
   276 	};
       
   277 	$("#c_browse_prev").click( function() {lBrowse("prev");});
       
   278 	$("#c_browse_next").click( function() {lBrowse("next");});
       
   279 	$("#c_browse_first").click( function() {lBrowse("first");});
       
   280 	$("#c_browse_last").click( function() {lBrowse("last");});
       
   281 	$("#c_browse_all").click( function() {
       
   282 		if (frames['text_view_comments'].readyForAction()) {
       
   283 			frames['text_view_comments'].checkForOpenedDialog(null, function() {
       
   284 				frames['text_view_comments'].gSync.showAllComments() ;
       
   285 			}) ;
       
   286 		}
       
   287 	});
       
   288 	
       
   289 	$("#c_print_btn").click( function() {
       
   290 		if (frames['text_view_comments'].readyForAction()) {
       
   291 			var ids = frames['text_view_comments'].gDb.getFilteredCommentIdsAsString() ;
       
   292 			frames['text_view_comments'].CY.log($("#filteredIds").val(ids)) ;
       
   293 			openPrintDialog() ;
       
   294 		}
       
   295 	});
       
   296 	
       
   297 	$("#c_export_btn").click( function() {
       
   298 		if (frames['text_view_comments'].readyForAction()) {
       
   299 			var ids = frames['text_view_comments'].gDb.getFilteredCommentIdsAsString() ;
       
   300 			frames['text_view_comments'].CY.log($("#filteredIds").val(ids)) ;
       
   301 			openExportDialog() ;
       
   302 		}
       
   303 	});
       
   304 	
       
   305 	if (frames['text_view_comments'].gLayout.isInComentSite()) {
       
   306 		$("#c_fullscreen_btn").click( function() {
       
   307 				top.v_toggleFrameSize();
       
   308 		});
       
   309 	} ;	
       
   310 	
       
   311 	$("#c_advanced_btn").click( function() {
       
   312 		$('.ui-layout-toggler').click() ; // calling the layout method did not work well edo that instead		
       
   313 	}) ;
       
   314 	
       
   315 	setThreadPref = function() {
       
   316 		var v = frames['text_view_comments'].c_readPreference('comments', 'threadpad');
       
   317 
       
   318 		var btn_src = sv_media_url + '/img/unthread_box.png' ;
       
   319 		var btn_desc = gettext('unthread discussions') ;
       
   320 		if (v == '0') { 
       
   321 			btn_src = sv_media_url + '/img/thread_box.png' ;
       
   322 			btn_desc = gettext('thread discussions') ;
       
   323 		}
       
   324 		$('#c_thread_unthread_img').attr('src', btn_src).attr('alt', btn_desc).attr('title', btn_desc) ;
       
   325 	};
       
   326 	
       
   327 	setThreadPref();	
       
   328 	$('#c_thread_unthread').click( function() {
       
   329 		var v = frames['text_view_comments'].c_readPreference('comments', 'threadpad');
       
   330 		var anti_v = (v == '0') ? '1' : '0';
       
   331 		frames['text_view_comments'].c_persistPreference('comments', 'threadpad', anti_v);
       
   332 		setThreadPref();
       
   333 		frames['text_view_comments'].gSync.animateToTop() ;
       
   334 	});
       
   335 	
       
   336 }
       
   337 
       
   338 onSliderStop = function() {
       
   339 	var slideVal = $("#c_slider").slider('value') ;
       
   340 //	console.info("in onSliderStop slider val : " + slideVal) ;
       
   341 	if (slideVal > (frames['text_view_comments'].gConf['sliderFixedMin'] * 100)) 
       
   342 		$("#c_slider").slider('value', [90]) ;
       
   343 	if (slideVal < (frames['text_view_comments'].gConf['sliderFixedMax'] * 100)) 
       
   344 		$("#c_slider").slider('value', [10]) ;
       
   345 	
       
   346 	frames['text_view_comments'].c_setCommentsColWidth(slideVal) ;
       
   347 	frames['text_view_comments'].c_persistPreference('layout', 'comments_col_width', slideVal);
       
   348 }
       
   349 
       
   350 fillTextPreferencesTab = function() {
       
   351 	var tab = $('#c_text_preferences');
       
   352 	tab.append($(
       
   353 			'<table>' +
       
   354 			'<tr>' +
       
   355 			'<td>' +
       
   356 			gettext('Text style') +
       
   357 			'</td>' +
       
   358 			'<td>&nbsp;</td>' +
       
   359 			'<td>' +
       
   360 			'<select id="c_textpref_style"></select>' +
       
   361 			'</td>' +
       
   362 			'</tr>' +
       
   363 			'</table>')) ;
       
   364 	var styles = frames['text_view_comments'].gTextStyles ;
       
   365 	for (var key in styles) {
       
   366 		$("#c_textpref_style").append($("<option value='"+ key +"'>" + styles[key] + "</option>")) ;
       
   367 	}
       
   368 	
       
   369 	var setTextStyle = function() {
       
   370 		var styles = frames['text_view_comments'].gTextStyles ;
       
   371 		var wish = $('#c_textpref_style').val() ;
       
   372 		for (var key in styles) {
       
   373 			if (key == wish)
       
   374 				frames['text_view_comments'].CY.get("#textcontainer").addClass(styles[key]) ;
       
   375 			else 
       
   376 				frames['text_view_comments'].CY.get("#textcontainer").removeClass(styles[key]) ;
       
   377 		}
       
   378 	};
       
   379 	
       
   380 	var setTextStyleField = function() {
       
   381 		var v = frames['text_view_comments'].c_readPreference('text', 'style');
       
   382 		$('#c_textpref_style').val(v);
       
   383 	};
       
   384 	
       
   385 	$("#c_textpref_style").change(function(v) {
       
   386 		frames['text_view_comments'].c_persistPreference('text', 'style', $("#c_textpref_style").val());
       
   387 		setTextStyle();
       
   388 	});
       
   389 	
       
   390 	setTextStyleField();
       
   391 	setTextStyle();
       
   392 }
       
   393 
       
   394 fillPreferencesTab = function() {
       
   395 	var tab = $('#c_preferences');
       
   396 
       
   397 	var html = '<div style="float:right"><input id="c_pref_save_btn" type="button" value="' + gettext('Save') + '"></input><input id="c_pref_reset_btn" type="button" value="' + gettext('Reset') + '"></input></div>' +
       
   398 				'<table>' +
       
   399 				'<tr>' +
       
   400 					'<td>' +
       
   401 						gettext('Animation duration') +
       
   402 					'</td>' +
       
   403 					'<td>&nbsp;</td>' +
       
   404 					'<td>' +
       
   405 						'<input id="c_pref_animduration" type="text" style="width:3em" value="" />' +
       
   406 					'</td>' +
       
   407 				'</tr>' + 
       
   408 				'<tr>' +
       
   409 					'<td>' +
       
   410 						'<span class="frame_helptext">' + gettext('(0.001 to 1 second)') + '</span>' +
       
   411 					'</td>' +
       
   412 					'<td></td><td></td>' +
       
   413 				'</tr>' +
       
   414 				'</table>';
       
   415 	tab.append($(html)) ;
       
   416 
       
   417 	setPreferencesFieldsValue = function() {
       
   418 		var v = frames['text_view_comments'].c_readPreference('general', 'animduration');
       
   419 		$('#c_pref_animduration').val(v);
       
   420 	};
       
   421 	
       
   422 	setPreferencesFieldsValue();
       
   423 
       
   424 	$('#c_pref_animduration').blur( function() {
       
   425 		var v = parseFloat($(this).val());
       
   426 		if (isNaN(v) || (v <= 0) || (v > 1)) {
       
   427 			v = frames['text_view_comments'].c_readDefaultPreference('general', 'animduration');
       
   428 		}
       
   429 		$(this).val(v);
       
   430 	});
       
   431 
       
   432 	$('#c_pref_reset_btn').click( function() {
       
   433 		frames['text_view_comments'].c_resetPreferences(['general']);
       
   434 		setPreferencesFieldsValue();
       
   435 
       
   436 		enqueueMsg(gettext('preferences reset (will apply on next load)'));
       
   437 	});
       
   438 
       
   439 	$('#c_pref_save_btn').click( function() {
       
   440 		frames['text_view_comments'].c_persistPreference('general', 'animduration', $('#c_pref_animduration').val());
       
   441 
       
   442 		enqueueMsg(gettext('preferences saved (will apply on next load)'));
       
   443 	});
       
   444 }
       
   445 
       
   446 initFrame = function() {
       
   447 	_initYesNoDialog();
       
   448 	_initPrintDialog() ;	
       
   449 
       
   450 	$(window).resize(function(){
       
   451  		onSliderStop(); 
       
   452 //		console.log('in frame resize' +  $("#c_slider").slider('value')) ;
       
   453 //		console.log('in frame resize' + frames['text_view_comments'].CY.DOM.winWidth()) ;
       
   454 //		console.log('in frame resize' + $(window).width()) ;
       
   455 	});
       
   456 
       
   457 	//$('<div id="c_slider"></div>').appendTo("#c-btns").slider({ 
       
   458 	$('#c_slider').slider({ 
       
   459 	animate: true,
       
   460 	range: "min",
       
   461 	value: frames['text_view_comments'].c_readPreference('layout','comments_col_width'),
       
   462 	min: 1,
       
   463 	iframeFix: true,
       
   464 	max: 100,
       
   465 //	step: 5,
       
   466 	slide: function(event, ui) {
       
   467 		var slideVal = ui.value ;
       
   468 		frames['text_view_comments'].c_setCommentsColWidth(slideVal) ;
       
   469 	},
       
   470 	stop:function(event, ui) {
       
   471 		onSliderStop() ;
       
   472 	}
       
   473 	}) ;
       
   474 
       
   475 	
       
   476 	_initTabs();
       
   477 	
       
   478 	f_interfaceFreeze();
       
   479 };
       
   480 
       
   481 _initTabs = function() {
       
   482 	$(".inner-north").tabs();
       
   483 
       
   484 	var selectedTab = $.cookie('selectedTab');
       
   485 	selectedTab = (selectedTab === null) ? innerNorthPaneDefaults['selectedTab'] : parseInt(selectedTab);
       
   486 	$(".inner-north").tabs('select', selectedTab);
       
   487 	$(".inner-north").bind('tabsselect', function(event, ui) {
       
   488 		// // Objects available in the function context:
       
   489 			// ui.tab // anchor element of the selected (clicked) tab
       
   490 			// ui.panel // element, that contains the selected/clicked tab
       
   491 			// contents
       
   492 			// ui.index // zero-based index of the selected (clicked) tab
       
   493 			_setCookie('selectedTab', ui.index);
       
   494 
       
   495 		});
       
   496 }
       
   497 
       
   498 _initYesNoDialog = function() {
       
   499 	$('#dialog_h').dialog( {
       
   500 		// bgiframe: true, // why would we ?
       
   501 		autoOpen :false,
       
   502 		modal :true
       
   503 	});
       
   504 }
       
   505 
       
   506 _setCookie = function(name, value) {
       
   507 	var cookieExpire = new Date();
       
   508 	cookieExpire.setFullYear(2100, 0, 1);
       
   509 	$.cookie(name, value, {
       
   510 		'expires' :cookieExpire,
       
   511 		'path': '/'
       
   512 	});
       
   513 }
       
   514 
       
   515 //contains code thats offered by the text_view_comment_frame to its child frame text_view_comment
       
   516 f_getFrameFilterData = function () {
       
   517 	var name = $('#filter_name').val(); ; 
       
   518 	var date_str = $('#filter_date').val(); ; 
       
   519 	var text = $('#filter_text').val(); ; 
       
   520 	var tag = $('#filter_tag').val(); ; 
       
   521 	var state = $('#filter_state').val(); ; 
       
   522 	return {'name':name, 'date':date_str, 'text':text, 'tag':tag, 'state':state} ;
       
   523 }
       
   524 
       
   525 f_setFilterValue = function (obj) {
       
   526 	for (key in obj) {
       
   527 		if (key.indexOf('filter_') == 0) 
       
   528 			$('#'+key).val(obj[key]); // wont explode even if argument is silly
       
   529 	}
       
   530 }
       
   531 
       
   532 f_isFrameFilterFieldsInit = function () {
       
   533 	var obj = f_getFrameFilterData() ;
       
   534 	var ret = true ;
       
   535 	for (key in obj) {
       
   536 		ret = ret && (obj[key] == "") ;
       
   537 	}
       
   538 	return ret ;
       
   539 }
       
   540 
       
   541 initFilterFields = function () {
       
   542 	$('.c_filter_field').val("") ;
       
   543 }
       
   544 
       
   545 resetFilter = function () {
       
   546 	initFilterFields() ;
       
   547 	frames['text_view_comments'].reinit() ;
       
   548 	enqueueMsg(gettext("filter reset")) ;
       
   549 }
       
   550 
       
   551 applyFilter = function(self) {
       
   552 	var val = self.val() ;  
       
   553 	if (gResetOtherFieldsOnFilterFieldChange) {
       
   554 		initFilterFields() ;  
       
   555 		self.val(val) ; 
       
   556 	}
       
   557 	frames['text_view_comments'].reinit();
       
   558 	enqueueMsg(gettext("filter applied"));
       
   559 }
       
   560 
       
   561 f_updateFilterCountResult = function(nbDiscussions, nbComments, nbReplies, nbAllComments, nbAllReplies) {
       
   562 	// update result counter message field.
       
   563 	$("#c_f_res_nb_dis").html(nbDiscussions) ;
       
   564 	$("#c_f_res_nb_dis_txt").html(ngettext('discussion', 'discussions', nbDiscussions)) ;
       
   565 
       
   566 	$("#c_f_res_nb_com").html(nbComments) ;
       
   567 	$("#c_f_res_nb_tot_com").html(nbAllComments) ;
       
   568 	$("#c_f_res_nb_com_txt").html(ngettext('comment', 'comments', nbComments)) ;
       
   569 	$("#c_f_res_nb_rep").html(nbReplies) ; 
       
   570 	$("#c_f_res_nb_tot_rep").html(nbAllReplies) ; 
       
   571 	$("#c_f_res_nb_rep_txt").html(ngettext('&nbsp;reply', '&nbsp;replies', nbReplies)) ;
       
   572 
       
   573 	// update browser infos
       
   574 	$("#c_browse_indx_total").html(nbDiscussions) ; 
       
   575 	
       
   576 	//console.info('nbDiscussions + typeof nbDiscussions +nbComments + typeof nbComments) ;
       
   577 	$("#c_filter_results").show() ; 
       
   578 } ;
       
   579 
       
   580 f_updateFilterCountDetailed = function(detailed) {
       
   581 	if (detailed) {
       
   582 		$("#c_f_res_details").show() ;
       
   583 		$("c_browse_all").val('View all (filtered) comments')
       
   584 	}
       
   585 	else {
       
   586 		$("#c_f_res_details").hide() ;
       
   587 		$("#c_browse_all").val('View all comments')
       
   588 	}
       
   589 } ;
       
   590 
       
   591 f_updateFilterData = function(newFilterData) {
       
   592 //	console.info(newFilterData) ;
       
   593 	// users
       
   594 	var selectedNameOption = $("#filter_name option:selected").attr("name") ;
       
   595 	var all = gettext("all") ;
       
   596 	$("#filter_name option").remove() ;
       
   597 	
       
   598 	$("#filter_name").append($("<option name='c_f2_user_all' value=''>" + all + "</option>")) ;
       
   599 	for (var  i=0, ilen=newFilterData['names'].length; i < ilen ; i++) {
       
   600 		var item = newFilterData['names'][i] ;
       
   601 		$("#filter_name").append($("<option name='c_f2_user_"+ item.name +"' value='"+ item.name +"'>" + item.name +"("+item.nb_comments+")</option>")) ;
       
   602 	}
       
   603 	
       
   604 	$("#filter_name option[name="+selectedNameOption+"]").attr("selected", true);
       
   605 	
       
   606 	// dates
       
   607 	var selectedDateOption = $("#filter_date option:selected").attr("name") ;
       
   608 
       
   609 	$("#filter_date option").remove() ;
       
   610 	
       
   611 	$("#filter_date").append($("<option name='c_f_date_all' value=''>" + all + "</option>")) ;
       
   612 	for (var  i=0, ilen=newFilterData['dates'].length; i < ilen ; i++) {
       
   613 		var item = newFilterData['dates'][i] ;
       
   614 		var ddd = ngettext('last 24 hours (%(nb_comments)s)', 'last %(nb_days)s days (%(nb_comments)s)', item.nb_day) ;
       
   615 		var ccc = interpolate(ddd,{'nb_days':item.nb_day, 'nb_comments':item.nb_comments}, true) ;		
       
   616 		
       
   617 		$("#filter_date").append($("<option name='c_f_date_"+ item.nb_day +"' value='"+ item.nb_day_date +"'>" + ccc + "</option>")) ;
       
   618 	}
       
   619 	
       
   620 	$("#filter_date option[name="+selectedDateOption+"]").attr("selected", true);
       
   621 	
       
   622 	// text : nothing to do
       
   623 	
       
   624 	// tags
       
   625 	var selectedTagOption = $("#filter_tag option:selected").attr("name") ;
       
   626 
       
   627 	$("#filter_tag option").remove() ;
       
   628 	
       
   629 	$("#filter_tag").append($("<option name='c_f2_tag_all' value=''>" + all + "</option>")) ;
       
   630 	for (var  i=0, ilen=newFilterData['tags'].length; i < ilen ; i++) {
       
   631 		var item = newFilterData['tags'][i] ;
       
   632 		$("#filter_tag").append($("<option name='c_f2_tag_"+ item.name +"' value='"+ item.name +"'>" + item.name +"("+item.nb_comments+")</option>")) ;
       
   633 	}
       
   634 	$("#filter_tag option[name="+selectedTagOption+"]").attr("selected", true);
       
   635 	
       
   636 	// states
       
   637 	var selectedStateOption = $("#filter_state option:selected").attr("state") ;
       
   638 
       
   639 	$("#filter_state option").remove() ;
       
   640 	
       
   641 	$("#filter_state").append($("<option name='c_f2_state_all' value=''>" + all + "</option>")) ;
       
   642 	for (var  i=0, ilen=newFilterData['states'].length; i < ilen ; i++) {
       
   643 		var item = newFilterData['states'][i] ;
       
   644 		$("#filter_state").append($("<option name='c_f2_state_"+ item.state +"' value='"+ item.state +"'>" + gettext(item.state) +"("+item.nb_comments+")</option>")) ;
       
   645 	}
       
   646 	$("#filter_state option[name="+selectedStateOption+"]").attr("selected", true);
       
   647 } ;
       
   648 
       
   649 f_interfaceUnfreeze = function() {
       
   650 	// tabs headers
       
   651 	for ( var i = 0, ilen = $(".c_tab").length; i < ilen; i++) {
       
   652 		$(".inner-north").tabs("enable", i);
       
   653 	}
       
   654 
       
   655 	$(".inner-north select").add(".inner-north input").add("#outer-north select").add("#outer-north input").each( function() {
       
   656 		$(this).attr("disabled", false);
       
   657 	});
       
   658 
       
   659 	$("#c_slider").slider('enable') ;
       
   660 
       
   661 } ;
       
   662 
       
   663 f_interfaceFreeze = function() {
       
   664 	// tabs headers
       
   665 	for ( var i = 0, ilen = $(".c_tab").length; i < ilen; i++) {
       
   666 		$(".inner-north").tabs("disable", i);
       
   667 	}
       
   668 
       
   669 	$(".inner-north select").add(".inner-north input").add("#outer-north select").add("#outer-north input").each( function() {
       
   670 		$(this).attr("disabled", true);
       
   671 	});
       
   672 	
       
   673 	$("#c_slider").slider('disable') ;
       
   674 } ;
       
   675 
       
   676 f_enqueueMsg = function(msg) {
       
   677 	enqueueMsg(msg) ; 	
       
   678 } ;
       
   679 
       
   680 f_enqueueErrorMsg = function(msg) {
       
   681 	enqueueErrorMsg(msg) ; 	
       
   682 } ;
       
   683 
       
   684 f_removeLoadingMsg = function() {
       
   685 	removeLoadingMsg() ;
       
   686 }
       
   687 
       
   688 f_initFrame = function() {
       
   689 	initFrame() ;
       
   690 }
       
   691 
       
   692 f_layoutFrames = function() {
       
   693 	layoutFrames() ;
       
   694 }
       
   695 
       
   696 f_fillTextPreferencesTab = function() {
       
   697 	fillTextPreferencesTab() ;
       
   698 }
       
   699 
       
   700 f_fillPreferencesTab = function() {
       
   701 	fillPreferencesTab() ;
       
   702 }
       
   703 
       
   704 f_fillBrowseSection = function() {
       
   705 	fillBrowseSection() ;
       
   706 }
       
   707 
       
   708 f_fillFilterTab = function() {
       
   709 	fillFilterTab() ;
       
   710 }
       
   711 
       
   712 f_fillTopToolbar = function() {
       
   713 	fillTopToolbar() ;
       
   714 }
       
   715 
       
   716 f_yesNoDialog = function(htmlContent, title, noFunction, noFunctionContext, noFunctionArgs, yesFunction, yesFunctionContext, yesFunctionArgs) {
       
   717 	$('#dialog_h').html(htmlContent) ;
       
   718 	
       
   719 	$('#dialog_h').dialog('option', 'title', title) ;
       
   720 
       
   721 	function onNo() {
       
   722 		if (noFunction != null)
       
   723 			noFunction.call(noFunctionContext, noFunctionArgs) ;
       
   724 	}
       
   725 	
       
   726 	function onYes() {
       
   727 		if (yesFunction != null)
       
   728 			yesFunction.call(yesFunctionContext, yesFunctionArgs) ;
       
   729 	}
       
   730 	var buttons = {} ;
       
   731 	buttons[gettext('No')] = function() {$(this).dialog('close');onNo();} ;
       
   732 	buttons[gettext('Yes')] = function() {$(this).dialog('close');onYes();} ;
       
   733 	$('#dialog_h').dialog('option', 'buttons', buttons) ;        
       
   734 	$('#dialog_h').dialog('open') ;
       
   735 }
       
   736 
       
   737 f_setCookie = function(name, value) {
       
   738 	_setCookie(name, value) ;
       
   739 }