function agreeLinks(rel) {
	$(rel).find('.more a.smallicon.agree, .more a.smallicon.disagree').click(function(e) {
		var cnt = $(this);
		invokeLink($(this), function(obj) {
			var line = $(cnt).parents('tr');
			$(cnt).parents('.agreeicons').replaceWith(obj);
			agreeLinks(line);
			editLinks(line);
		});
		// give instant visual feedback
		/*$(this).siblings('.agree, .disagree').removeClass('active');
		$(this).toggleClass('active');*/
		return false;
	});
}

function followLinks(rel) {
	$(rel).find('a.follow_on, a.follow_off').click(
			function(e) {
				var cnt = $(this);
				invokeLink($(this), function(obj) {
					$(cnt).parents('.follow_icon').replaceWith(obj);
					followLinks(rel);
				}
				);
				return false;
			}
	);
}

var uid=0;

function editLinks(rel) {
	if( $('div.squared').index() > 0 ) return;
	$(rel).find('.more a.smallicon.edit, .more a.smallicon.add').show();
	$(rel).find('.more a.smallicon.edit:not(.login), .more a.smallicon.add:not(.login)').click(function(e) {
		var cnt = $(this);
		invokeLink($(this), function(obj) {

			var line = $(cnt).parents('tr');
			var tbody = $(cnt).parents('table').find('tbody');

			$(tbody).find('tr.line_edit').remove();
			// line_hidden is used to differentiate between edited lines and folded lines
			$(tbody).find('tr.line_hidden').removeClass('line_hidden');

			if($(line).parent().is('thead')) {
				// add new factitem
				$(tbody).prepend(obj);
			} else {
				// edit fact item
				$(line).before(obj);
				$(line).addClass('line_hidden');
			}

			line = $(tbody).find('tr.line_edit');

			$(line).find('input.cancel').click(function(e) {
				$(line).siblings('tr.line_hidden').removeClass('line_hidden');
				$(line).siblings('tr.line_edit').remove();
				//$(line).siblings('tr:eq(0)').show();
				$(line).remove();
				return false;
			});
			var form = $(line).find('form.editform:first');
			$(form).submit(function() {
				serializeEdit($(line));
				invoke($(form), 'saveedit=&', function(obj) {
					var rel = $(line).parent();
					var ind = $(rel).find('tr').index(line);
					$(line).replaceWith(obj);
					line = $(rel).find('tr').get(ind);
					$(line).addClass('line_new');
					//$(line).addClass('line_edit');
					$(tbody).find('tr.line_hidden').removeClass('line_hidden');
					agreeLinks(line);
					editLinks(line);
					clickLinks(line);
				});
				return false;
				//return true;
			});
			$(line).find('.item-atomic input[name=val]:not(.readonly)').each(function() {
				addAutocomplete($(this));
			});
		});
		return false;
	});
}

function clickLinks(rel) {
	// clickobject
	$(rel).find('.item-atomic a').click(function(e) {
		var lnk = $(this);
		var form = $('form#clickActionForm');
		$(form).find('input[name=a]').val("clickobject");
		$(form).find('input[name=id]').val($(lnk).siblings("input[name=id]").val());
		$(form).find('input[name=q]').val($(lnk).siblings("input[name=q]").val());
		//$.post($(form).attr("action"),$(form).serialize());
		// form submit starts search
		$(form).submit();
		return false;
	});
	// clickslice
	$(rel).find('a.drillDown').click(function(e) {
		var lnk = $(this);
		var form = $('form#clickActionForm');
		$(form).find('input[name=a]').val("clickslice");
		$(form).find('input[name=fact]').val("0,0");
		$.post($(form).attr("action"),$(form).serialize());
		return true;
	});
}

function serializeEdit(rel) {
	// convert fields into object array and serialize into data field as JSON
	var factItem = Array();
	var i=0;
	$(rel).find('.item-atomic input[name=val]').each(function(){
		factItem[i++] = { 'type':'atomic' , 'typeid':$(this).siblings('input[name=typeid]').val() , 'val':$(this).val() , 'id':$(this).siblings('input[name=id]').val() };
	});
	$(rel).find('.item-predicate input[name=val]').each(function(){
		factItem[i++] = { 'type':'predicate' , 'typeid':$(this).siblings('input[name=typeid]').val() , 'val':$(this).val() };
	});
	$(rel).find('input[name=factItemData]').val(JSON.stringify(factItem));
}

function addAutocomplete( field ) {

	uid++;
	$(field).attr('id','editSearch'+uid);
	$(field).siblings('.editSearchkey').attr('id','editSearchkey'+uid);
	$(field).siblings('input[name=id]').attr('id','editEntityId'+uid);

	var type = $(field).siblings('input[name=type]').val();

    var editSource = new YAHOO.util.XHRDataSource(autoCompleteActionBean);
    editSource.responseType = YAHOO.util.XHRDataSource.TYPE_TEXT;
    editSource.responseSchema = {
       recordDelim: "\n",
       fieldDelim: "||"
	};

    var editComplete = new YAHOO.widget.AutoComplete( 'editSearch'+uid , 'editSearchkey'+uid , editSource );
	editComplete.maxResultsDisplayed = 6;
    editComplete.forceSelection = false;
    editComplete.typeAhead = true;
    editComplete.autoHighlight = true;
    editComplete.queryDelay = 0.2;
    editComplete.generateRequest = function(sQuery) {
		return type+"/?q=" + sQuery;
	};
	editComplete.handleEvent = function(evt) { alert(evt);};
    editComplete.formatResult = function (oResultItem, sQuery, sResultMatch) {
    	var sKey = sResultMatch;
        var  sMarkup  = [
						"<div class='autocomplete-result autocomplete-entity'>",
							"<div class='result-item'>", oResultItem[0], "</div>",
						"</div>"
						];
		return  (sMarkup.join(""));
	};

   	var hiddenObjectId = YAHOO.util.Dom.get('editEntityId'+uid);
   	var myHandler = function(sType, aArgs) {
    	var myAC = aArgs[0]; // reference back to the AC instance
   		var elLI = aArgs[1]; // reference to the selected LI element
   		var oData = aArgs[2]; // object literal of selected item's result data
   		hiddenObjectId.value = oData[3];
   	};
   	editComplete.itemSelectEvent.subscribe(myHandler);

	/*$(field).focus(function() {
		editComplete.sendQuery($(this).val());
	});*/

}

function proposeField() {
	$('#auth-propose-c').click(function(e) {
		$('#auth-propose').toggle();
		return false;
	});
	var form = $('#auth-propose form');
	$(form).submit(function() {
		//$.post($(form).attr("action"),$(form).serialize());
		invoke($(form), 'proposeurl=&', function(obj) {});
		$('#auth-propose input[name=url]').val('');
		$('#auth-propose').hide();
		return false;
	});
}
