/**
 * BookmarkWidget.js
 *
 * Prototype library based js class to add links to communities.
 * 
 * @author ling.zhen@magus.co.uk
 * @version 1.0
 * @date 17th January 2007
 */

function BookmarkWidget(userId)
{
	this.id = 'bookmarkWidget';
	this.addLinkUrl = 'http://' + getHost()+'/addlink';
	this.removeBookmarkUrl = 'http://' + getHost()+'/removebookmark';
	this.checkUrlUrl = 'http://' + getHost()+'/checkurl';
	this.userId = userId;
	
	BookmarkWidget.prototype.checkUrl = function(url) {
		if (trim(url)!='') {
			var self = this;
			var ajax = new Ajax.Request(
				this.checkUrlUrl + '?url=' + url,
				{
					method: 'post', 
					asynchronous: true,
					onComplete: function(request, responseHeader){
							self.completeCheckUrl(request, responseHeader);
							},
					onException: function(request, responseHeader){
							self.reportException(request, responseHeader);
							},
					onFailure: function(request, responseHeader){
							self.reportError(request, responseHeader);
							}
			});
		}
	}
	
	BookmarkWidget.prototype.completeCheckUrl = function(request, responseHeader) {
		var result = request.responseText;
		if (result != OPERATION_SUCCESSFUL) {
			alert("Sorry, this URL or its domain is not allowed to be added to IET Discover.");
		}
		//if ($('bookmarkform')) { $('bookmarkform').submit.disabled = true; }
		
	}
	
	BookmarkWidget.prototype.addLink = function(form) {
		var title = encodeURIComponent(form.title.value);
		var url = encodeURIComponent(form.url.value);
		var description = encodeURIComponent(form.description.value);
		var rating = form.rating.value;
		var tags = encodeURIComponent(form.tags.value);
		var groups = form.group;
		var from = form.from;
		
		var params = 'userId=' + this.userId +'&title=' + encodeURIComponent(title) 
			+ '&url=' + url + '&description=' + encodeURIComponent(description) + '&rating='+rating + '&tags='+ encodeURIComponent(tags);
		if (form.editBookmark) params += '&editBookmark=true';
		if (groups) {
			if (!groups.length && !groups.disabled && groups.checked) params += '&group=' + groups.value;
			else {
				for (var i=0; i<groups.length; i++) {
					if (!groups[i].disabled && groups[i].checked)	params += '&group=' + groups[i].value;
				}
			}
		}
		var self = this;
		var addLinkAjax = new Ajax.Request(
			this.addLinkUrl,
			{
				method: 'post', 
				postBody: params,
				asynchronous: true,
				onComplete: function(request, responseHeader){
						self.completeAddLink(request, responseHeader, from);
						},
				onException: function(request, responseHeader){
						self.reportException(request, responseHeader);
						},
				onFailure: function(request, responseHeader){
						self.reportError(request, responseHeader);
						}
		});
	}
	
	BookmarkWidget.prototype.completeAddLink = function(request, responseHeader, from) {
		var result = request.responseText;
		try {
			if (result != OPERATION_SUCCESSFUL) 
				//showErrorAlert(result);
				throw("");				
			if (from) window.close();
			else window.location.reload(); 
		} catch (everything) {	
			var message = "Sorry, an error occurred whilst adding your bookmark.";
			showErrorAlert(message);
		}
	}
	
	BookmarkWidget.prototype.reportException = function(request, responseHeader)
	{
		LOG.error('reportException:\n\nresponseHeader = ' + responseHeader + '\n\nrequest = ' + request + '\n\nrequest.responseText = ' + request.responseText);
	}
	
	BookmarkWidget.prototype.reportError = function(request, responseHeader)
	{
		LOG.error('reportError:\n\nresponseHeader = ' + responseHeader + '\n\nrequest = ' + request + '\n\nrequest.responseText = ' + request.responseText);
	}
	
	BookmarkWidget.prototype.clickTag = function(tagLink, bookmarkform) {
		bookmarkform.tags.focus();
		var tag = decodeHtml(tagLink.innerHTML);
		var newTags='', oldTags= trim(bookmarkform.tags.value.replace('You must assign at least one tag',''));
		var tagArray = oldTags.split(',');
		var present=false;
		for (var i=0; i<tagArray.length; i++) {
			if (trim(tagArray[i].toLowerCase()) == tag.toLowerCase()) { present=true;break; }
		}
		if (!present) {
			newTags = oldTags+','+tag;
			tagLink.className = "on"; 
		}
		else {
			newTags = oldTags.replace(tag, "");
			tagLink.className = ""; 
		}
		newTags = newTags.replace(/,+/g, ',');
		if (newTags.charAt(0) == ',') newTags = newTags.substring(1);
		bookmarkform.tags.value = newTags;
	}
	
	BookmarkWidget.prototype.validateBookmark = function(form) {
		var valid=true;
		if ((trim(form.title.value.replace('You must enter a title','')))=='') 
			{ form.title.value='You must enter a title';highlight(form.title);valid=false; }
		if ((trim(form.url.value.replace('You must enter a URL','')))=='') 
			{ form.url.value='You must enter a URL';highlight(form.url);valid=false; }
		if (form.rating.value < 1) { 
			highlight($('ratingmsg'+(form.resultId ? form.resultId.value : '')), {startcolor:'#F6DCC3',endcolor:'#F6DCC3',restorecolor:'#E9E4DE'});
			valid=false; 
		}
		if ((trim(form.tags.value.replace('You must assign at least one tag','')))=='') 
			{ form.tags.value='You must assign at least one tag';highlight(form.tags);valid=false; }
		
		if (valid) { form.submit.value='Saving...'; form.submit.disabled=true; }
		return valid;
	}	
	
	BookmarkWidget.prototype.validateAddToGroup = function(form) {	
		form.redirectTo.value = window.location.href;
		var valid = false;
		if (form.group) {
			if (form.group.length) {
				for (var i=0;i<form.group.length;i++)
					if (!form.group[i].disabled && form.group[i].checked) 
						valid = true;
			} else {
				// when there's only one group
				if (!form.group.disabled && form.group.checked) 
					valid = true;
			}
		}
		if (valid) 
			form.submit.disabled=true;
		return valid;
	}
	
}