
var gadgets = {};
gadgets.util = {}

//generates a button to click on to simulate execution of the gadget

gadgets.util.registerOnLoadHandler = function(thecb){
	
	var thediv = document.getElementById("onloaddiv");
	var thecbtxt = String(thecb) + "()";	

	var outtxt = '<br/><input type = "button" onclick = ' + '"' + thecbtxt + '"' + ' value = ' + '"' + thecb + '"' + '><br/>';
	thediv.innerHTML = outtxt;
}


gadgets.Prefs = function(){

}

gadgets.Prefs.prototype.getString = function(thestring){

try{
	var element = document.getElementById(thestring);

	if(typeof(element.selectedIndex) !== 'undefined'){
		return element.options[element.selectedIndex].text;
	
	} else if(typeof(element.value) === 'string'){
		return element.value;
	}

}catch(err){

	alert("gadgets.Prefs.prototype.getString err " + err);
	alert("thstring is " + thestring);


}

	return null;

}


function readlangbundle(filename){


	var xmlDoc = jl_xml_loadDoc(filename);
	
	if(!xmlDoc){
		alert("readlangbundle failed to load file " + filename);
		return;
	}

	var msglist = xmlDoc.getElementsByTagName("msg");
	var langmap = {};

	
	var i=0;
	for(i=0;i<msglist.length;i +=1){
		langmap[msglist[i].attributes[0].nodeValue] = msglist[i].childNodes[0].nodeValue;
	}
	
	

	return langmap;

}

function convertforlang(langinfo,txt){

	if(txt.length < 6){
		return txt;
	}


	if(txt.substr(0,6) === "__MSG_"){
		return langinfo[txt.substring(6,txt.length  - 2)];
		
	}

	return txt;


}

function Userprefenum(langinfo,thenode){

	var j=0;
	var nodevalue = null;
	
	for(j=0;j<thenode.attributes.length;j += 1){

		
		nodevalue = convertforlang(langinfo,thenode.attributes[j].nodeValue);
		this[thenode.attributes[j].nodeName] = nodevalue;

//		document.write("<br/>Userprefenum ctor nodename is " + thenode.attributes[j].nodeName);
//		document.write("<br/>Userprefenum ctor nodevalue is " + nodevalue);


	}

}


function Userprefinfo(){



	this.name = null;
	this.display_name;
	this.default_value = null;
	this.datatype = null;
	this.enumlist = new Array(0);

}


//<UserPref name="bgcolor" display_name="__MSG_Backgroundcolor__" default_value="Black" datatype="enum" >


Userprefinfo.prototype.createenums = function(langinfo,thenode){

	var i=0;
	var j=0;
	var theenum = null;

	for(i=0;i<thenode.length;i += 1){

		if(thenode[i].nodeName !== "EnumValue"){
			continue;

		}
		
		theenum = new Userprefenum(langinfo,thenode[i]);	
		this.enumlist.push(theenum);
	}

}




Userprefinfo.prototype.load = function(langinfo,thenode){

	var i=0;
	var nodevalue=null;
	for(i=0;i<thenode.attributes.length;i += 1){

		nodevalue = convertforlang(langinfo,thenode.attributes[i].nodeValue);
//		document.write("<br/>Userprefinfo.prototype.load nodevalue is " + nodevalue);
		//document.write("<br/>Userprefinfo.prototype.load langinfo[nodevalue] is " + nodevalue);

		this[thenode.attributes[i].nodeName] = nodevalue;

	}


	if(this.datatype === "enum"){
		if(thenode.childNodes.length > 0){
			this.createenums(langinfo,thenode.childNodes);
		}
	}


}



function readuserprefs(langinfo,filename){


	
	var xmlDoc = jl_xml_loadDoc(filename);
	
	if(!xmlDoc){
		alert("readuserprefs failed to load file " + filename);
		return;
	}

	var userpreflist = xmlDoc.getElementsByTagName("UserPref");
	var userprefinfolist = new Array(0);
	var prefinfo = null;
	
	var i=0;
	for(i=0;i<userpreflist.length;i += 1){

		if(userpreflist[i].nodeName !== "UserPref"){

			alert("readuserprefs() error : record not a UserPref - name is " + userpreflist[i].nodeName);
			return null;

		}

		prefinfo = new Userprefinfo();

		prefinfo.load(langinfo,userpreflist[i]);
		userprefinfolist.push(prefinfo);

		
	}
	
	

	return userprefinfolist;

}

function displayuserprefs(userpreflist,formdiv){

	

	function makeinputbox(info){

		outtxt += info.display_name;
		outtxt += ':<br/><input type = "text" value = ';

		if(typeof(info.default_value) !== 'undefined'){

			outtxt += '"' + info.default_value + '"' + ' id = ' + '"' + info.name + '"' + '><br/>';
			
		}else{

			outtxt += "" + ' id = ' + '"' + info.name + '"' + '><br/>';

		}

	}



	function makemenu(info){

		outtxt += info.display_name + ":</br>";
		outtxt += '<select name = ' + '"' + info.display_name + '"' + ' id = ' + '"' +  info.name + '"' + '><br/>';

		
		var i=0;
		var enumlist = info.enumlist;
		var selectedtxt = "";
		var display_value = null;

//		document.write("<br/>makemenu() info.name " + info.name + " info.enumlist.length " + info.enumlist.length + "<br/>");
		for(i=0;i<enumlist.length;i += 1){


			if(typeof(info.default_value) !== 'undefined'){
	
				if(enumlist[i].value === info.default_value){
					selectedtxt = ' selected="selected" ';
				}else{
					selectedtxt = "";
				}
			}

			if(typeof(enumlist[i].display_value) === 'undefined'){
				display_value = enumlist[i].value;
			}else{
				display_value = enumlist[i].display_value;
			}

			outtxt += '<option value = ' + '"' + enumlist[i].value + '"' + selectedtxt +'>' + display_value + '</option><br/>';
//			document.write("<br/>makemenu() display_value " + display_value + "<br/>");

			
		}

		outtxt += '</select><br/>';
		
		

	}


	var i=0;
	var outtxt = '<br/><br/><form action = ""><br/>';
	

	for(i=0;i<userpreflist.length;i += 1){

		var info = userpreflist[i];
		if(info.datatype === "string"){
			makeinputbox(info);
		}
		

		if(info.datatype === "enum"){
			makemenu(info);
		}


	}
	

	outtxt += '</form><br/>';


	formdiv.innerHTML = outtxt;


}
