// JavaScript Document
var servlet = "addons/category_selector/servlets/category_selector.php";
var controlList = new Array();
var parameters = new Array();

/**
* The basic kick of the ajax category selector
* 
*/
function category_selector(){
	var selected_category         = document.getElementById('selected_category').value;
	var parameters                = new Array();
	parameters[parameters.length] = newParameter("parent_id",selected_category);
	parameters[parameters.length] = newParameter("showAll","true");
	parameters[parameters.length] = newParameter("showCategoryCount", "true");
	if(selected_category!=0){
		parameters[parameters.length] = newParameter("title", "Select A Subcategory");
	}
	AjaxRequest(servlet, select_category_handler, parameters);
}//END FUNCTION get_select_box

function newParameter(name, value){
	parm = new Array();
	parm["name"] = name;
	parm["value"] = value;
	return parm;
}

/**
* Response handler for the request object
*/
function select_category_handler(){
	if(httpRequest.readyState == 4){
		if(httpRequest.status == 200){
			responseXML = httpRequest.responseXML;
			responseText = httpRequest.responseText;
			if(responseText!=""){
				addSelect();
				document.getElementById('submitMe').style.display="inline";
			}else if(controlList.length==0){
				document.getElementById('submitMe').style.display="none";
			}
		}else{
		}
	}else{
	}
}//END FUNCTION select_category_handler

//supporting functions

/**
* adds the new select element to the page
*/
function addSelect(){
	var categories = responseXML.getElementsByTagName('category');
	var list = "";
	
	//create the new element
	var newSelect = document.createElement('select');
	
	
	for(i=0;i<categories.length;i++){
		list += categories[i].getAttribute("text") + " = " + categories[i].getAttribute("value") + "\r\n";
	}
	
	//set attributes
	newSelect.setAttribute("id","list_" + controlList.length);
	newSelect.setAttribute("class", "ajax_select");
	//newSelect.setAttribute("onchange","setSelectedCategory(this)");
	addEvent(newSelect, "change", setSelectedCategory);
	
	//add options to the element
	for(i=0; i<categories.length;i++){
		var elOptNew = document.createElement('option');
		elOptNew.text = categories[i].getAttribute("text");
		elOptNew.value = categories[i].getAttribute("value");
		try {
			newSelect.add(elOptNew, null); // standards compliant; doesn't work in IE
		}
		catch(ex){
			newSelect.add(elOptNew); // IE only
		}
	}//END for
	
	//add it to the control list
	controlList[controlList.length] = newSelect.id;
	
	//add it to the form
	document.getElementById("selector_controls").appendChild(newSelect);
	return true;
}//END FUNCTION addSelect

/**
* Controls the setting of the selected
* category in the appropriate field
*
*/
function setSelectedCategory(){
	var category = this.options[this.selectedIndex].value;
	if(category!=0){
		document.getElementById("selected_category").value = category;
		if((controlList.length + 1)>this.id.split("_")[1]){
			removeElements(this.id.split("_")[1]);
		}
		category_selector();
	}
	return true;
}//END FUNCTION setSelectedCategory

/**
* removes unwanted select elements from the page
*/
function removeElements(index){
	var temp_array = new Array();
	var el;
	var container = document.getElementById("selector_controls");
	for(i=0;i<controlList.length;i++){
		if(i>index){
			el = document.getElementById(controlList[i]);
			container.removeChild(el);
		}else{
			temp_array[i]=controlList[i];
		}
	}
	controlList = temp_array;
	return true;
}//END FUNCTION removeElements

/**
* adds an event to an element
*/
function addEvent( obj, type, fn ){ 
  if( obj.attachEvent ){ 
    obj['e'+type+fn] = fn; 
    obj[type+fn] = function(){obj['e'+type+fn]( window.event );} 
    obj.attachEvent( 'on'+type, obj[type+fn] ); 
  } else {
	  obj.addEventListener( type, fn, false ); 
  }
  return true;
}//END FUNCTION addEvent

/**
* removes an event from an element
*/
function removeEvent( obj, type, fn ){ 
  if( obj.detachEvent ){ 
    obj.detachEvent( 'on'+type, obj[type+fn] ); 
    obj[type+fn] = null; 
  } else {
    obj.removeEventListener( type, fn, false ); 
  }
  return true;
}//END FUNCTION removeEvent

//Kick things off
category_selector();