







function AjaxUtil() { }












AjaxUtil.onReturn = function(event, action)
{
if (!event)
{
event = window.event;
}

if (event && event.keyCode && event.keyCode == 13)
{
action();
}
};









AjaxUtil.selectRange = function(ele, start, end)
{
var orig = ele;
ele = $(ele);
if (ele == null)
{
alert("selectRange() can't find an element with id: " + orig + ".");
return;
}

if (ele.setSelectionRange)
{
ele.setSelectionRange(start, end);
}
else if (ele.createTextRange)
{
var range = ele.createTextRange();
range.moveStart("character", start);
range.moveEnd("character", end - ele.value.length);
range.select();
}

ele.focus();
};












function $()
{
var elements = new Array();

for (var i = 0; i < arguments.length; i++)
{
var element = arguments[i];
if (typeof element == 'string')
{
if (document.getElementById)
{
element = document.getElementById(element);
}
else if (document.all)
{
element = document.all[element];
}
}

if (arguments.length == 1)
{
return element;
}

elements.push(element);
}

return elements;
}










AjaxUtil.toDescriptiveString = function(data, level, depth)
{
var reply = "";
var i = 0;
var value;

if (level == null)
{
level = 0;
}

if (depth == null)
{
depth = 0;
}

if (data == null)
{
return "null";
}

if (AjaxUtil._isArray(data))
{
reply = "[";
if (level != 0)
{
reply += "\n";
}

for (i = 0; i < data.length; i++)
{
try
{
obj = data[i];

if (obj == null || typeof obj == "function")
{
continue;
}
else if (typeof obj == "object")
{
if (level > 0)
{
value = AjaxUtil.toDescriptiveString(obj, level - 1, depth + 1);
}
else
{
value = AjaxUtil._detailedTypeOf(obj);
}
}
else
{
value = "" + obj;
value = value.replace(/\/n/g, "\\n");
value = value.replace(/\/t/g, "\\t");
}
}
catch (ex)
{
value = "" + ex;
}

if (level == 0 && value.length > 13)
{
value = value.substring(0, 10) + "...";
}

reply += value;
reply += ", ";

if (level != 0)
{
reply += "\n";
}

if (level == 0 && i > 5)
{
reply += "...";
break;
}
}
reply += "]";

return reply;
}

if (typeof data == "string" || typeof data == "number" || AjaxUtil._isDate(data))
{
return data.toString();
}

if (typeof data == "object")
{
var typename = AjaxUtil._detailedTypeOf(data);
if (typename != "Object")
{
reply = typename + " ";
}

if (level != 0)
{
reply += AjaxUtil._indent(level, depth);
}
reply += "{";
if (level != 0)
{
reply += "\n";
}

var isHtml = AjaxUtil._isHTMLElement(data);

for (var prop in data)
{
if (isHtml)
{
if (prop.toUpperCase() == prop || prop == "title" ||
prop == "lang" || prop == "dir" || prop == "className" ||
prop == "form" || prop == "name" || prop == "prefix" ||
prop == "namespaceURI" || prop == "nodeType" ||
prop == "firstChild" || prop == "lastChild" ||
prop.match(/^offset/))
{

continue;
}
}

value = "";

try
{
obj = data[prop];

if (obj == null || typeof obj == "function")
{
continue;
}
else if (typeof obj == "object")
{
if (level > 0)
{
value = "\n";
value += AjaxUtil._indent(level, depth + 2);
value = AjaxUtil.toDescriptiveString(obj, level - 1, depth + 1);
}
else
{
value = AjaxUtil._detailedTypeOf(obj);
}
}
else
{
value = "" + obj;
value = value.replace(/\/n/g, "\\n");
value = value.replace(/\/t/g, "\\t");
}
}
catch (ex)
{
value = "" + ex;
}

if (level == 0 && value.length > 13)
{
value = value.substring(0, 10) + "...";
}

if (level != 0)
{
reply += AjaxUtil._indent(level, depth + 1);
}
reply += prop;
reply += ":";
reply += value;
reply += ", ";

if (level != 0)
{
reply += "\n";
}

i++;
if (level == 0 && i > 5)
{
reply += "...";
break;
}
}

reply += AjaxUtil._indent(level, depth);
reply += "}";

return reply;
}

return data.toString();
};





AjaxUtil._indent = function(level, depth)
{
var reply = "";
if (level != 0)
{
for (var j = 0; j < depth; j++)
{
reply += "--";
}
reply += " ";
}
return reply;
};





AjaxUtil.useLoadingMessage = function()
{
var disabledZone = document.createElement('div');
disabledZone.setAttribute('id', 'disabledZone');
disabledZone.style.position = "absolute";
disabledZone.style.zIndex = "1000";
disabledZone.style.left = "0px";
disabledZone.style.top = "0px";
disabledZone.style.width = "100%";
disabledZone.style.height = "100%";
document.body.appendChild(disabledZone);

var messageZone = document.createElement('div');
messageZone.setAttribute('id', 'messageZone');
messageZone.style.position = "absolute";
messageZone.style.top = "0px";
messageZone.style.right = "0px";
messageZone.style.background = "red";
messageZone.style.color = "white";
messageZone.style.fontFamily = "Arial,Helvetica,sans-serif";
messageZone.style.padding = "4px";
disabledZone.appendChild(messageZone);

var text = document.createTextNode('Loading');
messageZone.appendChild(text);

$('disabledZone').style.visibility = 'hidden';

DWREngine.setPreHook(function() { $('disabledZone').style.visibility = 'visible'; });
DWREngine.setPostHook(function() { $('disabledZone').style.visibility = 'hidden'; });
};











AjaxUtil.setValue = function(ele, val)
{
if (val == null)
{
val = "";
}

var orig = ele;
ele = $(ele);
if (ele == null)
{
alert("setValue() can't find an element with id: " + orig + ".");
return;
}

if (AjaxUtil._isHTMLElement(ele, "select"))
{

var found  = false;
var i;

for (i = 0; i < ele.options.length; i++)
{
if (ele.options[i].value == val)
{
ele.options[i].selected = true;
found = true;
}
else
{
ele.options[i].selected = false;
}
}


if (found)
{
return;
}

for (i = 0; i < ele.options.length; i++)
{
if (ele.options[i].text == val)
{
ele.options[i].selected = true;
break;
}
}

return;
}

if (AjaxUtil._isHTMLElement(ele, "input"))
{
switch (ele.type)
{
case "checkbox":
case "check-box":
case "radio":
ele.checked = (val == true);
return;

default:
ele.value = val;
return;
}
}

if (AjaxUtil._isHTMLElement(ele, "textarea"))
{
ele.value = val;
return;
}

ele.innerHTML = val;
};








AjaxUtil.getValue = function(ele)
{
var orig = ele;
ele = $(ele);
if (ele == null)
{
alert("getValue() can't find an element with id: " + orig + ".");
return;
}

if (AjaxUtil._isHTMLElement(ele, "select"))
{


var sel = ele.selectedIndex;
if (sel != -1)
{
var reply = ele.options[sel].value;
if (reply == null || reply == "")
{
reply = ele.options[sel].text;
}

return reply;
}
else
{
return "";
}
}

if (AjaxUtil._isHTMLElement(ele, "input"))
{
switch (ele.type)
{
case "checkbox":
case "check-box":
case "radio":
return ele.checked;

default:
return ele.value;
}
}

if (AjaxUtil._isHTMLElement(ele, "textarea"))
{
return ele.value;
}

return ele.innerHTML;
};







AjaxUtil.getText = function(ele)
{
var orig = ele;
ele = $(ele);
if (ele == null)
{
alert("getText() can't find an element with id: " + orig + ".");
return;
}

if (!AjaxUtil._isHTMLElement(ele, "select"))
{
alert("getText() can only be used with select elements. Attempt to use: " + AjaxUtil._detailedTypeOf(ele) + " from  id: " + orig + ".");
return;
}



var sel = ele.selectedIndex;
if (sel != -1)
{
return ele.options[sel].text;
}
else
{
return "";
}
};







AjaxUtil.setValues = function(map)
{
for (var property in map)
{
var ele = $(property);
if (ele != null)
{
var value = map[property];
AjaxUtil.setValue(property, value);
}
}
};







AjaxUtil.getValues = function(map)
{
for (var property in map)
{
var ele = $(property);
if (ele != null)
{
map[property] = AjaxUtil.getValue(property);
}
}
};










































AjaxUtil.addOptions = function(ele, data, valuerev, textprop)
{
	var orig = ele;
	ele = $(ele);
	if (ele == null)
		ele = document.getElementById( orig );
	if (ele == null)
	{
		alert("addOptions() can't find an element with id: " + orig + ".");
		return;
	}

	var useOptions = AjaxUtil._isHTMLElement(ele, "select");
	var useLi = AjaxUtil._isHTMLElement(ele, ["ul", "ol"]);

	if (!useOptions && !useLi)
	{
		alert("fillList() can only be used with select elements. Attempt to use: " + AjaxUtil._detailedTypeOf(ele));
		return;
	}


	if (data == null)
	{
		return;
	}

	var text;
	var value;
	
	if (AjaxUtil._isArray(data))
	{
		//alert("200");	
		for (var i = 0; i < data.length; i++)
		{
			//alert("201");
			if (useOptions)
			{
				//alert("202");
				if (valuerev != null)
				{
					if (textprop != null)
					{
						text = data[i][textprop];
						value = data[i][valuerev];
					}
					else
					{
						value = data[i][valuerev];
						text = value;
					}
				}
				else
				{
					if (textprop != null)
					{
						text = data[i][textprop];
						value = text;
					}
					else
					{
						text = "" + data[i];
						value = text;
					}
				}
		
				var opt = new Option(text, value);
				ele.options[ele.options.length] = opt;
			}
			else
			{
				li = document.createElement("li");
				li.innerHTML = "" + data[i];
				ele.appendChild(li);
			}
		}
	}
	else
	{
		//alert("300");	
	
		for (var prop in data)
		{
			//alert("301");	
		
			if (!useOptions)
			{
				alert("AjaxUtil.addOptions can only create select lists from objects.");
				return;
			}
		
			if (valuerev)
			{
				text = prop;
				value = data[prop];
			}
			else
			{
				text = data[prop];
				value = prop;
			}
		
			var opt = new Option(text, value);
			ele.options[ele.options.length] = opt;
		}
	}
};






AjaxUtil.removeAllOptions = function(ele)
{
var orig = ele;
ele = $(ele);

if (ele == null)
	ele = document.getElementById( orig );

if (ele == null)
{
alert("removeAllOptions() can't find an element with id: " + orig + ".");
return;
}

var useOptions = AjaxUtil._isHTMLElement(ele, "select");
var useLi = AjaxUtil._isHTMLElement(ele, ["ul", "ol"]);

if (!useOptions && !useLi)
{
alert("removeAllOptions() can only be used with select, ol and ul elements. Attempt to use: " + AjaxUtil._detailedTypeOf(ele));
return;
}

if (useOptions)
{

ele.options.length = 0;
}
else
{
while (ele.childNodes.length > 0)
{
ele.removeChild(ele.firstChild);
}
}
};





























AjaxUtil.addRows = function(ele, data, cellFuncs)
{
var orig = ele;
ele = $(ele);
if (ele == null)
{
alert("addRows() can't find an element with id: " + orig + ".");
return;
}

if (!AjaxUtil._isHTMLElement(ele, ["table", "tbody", "thead", "tfoot"]))
{
alert("addRows() can only be used with table, tbody, thead and tfoot elements. Attempt to use: " + AjaxUtil._detailedTypeOf(ele));
return;
}



if (navigator.product && navigator.product == "Gecko")
{
setTimeout(function() { AjaxUtil._addRowsInner(ele, data, cellFuncs); }, 0);
}
else
{
AjaxUtil._addRowsInner(ele, data, cellFuncs);
}
};






AjaxUtil._addRowsInner = function(ele, data, cellFuncs)
{
var frag = document.createDocumentFragment();

if (AjaxUtil._isArray(data))
{

for (var i = 0; i < data.length; i++)
{
AjaxUtil._addRowInner(frag, data[i], cellFuncs);
}
}
else if (typeof data == "object")
{
for (var row in data)
{
AjaxUtil._addRowInner(frag, row, cellFuncs);
}
}

ele.appendChild(frag);
};





AjaxUtil._addRowInner = function(frag, row, cellFuncs)
{
var tr = document.createElement("tr");

for (var j = 0; j < cellFuncs.length; j++)
{
var func = cellFuncs[j];
var td;

if (typeof func == "string")
{
td = document.createElement("td");
var text = document.createTextNode(func);
td.appendChild(text);
tr.appendChild(td);
}
else
{
var reply = func(row);

if (AjaxUtil._isHTMLElement(reply, "td"))
{
td = reply;
}
else if (AjaxUtil._isHTMLElement(reply))
{
td = document.createElement("td");
td.appendChild(reply);
}
else
{
td = document.createElement("td");
td.innerHTML = reply;


}

tr.appendChild(td);
}
}

frag.appendChild(tr);
};








AjaxUtil.removeAllRows = function(ele)
{
var orig = ele;
ele = $(ele);
if (ele == null)
{
alert("removeAllRows() can't find an element with id: " + orig + ".");
return;
}

if (!AjaxUtil._isHTMLElement(ele, ["table", "tbody", "thead", "tfoot"]))
{
alert("removeAllRows() can only be used with table, tbody, thead and tfoot elements. Attempt to use: " + AjaxUtil._detailedTypeOf(ele));
return;
}

while (ele.childNodes.length > 0)
{
ele.removeChild(ele.firstChild);
}
};











AjaxUtil._agent = navigator.userAgent.toLowerCase();




AjaxUtil._isIE = ((AjaxUtil._agent.indexOf("msie") != -1) && (AjaxUtil._agent.indexOf("opera") == -1));









AjaxUtil._isHTMLElement = function(ele, nodeName)
{
if (ele == null || typeof ele != "object" || ele.nodeName == null)
{
return false;
}

if (nodeName != null)
{
var test = ele.nodeName.toLowerCase();

if (typeof nodeName == "string")
{
return test == nodeName.toLowerCase();
}

if (AjaxUtil._isArray(nodeName))
{
var match = false;
for (var i = 0; i < nodeName.length && !match; i++)
{
if (test == nodeName[i].toLowerCase())
{
match =  true;
}
}

return match;
}

alert("AjaxUtil._isHTMLElement was passed test node name that is neither a string or array of strings");
}
};






AjaxUtil._detailedTypeOf = function(x)
{
var reply = typeof x;

if (reply == "object")
{
reply = Object.prototype.toString.apply(x);
reply = reply.substring(8, reply.length-1);
}

return reply;
};










AjaxUtil._isArray = function(data)
{
return (data && data.join) ? true : false;
};










AjaxUtil._isDate = function(data)
{
return (data && data.toUTCString) ? true : false;
};











if (!AjaxUtil.isHTMLElement)
{
AjaxUtil.isHTMLElement = function(ele, nodeName)
{
AjaxUtil._deprecated("AjaxUtil.isHTMLElement");

if (nodeName == null)
{


return ele != null &&
typeof ele == "object" &&
ele.nodeName != null;
}
else
{
return ele != null &&
typeof ele == "object" &&
ele.nodeName != null &&
ele.nodeName.toLowerCase() == nodeName.toLowerCase();
}
};
}






if (!AjaxUtil.detailedTypeOf)
{
AjaxUtil.detailedTypeOf = function(x)
{
AjaxUtil._deprecated("AjaxUtil.detailedTypeOf");

var reply = typeof x;

if (reply == "object")
{
reply = Object.prototype.toString.apply(x);
reply = reply.substring(8, reply.length-1);
}

return reply;
};
}










if (!AjaxUtil.isArray)
{
AjaxUtil.isArray = function(data)
{
AjaxUtil._deprecated("AjaxUtil.isArray", "(array.join != null)");
return (data && data.join) ? true : false;
};
}










if (!AjaxUtil.isDate)
{
AjaxUtil.isDate = function(data)
{
return (data && data.toUTCString) ? true : false;
};
}







if (!AjaxUtil.isHTMLInputElement)
{
AjaxUtil.isHTMLInputElement = function(ele)
{
AjaxUtil._deprecated("AjaxUtil.isHTMLInputElement");
return AjaxUtil.isHTMLElement(ele, "input");
};
}







if (!AjaxUtil.isHTMLTextAreaElement)
{
AjaxUtil.isHTMLTextAreaElement = function(ele)
{
AjaxUtil._deprecated("AjaxUtil.isHTMLTextAreaElement");
return AjaxUtil.isHTMLElement(ele, "textarea");
};
}







if (!AjaxUtil.isHTMLSelectElement)
{
AjaxUtil.isHTMLSelectElement = function(ele)
{
AjaxUtil._deprecated("AjaxUtil.isHTMLSelectElement");
return AjaxUtil.isHTMLElement(ele, "select");
};
}






if (!AjaxUtil.getElementById)
{
AjaxUtil.getElementById = function(id)
{
AjaxUtil._deprecated("AjaxUtil.getElementById", "$");

if (document.getElementById)
{
return document.getElementById(id);
}
else if (document.all)
{
return document.all[id];
}

return null;
};
}








if (!AjaxUtil.setEnabled)
{
AjaxUtil.setEnabled = function(ele, state)
{
AjaxUtil._deprecated("AjaxUtil.setEnabled");

var orig = ele;
ele = $(ele);
if (ele == null)
{
alert("setEnabled() can't find an element with id: " + orig + ".");
return;
}






ele.disabled = !state;
ele.readonly = !state;
if (AjaxUtil._isIE)
{
if (state)
{
ele.style.backgroundColor = "White";
}
else
{

ele.style.backgroundColor = "Scrollbar";
}
}
};
}






if (!AjaxUtil.showById)
{
AjaxUtil.showById = function(ele)
{
AjaxUtil._deprecated("AjaxUtil.showById");

var orig = ele;
ele = $(ele);
if (ele == null)
{
alert("showById() can't find an element with id: " + orig + ".");
return;
}


ele.style.display = '';
};
}






if (!AjaxUtil.hideById)
{
AjaxUtil.hideById = function(ele)
{
AjaxUtil._deprecated("AjaxUtil.hideById");

var orig = ele;
ele = $(ele);
if (ele == null)
{
alert("hideById() can't find an element with id: " + orig + ".");
return;
}

ele.style.display = 'none';
};
}






if (!AjaxUtil.toggleDisplay)
{
AjaxUtil.toggleDisplay = function(ele)
{
AjaxUtil._deprecated("AjaxUtil.toggleDisplay");

var orig = ele;
ele = $(ele);
if (ele == null)
{
alert("toggleDisplay() can't find an element with id: " + orig + ".");
return;
}

if (ele.style.display == 'none')
{

ele.style.display = '';
}
else
{
ele.style.display = 'none';
}
};
}








if (!AjaxUtil.alternateRowColors)
{
AjaxUtil.alternateRowColors = function()
{
AjaxUtil._deprecated("AjaxUtil.alternateRowColors");

var tables = document.getElementsByTagName("table");
var rowCount = 0;

for (var i = 0; i < tables.length; i++)
{
var table = tables.item(i);
var rows = table.getElementsByTagName("tr");

for (var j = 0; j < rows.length; j++)
{
var row = rows.item(j);
if (row.className == "zebra")
{
if (rowCount % 2)
{
row.className = 'oddrow';
}
else
{
row.className = 'evenrow';
}

rowCount++;
}
}

rowCount = 0;
}
};
}






if (!AjaxUtil.setCSSClass)
{
AjaxUtil.setCSSClass = function(ele, cssclass)
{
AjaxUtil._deprecated("AjaxUtil.setCSSClass");

var orig = ele;
ele = $(ele);
if (ele == null)
{
alert("setCSSClass() can't find an element with id: " + orig + ".");
return;
}

ele.className = cssclass;
};
}






if (!AjaxUtil.callOnLoad)
{
AjaxUtil.callOnLoad = function(load)
{
AjaxUtil._deprecated("AjaxUtil.callOnLoad", "window.addEventListener or window.onload");

if (window.addEventListener)
{
window.addEventListener("load", load, false);
}
else if (window.attachEvent)
{
window.attachEvent("onload", load);
}
else
{
window.onload = load;
}
};
}






if (!AjaxUtil.fillList)
{
AjaxUtil.fillList = function(ele, data, valueprop, textprop)
{
AjaxUtil._deprecated("AjaxUtil.fillList", "AjaxUtil.addOptions");
AjaxUtil.removeAllOptions(ele);
AjaxUtil.addOptions(ele, data, valueprop, textprop);
};
}





if (!AjaxUtil.drawTable)
{
AjaxUtil.drawTable = function(ele, data, cellFuncs)
{
AjaxUtil._deprecated("AjaxUtil.drawTable", "AjaxUtil.addRows");
AjaxUtil.addRows(ele, data, cellFuncs);
};
}








if (!AjaxUtil.clearChildNodes)
{
AjaxUtil.clearChildNodes = function(id)
{
AjaxUtil._deprecated("AjaxUtil.clearChildNodes", "AjaxUtil.removeAllRows");

var ele = AjaxUtil.getElementById(id);
if (ele == null)
{
alert("clearChildNodes() can't find an element with id: " + id + ".");
throw id;
}

while (ele.childNodes.length > 0)
{
ele.removeChild(ele.firstChild);
}
};
}





AjaxUtil._showDeprecated = true;






AjaxUtil._deprecated = function(fname, altfunc)
{
if (AjaxUtil._showDeprecated)
{
var warning;
var alternative;

if (fname == null)
{
warning = "You have used a deprecated function which could be removed in the future.";
alternative = "";
}
else
{
warning = "Utility functions like '" + fname + "' are deprecated and could be removed in the future.";

if (altfunc == null)
{
alternative = "\nSee the documentation for alternatives.";
}
else
{
alternative = "\nFor an alternative see: " + altfunc;
}
}

var further = "\nImport deprecated.js to get rid of this warning.\nDo you wish to ignore further deprecation warnings on this page?";

AjaxUtil._showDeprecated = !confirm(warning + alternative + further);
}
};


var req;
var args = [];

  AjaxUtil.retrieveURL = function(url)
  {
	args = [];
    for (var i = 0; i < arguments.length - 1; i++)
    {
    	args[i] = arguments[i + 1];
    }

    var time = new Date();
    var is_param_exist = url.indexOf('?');
	if (is_param_exist == -1) // not exist
 		url += '?dt=' + time;
 	else	
		url += '&dt=' + time;

    if (window.XMLHttpRequest) { // Non-IE browsers
      req = new XMLHttpRequest();
      req.onreadystatechange = AjaxUtil.processStateChange;
      try
      {
	    req.open("GET", url, true);    
      } 
	  catch (e) 
	  {
        alert(e);
      }
      req.send(null);
    } 
	else if (window.ActiveXObject) { // IE
      req = new ActiveXObject("Microsoft.XMLHTTP");
      if (req) 
      {
        req.onreadystatechange = AjaxUtil.processStateChange;
        req.open("GET", url, true);
        req.send();
      }
    }
  };

  AjaxUtil.processStateChange = function() 
  {
    if (req.readyState == 4) // Complete
    { 
      	if (req.status == 200) // OK response
      	{ 
	    	var rtnStrList = [];
	    	var rtnString = req.responseText;

	    	if (args.length > 1)
				rtnStrList = rtnString.split("[@]");
			else
				rtnStrList[0] = rtnString;

	        for (var i = 0; i < args.length; i++)
	    	{
	    		var argTyp = args[i];
	    		var rtnVal = rtnStrList[i];

		    	if (typeof argTyp == "function")
		    	{
			    		argTyp(rtnVal);
		    	}
		    	else
		    	{
					if (AjaxUtil._isHTMLElement(document.forms[0].elements[argTyp], "select"))
				   	{
					    AjaxUtil.removeAllOptions(argTyp);
					    if (rtnVal != null && rtnVal != '')
					    	AjaxUtil.addOptions(argTyp, eval(rtnVal), "value", "label");
					}    
					else if (AjaxUtil._isHTMLElement(document.forms[0].elements[argTyp], "textarea") ||
	  						 AjaxUtil._isHTMLElement(document.forms[0].elements[argTyp], "input"))
			      	{
				      	document.forms[0].elements[argTyp].value = "";
				      	if (rtnVal != null && rtnVal != '')
							document.forms[0].elements[argTyp].value = rtnVal;
			      	}
					else
			      	{
				      	document.getElementById(argTyp).innerHTML = "";
				      	if (rtnVal != null && rtnVal != '')
					      	document.getElementById(argTyp).innerHTML = rtnVal;
			      	}      	
			     } 	
		     }
      	}
	  	else 
	  	{
        	alert("Problem: " + req.statusText);
      	}
    }
  };

  

