var callback = new Object();

callback.findForm = function(id)
{
    var e = document.getElementById(id);
    alert(id);
    while(e != null)
    {
        alert(e.tagName);
        if (e.tagName == 'FORM') return e;
        e = e.parentElement;
    }
    return null;
}

callback.doCallback = function(id, arg)
{
	var form = callback.encodeForm();
	arg = arg + ':' + form;
	var cback = 'WebForm_DoCallback("' + id + '","' + arg + '",callback.handleCallback,null,callback.handleError,true);';
	callback.showLoading(true);
	callback.setAjaxState("1");
	try
	{
		eval(cback);
	}
	catch(ex)
	{
		alert(ex.message);
		callback.showLoading(false);
	}
}

callback.handleCallback = function(result, context)
{
	try
	{
		callback.processResult(result);
  }
  catch(ex)
  {
    alert(ex.message);
  }
  callback.showLoading(false);
	callback.setAjaxState('0');  
}

callback.setAjaxState = function(value)
{
	var ajaxState = document.getElementById('ajaxState');
	ajaxState.value = value;
}

callback.processResult = function(result)
{
    var xmlDoc = callback.createXml(result);
    var results = xmlDoc.getElementsByTagName('Response');
    for(var i=0; i<results.length;++i)
    {
        var action = results[i].attributes.getNamedItem('action').value;
        var id = results[i].attributes.getNamedItem('id').value;
        var data = results[i].firstChild.nodeValue;
        if (action == 'Content')
        {
            callback.setContent(id, data);
        }
        if (action == 'RunScript')
        {
            eval(data);
        }
        if (action == 'ShowForm')
        {
            addforms.showForm(results[i]);
        }
    }
}

callback.handleError = function(arg, context)
{
    alert('An error has occurred (' + arg + ').');
    callback.showLoading(true);
}

callback.setContent = function(id, content)
{
    document.getElementById(id).innerHTML = content;
}

callback.formIndex = 0;

callback.encodeForm = function(form)
{
	var r = '';
	if (form == null) form = document.forms[callback.formIndex];
	for(var i=0;i<form.length;++i)
	{
		var elem = form.elements[i];
		var name = elem.name;
		if (name.indexOf('__') == 0) continue;
		var val = null;
		switch(elem.type)
		{
			case 'hidden':
			case 'password':
			case 'text':
			case 'textarea':
			case 'select-one':
				val = elem.value;
				if (val == null) val = '';
				break;
			case 'select-multiple':
				val = callback.getMultiple(elem);
				break;
			case 'radio':
				if (elem.checked) val = elem.value;
				break;
			case 'checkbox':
				if (elem.checked) val = 'on';
				break;
		}
		if (val != null)
		{
			if (r.length > 0) r = r + '&';
			r = r + name + '=' + WebForm_EncodeCallback(val);
		}
	}
	return r;	
}

callback.getMultiple = function(multi)
{
	var r = '';
	for(var i=0;i<multi.options.length;++i)
	{
		var op = multi.options[i];
		if (op.selected)
		{
			if (r.length > 0) r = r + ',';
			r = r + op.value;
		}
	}
	return r;
}

callback.createXml = function(xmlData)
{
	var xmlDoc = null;
  if (document.implementation && document.implementation.createDocument)
	{
		var domParser = new DOMParser();
		xmlDoc = domParser.parseFromString(xmlData, 'text/xml');
	}
	else if (window.ActiveXObject)
	{
		xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
    xmlDoc.loadXML(xmlData);
 	}
	else
	{
		alert('Your browser can\'t handle this.');
		return;
	}
  return xmlDoc;
}

callback.showLoading = function(show)
{
	document.body.style.cursor = show ? 'wait' : 'default';
}
