YAHOO.namespace('datasetsearch');

////////////////////////////////////////////////////////////////////////////////
// Ajax calls to search for entities and display them in the browse window
////////////////////////////////////////////////////////////////////////////////

var searchresultstargetid = null;

YAHOO.datasetsearch.search = { 
	
	handlesuccess:function(o) {
		searchbardisplay('loading-image',false);
		var txt = o.responseText;
		document.getElementById(searchresultstargetid).innerHTML = txt;
	},

	handlefailure:function(o) {
		alert('AJAX call failed at the request level:' + o.statusText);
	},

	startRequest:function(formid,targetid) {
		// Start request for search results
		searchresultstargetid = targetid;
		
		YAHOO.util.Connect.setForm(formid);
		YAHOO.util.Connect.asyncRequest('POST', SELF, YAHOO.datasetsearch.searchcallback); 
	}

};

YAHOO.datasetsearch.searchcallback = { 
	success:YAHOO.datasetsearch.search.handlesuccess, 
	failure:YAHOO.datasetsearch.search.handlefailure,
	scope:YAHOO.datasetsearch.search
};

function searchbardisplay(id,state) { 
	var message = document.getElementById(id);
	message.style.display = (state) ? 'block' : 'none';
}

// Submit search form
function submitform(formid,targetid) { 
    saveformstate(formid);
    
	searchbardisplay('loading-image',true);
	YAHOO.datasetsearch.search.startRequest(formid,targetid);
}

//  
//

function remsel(containerid) { 
	var cont = document.getElementById(containerid);
	var chls = getChildNodesByType(containerid,'TABLE');
	if(chls.length > 1) {
		var chld = chls.pop();
		cont.removeChild(chld);
	}
}

//  Add a select using template with 'templateid' box to container with 'containerid'
//

function addsel(containerid,templateid) { 
	var cont = document.getElementById(containerid);
	var temp = document.getElementById(templateid).cloneNode(true);

	temp.id = '';
	temp.style.display = 'block';
	
	cont.appendChild(temp);
}

//  Get all nodes under node with 'parentid' of type 'type'
//

function getChildNodesByType(parentid,type){ 
	var cont = document.getElementById(parentid);
	var chls = new Array();
	for(var i = 0; i < cont.childNodes.length; i++) { 
		if(cont.childNodes[i].nodeName == type.toUpperCase() )
			chls.push(cont.childNodes[i]);
	}	
	return chls;
}


//  Form state preservation and restoration
// 

function saveformstate(formid) { 
    var fid = 'formhtml';
    
    var fth = document.getElementById(fid);       
    var frm = document.getElementById(formid); 
    
    for (var i = 0; i < frm.elements.length; i++) { 
        setElementValue(frm.elements[i]);
    }
    
    fth.value = frm.innerHTML;

}

//  Set DOM attributes for form elements to preserve HTML
// 

function setElementValue(el) {
    var nn = el.nodeName;
    switch (nn.toUpperCase()) {
        case 'INPUT':
            el.setAttribute('value', el.value);
            break;
        case 'SELECT':
            setCurrentOption(el);
            break;
        default:
            break;
    }
}

//  For a <SELECT>, set selected option's 'selected' attribute
//

function setCurrentOption(sel) { 
    var nopt = sel.options[sel.selectedIndex];
    for (var i = 0; i < sel.options.length; i++) { 
        var opt = sel.options[i];
        
        try {
            att = opt.hasAttribute('selected');
        }
        catch (err) { 
            att = false; 
        }
        
        if (att)  opt.removeAttribute('selected');
    }
    nopt.setAttribute('selected','selected');
}

function setFormOverride() {
	for (var n in override) {
		var el = document.getElementById(n);

		// Set element value
		if (el) {
		  if (el.tagName == 'INPUT') {
		    el.value = override[n];
		  } else if (el.tagName == 'SELECT') {
		    for (var i=0; i<el.options.length; i++) {
		      var opt = el.options[i];
		    
		      if (opt.value == override[n]) {
			opt.selected = 'selected';
		      } else {
			try { att = opt.hasAttribute('selected'); }
			catch (err) { att = false; }
			if (att) opt.removeAttribute('selected');
		      }
		    }
		  }
		
		  // Expand menu
		  var dd = YAHOO.util.Dom.getAncestorByTagName(el, 'dd')

		    if (dd) {
		      YAHOO.util.Dom.addClass(dd, 'a-m-d-expand');
		      YAHOO.util.Dom.addClass(YAHOO.util.Dom.getPreviousSibling(dd), 'a-m-t-expand');
		    }
		}
	}
}

//  OnEnter event handler for form submition
// 

function keydownsubmit(e) { 
    if(window.event)  {
        keynum = e.keyCode;
    }
    else if(e.which) {
        keynum = e.which;
    }
    if (keynum && (keynum == 13)) 
        submitform(this.id, 'search-results'); 
}


function _page_init() { 
	setFormOverride();
    YAHOO.util.Event.addListener('dataset-search-form', 'keydown', keydownsubmit);
	submitform("dataset-search-form","search-results");
}




function dssetcookie(c_name,value,expiredays) {
    var exdate=new Date();
    exdate.setDate(exdate.getDate()+expiredays);
    document.cookie=c_name+ "=" + escape(value) + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}

function dsgetcookie(c_name) {
    if (document.cookie.length > 0) {
        c_start=document.cookie.indexOf(c_name + "=");
        if (c_start!=-1) { 
            c_start=c_start + c_name.length+1; 
            c_end=document.cookie.indexOf(";",c_start);
            if (c_end==-1) c_end=document.cookie.length;
                return unescape(document.cookie.substring(c_start,c_end));
        } 
    }
    return "";
}
