/*
ns dc       http://purl.org/dc/elements/1.1/
dc:date     2006-11-17
dc:creator  benjamin nowack
*/

if(!window["js_libs"]){window.js_libs={};}

window.js_libs["rdfed"]={
	onload : function(){
		rdfed_activate_suggestion_fields();
		rdfed_activate_relation_links();
	} 
}

/*           */

function rdfed_activate_suggestion_fields() {
  var els;
	if (els = elsByClass('rdfed-suggestion', 0, "input")) {
		for (var i=0; i < els.length; i++) {
      rdfed_activate_suggestion_field(els[i]);
		}
	}
}

function rdfed_activate_suggestion_field(el) {
  addEvent(el, 'focus', 
    function() {
      rdfed_suggestion_watch(el.id, el.value);
		}
	);
  addEvent(el, 'blur', 
    function() {
      try {clearTimeout(window.rdfed_suggestion_watcherTO)} catch(e) {};
      try {clearTimeout(window.rdfed_suggestTO)} catch(e) {};
		}
	);
}

function rdfed_suggestion_watch(src_id, prev_val) {
  var src_el, tgt_el, cur_val;
  prev_val= unescape(prev_val);
  try {clearTimeout(window.rdfed_suggestion_watcherTO)} catch(e) {}
  if ((src_el = elById(src_id)) && (tgt_el = elById(src_id.replace(/new_.*$/, 'new_relation-suggestions')))) {
    cur_val = src_el.value;
    if (!cur_val) {
      tgt_el.style.display = 'none';
      try {clearTimeout(window.rdfed_suggestTO)} catch(e) {};
    }
    else if(prev_val != cur_val) {/* changed, show info, invoke search */
      tgt_el.innerHTML = '<div>Searching for "'+cur_val+'"...</div>';
      tgt_el.style.display = 'block';
      try {clearTimeout(window.rdfed_suggestTO)} catch(e) {};
      window.rdfed_suggestTO = window.setTimeout("rdfed_suggest('"+src_id+"')", 500);
    }
    window.rdfed_suggestion_watcherTO = window.setTimeout("rdfed_suggestion_watch('"+src_id+"', '"+escape(cur_val)+"')", 100);
  }
}

function rdfed_suggest(src_id) {
  var src_el, link_el;
  if ((src_el = elById(src_id)) && (link_el = elById(src_id.replace(/new_.*$/, 'new_relation-link')))) {
    link_el.href = link_el.href.replace(/\&rdfed_suggest_q\=[^$|\&]+/, '')+'&rdfed_suggest_q='+escape(src_el.value);
    call_remote_link(link_el, {});
  }
}

/*           */

function rdfed_activate_relation_links() {
  var els;
	if (els = elsByClass('rdfed-add-relation', 0, "a")) {
		for (var i=0; i < els.length; i++) {
      rdfed_activate_relation_link(els[i]);
		}
	}
}

function rdfed_activate_relation_link(el) {
  addEvent(el, 'click', 
    function(e){
      /* find iri field via the suggestions div id */
      var p = el.parentNode;
      while (p.parentNode && !p.id) {
        p = p.parentNode;
      }
      var iri_fld_id = p.id.replace(/\-suggestions/, '-iri');
      var iri_fld = elById(iri_fld_id);
      /* set iri field value to link href (= suggestion iri | ...#new) */
      if(iri_fld) {
        iri_fld.value = el.href;
      }
      /* submit form */
      var form_id = p.id.replace(/\-new_relation\-suggestions/, '');
      var form = elById(form_id);
      if (form) {
        call_remote_form(form);
      }
      /* cancel event */
      var event = (window.event) ?  window.event : e;
      cancelEvent(event);
    }
  );
}

/*           */
