// Various bits and pieces of javascript to enhance our pages 
// requires MochiKit

// Stem Switcher

function getNewDefs(select,target_li,project,term_flag,subq_idx,term_idx) {
	var defs = getElement(target_li);
	var stem = getElement(select).value;

	var newdefs = doSimpleXMLHttpRequest('/newdefs/',
		{ 'stem':stem,'project':project,'term_flag':term_flag,
		'subq_idx':subq_idx,'term_idx':term_idx,'ajax':'yes' });

	replaceChildNodes(defs);
	newdefs.addCallbacks(
		function(t){ defs.innerHTML = t.responseText },
		function(t){ defs.innerHTML = 'Sorry, failed to get new defs' }
	);
}

// Submit a form and get a response
// The first function gets parameters from the form.
// The second extracts the info from the form, and sends it as a request
// to the server.  

function get_param(box){
	var p = new Object()
	p.user = getElement(box + 'User');
	p.query = getElement(box + 'Query');
	p.concepts = getElement(box + 'Concepts');
	p.project = getElement(box + 'Project');
	p.bdqresponse = getElement(box + 'BDQResponse');
	p.user = getElement(box + 'User');
	p.user_email = getElement(box + 'User_e-mail');
	p.comments = getElement(box + 'Comments');
	return p
}

function postCogForm(box,name) {
	var form = getElement(box + 'Form');

	var p = get_param(box);
	
	var thebox = getElement(box);
//	var view = '/post_' + name + '/';
	var view = '/post_form/';

	var newbox = doSimpleXMLHttpRequest(view, { 'query':p.query.value, 'concepts':p.concepts.value,'project':p.project.value,'bdqresponse':p.bdqresponse.value, 'user':p.user.value,'comments':p.comments.value, 'ajax':'yes', 'name':name, 'user_email':p.user_email.value });
	
	replaceChildNodes(thebox);

	newbox.addCallbacks(
		function(t){ thebox.innerHTML = t.responseText },
		function(t){ thebox.innerHTML = 'Sorry, failed to get new html' }
	);
}

// get a snippet of HTML.  Use for getting the default innerHTML for a form.  
function getSnippet(box,name,query,concepts,project,bdqresponse) {
	var thebox = getElement(box);

//	var view = '/get_' + name + '/';
	var view = '/get_snippet/';

	var newbox = doSimpleXMLHttpRequest(view, { 'query':query, 'concepts':concepts, 
		                            'project':project, 'bdqreponse':bdqresponse,
					    'name':name});	

	replaceChildNodes(thebox);

	newbox.addCallbacks(
		function(t){ thebox.innerHTML = t.responseText },
		function(t){ thebox.innerHTML = 'Sorry, failed to get new html' }
	);
}

// Show an element that is hidden in the 'boondocks'
function showElem(elem_id, elem_class) {
    all_elems = getElementsByTagAndClassName('*', elem_class);
    elem = getElement(elem_id);

    // Send all the elems to the boondocks
    for (i = 0; i < all_elems.length; i++) {
	if (!hasElementClass(all_elems[i],"boondocks")) {
	    addElementClass(all_elems[i],"boondocks");
	}
    }
    
    // Fetch the element we want back from the boondocks
    removeElementClass(elem,"boondocks");

    }

// 'Close' something by sending it to the 'boondocks'
function closeElem(elem_id) {
    elem = getElement(elem_id);

    if (!hasElementClass(elem, "boondocks")) {
	addElementClass(elem, "boondocks");
    }
}

// Toggle an Element back and forth from the 'boondocks'
function toggleElem(elem_id, elem_class) {
    all_elems = getElementsByTagAndClassName('*', elem_class);
    elem = getElement(elem_id);

    if (!hasElementClass(elem, "boondocks")) {
	addElementClass(elem, "boondocks");
    } else {
	showElem(elem_id, elem_class);
    }
}

// Check or uncheck a row of checkboxes
function toggleChecked(group_name,thisbox) {
    var group = getElementsByTagAndClassName('input', group_name);
    var thisbox = thisbox;
    if (thisbox.checked == true) {
	for (i = 0; i < group.length; i++) {
	    if (group[i].checked == true ) {
		group[i].checked = false;
	    }
	}
    } else {
	for (i = 0; i < group.length; i++) {
	    if (group[i].checked == false ) {
		group[i].checked = true;
	    }
	}
    }
}

// Expand/Shrink Definitions Box
function toggleDefs() {
    var definitions = getElement('definitions');
    var link = getElement('expdefs');
   
    if (!hasElementClass(definitions, 'expanded')) {
	addElementClass(definitions, 'expanded');
	link.innerHTML = 'Collapse Definitions Box -&gt;';
    } else {
	removeElementClass(definitions, 'expanded');
	link.innerHTML = '&lt;- Expand Definitions Box';
	// IE7  Fix -- turn selects on an off so that IE resizes them properly
	var i, select;
	for ( i = 0; ( select = getElementsByTagAndClassName('SELECT')[i] ); i++) 
	    {
		select.disabled = true;
		select.disabled = false;
	    }
    }
}




