var HOST_WITH_SSL;

var conversionBanner;

function initializeUrlsForSearch(appUrl){
	HOST_WITH_SSL = appUrl+"/";
}

function addToRequestList(searchCompanyUrl){ 
	$.ajax({
		type : "POST",
		url : "addRequestList.htm?",
		data : "requestSearchTerm=" + searchCompanyUrl,
		success : function(data, textStatus, jQXHr) {
			var response = $.parseJSON(data);
			ajaxResponseHandler(response);
			tb_remove();
		},
		error : function(data, textStatus, jQXhr) {
			tb_remove();
		}
	});	
}

var watermark = "Search company name,website & tags";
$(function() {
	// FOR verification
	SUCCESS_STRING = "1";
	$("#cancelRequestList").click(function() {
		tb_remove();
	});

	configureBasicSearch();

	$("#requestListOk").click(function() {
		var requestSearchTerm = $("#requestSearchTerm").html();
		addToRequestList(requestSearchTerm);
	});

	$("#cancelRequestList2").click(function() {
		tb_remove();
	});

	$("#requestListByUrlForm").validate(
			{
							rules : {
								requestListUrlTextBox : {
							        	 required : true,
							        	 validateURL: true
							             }
							},    
							messages : {
								requestListUrlTextBox : {
							         	required : "URL is required",
							         	validateURL : "URL is invalid. (e.g. www.owler.com)"
								        }
							},
							errorElement: "span",
							wrapper: "span", // a wrapper around the error message
							errorPlacement: function(error, element) {
								 	element.before(error);
								 	error.addClass('form_error_message');
								 	error.append("<span class='error_arrow'></span>");
								 	offset = element.offset();
								 	error.css('left', $(element).position().left + $(element).width() - 222); 
								 	error.css('top', $(element).position().top + $(element).height() - 45);
								},					             
							submitHandler : function(form) {
								var searchCompanyUrl = $("input#requestListUrlTextBox").val();
								addToRequestList(searchCompanyUrl);					
								return false;
								}
			});
	
});

function showRequestList(searchTerm) {
	$("#companyAdded").val("false");
	$("span#requestSearchTerm").html(searchTerm);
	tb_show("Request List",
			"#TB_inline?height=145&amp;width=415&amp;inlineId=requestListDiv");
}

function showRequestListWithUrl(searchTerm) {
	$("#companyAdded").val("false");
	resetForm($('#requestListByUrlForm'));
	$("span#requestSearchTerm2").html(searchTerm);
	tb_show("Request List",
			"#TB_inline?height=185&amp;width=415&amp;inlineId=requestListDiv2");
}

function imageSort() {
	var sortParam = document.getElementById("sortColumn").value;
	if ("" == sortParam) {
		sortParam = "company_name";
	}
	var imgSrc = "<img src='images/asc.gif'/>";
	if ("asc" == document.getElementById("sortOrder").value) {
		imgSrc = "<img src='images/desc.gif'/>";
	}
	document.getElementById(sortParam + "_img").innerHTML = imgSrc;
}
function clearSearchForm() {
	document.getElementById('researcherGroupTypeId').value="";
	document.getElementById('collaboratorGroupTypeId').value="";
	document.getElementById('adminCompanyId').value="";
	document.getElementById('adminReportId').value="";
	document.getElementById("adminCompanyName").value = "";
	document.getElementById("adminCompletedPercentage").selectedIndex = 0;
	document.getElementById("adminReportStatus").selectedIndex = 0;
	document.getElementById("adminCollaborator").value = "";
	document.getElementById("adminResearcher").value = "";
	document.getElementById("sortOrder").value = "";
	document.getElementById("sortColumn").value = "";
	return false;
}

function reportSearch(sortColumnName) {
	var companyName = $("#adminCompanyName").val();
	var reportStatus = $("#adminReportStatus").val();
	var adminResearcher = $("#adminResearcher").val();
	var adminCompletedPercentage = $("#adminCompletedPercentage").val();
	var adminCollaborator = $("#adminCollaborator").val();
	var sortOrder = $("#sortOrder").val();
	var dataString = "adminCompanyName=" + companyName + "&adminReportStatus="
			+ reportStatus + "&adminResearcher=" + adminResearcher
			+ "&adminCompletedPercentage=" + adminCompletedPercentage
			+ "&adminCollaborator=" + adminCollaborator + "&sortOrder="
			+ sortOrder + "&sortColumn=" + sortColumnName;
	var url = "adminHome.htm?" + dataString;
	companyTabClicked("tabscontainer", url);
	return false;
}

var selectedItem=null;
function basicSearch() {
	var searchTerm = document.getElementById("searchTextBox").value;
	if (searchTerm == watermark) {
		//user haven't entered anything
		//1) nothing to search
		//2) autocomplete menu won't be available
		return;
	}
	var url = null;
	if(selectedItem != null){
		url = selectedItem.linkUrl;
		selectedItem = null;//not needed anymore
	}else {
		// HOST_WITH_SSL is defined in login.js
		url = HOST_WITH_SSL+"browsecompanyprofiles.htm?searchTerm=" + searchTerm;
	}
	location.href = url;
	return false;
}

function getTickerIfNotNull(item){
	var ticker = item.tickerSymbol;
	if(ticker != null){
		return " - " +item.tickerSymbol;
	}else{
		return "";
	}
}

function trim(str) {
    return str.replace(/^\s+|\s+$/g,"");
}

function getSearchTerm(str){ 
	return stripDomain(str);
}

function configureBasicSearch() {
	var searchTerm;
	if (!document.getElementById("searchTextBox")) {
		return;
	}
	var bsAutocomplete = $("#searchTextBox").autocomplete({
		source : function(request, response) {
			$.ajax({
				url : HOST_WITH_SSL + "basicSearchCompanySuggestions.htm",
				dataType : "json",
				data : {
					searchTerm : getSearchTerm(request.term)
				},
				success : function(data) {
					 //Search using Primary Domain
					searchTerm = getSearchTerm(request.term);
					response($.map(data.results, function(item) {
						return {
							label : item.shortName + " - " + item.primaryDomain + getTickerIfNotNull(item),
							value : item.shortName,
							linkUrl : item.seoFriendlyCompanyProfileUrl,
							category : item.category,
							id: item.id
						};
					}));
				}
			});
		},
		minLength : 1,
		search: function(event, ui) {
			var searchTerm = document.getElementById("searchTextBox").value;
			// clear the company Id, when user changes the search entry, for conversion banner.
			if(conversionBanner!= undefined && conversionBanner == true){
				employerId = null;
			}
			searchTerm = getSearchTerm(searchTerm);
			if( searchTerm.length <= 0 ){
				//for invalid search string length 
				//close the autocomplete menu
				$( "#searchTextBox" ).autocomplete( "close" );
			   return false;
			}else if(searchTerm.length <3){
				$( "#searchTextBox" ).autocomplete({ delay: 500 });
				return true;
			}else{
				$( "#searchTextBox" ).autocomplete({ delay: 200 });
			}
			
			return true;
		},
		select : function(event, ui) {
			event.originalEvent.originalEvent.stopPropagation();
			if(conversionBanner!= undefined && conversionBanner == true){
				employerId = ui.item.id;
			}else {
			location.href = ui.item.linkUrl;
			}
			selectedItem=ui.item;
		},
		focus: function ( event, ui ){ 
			//do nothing so that search string is 
			//not overridden with focused item's value
			return false;
		},		
		open : function( event, ui ) {	
			//whenever menu is opened or updated 
			//clear the selected item
			selectedItem = null;
		},
		appendTo : '#search_suggest_div'
	});
	
	bsAutocomplete.keydown(function(e){
	    if (e.keyCode == 13 && !e.isPropagationStopped()) {
	    	if(conversionBanner == undefined) {
	    		return basicSearch();
	    	}
	    }
	});
	
	$("#searchTextBox").data("autocomplete")._renderItem = function(ul, item) {
		var lSearchTerm = searchTerm.toLowerCase();
		var displayString = item.label;
		var lLabel = item.label.toLowerCase();
		var startIndex = 0;
		while (lLabel.indexOf(lSearchTerm, startIndex) > -1) {
			var index = lLabel.indexOf(lSearchTerm, startIndex);
			startIndex = index + lSearchTerm.length + 13;
			var startString = displayString.substring(0, index);
			var endString = displayString.substring(index + lSearchTerm.length);
			var searchString = displayString.substring(index, index
					+ lSearchTerm.length);
			searchString = "<span>" + searchString + "</span>";
			displayString = startString + searchString + endString;
			lLabel = displayString.toLowerCase();
		}
		var linkString = null;
		if(conversionBanner != undefined && conversionBanner == true){
		linkString = "<a>" + displayString + " </a>";
		} else {
			linkString = "<a href='" + item.linkUrl +"'>" + displayString + " </a>";
		}
		return $("<li></li>").data("item.autocomplete", item)
				.append(linkString).appendTo(ul);
	};
}

//Remove (Trim) Leading Whitespace :
function lstrip(str) {
return str.replace(/^\s+/g, "");
}

String.prototype.startsWith = function(str) {
	return (this.match("^"+str)==str);
};

function stripDomain(searchStr){
	searchStr = lstrip(searchStr);
	if(searchStr.startsWith("http://")){
		searchStr = searchStr.substr(7);
	}else if(searchStr.startsWith("https://")){
		searchStr = searchStr.substr(8);
	}
	if(searchStr.startsWith("www.")){
		searchStr = searchStr.substr(4);
	}
	return searchStr;
}

function handleKeyPress(myfield, e) {
	var keycode;
	if (window.event)
		keycode = window.event.keyCode;
	else if (e)
		keycode = e.which;
	else
		return true;
	if (keycode == 13) {
		if(conversionBanner == undefined) {
    		return basicSearch();
    	}
	}
}