src/cm/media/js/site/f_text_view_frame.js
author rbernard
Wed, 10 Mar 2010 22:10:30 +0100
changeset 206 38aa907c6479
parent 103 61fd17f9ab78
child 341 053551f213fb
permissions -rw-r--r--
bug fix #32

var gResetOtherFieldsOnFilterFieldChange = true;

var myDefaultOuterLayoutSettings = {
	center : {
		paneSelector :".outer-center"
	},
	north : {
		size :50,//30,
		spacing_open :0,
		closable :false,
		resizable :false
	}
};

var innerNorthPaneDefaults = {
	'innerNorthPaneOpened' :'0',
	'selectedTab' :'0'
};

onInnerNorthPaneClose = function() {
	_setCookie('innerNorthPaneOpened', '0');
	$('#add_comment_btn').css('top', 63) ;
	return true;
}

onInnerNorthPaneOpen = function() {
	_setCookie('innerNorthPaneOpened', '1');
	$('#add_comment_btn').css('top', 149) ;
	return true;
}

// DEFAULT LAYOUT SETTINGS
var myDefaultInnerLayoutSettings = {
	north : {
		// size: 66, /* 66 for FF */
		size :88, /* 66 for FF */
		spacing_closed :8,
		slidable :false,		
		resizable :false, /* important */
		togglerLength_closed :"100%",
		togglerLength_open :"100%",
		togglerAlign_closed :"center",
		/* togglerContent_closed :"options", */
		togglerTip_closed :gettext("click to show options"),
		togglerTip_open :gettext("click to hide options"),
		initClosed :false,
		paneSelector :".inner-north",
		onopen :"onInnerNorthPaneOpen",
		onclose :"onInnerNorthPaneClose"
	}
};

var outerLayout, innerLayout;
layoutFrames = function() {

	var innerNorthPaneOpened = $.cookie('innerNorthPaneOpened');
	myDefaultInnerLayoutSettings.north.initClosed = (innerNorthPaneOpened === null) ? (innerNorthPaneDefaults['innerNorthPaneOpened'] == '0')
			: (innerNorthPaneOpened == "0");

	outerLayout = $('body').layout(myDefaultOuterLayoutSettings);
	innerLayout = $('div.outer-center').layout(myDefaultInnerLayoutSettings);
	
	// to trigger add_comment_btn positioning
	if (myDefaultInnerLayoutSettings.north.initClosed)
		onInnerNorthPaneClose() ;
	else 
		onInnerNorthPaneOpen() ;
}

fillFilterTab = function() {
	
	var tab = $('#c_filter');
	
	var html = '<div style="float:right">' +
				'<table>' +
					'<tr>' +
					'<td style="text-align:right;">' +
					gettext('Text') +
				'<td>&nbsp;</td>' +
				'<td>' +
					'<input id="filter_text" type="text"></input>' +
					'<input id="c_filter_btn" type="button" value="' + gettext('Search') + '"></input>' +
				'</td>' +
					'</tr>' +
					'<tr>' +
						'<td colspan="3" style="text-align:right;">' +
							'<input id="c_filterreset_btn" type="button" value="' + gettext('Reset') + '"></input>' +
							'<input id="c_filterhideall_btn" type="button" value="' + gettext('Hide all Comments') + '"></input>' +
						'</td>' +
					'</tr>' +
				'</table>' +
			'</div>' +
			'<table>' +
				'<tr>' +
					'<td style="text-align:right;">' +
					gettext('Authors') +
					'</td>' +
					'<td>&nbsp;</td>' +
					'<td>' +
						'<select id="filter_name"></select>' +
					'</td>' +
					'<td>&nbsp;</td>' +
					'<td style="text-align:right;">' +
					gettext('States') +
					'</td>' +
					'<td>&nbsp;</td>' +
					'<td>' +
						'<select id="filter_state"></select>' +
					'</td>' +
				'</tr>' +
				'<tr>' +
					'<td style="text-align:right;">' +
						gettext('Dates') +
					'</td>' +
					'<td>&nbsp;</td>' +
					'<td>' +
						'<select id="filter_date"></select>' +
					'</td>' +
					'<td>&nbsp;</td>' +
					'<td style="text-align:right;">' +
						gettext('Tags') +
					'</td>' +
					'<td>&nbsp;</td>' +
					'<td>' +
						'<select id="filter_tag"></select>' +
					'</td>' +
				'</tr>' +
			'</table>';
	tab.append($(html));	
	
	$("#c_filter input[type='text']").add("#c_filter select").addClass('c_filter_field') ;

	$("#filter_name").add("#filter_date").add("#filter_tag").add("#filter_state").change(function() {
		if (frames['text_view_comments'].readyForAction()) {
			var elt = $(this) ;
			frames['text_view_comments'].checkForOpenedDialog(null, function() {
				//console.info($(this)) ;
				//console.info(elt) ;
				//applyFilter($(this)) ;
				applyFilter(elt) ;
			}) ;
		}
	});

	$("#c_filter_btn").click(function() {
		if (frames['text_view_comments'].readyForAction()) {
			var elt = $("#filter_text") ;
			frames['text_view_comments'].checkForOpenedDialog(null, function() {
				applyFilter(elt) ;
			}) ;
		}
	});

	$('#filter_text').keyup( function(e) {
		if (e.keyCode == 13) {$("#c_filter_btn").click();}
	});

	$("#c_filterreset_btn").click( function() {
		if (frames['text_view_comments'].readyForAction()) {
			frames['text_view_comments'].checkForOpenedDialog(null, function() {
				resetFilter();
			}) ;
		}
	});

	$("#c_filterhideall_btn").click( function() {
		if (frames['text_view_comments'].readyForAction()) {
			frames['text_view_comments'].checkForOpenedDialog(null, function() {
				frames['text_view_comments'].hideAll() ;
			}) ;
		}
	});
	
}
fillTopToolbar = function() {
	
	var parent = $('#outer-north');

	var viewPrev = gettext('view previous comment') ;
	var viewNext = gettext('view next comment') ;
	var viewFirst = gettext('view first comment') ;
	var viewLast = gettext('view last next comment') ;
	var viewAll = gettext('view all comments') ;
	var viewScopeRemoved = gettext('view all detached comments') ;
	var advancedInterface = gettext('toggle advance interface') ;
	var print = gettext('print document with/without comments') ;
	var exportDoc = gettext('export document with/without comments') ;
	var fullscreen = gettext('toggle full screen view') ;
	var feed = gettext('text feed') ;
	var addComment = gettext('add a comment') ;

	var html = '<div id="c-right-btn">' +
		        '<img id="c_fullscreen_btn" src="' + sv_media_url + '/img/arrow_out.png" title="'+ fullscreen +'" alt="'+ fullscreen +'"/>' +      
		        '<img id="c_print_btn" src="' + sv_media_url + '/img/printer.png" title="'+ print +'" alt="'+ print +'"/>' +         
		        '<img id="c_export_btn" src="' + sv_media_url + '/img/page_go.png" title="'+ exportDoc +'" alt="'+ exportDoc +'"/>' +
		        '<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>' +         
	        '</div>' +
		    '<div id="c-msg-wrapper">' +
			'</div>' + 
			'<table style="margin-bottom:.3em;">' + 
			'<tbody>' + 
			'<tr>' + 
			'<td>' +
				'<span id="c_filter_results" >' +
				'<b>&nbsp;<span id="c_f_res_nb_dis"></span></b>&nbsp;<span id="c_f_res_nb_dis_txt"></span>' +
				'<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>' +
				'</span>' +
			'</td>' +
			'<td>' +
			'<span id="browse_section">' +
			', ' + gettext('browse by:') + ' ' + 
				'<select id="browse_by">' + 
				'<option value="scope">' + gettext('location') + '</option>' +
				'<option value="modif_thread">' + gettext('modification') + '</option>' +
				'</select>' + 
			'</span>' +
			'</td>' + 
			'<td width="40" align="right">' + 
				'<a href="#" id="c_browse_first"><img title="'+ viewFirst +'" alt="'+ viewFirst +'" src="' + sv_media_url + '/img/control_fastbackward_blue.png"/></a>' +
				'<a href="#" id="c_browse_prev"><img title="'+ viewPrev +'" alt="'+ viewPrev +'" src="' + sv_media_url + '/img/control_playback_blue.png"/></a>' +
			'</td>' +
			'<td width="50" align="center">' +
					'<span id="c_browse_indx_scope">-</span>' +
					'<span id="c_browse_indx_modif_thread" style="display: none;">-</span>' +
					'/' +
					'<span id="c_browse_indx_total"></span>' + 
			'</td>' +
			'<td width="40" align="left">' +
				'<a href="#" id="c_browse_next"><img title="'+ viewNext +'" alt="'+ viewNext +'" src="' + sv_media_url + '/img/control_play_blue.png"/></a>' +
				'<a href="#" id="c_browse_last"><img title="'+ viewLast +'" alt="'+ viewLast +'" src="' + sv_media_url + '/img/control_fastforward_blue.png"/></a>' +
			'</td>' +
			'<td width="20" align="left">' +
			'<a href="#" id="c_browse_all"><img title="'+ viewAll +'" alt="'+ viewAll +'" src="' + sv_media_url + '/img/view_all.png"/></a>' +
			'</td>' +
			'<td width="20" align="left">' +
			'<a href="#" id="c_browse_scope_removed"><img title="'+ viewScopeRemoved +'" alt="'+ viewScopeRemoved +'" src="' + sv_media_url + '/img/view_scope_removed2.png"/></a>' +
			'</td>' +
			'<td width="20" align="left">' +
				'<a href="#" id="c_advanced_btn"><img title="'+ advancedInterface +'" alt="'+ advancedInterface +'" src="' + sv_media_url + '/img/application_split.png"/></a>' +
			'</td>' +
			'<td width="20" align="left">' +
				'<a href="#" id="c_thread_unthread"><img id="c_thread_unthread_img"/></a>' +
			'</td>' +
			'</tr>' +
			'</tbody>' +
			'</table>' ;
	parent.prepend($(html));

	$("#add_comment_btn").click( function() {
		if (frames['text_view_comments'].readyForAction()) {
			frames['text_view_comments'].checkForOpenedDialog(null, function() {
				frames['text_view_comments'].gSync.showCommentForm(null) ;
			}) ;
		}
	});

	var showBrowseIndx = function() {
		$("#browse_by option").each(function() {
			$("#c_browse_indx_"+this.value).hide() ;
		}) ;
		$('#c_browse_indx_' + $('#browse_by').val()).show() ;
	};
	
	var first_browse_by_val = $.cookie('browse_by');
	first_browse_by_val = (first_browse_by_val == null) ? "location" : first_browse_by_val ;
	_setCookie('browse_by', $('#browse_by').val());
	$("#browse_by option[value="+ first_browse_by_val +"]").attr("selected", true);
	showBrowseIndx() ;
	
	$("#browse_by").change(function() {
		_setCookie('browse_by', $('#browse_by').val());
		showBrowseIndx() ;
	});
	
	var lBrowse = function(whereto) {
		if (frames['text_view_comments'].readyForAction()) 
			frames['text_view_comments'].checkForOpenedDialog(null, function() {
				frames['text_view_comments'].browse($('#browse_by').val(), whereto); 
			}) ;
	};
	$("#c_browse_prev").click( function() {lBrowse("prev");});
	$("#c_browse_next").click( function() {lBrowse("next");});
	$("#c_browse_first").click( function() {lBrowse("first");});
	$("#c_browse_last").click( function() {lBrowse("last");});
	$("#c_browse_all").click( function() {
		if (frames['text_view_comments'].readyForAction()) {
			frames['text_view_comments'].checkForOpenedDialog(null, function() {
				frames['text_view_comments'].gSync.showAllComments() ;
			}) ;
		}
	});
	
	$("#c_browse_scope_removed").click( function() {
		if (frames['text_view_comments'].readyForAction()) {
			frames['text_view_comments'].checkForOpenedDialog(null, function() {
				frames['text_view_comments'].gSync.showScopeRemovedComments() ;
			}) ;
		}
	});
	
	$("#c_print_btn").click( function() {
		if (frames['text_view_comments'].readyForAction()) {
			var ids = frames['text_view_comments'].gDb.getFilteredCommentIdsAsString() ;
			frames['text_view_comments'].CY.log($("#filteredIds").val(ids)) ;
			openPrintDialog() ;
		}
	});
	
	$("#c_export_btn").click( function() {
		if (frames['text_view_comments'].readyForAction()) {
			var ids = frames['text_view_comments'].gDb.getFilteredCommentIdsAsString() ;
			frames['text_view_comments'].CY.log($("#filteredIds").val(ids)) ;
			openExportDialog() ;
		}
	});
	
	if (frames['text_view_comments'].gLayout.isInComentSite()) {
		$("#c_fullscreen_btn").click( function() {
				toggleFrameSize();
		});
	} ;	
	
	$("#c_advanced_btn").click( function() {
		$('.ui-layout-toggler').click() ; // calling the layout method did not work well edo that instead		
	}) ;
	
	setThreadPref = function() {
		var v = frames['text_view_comments'].c_readPreference('comments', 'threadpad');

		var btn_src = sv_media_url + '/img/unthread_box.png' ;
		var btn_desc = gettext('unthread discussions') ;
		if (v == '0') { 
			btn_src = sv_media_url + '/img/thread_box.png' ;
			btn_desc = gettext('thread discussions') ;
		}
		$('#c_thread_unthread_img').attr('src', btn_src).attr('alt', btn_desc).attr('title', btn_desc) ;
	};
	
	setThreadPref();	
	$('#c_thread_unthread').click( function() {
		var v = frames['text_view_comments'].c_readPreference('comments', 'threadpad');
		var anti_v = (v == '0') ? '1' : '0';
		frames['text_view_comments'].c_persistPreference('comments', 'threadpad', anti_v);
		setThreadPref();
		frames['text_view_comments'].gSync.animateToTop() ;
	});
	
}

onSliderStop = function() {
	var slideVal = $("#c_slider").slider('value') ;
//	console.info("in onSliderStop slider val : " + slideVal) ;
	if (slideVal > (frames['text_view_comments'].gConf['sliderFixedMin'] * 100)) 
		$("#c_slider").slider('value', [90]) ;
	if (slideVal < (frames['text_view_comments'].gConf['sliderFixedMax'] * 100)) 
		$("#c_slider").slider('value', [10]) ;
	
	frames['text_view_comments'].c_setCommentsColWidth(slideVal) ;
	frames['text_view_comments'].c_persistPreference('layout', 'comments_col_width', slideVal);
}

fillTextPreferencesTab = function() {
	var tab = $('#c_text_preferences');
	tab.append($(
			'<table>' +
			'<tr>' +
			'<td>' +
			gettext('Text style') +
			'</td>' +
			'<td>&nbsp;</td>' +
			'<td>' +
			'<select id="c_textpref_style"></select>' +
			'</td>' +
			'</tr>' +
			'</table>')) ;
	var styles = frames['text_view_comments'].gTextStyles ;
	for (var key in styles) {
		$("#c_textpref_style").append($("<option value='"+ key +"'>" + styles[key] + "</option>")) ;
	}
	
	var setTextStyle = function() {
		var styles = frames['text_view_comments'].gTextStyles ;
		var wish = $('#c_textpref_style').val() ;
		for (var key in styles) {
			if (key == wish)
				frames['text_view_comments'].CY.get("#textcontainer").addClass(styles[key]) ;
			else 
				frames['text_view_comments'].CY.get("#textcontainer").removeClass(styles[key]) ;
		}
	};
	
	var setTextStyleField = function() {
		var v = frames['text_view_comments'].c_readPreference('text', 'style');
		$('#c_textpref_style').val(v);
	};
	
	$("#c_textpref_style").change(function(v) {
		frames['text_view_comments'].c_persistPreference('text', 'style', $("#c_textpref_style").val());
		setTextStyle();
	});
	
	setTextStyleField();
	setTextStyle();
}

fillPreferencesTab = function() {
	var tab = $('#c_preferences');

	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>' +
				'<table>' +
				'<tr>' +
					'<td>' +
						gettext('Animation duration') +
					'</td>' +
					'<td>&nbsp;</td>' +
					'<td>' +
						'<input id="c_pref_animduration" type="text" style="width:3em" value="" />' +
					'</td>' +
				'</tr>' + 
				'<tr>' +
					'<td>' +
						'<span class="frame_helptext">' + gettext('(0.001 to 1 second)') + '</span>' +
					'</td>' +
					'<td></td><td></td>' +
				'</tr>' +
				'</table>';
	tab.append($(html)) ;

	setPreferencesFieldsValue = function() {
		var v = frames['text_view_comments'].c_readPreference('general', 'animduration');
		$('#c_pref_animduration').val(v);
	};
	
	setPreferencesFieldsValue();

	$('#c_pref_animduration').blur( function() {
		var v = parseFloat($(this).val());
		if (isNaN(v) || (v <= 0) || (v > 1)) {
			v = frames['text_view_comments'].c_readDefaultPreference('general', 'animduration');
		}
		$(this).val(v);
	});

	$('#c_pref_reset_btn').click( function() {
		frames['text_view_comments'].c_resetPreferences(['general']);
		setPreferencesFieldsValue();

		enqueueMsg(gettext('preferences reset (will apply on next load)'));
	});

	$('#c_pref_save_btn').click( function() {
		frames['text_view_comments'].c_persistPreference('general', 'animduration', $('#c_pref_animduration').val());

		enqueueMsg(gettext('preferences saved (will apply on next load)'));
	});
}

initFrame = function() {
	_initYesNoDialog();
	_initPrintDialog() ;	

	$(window).resize(function(){
 		onSliderStop(); 
//		console.log('in frame resize' +  $("#c_slider").slider('value')) ;
//		console.log('in frame resize' + frames['text_view_comments'].CY.DOM.winWidth()) ;
//		console.log('in frame resize' + $(window).width()) ;
	});

	//$('<div id="c_slider"></div>').appendTo("#c-btns").slider({ 
	$('#c_slider').slider({ 
	animate: true,
	range: "min",
	value: frames['text_view_comments'].c_readPreference('layout','comments_col_width'),
	min: 1,
	iframeFix: true,
	max: 100,
//	step: 5,
	slide: function(event, ui) {
		var slideVal = ui.value ;
		frames['text_view_comments'].c_setCommentsColWidth(slideVal) ;
	},
	stop:function(event, ui) {
		onSliderStop() ;
	}
	}) ;

	
	_initTabs();
	
	f_interfaceFreeze();
};

_initTabs = function() {
	$(".inner-north").tabs();

	var selectedTab = $.cookie('selectedTab');
	selectedTab = (selectedTab === null) ? innerNorthPaneDefaults['selectedTab'] : parseInt(selectedTab);
	$(".inner-north").tabs('select', selectedTab);
	$(".inner-north").bind('tabsselect', function(event, ui) {
		// // Objects available in the function context:
			// ui.tab // anchor element of the selected (clicked) tab
			// ui.panel // element, that contains the selected/clicked tab
			// contents
			// ui.index // zero-based index of the selected (clicked) tab
			_setCookie('selectedTab', ui.index);

		});
}

_initYesNoDialog = function() {
	$('#dialog_h').dialog( {
		// bgiframe: true, // why would we ?
		autoOpen :false,
		modal :true
	});
}

_setCookie = function(name, value) {
	var cookieExpire = new Date();
	cookieExpire.setFullYear(2100, 0, 1);
	$.cookie(name, value, {
		'expires' :cookieExpire,
		'path': '/'
	});
}

//contains code thats offered by the text_view_comment_frame to its child frame text_view_comment
f_getFrameFilterData = function () {
	var name = $('#filter_name').val(); ; 
	var date_str = $('#filter_date').val(); ; 
	var text = $('#filter_text').val(); ; 
	var tag = $('#filter_tag').val(); ; 
	var state = $('#filter_state').val(); ; 
	return {'name':name, 'date':date_str, 'text':text, 'tag':tag, 'state':state} ;
}

f_setFilterValue = function (obj) {
	for (key in obj) {
		if (key.indexOf('filter_') == 0) 
			$('#'+key).val(obj[key]); // wont explode even if argument is silly
	}
}

f_isFrameFilterFieldsInit = function () {
	var obj = f_getFrameFilterData() ;
	var ret = true ;
	for (key in obj) {
		ret = ret && (obj[key] == "") ;
	}
	return ret ;
}

initFilterFields = function () {
	$('.c_filter_field').val("") ;
}

resetFilter = function () {
	initFilterFields() ;
	frames['text_view_comments'].reinit() ;
	enqueueMsg(gettext("filter reset")) ;
}

applyFilter = function(self) {
	var val = self.val() ;  
	if (gResetOtherFieldsOnFilterFieldChange) {
		initFilterFields() ;  
		self.val(val) ; 
	}
	frames['text_view_comments'].reinit();
	enqueueMsg(gettext("filter applied"));
}

f_updateFilterCountResult = function(nbDiscussions, nbComments, nbReplies, nbAllComments, nbAllReplies) {
	// update result counter message field.
	$("#c_f_res_nb_dis").html(nbDiscussions) ;
	$("#c_f_res_nb_dis_txt").html(ngettext('discussion', 'discussions', nbDiscussions)) ;

	$("#c_f_res_nb_com").html(nbComments) ;
	$("#c_f_res_nb_tot_com").html(nbAllComments) ;
	$("#c_f_res_nb_com_txt").html(ngettext('comment', 'comments', nbComments)) ;
	$("#c_f_res_nb_rep").html(nbReplies) ; 
	$("#c_f_res_nb_tot_rep").html(nbAllReplies) ; 
	$("#c_f_res_nb_rep_txt").html('&nbsp;' + ngettext('reply', 'replies', nbReplies)) ;

	// update browser infos
	$("#c_browse_indx_total").html(nbDiscussions) ; 
	
	//console.info('nbDiscussions + typeof nbDiscussions +nbComments + typeof nbComments) ;
	$("#c_filter_results").show() ; 
} ;

f_updateFilterCountDetailed = function(detailed) {
	if (detailed) {
		$("#c_f_res_details").show() ;
		$("c_browse_all").val('View all (filtered) comments')
	}
	else {
		$("#c_f_res_details").hide() ;
		$("#c_browse_all").val('View all comments')
	}
} ;

f_updateFilterData = function(newFilterData) {
//	console.info(newFilterData) ;
	// users
	var selectedNameOption = $("#filter_name option:selected").attr("name") ;
	var all = gettext("all") ;
	$("#filter_name option").remove() ;
	
	$("#filter_name").append($("<option name='c_f2_user_all' value=''>" + all + "</option>")) ;
	for (var  i=0, ilen=newFilterData['names'].length; i < ilen ; i++) {
		var item = newFilterData['names'][i] ;
		$("#filter_name").append($("<option name='c_f2_user_"+ item.name +"' value='"+ item.name +"'>" + item.name +"("+item.nb_comments+")</option>")) ;
	}
	
	$("#filter_name option[name="+selectedNameOption+"]").attr("selected", true);
	
	// dates
	var selectedDateOption = $("#filter_date option:selected").attr("name") ;

	$("#filter_date option").remove() ;
	
	$("#filter_date").append($("<option name='c_f_date_all' value=''>" + all + "</option>")) ;
	for (var  i=0, ilen=newFilterData['dates'].length; i < ilen ; i++) {
		var item = newFilterData['dates'][i] ;
		var ddd = ngettext('last 24 hours (%(nb_comments)s)', 'last %(nb_days)s days (%(nb_comments)s)', item.nb_day) ;
		var ccc = interpolate(ddd,{'nb_days':item.nb_day, 'nb_comments':item.nb_comments}, true) ;		
		
		$("#filter_date").append($("<option name='c_f_date_"+ item.nb_day +"' value='"+ item.nb_day_date +"'>" + ccc + "</option>")) ;
	}
	
	$("#filter_date option[name="+selectedDateOption+"]").attr("selected", true);
	
	// text : nothing to do
	
	// tags
	var selectedTagOption = $("#filter_tag option:selected").attr("name") ;

	$("#filter_tag option").remove() ;
	
	$("#filter_tag").append($("<option name='c_f2_tag_all' value=''>" + all + "</option>")) ;
	for (var  i=0, ilen=newFilterData['tags'].length; i < ilen ; i++) {
		var item = newFilterData['tags'][i] ;
		$("#filter_tag").append($("<option name='c_f2_tag_"+ item.name +"' value='"+ item.name +"'>" + item.name +"("+item.nb_comments+")</option>")) ;
	}
	$("#filter_tag option[name="+selectedTagOption+"]").attr("selected", true);
	
	// states
	var selectedStateOption = $("#filter_state option:selected").attr("state") ;

	$("#filter_state option").remove() ;
	
	$("#filter_state").append($("<option name='c_f2_state_all' value=''>" + all + "</option>")) ;
	for (var  i=0, ilen=newFilterData['states'].length; i < ilen ; i++) {
		var item = newFilterData['states'][i] ;
		$("#filter_state").append($("<option name='c_f2_state_"+ item.state +"' value='"+ item.state +"'>" + gettext(item.state) +"("+item.nb_comments+")</option>")) ;
	}
	$("#filter_state option[name="+selectedStateOption+"]").attr("selected", true);
} ;

f_interfaceUnfreeze = function() {
	// tabs headers
	for ( var i = 0, ilen = $(".c_tab").length; i < ilen; i++) {
		$(".inner-north").tabs("enable", i);
	}

	$(".inner-north select").add(".inner-north input").add("#outer-north select").add("#outer-north input").each( function() {
		$(this).attr("disabled", false);
	});

	$("#c_slider").slider('enable') ;

} ;

f_interfaceFreeze = function() {
	// tabs headers
	for ( var i = 0, ilen = $(".c_tab").length; i < ilen; i++) {
		$(".inner-north").tabs("disable", i);
	}

	$(".inner-north select").add(".inner-north input").add("#outer-north select").add("#outer-north input").each( function() {
		$(this).attr("disabled", true);
	});
	
	$("#c_slider").slider('disable') ;
} ;

f_enqueueMsg = function(msg) {
	enqueueMsg(msg) ; 	
} ;

f_enqueueErrorMsg = function(msg) {
	enqueueErrorMsg(msg) ; 	
} ;

f_removeLoadingMsg = function() {
	removeLoadingMsg() ;
}

f_initFrame = function() {
	initFrame() ;
}

f_layoutFrames = function() {
	layoutFrames() ;
}

f_fillTextPreferencesTab = function() {
	fillTextPreferencesTab() ;
}

f_fillPreferencesTab = function() {
	fillPreferencesTab() ;
}

f_fillBrowseSection = function() {
	fillBrowseSection() ;
}

f_fillFilterTab = function() {
	fillFilterTab() ;
}

f_fillTopToolbar = function() {
	fillTopToolbar() ;
}

f_yesNoDialog = function(htmlContent, title, noFunction, noFunctionContext, noFunctionArgs, yesFunction, yesFunctionContext, yesFunctionArgs) {
	$('#dialog_h').html(htmlContent) ;
	
	$('#dialog_h').dialog('option', 'title', title) ;

	function onNo() {
		if (noFunction != null)
			noFunction.call(noFunctionContext, noFunctionArgs) ;
	}
	
	function onYes() {
		if (yesFunction != null)
			yesFunction.call(yesFunctionContext, yesFunctionArgs) ;
	}
	var buttons = {} ;
	buttons[gettext('No')] = function() {$(this).dialog('close');onNo();} ;
	buttons[gettext('Yes')] = function() {$(this).dialog('close');onYes();} ;
	$('#dialog_h').dialog('option', 'buttons', buttons) ;        
	$('#dialog_h').dialog('open') ;
}

f_setCookie = function(name, value) {
	_setCookie(name, value) ;
}



/*****************************************************************************/


gInFullScreen = false;

_setFrameSize = function() {
	if (parent != window) { // (this condition is to enable accessing "comments_frame" view from top window) TODO test under IE   
		if (gInFullScreen) {
			var headerHeight = parent.$("#header").height();
			var windowHeight = parent.$(parent).height();
			var frameHeight = (windowHeight - headerHeight - 2) + 'px'; // - 2 to prevent scrollbars ? --> TODO test it without -2
	
			var windowWidth = parent.$(parent).width();
			var frameWidth = (windowWidth - 2) + 'px'; // - 2 to prevent scrollbars ?// --> TODO test it without -2
	
			// TODO we should be embeded ! shouldn't work otherwise anyway (frame security concerns)
			parent.$("#text_view_frame").css( {
				'position' :'absolute',
				'left' :'0px',
				'top' :headerHeight,
				'width' :frameWidth,
				'height' :frameHeight
			});
		}
		else {
			var frameTop = Math.ceil(parent.$("#autoexpand_text_view_frame_container").position()["top"]);
	
			var windowHeight = parent.$(parent).height();
			var frameHeight = (windowHeight - frameTop - 2) + 'px'; // - 2 to prevent scrollbars // ? --> TODO test it without -2
			
			var windowWidth = parent.$(parent).width();
			var frameWidth = (windowWidth - 2) + 'px'; // - 2 to prevent scrollbars ? // --> TODO test it without -2
	
			// TODO test if we're embeded ! wont work otherwise anyway (frame security)
			parent.$("#text_view_frame").css( {
				'position' :'relative',
				'width' :'99.9%',
				'height' :frameHeight,
				'top' :'0px'
			});
		}
	}
}
_toFullScreenSize = function() {
	gInFullScreen = true;
	_setFrameSize() ;

	$("#c_fullscreen_btn").attr('src', sv_media_url + '/img/arrow_in.png');

	f_setCookie('fullscreen', '1') ;
};

_toNormalSize = function() {
	gInFullScreen = false;
	_setFrameSize() ;

	$("#c_fullscreen_btn").attr('src', sv_media_url + 'img/arrow_out.png');
	
	f_setCookie('fullscreen', '0') ;
};

_toInitialSize = function() {
	//console.info('_toInitialSize') ; 
	var fullscreen = ($.cookie('fullscreen') == '1');
	if (fullscreen)
		_toFullScreenSize() ;
	else 
		_toNormalSize() ;
};

toInitialSize = function() {
	_toInitialSize() ;
	parent.$(parent).resize(function(){
//		console.log('before setFramesize in top resize winwidth' + 	frames['text_view_comments'].CY.DOM.winWidth()) ;
		_setFrameSize();
//		console.log('after setFramesize in top resize winwidth' + 	frames['text_view_frame'].frames['text_view_comments'].CY.DOM.winWidth()) ;
	});
}

toggleFrameSize = function() {
	if (gInFullScreen)
		_toNormalSize() ;
	else 
		_toFullScreenSize() ;
}