//helpers
var ie6 = (navigator.appName.indexOf("Internet Explorer") >= 0 && navigator.appVersion
		.indexOf("MSIE 6") >= 0);
var ISIE = navigator.appName.indexOf("Internet Explorer") >= 0;
var hasParametrics = false;
var isInit = true;
var acceptclick = true;
var isFirstTime = true;
var isExternal = false;


if (ie6) {
	try {
		document.execCommand("BackgroundImageCache", false, true);
	} catch (err) {
	}
}

$.postJSON = function(url, data, callback, errorCallBack) {

	$J.ajax( {
		type : "POST",
		url : url,
		success : callback,
		error : errorCallBack,
		data : data,
		dataType : "json"
	});

};

function openCenteredWindow(url, width, height) {
	var left = parseInt((screen.availWidth / 2) - (width / 2));
	var vtop = parseInt((screen.availHeight / 2) - (height / 2));
	var windowFeatures = "scroll=1,width=" + width + ",height=" + height
			+ ",status,resizable,left=" + left + ",top=" + vtop + "screenX="
			+ left + ",screenY=" + vtop;
	myWindow = window.open(url, "subWind", windowFeatures);
	myWindow.focus();
}

// init page
// todo:template the body

// servlet declaration
var urlbase = "/search/";
var ACTION_URL = {
	performSearch : urlbase+"servlet/performSearch",
	performRight : urlbase+"servlet/performRight",
	performLeft : urlbase+"servlet/performLeft",
	performPaging : urlbase+"servlet/performPaging",
	performSort : urlbase+"servlet/performSort",
	initPage : urlbase+"servlet/initPage",
	displayPreferences : urlbase+"servlet/displayPreferences",
	displaySendmail : urlbase+"servlet/displaySendmail",
	savePreferences : urlbase+"servlet/savePreferences",
	editAlert : urlbase+"servlet/editAlert",
	saveAlert : urlbase+"servlet/saveAlert",
	deleteAlert : urlbase+"servlet/deleteAlert",
	showAdvancedSearch : urlbase+"servlet/showAdvancedSearch",
	performAdvSearch : urlbase+"servlet/performAdvancedSearch",
	facetFilterAction : urlbase+"servlet/facetFilterAction",
	performHistorySearch : urlbase+"servlet/performHistorySearch",
	performAlertSearch : urlbase+"servlet/performAlertSearch",
	displayExport : urlbase+"servlet/displayExport",
	exportDocuments : urlbase+"servlet/exportDocuments",
	sendDocuments : urlbase+"servlet/sendDocuments",
	performMoreLikeThis : urlbase+"servlet/performMoreLikeThis",
	performAsynchUpdate : urlbase+"servlet/performAsynchUpdate",
	initIndexPage : urlbase+"servlet/initIndexPage",
	performExternalSearch : urlbase+"servlet/performExternalSearch",
	refineCriterias : urlbase+"servlet/refineCriterias",
	performSearchWR : urlbase+"servlet/performSearchWithinResults",
	performCompletionUdk : urlbase+"servlet/performCompletionUdk",
	untagDocument : urlbase+"servlet/untagDocument",
	tagDocument : urlbase+"servlet/tagDocument",
	getDoc : urlbase+"servlet/getDoc",
	performTagsCompletion : urlbase+"servlet/performTagsCompletion",
    manageTags            : urlbase+"servlet/manageTags",
    displayTagActionForm  : urlbase+"servlet/displayTagActionForm",
    renameTag             : urlbase+"servlet/renameTag",
    deleteTag             : urlbase+"servlet/deleteTag",
    makeTagPublic            : urlbase+"servlet/makeTagPublic",
    addTag                : urlbase+"servlet/addTag",
	viewComments            : urlbase+"servlet/viewComments",
	addComment : urlbase+"servlet/addComment",
	deleteComment : urlbase+"servlet/deleteComment",
	myComments : urlbase+"servlet/myComments",
	changeNbResult : urlbase+"servlet/performChangeNbResult"
};

var DIV_ID_MAPPING = {
	'results' : 'results',
	'spell' : 'spell',
	'resultInfo' : 'resultInfo',
	'pager' : 'pager',
	'sortInfo' : 'sortInfo',
	'searchSummary' : 'searchSummary',
	'thebody' : 'thebody',
	'panelleft' : 'panelleft',
	'panelright' : 'panelright',
	'toolbar' : 'toolbar',
    'advSearch'     :  'advSearch',
    'tagActionPanel':  'tagactionpanel'
};

var MODALS = {
	preferences : {
		modal : true,
		resizable : false,
		overlay : {
			opacity : 0.2,
			backgroundColor : '#AAAAAA'
		},
		height : 150,
		close : function() {
			$J(this).remove();
		}
	},

	sendmail : {
		modal : true,
		resizable : false,
		overlay : {
			opacity : 0.2,
			backgroundColor : '#AAAAAA'
		},
		height : 350,
		close : function() {
			$J(this).remove();
		}
	},

	alert : {
		modal : true,
		resizable : false,
		overlay : {
			opacity : 0.2,
			backgroundColor : '#AAAAAA'
		},
		height : 220,
		width : 350,
		close : function() {
			$J(this).remove();
		}
	},

	exports : {
		modal : true,
		resizable : false,
		overlay : {
			opacity : 0.2,
			backgroundColor : '#AAAAAA'
		},
		height : 400,
		width : 800,
		close : function() {
			$J(this).remove();
		}
	},

	tags :{
        modal: true,
        resizable:false,
        overlay:{
            opacity: 0.2,
            backgroundColor:'#AAAAAA'
        },
        height:620,
        width:600
    },

	myComments : {
		modal : true,
		resizable : false,
		overlay : {
			opacity : 0.2,
			backgroundColor : '#AAAAAA'
		},
		height : 620,
		width : 800,
		close : function(event, ui) {
			$J(this).remove();
		}
	}
};

function openDialog(dialogOptions, content)
{
    $J(content).dialog(dialogOptions);

    $J('#dialog').bind('dialogclose', function(event) {
        $J('#dialog').remove();
     });
}

function closeDialog() {
	$J('#dialog').dialog('close');
	$J('#dialog').remove();
	return false;
}

/**
 * search handling
 *
 * @param event
 */
function searchHandler() {
	// close param if open
	hideParam();
	isInit = false;

	var postedData = $J("#frm_recherche").serialize();

	$J.postJSON(ACTION_URL.performSearch, postedData, function(data) {
		updateHtmlContents(data);
		calculateLeft();
	}, searchErrorCallBack);

	return false;
}

/**
 * search handling
 *
 * @param event
 */
function externalSearchHandler() {

	$J.postJSON(ACTION_URL.performExternalSearch, {}, function(data) {
		updateHtmlContents(data);
		calculateLeft();
	}, searchErrorCallBack);

	return false;
}

function advancedSearchHandler() {
	isInit = false;
	var postedData = $J("#advSearchForm").serialize();

	$J.postJSON(ACTION_URL.performAdvSearch, postedData, function(data) {
		updateHtmlContents(data);
		calculateLeft();
	}, searchErrorCallBack);

	return false;
}

function searchWithinResultsHandler(postedData) {
	isInit = false;

	$J.postJSON(ACTION_URL.performSearchWR, postedData, function(data) {
		updateHtmlContents(data);
		calculateLeft();
	}, searchErrorCallBack);

	return false;
}
function blockContent() {
	if (!isInit && !isFirstTime) {
		var contentContent = $J("#content").position();
		var contentHeight = $J("#content").height();
		var contentWidth = $J("#content").width();

		$J("#contentBlocker").css("visibility", "visible");
		$J("#contentBlocker").css("top", contentContent.top + 12 + "px");
		$J("#contentBlocker").css("left", contentContent.left + "px");
		$J("#contentBlocker").css("width", contentWidth - 4 + "px");
		$J("#contentBlocker").css("height", contentHeight + "px");
		$J("#contentBlocker").css("opacity", "0.2");
		$J("#contentBlocker").css("background-color", "#AAAAAA");
		$J("#contentBlocker").css("visibility", "visible");
		isFirstTime = false;
	}

}

function showContent() {
	$J("#contentBlocker").css("visibility", "hidden");
}

function isParamOpen() {
	return (document.getElementById("parametricsPanel").offsetHeight > 0);
}

function hideParam() {
	showContent();
	$J("#parametricsPanel").hide();
	$J('#tabparam').removeClass("tabclosed");
	$J('#tabparam').removeClass("tabopened");
	$J('#tabparam').addClass("tabclosed");
}

function toogleTabParam() {
	if (isParamOpen()) {
		$J('#tabparam').removeClass("tabclosed");
		$J('#tabparam').removeClass("tabopened");
		$J('#tabparam').addClass("tabopened");
		blockContent();
	} else {
		$J('#tabparam').removeClass("tabclosed");
		$J('#tabparam').removeClass("tabopened");
		$J('#tabparam').addClass("tabclosed");
		showContent();
	}

}

function initPage() {
	$J.postJSON(ACTION_URL.initPage, {
		init : true
	}, function(data) {
		updateHtmlContents(data);
		// check if has parametrics
			hasParametrics = (document.getElementById("tabparam") != null);
			// alert(hasParametrics);

			document.onclick = function() {
				return acceptclick;
			};

			$J("#q_usr").focus();

			$J("#loading").ajaxStart(function() {
				acceptclick = false;
				$J("#errors").html("");
				// block any event

					$J(this).show();
				});

			$J("#loading").ajaxStop(function() {
				acceptclick = true;
				// block any event

					$J(this).hide();
				});

			initIndexPage();
			if (hasParametrics && !isExternal) {
				$J("#parametricsPanel").slideToggle("fast", toogleTabParam);
			}

		});
}

/**
 * save pref handling
 *
 * @param event
 */
function savePreferences() {
	var postedData = $J("#prefForm").serialize();
	$J.postJSON(ACTION_URL.savePreferences, postedData, function(data) {
		closeDialog();
		initPage();
	}, function(XMLHttpRequest) {
		closeDialog();
		var jsonError = $J.evalJSON(XMLHttpRequest.responseText);
		$J(jsonError.content).dialog(MODALS.preferences);
	});

	return false;
}

function saveAlert() {
	var postedData = $J("#alertForm").serialize();
	$J.postJSON(ACTION_URL.saveAlert, postedData, function(data) {
		closeDialog();
		updateControlContent(data);
	},

	function(XMLHttpRequest) {
		closeDialog();
		var jsonError = $J.evalJSON(XMLHttpRequest.responseText);
		$J(jsonError.content).dialog(MODALS.alert);
	});
	return false;
}

function sendMail() {

	var postedData = $J("#sendMailForm").serialize();
	$J.postJSON(ACTION_URL.sendDocuments, postedData, function(data) {
		closeDialog();
		updateControlContent(data);
	},

	function(XMLHttpRequest) {
		closeDialog();
		var jsonError = $J.evalJSON(XMLHttpRequest.responseText);
		$J(jsonError.content).dialog(MODALS.sendmail);
	});
	return false;
}

function deleteAlert(searchID) {
	$J.postJSON(ACTION_URL.deleteAlert, {
		searchID : searchID
	}, function(data) {
		closeDialog();
		updateControlContent(data);
	}, function(XMLHttpRequest) {
		closeDialog();
		var jsonError = $J.evalJSON(XMLHttpRequest.responseText);
		$J(jsonError.content).dialog(MODALS.alert);
	});
	return false;

}

function exportDocs(type, data) {
	document.location.href = ACTION_URL.exportDocuments + "?" + data + "&type="
			+ type;
	return false;
}

function sendDocuments(type, data) {
	document.location.href = ACTION_URL.sendDocuments + "?" + data + "&type="
			+ type;
	return false;
}

function calculateLeft() {
	$J.postJSON(ACTION_URL.performLeft, {}, function(data) {
		updateHtmlContents(data);
		calculateRight();
	}, function(XMLHttpRequest) {
		searchErrorCallBack(XMLHttpRequest);
		calculateRight();
	});
}

function calculateRight() {
	$J.postJSON(ACTION_URL.performRight, {}, function(data) {
		updateHtmlContents(data);
	}, searchErrorCallBack);
}

function sendSearchEvent(eventName, postedData) {
	var empty = {};
	var eventNameData = {
		eventname : eventName
	};
	var settings = $J.extend(eventNameData, postedData);

	$J.postJSON(ACTION_URL.facetFilterAction, settings, function(data) {
		updateHtmlContents(data);
		calculateLeft();
	}, searchErrorCallBack);
}

function moreLikeThis(uid) {

	$J.postJSON(ACTION_URL.performMoreLikeThis, {
		uid : uid
	},
			function(data) {
				$J("#itemResult" + uid).find('div[id=moreLikeThis]').removeAttr(
						"class");
				jQuery.each(data, function(index, value) {

					$J("#itemResult" + uid).find('div[id=moreLikeThis]').html(
							value.content);
				});
			}, function(XMLHttpRequest) {
				$J("#itemResult" + uid).find('div[id=moreLikeThis]').removeAttr(
						"class");
				var jsonError = $J.evalJSON(XMLHttpRequest.responseText);
				$J("#itemResult" + uid).find('div[id=moreLikeThis]').html(
						jsonError.content);
			});
}

function matchEvent(eventTarget, eventSelector) {
	return ($J(eventTarget).is(eventSelector))
			|| ($J(eventTarget.parentNode).is(eventSelector));
}

function itemMouseOver(elt) {
	var prevClass = $J("#" + elt.id).attr("class");
	$J("#toolbar" + elt.id.replace('itemResult', '')).show();
	$J("#" + elt.id).attr("class", prevClass + " itemtoolbar");
}

function itemMouseOut(elt) {
	var prevClass = $J("#" + elt.id).attr("class").split(' ')[0];
	$J("#toolbar" + elt.id.replace('itemResult', '')).hide();
	$J("#" + elt.id).attr("class", prevClass);
}

/**
 * register live events
 */
function registerLiveEvents() {
	$J("body").click(function(event) {
				// register facet events

					if (!acceptclick) {
						return false;
					}

					if ($J(event.target).is('a[href*=#fi]')) {
						var isFacetCriteria = event.target.href
								.indexOf("#ficriteria") > 0;
						name = event.target.name.split("::")[0];
						value = event.target.name.split("::")[1];
						try {
							label = event.target.name.split("::")[2];
						} catch (ex) {
							label = value;
						}

						try {
							level = event.target.name.split("::")[4];
						} catch (ex) {
							level = 0;
						}

						sendSearchEvent("facetfilter", {
							facetName : name,
							facetValue : value,
							facetLabel : label,
							facetLevel : level,
							isFacetCriteria : isFacetCriteria
						});
						window.scrollTo(0, 0);
						return false;
					}

					// register remove "Search Within Results"

					if ($J(event.target).is('a[href*=#removeSWR]')) {
						revertToInitialSearch();
						return false;
					}

					// register pager events
					if ($J(event.target).is('a[href*=#pager]')) {

						gotoPage(event.target.name);
						window.scrollTo(0, 0);
						return false;
					}
					if($J(event.target).is('img[src*=/css/mcImgBt_precedent.gif]') || $J(event.target).is('img[src*=/css/mcImgBt_suivant.gif]')) {

						gotoPage(event.target.parentNode.name);
						window.scrollTo(0, 0);
						return false;
					}
					// register sort events
					if ($J(event.target).is('a[href*=#sort]')) {

						var sortId = event.target.name;
						sort(sortId);
						return false;
					}

					// register history events
					if ($J(event.target).is('a[href*=#hist]')) {

						var searchID = event.target.name;
						launchHistorySearch(searchID);
						event.preventDefault();
						return false;
					}

					// register alerts events
					if ($J(event.target).is('a[href*=#alLaunch]')) {

						var searchID = event.target.name;
						launchAlertSearch(searchID);
						event.preventDefault();
						return false;
					}

					// register alerts edit events
					if ($J(event.target).is('a[href*=#alEdit]')) {
						var searchID = event.target.name;

						$J.postJSON(ACTION_URL.editAlert, {
							searchID : searchID,
							edit : 'on'
						}, function(data) {
							$J(data[0].content).dialog(MODALS.alert);
						}, searchErrorCallBack);
						event.preventDefault();
						return false;
					}

					// register alerts create events
					if ($J(event.target).is('#alert')) {
						$J.postJSON(ACTION_URL.editAlert, {}, function(data) {
							$J(data[0].content).dialog(MODALS.alert);
						}, searchErrorCallBack);

						event.preventDefault();
						return false;
					}

					// register alerts delete events
					if ($J(event.target).is('#alDelete')) {
						var searchID = event.target.name;
						deleteAlert(searchID)
						event.preventDefault();
						return false;
					}

					// register alerts delete events
					/*
					 * if ($J(event.target).is('#btnAdvSearch')) {
					 * $J("#advSearchForm").submit(); alert($J("#advSearchForm"));
					 * event.preventDefault(); return false; }
					 */

					// register spell suggestion click
					if ($J(event.target).is('#spellAction')) {
						spell(event.target.name);
						event.preventDefault();
						return false;
					}

					// register spell suggestion click
					if ($J(event.target).is('a[href*=#suggestAction]')) {
						suggest(event.target.name);
						event.preventDefault();
						return false;
					}

					// preferences click

					if (matchEvent(event.target, '#preferences')) {
						$J.postJSON(ACTION_URL.displayPreferences, {}, function(
								data) {
							$J(data[0].content).dialog(MODALS.preferences);
						}, searchErrorCallBack);

						event.preventDefault();
						return false;
					}

					// register close dialog event
					if ($J(event.target).is('button[name=#dialog_cancel]')) {
						closeDialog();
						event.preventDefault();
						return false;
					}

					// register close box event
					if ($J(event.target).is('div[class=imgCloseBox]')) {
						$J(event.target).attr("class", "imgOpenBox");
						$J(event.target).parent('div').children(
								'div[name=widgetContent]').hide();
						event.preventDefault();
						handleCookie4Widget(event.target.id);
						return false;
					}

					// register open box event
					if ($J(event.target).is('div[class=imgOpenBox]')) {

						$J(event.target).attr("class", "imgCloseBox");
						$J(event.target).parent('div').children(
								'div[name=widgetContent]').show();
						event.preventDefault();
						handleCookie4Widget(event.target.id);
						return false;
					}

					// register help event
					if ($J(event.target).is('#help')) {
						event.preventDefault();
						return false;
					}

					// register advanced search click event
					if ($J(event.target).is('#adv')) {
						showAdvancedSearch();
						event.preventDefault();
						return false;
					}

					// register advanced search close event
					if ($J(event.target).is('#closeAdv')) {
						hideAdvancedSearch();
						showSimpleSearch();
						event.preventDefault();
						return false;
					}

					// register favorites
					if ($J(event.target).is('a[href*=#itemCart]')) {
						var url = event.target.name.split("::")[0];
						var title = event.target.name.split("::")[1];
						if (navigator.appName != 'Microsoft Internet Explorer') {
							window.sidebar.addPanel(title, url, "");
						} else {
							window.external.AddFavorite(url, title);
						}

						return false;
					}

					// register open cache
					if ($J(event.target).is('a[href*=#itemHL]')) {
						var uid = event.target.name.split("::")[0];
						var docid = event.target.name.split("::")[1];
						openCenteredWindow('openHl.jsp?uid=' + uid + "&docid="
								+ docid, 800, 600);
						return false;
					}

					// register more like this
					if ($J(event.target).is('a[href*=#itemMoreLikeThis]')) {
						var uid = event.target.name.split("::")[1];
						var moreLikeThisDiv = $J("#itemResult" + uid).find(
								'div[id=moreLikeThis]');

						if (moreLikeThisDiv.html() == "") {
							moreLikeThisDiv.attr("class", "moreLikeThis");
							moreLikeThis(uid);
						} else
							moreLikeThisDiv.html("");
						return false;
					}

					// register more like this
					if (matchEvent(event.target, '#tabparam')) {
						if (!isParamOpen()) {
							initIndexPage();
						}

						$J("#parametricsPanel").slideToggle("fast",
								toogleTabParam);
						return false;
					}

					// register Select
					if (matchEvent(event.target, 'a[href*=#itemSel]')) {
						var uid = event.target.name.split("::")[1];
						var itemDiv = $J("#itemResult" + uid);
						if (itemDiv.attr("class").indexOf("itemSelectedtrue") >= 0) {
							$J("#itemResult" + uid).attr("class",
									"itemSelectedfalse");
						} else {
							$J("#itemResult" + uid).attr("class",
									"itemSelectedtrue");
						}
						handleCookie4Doc(uid);
					}

					// register export
					if (matchEvent(event.target, 'a[href*=#exportType]')) {
						var postedData = $J("#exportForm").serialize();
						var type = event.target.name;
						exportDocs(type, postedData);
						event.preventDefault();
						return false;
					}

					//
					if ($J(event.target).is('a[href*=#sendDocuments]')) {
						$J.postJSON(ACTION_URL.displaySendmail, {}, function(
								data) {
							$J(data[0].content).dialog(MODALS.sendmail);
						}, searchErrorCallBack);

						event.preventDefault();
						return false;
					}

                    //tag panel
                    if ($J(event.target).is('a[href*=#addSharedTagLnk]')
                            || $J(event.target).is('a[href*=#cancelSharedTagAdd]'))
                    {
                        // addTagsPanel
						var uid = event.target.name.split("::")[1];
                        var key = event.target.name.split("::")[2];
                        var addTagsPanel = $J("#itemResult" + uid).find('div[id=addSharedTagsPanel]');
                        if (addTagsPanel)
                        {
                            var tmp = 'div[id="tagsErrorShared'+key+'"]';
                            $J("#itemResult"+uid).find(tmp).html("");
                            addTagsPanel.toggle();
                        }
                        return false;
                    }

                    if ($J(event.target).is('a[href*=#addPersoTagLnk]')
                            || $J(event.target).is('a[href*=#cancelPersoTagAdd]'))
                    {
                        // addTagsPanel
						var uid = event.target.name.split("::")[1];
                        var key = event.target.name.split("::")[2];                                                
                        var addTagsPanel = $J("#itemResult" + uid).find('div[id=addPersoTagsPanel]');
                        if (addTagsPanel)
                        {
                            var tmp = 'div[id="tagsErrorPerso'+key+'"]';
                            $J("#itemResult"+uid).find(tmp).html("");
                            addTagsPanel.toggle();
                        }
                        return false;
                    }


                    if (matchEvent(event.target,'#managetags'))
                    {
                        $J.postJSON(ACTION_URL.manageTags, { },
                                function(data)
                                {
                                    openDialog(MODALS.tags,data[0].content);
                                },
                                searchErrorCallBack);

                        return false;
                    }


                    if ($J(event.target).is('a[href*=#renameTag]')
                            || $J(event.target).is('a[href*=#deleteTag]')
                            || $J(event.target).is('a[href*=#promoteTag]'))
                    {
                        var params = event.target.name.split("::");
                        var tagid = params[0];
                        var tagaction = params[1];
                        displayTagActionForm(tagid, tagaction);

                       return false;
                    }

                    if ($J(event.target).is('a[href*=#addTag]'))
                    {
                        var params = event.target.name.split("::");
                        var tagaction = params[0];
                        var tagtype = params[1];
                        displayTagActionForm(null, tagaction, tagtype);

                       return false;
                    }

                    if ($J(event.target).is('a[href*=#deleteSelectedTags]'))
                    {
                        displayDeleteSelectedTagsActionForm();
						return false;
					}

                    if ($J(event.target).is('a[href*=#tagpager]'))
                    {
                        manageTags(event.target.name, true);
                        return false;
                    }

                    if ($J(event.target).is('a[href*=#selectalltags]'))
                    {
                        $J("form[id=manageTagsForm] input:checkbox").attr("checked","checked");
                        return false;
                    }

                    if ($J(event.target).is('a[href*=#unselectalltags]'))
                    {
                        $J("form[id=manageTagsForm] input:checkbox").removeAttr("checked");
                        return false;
                    }

                     if ($J(event.target).is('a[href*=#byNameSort]'))
                    {

                        var sortElt = $J("#manageTagsForm").find('input[name=tagSort]');
                        var currentSort = sortElt.attr("value");
                        var nextSort = (currentSort == 'NAME_ASC')?'NAME_DESC':'NAME_ASC';
                        manageTags('0', true, nextSort);
                        return false;
                    }

                    if ($J(event.target).is('a[href*=#byOwnerSort]'))
                    {

                        var sortElt = $J("#manageTagsForm").find('input[name=tagSort]');
                        var currentSort = sortElt.attr("value");
                        var nextSort = (currentSort == 'OWNER_ASC')?'OWNER_DESC':'OWNER_ASC';
                        manageTags('0', true, nextSort);
                        return false;
                    }

					// view comments
					if ($J(event.target).is('a[href*=#viewComments]')
                            || $J(event.target).is('a[href*=#addAndviewComments]')) {

                        var commentAction = event.target.name.split("::")[0]; 
                        var documentId = event.target.name.split("::")[1];

                        var commentDiv = $J("#item" + documentId).find("div[id*=comments]")
                        var commentActionDiv = commentDiv.find("div[id=" + commentAction + "CommentPanel]");

                        if (commentActionDiv.length == 0){
                            showComments(documentId, commentAction);
                            //commentDiv.toggle();                            
                        } else
                        {
                            $J(commentDiv).html("");
                        }
                        /*
                        if (commentActionDiv.html() == null) {
                            showComments(documentId, commentAction);
                        } else {
                            commentDiv.html("");
                        }
                        */
						return false;
					}

					// view user events
					if ($J(event.target).is('a[href*=#myComments]')) {
						var authorId = $J('a[href*=#myComments]').attr('href')
								.split('::')[1];
                        var psize = $J('a[href*=#myComments]').attr('href')
								.split('::')[2];
                        showUserComments(authorId,0,psize);
					}
				});

}

function selectOrUnselectItem(itemId) {
	var itemDiv = $J("#itemResult" + itemId);
	if (itemDiv.attr("class").indexOf("itemSelectedtrue") >= 0) {
		$J("#itemResult" + itemId).attr("class", "itemSelectedfalse");
	} else {
		$J("#itemResult" + itemId).attr("class", "itemSelectedtrue");
	}
	handleCookie4Doc(itemId);
}

/**
 * update page with specified data: Json Array, divid: the div to be updated
 * content: content replacement
 *
 * @param data
 */

function updateControlContent(data) {
	jQuery.each(data, function(index, value) {
		updateOneContent(value.contentID, value.content);
	});
}

function updateHtmlContents(data) {
	jQuery.each(data, function(index, value) {
		var contentID = value.contentID;
		var divId = DIV_ID_MAPPING[contentID];
		if (divId != null) {
			updateOneContent(divId, value.content);
		} else {
			// fallback, if no divId found, trying to update an HTML element
			// that has the matching contentID
			updateOneContent(value.contentID, value.content);
		}
	});
}

function updateOneContent(divid, htmlContent) {
	var element = document.getElementById(divid);
	if (element) {
		$J(element).html(htmlContent);
	}
}
/**
 * paging action
 *
 * @param pageindex
 */
function gotoPage(pageindex) {

	$J.postJSON(ACTION_URL.performPaging, {
		pageindex : pageindex
	}, function(data) {
		updateHtmlContents(data);
	}, searchErrorCallBack);
}

/**
 * sort action
 *
 * @param systemName
 * @param sortDir
 */
function sort(sortId) {
	$J.postJSON(ACTION_URL.performSort, {
		sortId : sortId
	}, function(data) {

		updateHtmlContents(data);
		// update topic cluster
			updateTopic();

		}, searchErrorCallBack);
}

function updateTopic() {
	$J.postJSON(ACTION_URL.performAsynchUpdate, {}, function(data) {
		// update topic cluster
			updateControlContent(data);
		}, searchErrorCallBack);
}

function spell(usr) {
	$J("#recherche").attr("value", usr);
	launchSimpleSearch();
}

function suggest(usr) {
	$J("#recherche").attr("value", usr);
	launchSimpleSearch();
}
function showAdvancedSearch() {

	$J.postJSON(ACTION_URL.showAdvancedSearch, {}, function(data) {
		updateHtmlContents(data);
		hideSimpleSearch();
		showDatePicker();
		$J("#advSearch").css("top", $J("#q_usr").offset().top).css("left",
				$J("#q_usr").offset().left);

	}, searchErrorCallBack);

}
function showDatePicker() {
	$J("#startDate,#endDate").datepicker( {
		beforeShow : customRange,
		showOn : "button",
		buttonImage : "resources/templates/default/images/calendar.png",
		buttonImageOnly : true
	});
}

function customRange(input) {
	return {
		minDate : (input.id == "endDate" ? $J("#startDate")
				.datepicker("getDate") : null),
		maxDate : (input.id == "startDate" ? $J("#endDate")
				.datepicker("getDate") : null)
	};
}
function launchAdvancedSearch() {
	// close param if open
	hideParam();
	advancedSearchHandler();
	hideAdvancedSearch();
	showSimpleSearch();
	clearSimpleSearchTextbox();

}

function launchSimpleSearch() {
	searchHandler();
}

function hideAdvancedSearch() {
	$J("#advSearch").html("");
}

function hideSimpleSearch() {
	$J("#simpleSearch").css("visibility", "hidden");
}

function showSimpleSearch() {
	$J("#simpleSearch").css("visibility", "visible");
}

function clearSimpleSearchTextbox() {
	$J("#q_usr").attr("value", "");
}

function launchSearchWithinResults() {
	var postedData = $J("#searchWithinResultsForm").serialize();
	searchWithinResultsHandler(postedData);
}

function revertToInitialSearch() {
	searchWithinResultsHandler( {});
}

function launchHistorySearch(searchID) {
	$J.postJSON(ACTION_URL.performHistorySearch, {
		searchID : searchID
	}, function(data) {
		clearSimpleSearchTextbox();
		updateHtmlContents(data);
		calculateLeft();
	}, searchErrorCallBack);
}

function launchAlertSearch(searchID) {
	$J.postJSON(ACTION_URL.performAlertSearch, {
		searchID : searchID
	}, function(data) {
		clearSimpleSearchTextbox();
		updateHtmlContents(data);
		calculateLeft();
	}, searchErrorCallBack);
}

// tags actions
function untagDocument(tagID, docKey, idx, type)
{
    $J.postJSON(ACTION_URL.untagDocument, {tagID:tagID,key:docKey,idx:idx},
            function(data)
            {
            // data contains all the elements that need to be refreshed
                updateControlContent(data);

            },
            function tagsErrorCallBack(XMLHttpRequest)
            {
			var jsonError = $J.evalJSON(XMLHttpRequest.responseText);
			updateOneContent("tagsError" + type + docKey, jsonError.content);
		});
}

function tagDocument(docKey, idx, type)
{
    var postedData = $J("#add" + type + "TagForm" + docKey).serialize();
    $J.postJSON(ACTION_URL.tagDocument, postedData,
            function(data)
            {
                // refresh tags widgets
                updateControlContent(data);
                // refresh item
                getDoc(docKey, idx);
		    },

            function tagsErrorCallBack(XMLHttpRequest)
            {
                var jsonError = $J.evalJSON(XMLHttpRequest.responseText);
                updateOneContent("tagsError" + type + docKey, jsonError.content);
		    });
}

function getDoc(docKey,idx)
{
    $J.postJSON(ACTION_URL.getDoc, {key:docKey,idx:idx},
        function(data)
        {
		    // refresh item
			$J("#" + data[0].contentID).replaceWith(data[0].content);
        },
        searchErrorCallBack);
}

function getDocComment(docKey,idx)
{
    $J.postJSON(ACTION_URL.getDoc, {key:docKey,idx:idx},
        function(data)
        {
		    // refresh item

			$J("#" + data[0].contentID).replaceWith(data[0].content);
			showComments(docKey);
        },
        searchErrorCallBack);
}




function suggestTag(tagType, docKey)
{
    /**/
    $J("#item"+docKey).find('input[id=sharedsubmitbtn]').attr("disabled");
    var json_tagsCompletionOptions = {
        script:ACTION_URL.performTagsCompletion + '?json=true&maxRetrieved=10&tagType='+tagType+'&',
        varname:'prefix',
        json:true,
        shownoresults:false,
        maxresults:10,
        minChars:0,
        displayInfo:false,
        valueSep : null,
        cache:false,
        delay:100,
        offsetx:6
    };
    $J("#tagName" + tagType + docKey).autoComplete(json_tagsCompletionOptions);

}

function suggestAdv(fieldName)
{

        var json_options = {
            script:ACTION_URL.performCompletionUdk + '?json=true&maxRetrieved=10&fieldName=' + fieldName + '&',
            varname:'query',
            json:true,
            shownoresults:false,
            maxresults:10,
            minchars:0,
            offsety:-3,
            offsetx:5,
            cache:false,
            valueSep:null,
            delay:100,
            callback: function (obj) {
        //launchSimpleSearch();
    }
};

    $J('#adv_' + fieldName).autoComplete(json_options);

}

function suggestUdk(srcids)
{

  var json_options = {
   	script:ACTION_URL.performCompletionUdk + '?json=true'+srcids+'&maxRetrieved=10&fieldName=udkbox&',
    varname:'query',
    json:true,
    shownoresults:false,
    maxresults:10,
	minchars:1,
	offsety:0,
	cache:false,
	valueSep:null,
	delay:100,
    callback: function (obj) {
        launchSimpleSearch();
    }
};

    $J('#recherche').autoComplete(json_options);

}

function suggestUdkQr(srcids)
{

  var json_options = {
   script:ACTION_URL.performCompletionUdk + '?json=true'+srcids+'&maxRetrieved=10&fieldName=udkbox&',
    varname:'query',
    json:true,
    shownoresults:false,
    maxresults:10,
	minchars:1,
	offsety:0,
	cache:false,
	valueSep:null,
	delay:100,
    callback: function (obj) {
        launchSimpleSearch();
    }
};

    $J('#rechercherQR').autoComplete(json_options);

}

function manageTags(page, updateMode, tagSort)
{
    if (page)
    {
        var pageElt = $J("#manageTagsForm").find('input[name=page]');
        pageElt.attr("value", page);
    }

    if (tagSort)
    {
        var sortElt = $J("#manageTagsForm").find('input[name=tagSort]');
        sortElt.attr("value", tagSort);
    }

    var postedData = $J("#manageTagsForm").serialize();

    $J.postJSON(ACTION_URL.manageTags, postedData,
            function(data)
            {
                if (updateMode)
                {
                    var tagspanel = $J(data[0].content).find('div[id=listtagspanel]');
                    if(tagspanel)
                    {
                        updateOneContent('listtagspanel',tagspanel.html());
                    }
                }
                else
                {
                    $J("#dialog").html(data[0].content);
                }
            },

            function tagsErrorCallBack(XMLHttpRequest)
            {
                if (document.getElementById("tagsError"))
                {
                    var jsonError = $J.evalJSON(XMLHttpRequest.responseText);
                    updateOneContent("tagsError", jsonError.content);
                }
                else
                {
                    updateOneContent("errors", jsonError.content);
                }
            });
}

function displayTagActionForm(tagid, action, tagType)
{
    hideTagListPanel();
    $J.postJSON(ACTION_URL.displayTagActionForm, {tagid :tagid, action:action, tagType:tagType},
            function(data)
            {

                updateHtmlContents(data);
            },
            searchErrorCallBack);
}

function displayDeleteSelectedTagsActionForm()
{

    var postedData = $J("#manageTagsForm").serialize()+'&action=DELETE_SELECTION';
    $J.postJSON(ACTION_URL.displayTagActionForm, postedData,
            function(data)
            {
                updateHtmlContents(data);
            },
            searchErrorCallBack);
    hideTagListPanel();
}

function hideTagListPanel()
{
    $J('div[id=listtagspanel]').attr("class","listtagspaneloverlay");
    $J('div[id=listtagspanel] :input').attr("disabled","disabled");
    $J('div[id=listtagspanel] a').click(function() {return false; });

}

function showTagListPanel()
{
    $J('div[id=listtagspanel]').attr("class","listtagspanel");
    $J('div[id=listtagspanel] a').unbind();
    $J('div[id=listtagspanel] input').removeAttr("disabled");
}

function hideTagActionForm()
{
    $J("#tagactionpanel").html("");
    showTagListPanel();
}


function renameTag()
{
    var postedData = $J("#renameTagForm").serialize();
    $J.postJSON(ACTION_URL.renameTag, postedData,
            function(data)
            {
                hideTagActionForm();
                manageTags('0',true);

            },
            tagsActionErrorCallBack);
}

function deleteTag()
{
    var postedData = $J("#deleteTagForm").serialize();
    $J.postJSON(ACTION_URL.deleteTag, postedData,
            function(data)
            {
                hideTagActionForm();
                manageTags('0',true);
            },
            tagsActionErrorCallBack);
}

function addTag()
{
    var postedData = $J("#addTagForm").serialize();
    $J.postJSON(ACTION_URL.addTag, postedData,
            function(data)
            {
                hideTagActionForm();
                manageTags('0',true);
            },
            tagsActionErrorCallBack);
}

function promoteTag()
{
    var postedData = $J("#promoteTagForm").serialize();
    $J.postJSON(ACTION_URL.makeTagPublic, postedData,
            function(data)
            {
                hideTagActionForm();
                manageTags('0',true);
            },
            tagsActionErrorCallBack);
}


function showComments(documentId,commentAction) {
    $J.postJSON(ACTION_URL.viewComments,
    {documentId : documentId, action:commentAction},
            function(data)
            {
                var commentDiv = $J("#item" + documentId).find('div[id*=comments]');
                commentDiv.html(data[0].content);                
            }, searchErrorCallBack);
}

function addComment(documentId, idx) {
	textVal = $J("#commentForm" + documentId).find("textarea[name='text']").attr("value");	

    $J.postJSON(ACTION_URL.addComment, $J("#commentForm" + documentId).serialize(),
            function(data) {
			    getDocComment(documentId, idx);
		    },
            function commentsErrorCallBack(XMLHttpRequest)
            {
                var jsonError = $J.evalJSON(XMLHttpRequest.responseText);
                updateOneContent("commentserror" + documentId, jsonError.content);
		    }
            );

}

function deleteComment(creationDate, documentId, authorId, idx) {
	$J.postJSON(ACTION_URL.deleteComment, {
		creationDate : creationDate,
		documentId : documentId,
		authorId : authorId
	}, function(data) {
		getDocComment(documentId, idx);

	}, searchErrorCallBack);

}

function showUserComments(authorId,page,psize){
	$J.postJSON(ACTION_URL.myComments, {
		authorId : authorId,
		page: page ? page : 0,
        psize: psize ? psize : 10
    }, function(data) {
        $J(data[0].content).dialog(MODALS.myComments);
        $J('#dialog').bind('dialogclose', function(event) {
                  $J('#dialog').remove();
              });
    }, searchErrorCallBack);
}

function updateUserComments(authorId,page,psize){
	$J.postJSON(ACTION_URL.myComments, {
		authorId : authorId,
		page: page ? page : 0,
        psize : psize ? psize : 10
    }, function(data) {
        $J("#dialog").html(data[0].content); 
	}, searchErrorCallBack);
}

function deleteUserComment(creationDate, documentId, authorId,p) {
	$J.postJSON(ACTION_URL.deleteComment, {
		creationDate : creationDate,
		documentId : documentId,
		authorId : authorId
	}, function(data) {

		updateUserComments(authorId,p);
    }, searchErrorCallBack);

}

// ajax error callbacks
function searchErrorCallBack(XMLHttpRequest) {
	var jsonError = $J.evalJSON(XMLHttpRequest.responseText);
	updateOneContent("errors", jsonError.content);
}
function tagsActionErrorCallBack(XMLHttpRequest)
{
    if (document.getElementById("tagsError"))
    {
        var jsonError = $J.evalJSON(XMLHttpRequest.responseText);
        updateOneContent("tagsError", jsonError.content);
    }
    else
    {
        updateOneContent("errors", jsonError.content);
    }
}


function hideComment(documentId)
{
	var commentDiv = $J("#item" + documentId).find("div[id*=comments]");
	commentDiv.html("");
}
