// -------------------------------------------------------------------
function serialize(a)
{
	var a_php = "";
	var total = 0;
	var key = "";
	for (key in a) {
		++ total;
		if ((typeof a[key]) == 'object')  a_php +=  "s:" + String(key).length + ":\"" + String(key) + "\";" + serialize(a[key]);
		else a_php += "s:" + String(key).length + ":\"" + String(key) + "\";s:" + String(a[key]).length + ":\"" + String(a[key]) + "\";";
	}
	a_php = "a:" + total + ":{" + a_php + "}";

	return a_php;
}
// -------------------------------------------------------------------
function show_attrs(name,list)
{
	var checked = '';
	var bgcolor = '';
	var string = '';
	var ary = [];
	var range = 0;

	if ((pData.inset == null) || (pData.name != name)) return false;
	if (oList[name] === undefined) return false;

	// ... range assumption: 1 parameter = max ...
	if ((fData[name]['type'] != 'class') && (sData[name] !== undefined)) 
		for (var x in sData[name]) range++;

	// ... iterate through selections ...
	for (var item in oList[name][list]) {
		label = '';
		if ((sData[name] !== undefined) && sData[name][item]) {
			if (range > 1) {
				if (range++ % 2) label = "<span style=\"font-weight: bold; font-size: 10px; color: #000;\">&nbsp; = Maximum</span>";
				else label = "<span style=\"font-weight: bold; font-size: 10px; color: #0068BA;\">&nbsp; = Minimum</span>";
			}
			sel = " scx";
			checked = " checked=\"true\"";
		} else {
			sel = "";
			checked = '';
		}
		if ((range > 1) && (range % 2)) 
			sel = " scx";

		ary = oList[name][list][item].split('|');

		if (ary[0] != '') 
			string += "<tr><td class=\"sc1"+sel+"\"><input type=\"checkbox\" name=\""+item+"\" onclick=\"selChange(this,'"+name+"','"+item+"');\" "+checked+"></input></td><td class=\"sc2"+sel+"\" onmousedown=\"selText(this,'"+name+"',"+item+");\">"+ary[0]+label+"</td><td class=\"sc3"+sel+"\">"+ary[1]+"</td></tr>";
	}
	pData.inset.innerHTML = "<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" width=\"220px;\">" + string + "</table>";

	return true;
}
// -------------------------------------------------------------------
function pOver() 
{
	if (pData.timeout) window.clearTimeout(pData.timeout);
	pData.timeout = null;
}
// -------------------------------------------------------------------
function pDelay(num) 
{
	if (pData.num && (num == 0)) return false;
	pData.num = num;
	if (pData.box == null) return false;
	pData.timeout = setTimeout('nvOff(true)',2500);
/* swd org 2008.04.15 opera issue 
    pData.timeout = setTimeout('nvOff(true)',5000);
*/
}
// -------------------------------------------------------------------
function options_callback(ajax_object)
{
	var qAry = ajaxQueue.shift().split('|');
	var name = qAry[0]; // field name
	var list = qAry[1]; // all or match
	var sort = qAry[2]; // title or total

	if (oList[name] === undefined) oList[name] = {};
	oList[name][list] = ajax_object['data'];

	show_attrs(name,list);
}
// -------------------------------------------------------------------
function request_options(name,list,sort)
{
//	if (show_attrs(name,list,sort)) return;
	ajaxQueue.push(name+"|"+list+"|"+sort);		

	var sdat = encodeURI(serialize(sData));
	var parameters = "call=load_attribute_list&totals=true&list="+list+"&sort="+sort+"&name="+name+"&params="+sdat;
	var url = "/index.php?run=resources/community/java/community_rpc.php";
	http('POST',url,options_callback,parameters);
}
// -------------------------------------------------------------------
function nvOn(box,xoffset,name)
{
	// ... don't render popup if already on ...
	if ((pData.name == name) || (name == '')) return;
	nvOff(true);

	// ... render a new popup window ...
	var xarrow = 0 - xoffset - 60;
	pData.box = box;
	pData.win = document.createElement("div");
	pData.win.setAttribute("id","pBox");
// swd org 2008.04.15	pData.win.innerHTML = "<div class=\"pWin\" style=\"left: "+xarrow+"px;\" onmouseout=\"pDelay(1);\" onmouseover=\"pOver();\"><div style=\"float: left;\"><div style=\"float: left; background-color: #555; font-weight: normal; color: #fff; width: 179px; margin-left: 7px; padding: 3px; font-size: 12px;\">&nbsp;Attribute Title</div><div style=\"float: left; background-color: #555; font-weight: normal; color: #fff; width: 50px; margin-left: 1px; padding: 3px; font-size: 12px; text-align: center;\">Total</div><div style=\"clear: left;\"></div><div id=\"pInset\"><div class=\"pAttributes\"><img src=\"/resources/community/graphics/ajaxLoader3.gif\" style=\"float: left; margin-right: 5px;\">&nbsp;Loading Selections...</div></div></div><div id=\"pInst\"><span class=\"sTitle\">Select one or more attributes from the list</span><br /><br /><form method=\"get\" action=\"index.php\"><input type=\"radio\" name=\"sort\" value=\"title\" CHECKED onclick=\"sort_btn(this,'title');\" />Sort by Title<br /><input type=\"radio\" name=\"sort\" value=\"total\" onclick=\"sort_btn(this,'total');\" />Sort by Total<br /><br /><input type=\"radio\" name=\"display\" value=\"all\" onclick=\"list_btn(this,'all');\" />Display All Inventory<br /><input type=\"radio\" name=\"display\" value=\"matching\" onclick=\"list_btn(this,'match');\" CHECKED />Display Matching Inventory<br /><br /><br /><input type=\"submit\" value=\"OK\" class=\"iBtn\" onclick=\"nvOff(true); return false;\" /><input type=\"submit\" value=\"Cancel\" class=\"iBtn\" onclick=\"nvOff(false); return false;\" /><input type=\"submit\" value=\"Clear\" class=\"iBtn\" onclick=\"clear_btn(this); return false;\" /></form></div></div>";
	//pData.win.innerHTML = "<div class=\"pWin\" style=\"left: "+xarrow+"px;\" onmouseout=\"pDelay(1);\" onmouseover=\"pOver();\"><div style=\"float: left;\"><div style=\"float: left; background-color: #555; font-weight: normal; color: #fff; width: 179px; margin-left: 7px; padding: 3px; font-size: 12px;\">&nbsp;Attribute Title</div><div style=\"float: left; background-color: #555; font-weight: normal; color: #fff; width: 50px; margin-left: 1px; padding: 3px; font-size: 12px; text-align: center;\">Total</div><br style=\"clear:both;\" /><div id=\"pInset\"><div class=\"pAttributes\"><img src=\"/resources/community/graphics/ajaxLoader3.gif\" style=\"float: left; margin-right: 5px;\">&nbsp;Loading Selections...</div></div></div><div id=\"pInst\"><span class=\"sTitle\">Select one or more attributes from the list</span><br /><br /><form method=\"get\" action=\"index.php\"><input type=\"radio\" name=\"sort\" value=\"title\" CHECKED onclick=\"sort_btn(this,'title');\" />Sort by Title<br /><input type=\"radio\" name=\"sort\" value=\"total\" onclick=\"sort_btn(this,'total');\" />Sort by Total<br /><br /><input type=\"radio\" name=\"display\" value=\"all\" onclick=\"list_btn(this,'all');\" />Display All Inventory<br /><input type=\"radio\" name=\"display\" value=\"matching\" onclick=\"list_btn(this,'match');\" CHECKED />Display Matching Inventory<br /><br /><br /><input type=\"submit\" value=\"OK\" class=\"iBtn\" onclick=\"nvOff(true); stop_prop(event); return false;\" /><input type=\"submit\" value=\"Cancel\" class=\"iBtn\" onclick=\"nvOff(false); stop_prop(event); return false;\" /><input type=\"submit\" value=\"Clear\" class=\"iBtn\" onclick=\"clear_btn(this); stop_prop(event); return false;\" /></form></div></div>";
	pData.win.innerHTML = "<div class=\"pWin\" style=\"left: "+xarrow+"px;\"><div style=\"float: left;\"><div style=\"float: left; background-color: #555; font-weight: normal; color: #fff; width: 179px; margin-left: 7px; padding: 3px; font-size: 12px;\">&nbsp;Attribute Title</div><div style=\"float: left; background-color: #555; font-weight: normal; color: #fff; width: 50px; margin-left: 1px; padding: 3px; font-size: 12px; text-align: center;\">Total</div><br style=\"clear:both;\" /><div id=\"pInset\"><div class=\"pAttributes\"><img src=\"/resources/community/graphics/ajaxLoader3.gif\" style=\"float: left; margin-right: 5px;\">&nbsp;Loading Selections...</div></div></div><div id=\"pInst\"><div style=\"float: right;\"><img style=\"cursor: pointer;\" src=\"/resources/community/graphics/close.png\" onclick=\"nvOff(false); stop_prop(event); return false;\"></div><span class=\"sTitle\">Select one or more attributes from the list</span><br /><br /><form method=\"get\" action=\"index.php\"><input type=\"radio\" name=\"sort\" value=\"title\" CHECKED onclick=\"sort_btn(this,'title');\" />Sort by Title<br /><input type=\"radio\" name=\"sort\" value=\"total\" onclick=\"sort_btn(this,'total');\" />Sort by Total<br /><br /><input type=\"radio\" name=\"display\" value=\"all\" onclick=\"list_btn(this,'all');\" />Display All Inventory<br /><input type=\"radio\" name=\"display\" value=\"matching\" onclick=\"list_btn(this,'match');\" CHECKED />Display Matching Inventory<br /><br /><br /><input type=\"submit\" value=\"OK\" class=\"iBtn\" onclick=\"nvOff(true); stop_prop(event); return false;\" /><input type=\"submit\" value=\"Cancel\" class=\"iBtn\" onclick=\"nvOff(false); stop_prop(event); return false;\" /><input type=\"submit\" value=\"Clear\" class=\"iBtn\" onclick=\"clear_btn(this); stop_prop(event); return false;\" /></form></div></div>";
	pData.box.appendChild(pData.win);

// <div class=\"pTop1\" onclick=\"list_btn(this);\">List All Options</div><div class=\"pTop2\" onclick=\"sort_btn(this);\">Sort by Title</div><div class=\"pTop3\" onclick=\"clear_btn(this);\">Clear</div>

	// ... save the window attributes ...
	pData.inset = document.getElementById('pInset');
	pData.inst = document.getElementById('pInst');
	pData.name = name;
	pData.num = 0;
	pData.list = 'all';
	pData.sort = 'title';
	
	request_options(name,pData.list,pData.sort);
}
// -------------------------------------------------------------------
function nvOff(update)
{
	if (pData.win == null) return;
	if (pData.box == null) return;
 
	var name = pData.name;
	var box = pData.box;

	pOver();
	pData.box.removeChild(pData.win);

	pData.win = null; 
	pData.box = null; 
	pData.inset = null; 
	pData.list = '';
	pData.sort = '';
	pData.name = ''; 
	pData.num = 0;

	if (update) {
		update_field(box,name);
		save_query();
	}
}
// -------------------------------------------------------------------
function set_div_text(div,text)
{
	for (var tptr = div.firstChild; tptr != null; tptr = tptr.nextSibling) {
		if (tptr.nodeType == 3) {
			tptr.nodeValue = text;
			return;
		}
	}
	var tnode = document.createTextNode(text);
	div.appendChild(tnode);
}
// -------------------------------------------------------------------
function build_class_title(name)
{
	var len = 0;
	var iname = 'Click Here';
	if (sData[name] === undefined) return iname;

	for (var id in sData[name]) {
		if (!len++) {
			var ary = oList[name]['all'][id].split('|');
			iname = ary[0];
		}
	}
	if (len < 2) return iname;
	return iname + " (+" + len + " options)";
}
// -------------------------------------------------------------------
function build_range_title(name)
{
	var len = 0;
	var s1 = '', s2 = '';
	var v1 = 0, v2 = 0;
	if (sData[name] === undefined) return iname;

	for (var id in sData[name]) {
		var ary = oList[name]['all'][id].split('|');
		if (!len++) { v1 = parseInt(id); s1 = ary[0]; }
		else { v2 = parseInt(id); s2 = ary[0]; }
	}
	if (len == 0) return 'Click Here';
	if (len == 1) return s1;
	if (v1 > v2) return s2 + " - " + s1;
	return s1 + " - " + s2;
}
// -------------------------------------------------------------------
function update_field(box,name) 
{
	if (oList[name] === undefined) return;
	if (sData[name] === undefined) return;

	// ... build the display title ...
	var iname = '';
	if (fData[name]['type'] == 'class') 
		iname = build_class_title(name);
	else iname = build_range_title(name);

	// ... set the display title ...
	if (iname == 'Click Here') {
		box.style.color = "#ccc";
		if (lData[name] !== undefined) 
			delete lData[name];
	} else {
		box.style.color = "#D30207";
		lData[name] = iname;
	}
	set_div_text(box,iname);

	// ... open the "Load Submissions" div ...
	var lptr = document.getElementById("loadBox");
	if (lptr.style.display != 'block') lptr.style.display = "block";
}
// -------------------------------------------------------------------
function paintSelection(box,color)
{
	var tdx = box.parentNode.parentNode.getElementsByTagName("td");
	for (var x in tdx) {
		if (tdx[x].nodeName === undefined) continue;
		tdx[x].style.backgroundColor = color;
	}
}
// -------------------------------------------------------------------
function selChange(box,name,id)
{
	var par = box.parentNode;
	var color = '';
	var range = 0;
	var tDiff = 0;
	var sDiff = 10000000;
	var sId = 0;

	if (sData[name] === undefined) sData[name] = {};
	if (fData[name] === undefined) return;

	// ... deal with ranges ...
	if (fData[name]['type'] != 'class') {
		for (var x in sData[name]) {
			tDiff = Math.abs(parseInt(x) - parseInt(id));
			if (tDiff < sDiff) {
				sDiff = tDiff;
				sId = x;
			}
			range++;
		}
		if (range > 1) delete sData[name][sId];
	}
	// ... turn selection ON or OFF ...
	if (box.checked == true) {
		color = "#D6EAFF";
		sData[name][id] = 1;
	} else {
		color = "#FFFFFF";
		delete sData[name][id];
	}
	if (fData[name]['type'] == 'class') paintSelection(box,color);
	else show_attrs(name,pData.list);
}	
// -------------------------------------------------------------------
function selText(box,name,id)
{
	var inputs = box.parentNode.getElementsByTagName('input');
	if (inputs[0].checked == true) inputs[0].checked = false;
	else inputs[0].checked = true;

	selChange(inputs[0],name,id);
}
// -------------------------------------------------------------------
function serialize_attrs()
{
	var field = '';
	var rstr = '';

	for (name in sData) {
		field = '';
		for (id in sData[name]) {
			if (sData[name][id] == true) 
				field += "," + id;
		}
		if (field != '') rstr += ";" + name + field;
	}
	return encodeURI(rstr.substr(1));
}
// -------------------------------------------------------------------
function list_btn(ptr,type)
{
	if (type == 'all') {
		pData.list = 'all';
		show_attrs(pData.name,pData.list);
	} else {
		pData.list = 'match';

		if (oList[pData.name]['match'] === undefined) { 
			pData.inset.innerHTML = "<div style=\"margin-left: 15px; margin-top: 5px; font-size: 14px; font-weight: bold;\"><img src=\"/resources/community/graphics/ajaxLoader3.gif\" style=\"float: left; margin-right: 5px;\">&nbsp;Loading Selections...</div>";
			request_options(pData.name,pData.list,pData.sort);
		} else show_attrs(pData.name,pData.list);
	}	
}
// -------------------------------------------------------------------
function sort_btn(ptr,type)
{
	if (type == 'total') {
		pData.sort = 'total';
	} else {
		pData.sort = 'title';
	}
	pData.inset.innerHTML = "<div style=\"margin-left: 15px; margin-top: 5px; font-size: 14px; font-weight: bold;\"><img src=\"/resources/community/graphics/ajaxLoader3.gif\" style=\"float: left; margin-right: 5px;\">&nbsp;Loading Selections...</div>";
	request_options(pData.name,pData.list,pData.sort);
}
// -------------------------------------------------------------------
function clear_btn(ptr)
{
	sData[pData.name] = {};
	show_attrs(pData.name,pData.list);
}
// -------------------------------------------------------------------
function load_attrs()
{
}
// -------------------------------------------------------------------
function save_attrs()
{
}
// -------------------------------------------------------------------
function clear_attrs()
{
	var name;
	for (name in sData) 
		delete sData[name];
	for (name in lData) 
		delete lData[name];
	for (name in fData) {
		var ptr = document.getElementById("f_"+name);
		if (ptr == null) continue;
		ptr.style.color = "#ccc";
		set_div_text(ptr,"Click Here");
	}
	var lptr = document.getElementById("loadBox");
	if (lptr.style.display != 'block') 
		lptr.style.display = "block";

	save_query();
}
// -------------------------------------------------------------------
function query_callback(data)
{
	var rptr = document.getElementById('resultSet');
	if (rptr == null) return;
	
	var total = data.total;

	rptr.innerHTML = "Found <span style=\"color: #C1040D;\">"+total+"</span> Matching Records";
}
// -------------------------------------------------------------------
function save_query()
{
	var rptr = document.getElementById('resultSet');
	if (rptr == null) return;

	var sdat = encodeURI(serialize(sData));
	var ldat = encodeURI(serialize(lData));

	http('POST',"/index.php?run=resources/community/java/community_rpc.php",query_callback,"call=save_query&sdata="+sdat+"&ldata="+ldat);
	rptr.innerHTML = "<img src=\"/resources/community/graphics/ajaxLoader3.gif\" style=\"float: left; margin-right: 5px;\">&nbsp;Calculating number of matching items...";
}
// -------------------------------------------------------------------
function load_labels()
{
	var ptr;
	var fname;

	for (name in lData) {
		fname = '#f_'+name;

		//ptr = document.getElementById("f_"+name);
		//if (ptr == null) continue;
		//ptr.style.color = "#090";
		//set_div_text(ptr,lData[name]);
		$(fname).css('color', '#090');
		$(fname).text(lData[name]);

		if($(fname).hasClass('selH'))
			toggle_adv();
	}
}
// -------------------------------------------------------------------
function stop_prop(e)
{
	if (!e) var e = window.event;
	e.cancelBubble = true;
	if (e.stopPropagation) e.stopPropagation();
}
// -------------------------------------------------------------------
function toggle_adv()
{
	var new_text;
	if($('div.selH').css('display') == 'none')
		new_text = 'Hide advanced search...';
	else
		new_text = 'Show advanced search...';

    $('div.selH').toggle();
    $('a#showAdv').text(new_text);
}
// -------------------------------------------------------------------
