// Added to support autocomplete
function setupAutocomplete(inputName, extraParams) {
	$(inputName).autocomplete("/ajax_autocomplete.jsp", {
			extraParams : extraParams,
			multipleSeparator : ' ',
			matchSubset : false,
			matchCase : true,
			dataType : "json",
			multiple: false,
			matchContains: true,
			highlight : false,
			autoFill : false,
			max : 50,
			scrollHeight: 300,
			selectFirst:false,			
			formatItem: function(item){
			    return item.display;
			}, 
			parse: function(data) {
		    	var rows = new Array();
		    	var input = $(inputName).val();
		    	var addedSpace = " ";
		    	if (input.charAt(input.length-1) == ' ') {
		    		addedSpace = "";
		    	}
				for(var i=0; i<data.length; i++){
					rows[i] = {
							data : data[i], 
							result : input.substr(0, data[i].replaceOffset) + data[i].keyword + input.substr(data[i].replaceOffset + data[i].replaceLength) + addedSpace, 
							value : data[i].keyword, 
							keyword : data[i].keyword, 
							display : data[i].display,
							replaceOffset : data[i].replaceOffset,
							replaceLength : data[i].replaceLength,
							action : data[i].action};  
				}
				return rows;  
			}
  		}
	).result(function(event, item) {
		if (item.action == 1) {
			$(inputName).val($(inputName).val().substring(0, $(inputName).val().length - 2));
		}
// $("#termdebug").get(0).value = item.keyword;
	});
}

// default status message time.
function displayStatusMessage(cssClass, msgId, message, fade){
	
	displayFadeOutMessage("topStatusMessage", message, {msgId: msgId, fade: fade, cssClass: "statusMessageDiv"});
}

var statusTime = 5000;
function displayFadeOutMessage(placeHolderId, message, option) {
	option = option || {};
	var fade = option.fade || statusTime;
	var messageElement = $("#" + placeHolderId).html("<span id='status-message' class='" + option.cssClass +"' id='" + option.msgId +"'>" + message +"</span>");
	if($.browser.msie && parseInt($.browser.version) > 7) {
		messageElement.show();
		var fn = function() {
			$("#" + placeHolderId + " #status-message").hide();
		};
		setTimeout(fn, fade);
	} else {
		messageElement.fadeIn(fade/3);
		$("#" + placeHolderId + " #status-message").fadeOut(fade);
	}
}

 function savedSearchCB(data){
	 // TODO change this asap when jersey layer is complete.
	 if(data){
		 try {
			 if(data.response /* && data.response.toLowerCase().indexOf("true")> -1*/){
				 displayStatusMessage("success", "savedSearch-ok", "Your search has been saved.");
			 } 
		 }catch(e){
			 
		 }
	 }
			
	}

var helpTextString = "(Research companies and topics)";

  function putInRecent(data){

	$('#recentSearchesBody').html(data);
	}
  
  function stopEvents(element){
	  $(element).click(function(e){
			// this.onclick();
			// alert(this.onclick);
			e.stopPropagation();});
  }
 
  function checkEmptyTerm() {
		if($('#terminput').val() == '' || $('#terminput').val() == helpTextString)
			return false;
  };
	
  $(document).ready(function() { 
	  stopEvents('.star');

	  stopEvents('.DocTitle');
		
	    // main top search box setup
	    setupAutocomplete('#terminput', {link: true});
	  
		if($('#terminput').val() == '')
			$('#terminput').val(helpTextString);
		
		$('#terminput').click(function(){
			if(this.value == helpTextString)
				this.value = '';
		})
		
		$("#topSearchForm").submit(checkEmptyTerm);
		$("#buttonSearch").click(checkEmptyTerm);
		preloadImages(["check-on.png","check-off.png","pdf-over.png","history_btn-over.png","folder_btn-over.png","collapse-over.png","collapse.png","exclude-on.png", "include-on.png", "expand-over.png", "save-over.png", "rss-over.png", "email-over.png", "row-expand-over.png", "more-over.png", "less-over.png", "email_active-over.png", "email_inactive-over.png", "email_stopped-over.png", "delete-over.png", "morepage-on.png"]);
		
  	} );
  
  function switchTab(start,end,current){
	  for(var i = start;i<=end;i++){
		  if(i != current){
			  $("#tab-" + i + "-content").removeClass("firstrain_active");
			  $("#tab-" + i).removeClass("firstrain_active");
		  }
		  else {
			  $("#tab-" + i + "-content").addClass("firstrain_active");
			  $("#tab-" + i).addClass("firstrain_active"); 
		  }
	  }
	  
  }
  
  function bizSubmit() {
	 var q = "";
	 $("#bizForm").children().each(
		function (i){
			if (this.type != "submit") {
			  q = q + this.value + " ";
			}
		}
	 );
	 $("#bizFormQ").val(q);
	 $("#bizFormS").submit();
  }  

function toggle(id, clazz) {
if(clazz == null)
	$('#'+id).toggleClass("hidden");
else 
	$('#'+id).toggleClass(clazz);
}

function linkToObj(linkId){
	if(!linkId)
		return;
	var obj = document.getElementById(linkId);
	if(!obj)
		return;
	var groupId = obj.getAttribute("groupId");
	var text = obj.innerHTML;
	
	return {text:text,groupId:groupId,href:obj.href};
}

function itemRead(link){
	if(!link)
		return;
	var obj = linkToObj(link.id);

	history(obj);
	
}
function history(link, type){
	if(type == null)
		type = 'Read_Item';
	var data = {action:'history',type:type,title:link.text,data:link.href, groupid:link.groupId, resultsize:link.resultsize};
	var url = "ajax_actions.jsp";
	post(url,data,historyItemAdded);
}
function historyItemAdded(data){
	if(data && data.response && data.response.indexOf("True") != -1)
		$('#accountMessageDiv').html("<div class='history saved'>Item saved to history</div>");
}

function saveToNewFolder(itemId) {
	$('#saveToNewFolderDialog input[name=itemId]').val(itemId);
	$('#saveToNewFolderDialog').dialog('open');
}

function saveToFolder(tagId, itemIds, tagName, callback) {
	$.ajax({url: 'tag/tagItems',
		cache: false,
		data: {tagId: tagId, itemIds: itemIds, tagName: tagName},
		success: function(data) {
			if(data.status == 'SUCCESS') {
				displayStatusMessage(data.status, "savedSearch-ok", data.message);
				if(typeof callback == "function") {
					callback.call();
				}
			} else {
				displayStatusMessage(data.status, "savedSearch-ok", data.message);
			}
		},
		dataType: 'json'
	});
}


function saveItem(itemId, id, groupId){
	var newstate = "";
	if(document.getElementById(itemId).getAttribute("newstate") == null || document.getElementById(itemId).getAttribute("newstate") == "" )
		newstate = 'newstate';
	var link = linkToObj(itemId + "-link");
	var data = {ids : id, action:'history', flagged:'ON', newstate:newstate, groupid:groupId,title:link.text,data:link.href};
	var url = "ajax_actions.jsp";
	$.post(url, data, itemSavedCallback, "json");
	// post(url,data,itemSavedCallback);
	itemSavedCallback({id:itemId, response:'True', newstate:newstate});
}
function post(url,data,callback){
	$.get(url,data,callback,"json");
}

function removeEventHandler(id, events){
	if(id != null && id != ""){
		if(events != null && events.length){
			for(var i = 0; i < events.length; i++){
				document.getElementById(id)[events[i]] = function(){};
			}
		}
		else
			document.getElementById(id)[events] = function(){};
	}
}

/**
 * @param [object]/object with attributes {url: url to act, updateAttr: attr to be updated, 
 * cssClass: selector expression, id: target identifier name, params: ant extra params (optional)}
 */
function attachEditInPlace(items) {
	var setEditable = function(target, obj) {
		target.find('.edit-name img').click(function() {
			$("#sortable").sortable('disable');
			var originalHTML = target.html();
			var originalValue = $.trim(target.text());
			var save = function() {
				var newValue = $.trim( target.find('.inplace_field').val() );
				if(!newValue || originalValue == newValue) {
					target.html(originalHTML);
					setEditable(target, obj);
					return;
				}
				var url = obj.url +"?"+ obj.updateAttr +"="+ encodeURIComponent(newValue) + "&" + obj.id + "=" + target.attr("id") + obj.params;
				$.ajax({url: url,
					cache: false,
					success: function(data) {
						if(data.status == "SUCCESS") {
							target.html(newValue + "<span class='edit-name'><img src='../10800/images/edit-doc.gif' /></span>");
							$(".leftColumn ul.mentioned").find("#li"+ target.attr("id")).html(newValue);
							setEditable(target, obj);
							if(obj.cssClass == ".editFolderNameInPlace") {
								updateFolderMenu();
							}
						}
						displayStatusMessage(data.status, "savedSearch-ok", data.message);
					},
					dataType: 'json'
				});
			};
			var field = '<input type="text" name="inplace_value" style="width:400px;" maxlength="'+ obj.maxLength +'" class="inplace_field" value="'+ originalValue.replace('"', '&#34;') +'" />';
			target.html(field);
			target.find(".inplace_field").focus().select().blur(save).bind('keypress', 
					function(e) {
						if (e.keyCode == '13') {
							e.preventDefault();
							save();
						}
					});
		});
		$("#sortable").sortable('enable');
	};
	items = $.makeArray(items);
	$.each(items, function() {
		var _this = this;
		$(_this.cssClass).each(function() {
			var target = $(this).append("<span class='edit-name'><img src='../10800/images/edit-doc.gif' /></span>");
			setEditable(target, _this);
		});
	});
}

function itemSavedCallback(data){
	if(data == null)
		return;
	var id = data.id;
	if(id != null && id != "" && data.response && data.response.indexOf("True")!= -1){
		
		displayStatusMessage("success", "itemFlagged-ok", "Item flagged");
		
		removeEventHandler('star-' + id, ['onmouseover', 'onmouseout']);
		if(document.getElementById(id).getAttribute("newstate") == null || document.getElementById(id).getAttribute("newstate") == "" )
			document.getElementById(id).setAttribute("newstate","newstate");
		else
			document.getElementById(id).setAttribute("newstate","");
		if(data.newstate && data.newstate == "newstate")
			$('#'+id).addClass("selected");
		else
			$('#'+id).removeClass("selected");
	}
}
function toggle2(id1,id2) {if(id1) {$('#'+id1).toggleClass("hidden");}if(id2){$('#'+id2).toggleClass("collapsed");}}
function showFirst(a,b) {$('.'+a).removeClass('hidden');$('.'+b).addClass('hidden');}
function show(id) {$('#'+id).removeClass("hidden");}
function hide(id) {$('#'+id).addClass("hidden");}
function toggleAll(className) {$('.'+className).each(function(){if($(this).hasClass("hide")){$(this).removeClass("hide")}$(this).toggleClass("hidden");})}
function hideAll(className) {$('.'+className).addClass("hidden");}
function showAll(className) {$('.'+className).removeClass("hidden");}
var  dayMap=[1,7,,31,0];
function grid(C,R,browseOrChoose,url) {
    for (col=0; col<5; col++) {for (row=0; row<4; row++) {
	    x=$('#cell'+col+'-'+row);
	if (row<=R && col<=C) {x.addClass(browseOrChoose);}
	else {x.removeClass(browseOrChoose);}
    }}

    if(url != null){
		document.location.href=url;
    }
}
function togglePlus(id) {x=$('#'+id); x.removeClass("minus"); x.toggleClass("plus");}
function toggleMinus(id) {x=$('#'+id); x.removeClass("plus"); x.toggleClass("minus");}
function DocEntryPillClickAction() {$(".DocEntryPill").click(function(e){$(this).toggleClass('plus');this.innerHTML='&nbsp; * &nbsp;&nbsp;';e.stopPropagation();}); }
function savedPillClickAction() {$(".savedPill").click(function(e){$(this).toggleClass('plus');e.stopPropagation();});}
$(document).ready(function() { DocEntryPillClickAction(); savedPillClickAction();} );

function flip(obj, flag, clazz){
	if(flag)
		obj.removeClass(clazz);
	else
		obj.addClass(clazz);
}

function concat(array, str, prepend){
	var result = "";
	var first = true;
	for(filter in array) {
		result += (prepend || !first ? str : " ") + filter;
		first = false;
	}
	return result;
}

function groupResults(val){
	if(val && val != -1 && val != ""){
		document.location = val;
	}
}

function collapseeAll(current, id1, id2){
	$(current).toggleClass('collapsed');
	if($(current).hasClass('collapsed')) {
		$().find(id1).addClass('collapsed');
		$().find(id2).addClass('collapsed');
	}
	else  {
		$(id1).removeClass('collapsed');
		$(id2).removeClass('collapsed');
	}
	
}

function getBrowserInfo(){
	if($.browser.msie)
		return "IE" + $.browser.version ;
	if($.browser.mozilla)
		return "FireFox" + $.browser.version ;
	if($.browser.safari)
		return "safari" + $.browser.version ;
	if($.browser.opera)
		return "opera" + $.browser.version ;
}
function preloadImages(images){
	if(!document.images || images == null || images.length == 0)
		return;
	for(var i=0; i < images.length; i++){
		eval("img"  + i + " = new Image(10,10)");
		eval("img"  + i + ".src = '" + location.protocol + "//"  + location.host +"/10800/images/" + images[i] +"'");
	}
}
function exportCharts(chart) {
	// Now, we proceed with exporting only if chart has finished rendering.
	if (!chart.hasRendered()) {
		alert("Please wait for the chart to finish rendering, before you can get pdf.");
		return;
	}
	chart.exportChart( {exportFormat: 'PNG'} );
}
var pdfurl;
function renderPDF() {
	var renderURL = '/pdf';
	var searchStr = $('#generatePDFLink').attr('_href');
	if($('body').hasClass('sidebarClosed')) {
		searchStr += "&frSidebarClosed=true";
	}
	if($('.handle').parent().hasClass('collapsed')) {
		searchStr += "&frChartClosed=true";
	}
	if(typeof getChartFromId == 'undefined') {
		renderPDFNoChart(renderURL, searchStr);
		return;
	}
	var chart = getChartFromId("ChartId");
	if(!chart || typeof chart.exportChart == 'undefined') {
		renderPDFNoChart(renderURL, searchStr);
		return;
	}
	exportCharts(chart);
	var reqUrl = getCurrentURL();
	pdfurl = {};
	pdfurl.renderURL = renderURL;
	pdfurl.reqUrl = reqUrl;
	pdfurl.searchStr = searchStr;
}

function renderPDFNoChart(renderURL, searchStr) {
	if(renderURL == '') {
		return;
	}
	var m_names = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
	var d = new Date();
	var curr_date = d.getDate();
	var curr_month = d.getMonth();
	var curr_year = d.getFullYear();
	var toDownloadFileName = encodeURIComponent( "PDF from FirstRain Research Engine " + m_names[curr_month] + "-" + curr_date + "-" + curr_year + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds() );
	var tabParam = '';
	if(typeof mtTabs != 'undefined' && mtTabs) {
		tabParam = '&tab=' + mtTabs.tabs('option', 'selected');
	}
	var changedUrl = (getCurrentURL()+"?"+searchStr+"&p=true"+tabParam).replace(/"/g,'%22');
	var url = renderURL+"?footer_text=blank&file_name=" + toDownloadFileName + "&add_links=1&url_to_render="+ encodeURIComponent(changedUrl);
	location.href = url;
}

function getCurrentURL() {
	
	var url = location + '';
	var endIndex = url.indexOf('?');
	if(endIndex > -1) {
	    url = url.substring(0, endIndex);
	}
	return url;
}

function onExportComplete(objRtn) {
	var fname = objRtn.fileName;
	fname = fname.substring(fname.lastIndexOf('/') + 1, fname.length);
	var m_names = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
	var d = new Date();
	var curr_date = d.getDate();
	var curr_month = d.getMonth();
	var curr_year = d.getFullYear();
	var toDownloadFileName = encodeURIComponent( "PDF from FirstRain Research Engine " + m_names[curr_month] + "-" + curr_date + "-" + curr_year + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds() );
	var changedUrl = (pdfurl.reqUrl+"?"+pdfurl.searchStr+"&p=true&fname="+fname).replace(/"/g,'%22');
	var url = pdfurl.renderURL+"?footer_text=blank&file_name=" + toDownloadFileName + "&add_links=1&url_to_render="+ encodeURIComponent(changedUrl);
	location.href = url;
}

function getPreviewURL(template, format) {
	var url = template;
	if(format == 1) { // IConstant.MAIL_FORMAT_HTML
		url += '_Html.html';
	} else if(format == 2) {// IConstant.MAIL_FORMAT_TEXT
		url += '_Text.html';
	} else if(format == 4) { // IConstant.MAIL_FORMAT_PDF
		url += '_PDF.pdf';
	} 
	return 'exclude/' + url;
}

function isEmail(email) {
	return /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(email);
}

function validateMultiEmails(emailIds) {
	var arr = emailIds.split(/[,; \n]/);
	var valid = false;
	for(var i=0; i < arr.length; i++) {
		if(arr[i]) { //check for blank there may be consecutive delimiters
			if(!isEmail(arr[i])) {
				return false;
			}
			valid = true;
		}
	}
	return valid;
}

var mouseoverTimeout = null;
var mouseoverElements = [".DocEntry"];

function matchHeight(element1, element2){
	//reset 
	$(element1).css({"height":""});
	$(element2).css({"height":""});
	
	var height1 = $(element1).height();
	var height2 = $(element2).height();
	if(height1 < height2)
		$(element1).height(height2+40);
	
}
var selectedItemsMap = {};

function getItemsMap(type){
 	var map = null;
	if(type != null && type == "single-item")
		map = singleItem;
	else
		map= selectedItemsMap;
	return map;
}
function sendToJersey(emailFrom, emailTo, emailSubject, emailBody, map, ccToSelf){
	var docIds = [];
	for(var docId in map){
		var item = map[docId];
		docIds.push(item.docId);
	}
	var data = { IDs : docIds.join(','), from : emailFrom, to : emailTo, subject : emailSubject, message : emailBody, ccToSelf: ccToSelf, reportType:'DOCUMENT'};
	$.post("action/report/emailRecords", data, function(response){displayStatusMessage("success", "savedSearch-ok", response.message);resetDialogValues(dialogFields);}, "json");
}

function getHTMLForItem(item, tag, showSummary){
	var html = "";
	html += ("<" + tag + ">" + item.link.text() + (showSummary? "<br/>" + item.summary.html() : "" ) + "</" + tag + ">" );
	return html;
}

function getSelectedItemsHTML(tag, showSummary){
	var html = "";
	for(var docId in selectedItemsMap){
		var item = selectedItemsMap[docId];
		html += getHTMLForItem(item, tag, showSummary);
	}
	return html
}

function bindItemCheckboxes(){
	$("input:checkbox.itemCheckbox").click(function(e){
		e.stopPropagation();
		var checkBox = this;
		if(this.checked){
			var item = assembleItem(this)
			selectedItemsMap[$(this).attr("groupId")] = item;
		}
		else
			delete selectedItemsMap[$(this).attr("groupId")];
		
	});
}

var $dialog = null;
var dialogFields = ["#senderEmail","#recipientEmail","#subjectLineEmail", "#noteEmail"];
function dialogValue(field, dialog){
	dialog = dialog || $dialog;
	return dialog.find(field).val();
}
function setDialogValue(field, value, dialog){
	dialog = dialog || $dialog;
	dialog.find(field).val(value);
}
function bindPrinting() {
	$('#printOpener').click(function() {
		var map = getItemsMap($dialog.find("#boxContent").attr("type"));
		var docIds = [];
		for(var docId in map){
			var item = map[docId];
			docIds.push(item.docId);
		}
		if(docIds.length == 0){
			return false;
		}
		var printWindow = window.open();
		$.ajax({
			url: "action/report/previewRecords",
			data: { IDs : docIds.join(','), reportType:'DOCUMENT'},
			type: "POST",
			dataType: "json",
			success: function(res) {
				if(res.status == "SUCCESS") {
					printWindow.document.write(res.data);
					printWindow.print();
				} else {
					displayStatusMessage("success", "savedSearch-ok", res.message);
				}
			}
		});
	});
}

var alreadyAttached = "_attached"
	
function attachOnce(obj, func){
	if(obj.attr(alreadyAttached) == null){
		obj.attr(alreadyAttached, "true");
		obj.click(func);
	}
}
function getSelectedItemsCount(){
	var count = 0;
	for(var item in selectedItemsMap)
		count++;
	return count;
}

function setupDialog(){
	$dialog.find("#recipientEmail").removeClass("ui-state-error");
	$dialog.find("#senderEmail").removeClass("ui-state-error");
	$('#fwdEmailErrMsg').html('').css('display', 'none');
	$('#recipientEmail').val(dialogDefaults['#recipientEmail']);
	$('#senderEmail').val(dialogDefaults['#senderEmail']);
	$('#subjectLineEmail').val(dialogDefaults['#subjectLineEmail']);
	$("#documentActionBox input[name=ccToSelf]").attr("checked", "checked");
	$('#noteEmail').val('');
	$dialog.dialog('open');
	$('#recipientEmail').blur();
	$('#senderEmail').blur();
}

var singleItem = {};
function fieldReset(field){
	if(dialogValue(field) == dialogDefaults[field])
		setDialogValue(field, "");
}
function bindEmailDialogFunctions(){
	attachOnce($('#senderEmail'), function() {
		fieldReset("#senderEmail");
	});
	attachOnce($('#recipientEmail'), function() {
		fieldReset("#recipientEmail");
	});
	attachOnce($('#subjectLineEmail'), function() {
		fieldReset("#subjectLineEmail");
	});	
	attachOnce($('#emailOpener'), function() {
		$dialog.find("#boxContent").removeAttr("type");
		if(getSelectedItemsCount() > 0){
			var map = getItemsMap($dialog.find("#boxContent").attr("type"));
			var docIds = [];
			for(var docId in map){
				docIds.push(map[docId].docId);
			}
			$.ajax({
				url: "action/report/previewRecords",
				data: { IDs : docIds.join(','), reportType:'DOCUMENT'},
				type: "POST",
				dataType: "json",
				success: function(res) {
					if(res.status == "SUCCESS") {
						$dialog.find("#boxContent").html(res.data);
						setupDialog();
					} else {
						displayStatusMessage("success", "savedSearch-ok", res.message);
					}
				}
			});
		}
	});		

	$("A.emailThis[groupid]").click(function(){
		var checkboxItem = $(":checkbox.itemCheckbox[groupid=" +  $(this).attr("groupid") + "]").get(0);
		$dialog.find("#boxContent").attr("type", "single-item");
		singleItem = {};//reset
		var item = assembleItem(checkboxItem);
		singleItem[$(this).attr("groupid")] = item;
		$.ajax({
			url: "action/report/previewRecords",
			data: { IDs : checkboxItem.value, reportType:'DOCUMENT'},
			type: "POST",
			dataType: "json",
			success: function(res) {
				if(res.status == "SUCCESS") {
					$dialog.find("#boxContent").html(res.data);
					setupDialog();
				} else {
					displayStatusMessage("success", "savedSearch-ok", res.message);
				}
			}
		});
	})
	attachOnce($('#send'), function() {
		var focusError = function() {
			$dialog.find("#recipientEmail").addClass("ui-state-error");
		};
		var focusError1 = function() {
			$dialog.find("#senderEmail").addClass("ui-state-error");
		};
		var recipientEmail = $.trim (dialogValue("#recipientEmail"));
		var senderEmail = $.trim (dialogValue("#senderEmail"));
		if(recipientEmail == dialogDefaults['#recipientEmail']) {
			recipientEmail = "";
		}
		var ccToSelf = $("#documentActionBox input[name=ccToSelf]")[0].checked;
		if(isEmail(senderEmail)) {
			if(((recipientEmail == "" && ccToSelf)	|| validateMultiEmails(recipientEmail))) {
				var map = getItemsMap($dialog.find("#boxContent").attr("type"));
				sendToJersey(senderEmail, recipientEmail, dialogValue("#subjectLineEmail"), dialogValue("#noteEmail"), map, ccToSelf);
				$dialog.dialog('close');
			} else {
				$('#fwdEmailErrMsg').html('Enter valid email address in "TO" field').css('display', 'block');
				focusError();
			}			
		} else {
			$('#fwdEmailErrMsg').html('Enter valid email address in "From" field').css('display', 'block');
			focusError1();
		}
	});	

	attachOnce($('#cancel'), function() {					
			$dialog.dialog('close');
	});
	$('#recipientEmail').bind('blur', function(){ if($.trim(this.value) == '') this.value = dialogDefaults['#recipientEmail']; });
	$('#senderEmail').bind('blur', function(){ if($.trim(this.value) == '') this.value = dialogDefaults['#senderEmail']; });
	$('#subjectLineEmail').bind('blur', function(){ if($.trim(this.value) == '') this.value = dialogDefaults['#subjectLineEmail']; });
}

function assembleItem(checkboxItem){   
	var item = {};	
	item.docId = checkboxItem.value;
	item.link = $("A.DocTitle[groupid='" + $(checkboxItem).attr("groupId") + "']")
	item.summary = $("Div." + $(checkboxItem).attr("groupId") + " span.DocSummary")
	return item;
}
function linkHtmlForItem(item, link){
	return "<a href='" + link  + item.defaultURL + "'>" + item.title + "</a>"; 
}
function getAssociations(list, link, tag){
	 if(list == null || list.length == 0)
		 return null;
	 var insertHTML = "";
	 for(var i = 0; i < list.length; i++){
		 insertHTML += "<" + tag +">" + linkHtmlForItem(list[i], link) + "</" + tag + ">";
	 }
	 return insertHTML;
}
function displayEventDetails(link, details, description, companies, topics){
	
	var companiesHTML = getAssociations(companies, "companyBrief?q=", "li");//pass li as wrapping tag
	var topicsHTML = getAssociations(topics, "search?opt=1&q=", "li");
	
	_messageModal.html("<div class='sorryMessage'>"
			+"Sorry, this link has expired"
			+"</div>"
			+"<div class='details'>"
			+details 
			+"</div>"
			+"<div class='description'>"
			+description
			+"</div>"
			+"<div class='tagged'><a target='_blank' href='"+ link +"'>" + link +"</a></div>"
			+(companiesHTML !=null || topicsHTML != null ? 
			 "<div class='tagged'>Associated with:&nbsp;"
			+ (companiesHTML ? companiesHTML : "")
			+ (topicsHTML ? topicsHTML : "")
			+"</div>" :"")
	);
	_messageModal.dialog("open");
	void(0);
}

var _messageModal = null;
var dialogDefaults = {};
function setDialogDefaults(fields){
	for(var field in fields)
		dialogDefaults[fields[field]] = dialogValue(fields[field]);
}
function _checkboxReset(){
	$(":checkbox.itemCheckbox:checked").each(function(){(this).checked = false;});
}
function resetDialogValues(fields){
	selectedItemsMap = {};
	_checkboxReset();
	for(var field in fields)
		setDialogValue(fields[field], dialogDefaults[fields[field]]);
}
// sliding sidebar
$(document).ready(function() { 	

	_messageModal = $("#modalMessageDialog").dialog({
		autoOpen: false,
		modal: true
		});
	
	$dialog = $("#documentActionBox").dialog({
		autoOpen: false,
		modal: true,
		dialogClass: "ui-dialog-width-700",
		height: 540
	});	
	setDialogDefaults(dialogFields);
	bindItemCheckboxes();
	bindEmailDialogFunctions();
	//bindPrinting();
	_checkboxReset();
	// check and match height for center column/ rhs
	matchHeight("#centerColumnDiv", "div.related.section");
	
	// assign mouse over to various document rows, events
	for(var i = 0; i < mouseoverElements.length; i++){
		$(mouseoverElements[i]).mouseover(function(){
			var this_ = $(this);
			var highlight = function(){
				this_.addClass("mousingover");
			}
			mouseoverTimeout = setTimeout(highlight, 333);
		});

		$(mouseoverElements[i]).mouseout(function(){
			clearTimeout(mouseoverTimeout);
			$(this).removeClass("mousingover");
		});
	}
	
	// make the slider handles work
	$('.handle').click(function() {
		var handle = $(this);
		var SliderCookie = function (name, rem) {
			if (rem) var value = null;
			else var value = 'true';
			var date = new Date();
			date.setTime(date.getTime() + (365 * 24 * 60 * 60 * 1000));
			$.cookie(name, value, { path: '/', expires: date });
		};
		if (handle.parents('.leftColumn').length > 0) {
			$('body').toggleClass('sidebarClosed');
			if ($('body').hasClass('sidebarClosed')) SliderCookie('frSidebarClosed', false);
			else SliderCookie('frSidebarClosed', true);
		} else {
			handle.parent().toggleClass('collapsed');
			if (handle.parent().hasClass('collapsed')) SliderCookie('frChartClosed', false);
			else SliderCookie('frChartClosed', true);
		}
	});
	
	$('.handle').click(function() {
		var handle = $(this);
		if(handle.parents('.leftColumn').length > 0 && typeof reloadChart == 'function')//check if such function exists
			reloadChart();
	});
	// more/less links
	$('.toggleMoreLess').click(function() {
		
		$(this).find('.amount').each(function() {
			var o = $(this);
			if(o.css('display') == 'none') {
				o.css('display', 'inline');
			} else {
				o.css('display', 'none');
			}
		});
		
		var more = $(this).parents('.section:first').find('div.more');
		if(more.css('display') == 'none') {
			more.css('display', 'inline');
		} else {
			more.css('display', 'none');
		}
	});
	
	$('a.removeButton').click(untagItems);
});

function untagItems () {
	var _this = $(this); 
	$.ajax({url: 'tag/untagItems',
		cache: false,
		data: {itemIds: _this.attr('item'), tagId: _this.attr('tag')},
		success: function(data) {
			if(data.status == 'SUCCESS') {
				displayStatusMessage(data.status, "savedSearch-ok", data.message);
				_this.parents('div.sort_row').remove();
				_this.parents('div.itemPlusDupes').remove();
				$(".leftColumn ul.mentioned").find("#li"+ _this.attr('item')).remove();
			} else {
				displayStatusMessage(data.status, "savedSearch-ok", data.message);
			}
		},
		dataType: 'json'
	});
}
function addToFavorites(urlAddress, pageName ) {
//	var reqUrl = getCurrentURL()+"?"+urlAddress;
	var reqUrl = location;
    if (window.sidebar) { // Mozilla Firefox Bookmark
        window.sidebar.addPanel(pageName, reqUrl," ");
    } else if( window.external ) { // IE Favorite
		window.external.AddFavorite(reqUrl,pageName)
	} else {
		alert("Sorry! Your browser doesn't support this function.");
	}
}

function updateFolderMenu() {
	var createMenu = function(tags) {
		if($('#save-menu').length > 0) {
			var ule = $("#save-menu");
			ule.find(".updatable-menu-item").remove();
			var recentItemId = $('#save-menu').attr("recentitemid");
			$.each(tags, function() {
				if(this.ownedByType == 'USER') { 
					var lie = $(document.createElement("li"));
					lie.attr("class", "updatable-menu-item");
					var ae = $(document.createElement("a"));
					ae.attr("href", "javascript:saveToFolder("+ this.id +", "+ recentItemId +");$('#save-menu').addClass('hideMenu');void(0)").attr("class", "saveToFolder").html("Save to " + this.name);
					lie.append(ae);
					ule.append(lie);
				}
			});
		} 
		if($('#folders').length > 0) {
			var ule = $("#folders");
			ule.find(".updatable-menu-item").remove();
			$.each(tags, function() {
				var lie = $(document.createElement("li"));
				lie.attr("class", "updatable-menu-item");
				var ae = $(document.createElement("a"));
				ae.attr("href", "search?folderId="+ this.id +"&opt=1").attr('class', 'openFolderView').html(this.name);
				lie.append(ae);
				ule.append(lie);
			});
		}
	};
	
	$.ajax({url: 'tag/getFolders',
		cache: false,
		success: function(data) {
			if(data.status == 'SUCCESS') {
				createMenu(data.data);
			}
		},
		dataType: 'json'
	});
}
function openSubscriptionDialog(tagId) {
	$.ajax({
		url: "ajax_mailing.jsp?tagId=" + tagId,
		cache: false,
		success: function(data) {
			$("#emailSettingsDiv").html(data).dialog("open").dialog( "option", "title", 'Email Report' );
		}
	});
}
function openEmailSettingDialog(tagId) {
	$.ajax({
		url: "ajax_emailSetting.jsp?tagId=" + tagId,
		cache: false,
		success: function(data) {
			$("#emailSettingsDiv").html(data).dialog("open");
		}
	});
}

