var __nonMSBrowser = window.navigator.appName.toLowerCase().indexOf("netscape") > -1;
//var __theFormPostData = "";
var theForm = document.forms[0];
var commonHtmlValues = new Array ();
var commonReplaceValues = new Array();
var __callbackId = "__clientcallbackid";
var __callbackparam = "__clientcallbackparam";
var __serviceCall = "__serviceCall";

commonHtmlValues[0] = "&amp";
commonHtmlValues[1] = "&gt";
commonHtmlValues[2] = "&lt";
commonHtmlValues[3] = "\\n";
commonHtmlValues[4] = "&equal";
commonHtmlValues[5] = "&comma";
commonHtmlValues[6] = "&semicolon";

commonReplaceValues[0] = "&";
commonReplaceValues[1] = ">";
commonReplaceValues[2] = "<";
commonReplaceValues[3] = "\n";
commonReplaceValues[4] = "=";
commonReplaceValues[5] = ",";
commonReplaceValues[6] = ";";
function RequestObject(request, context)
{
var request;
var context;
this.request = request;
this.context = context;
this.RemoveArray = function (array)
{
for (var i = 0; i <array.length; i++)
{
if (array[i].request == this.request)
{
array[i] = null;
}
}
}
this.AddToArray = function (array)
{
if (array.length == 0)
{
array[0] = this;
return ;
}
for (var i = 0; i < array.length; i++)
{
if (array[i] == null)
{
array[i] = this;
return;
}
}
array[array.length] = this;
}
}
function getFormData(source)
{
var count = theForm.length;
var element;
var data = "";
re = new RegExp("\\x2B", "g");
for (i = 0; i < count; i++) 
{
element = theForm.elements[i];
var elementname = element.name.length == 0?element.id:element.name;
//elementname = elementname.replace (":", "_");
if (element.tagName.toLowerCase() == "input" || element.tagName.toLowerCase () == "textarea") 
{
var type = element.type.toLowerCase ();

if ((type != "button" && type != "submit") || source.id == element.id)
{

var value = "";
var inserenaLista = false;
switch (type.toLowerCase ())
{
case "checkbox": 
case "radio":

inserenaLista = element.checked;
if (element.checked)
{
value=type.toLowerCase () =="checkbox"?"checked":element.value;
inserenaLista = true;
}
break;
default: value = element.value.replace (re, "%2B");
inserenaLista = true;
break;
}
if(inserenaLista)
data+= elementname + "=" + escape(value) + "&";
}
}
else if (element.tagName.toLowerCase() == "select") 
{
var selectCount = element.length;
var selectedValues = '';
for (j = 0; j < selectCount; j++)
{
var selectChild = element[j];
if ((selectChild.tagName.toLowerCase() == "option") && (selectChild.selected == true)) 
{
selectedValues+=selectChild.value.replace(re, "%2B") + ",";
if (!element.multiple)
{
break;
}
}
}
data+= elementname + "=" + selectedValues.substring(0,selectedValues.length - 1)  + "&";
}
}
return data;
}
function __InitCallback(source) 
{
theForm = document.forms[0];
if (source != null)
{
    
    source.__theFormPostData = getFormData(source);
}
}

function __doCallBack(event, target, callbackFunction, beforePostFunction, errorFunction, arguments, async)
{

var __context = new Object ();
__context.target = getElementById(target);
if (__context.target == null)
{
alert ("callback object is null");
return;
}

var objElement = __context.target;
if (__context.target.tagName.toLowerCase () == "input" && __context.target.type.toLowerCase () == "checkbox")
{
objElement = __context.target.parentNode;
}
__context.arguments = arguments;

__context.functionBeforePost = beforePostFunction;

__context.clientCallback = callbackFunction;
__context.clientCallbackError = errorFunction;
__context.callBackManager = null;

if (__context.functionBeforePost != null)
{
if (!__context.functionBeforePost(event))
return;
}

var xmlRequest = createXmlObject ();
var reqObject = new RequestObject (xmlRequest, __context);
__context.Async = async;
var fnPtr = function (){
var x = reqObject;
//alert (x);
__callBackComplete(x);
};
if (__nonMSBrowser)
{
xmlRequest.onload = fnPtr;
}
else
xmlRequest.onreadystatechange = fnPtr;
re = new RegExp("\\x2B", "g");

registerHiddenField ("__EVENTTARGET", __context.target.id);
registerHiddenField ("__EVENTARGUMENT", __context.arguments);
registerHiddenField (__callbackId, __context.target.id);
registerHiddenField (__callbackparam, escape(__context.arguments).replace(re, "%2B"));
__InitCallback (__context.target);

__context.target.__theFormPostData = __context.target.__theFormPostData.substring (0, __context.target.__theFormPostData.length - 1); 
    
    xmlRequest.open("POST",  document.forms[0].action, __context.Async);
    xmlRequest.setRequestHeader("CONTENT-TYPE", "application/x-www-form-urlencoded");
xmlRequest.send(__context.target.__theFormPostData);

}
function __callBackComplete(objeto)
{
//alert (objeto.request);
var xml = objeto.request;
if (xml.readyState == 4 || __nonMSBrowser) 
{
var __context = objeto.context;
var response = xml.responseText;

if (response.charAt(0) == 's')
{
    if(response.indexOf("script:") == 0)
    {
        var scriptData = response.substring(response.indexOf("script:") + 7);
        eval(scriptData);
        return;
    }
var rawResponse = response.substring (1);
__context.callBackManager = new CallbackManager (rawResponse);
var idx = -1;
if(__context.target)
{
    idx = __context.target.tabIndex;
}
    __context.callBackManager.UpdateData (idx);
if (__context.clientCallback != null)
__context.clientCallback (__context.callBackManager.UserStream ,__context);
}
else if(response.charAt(0) == 'v')
{
alert ("Os seguintes campos n�o foram preenchidos ou est�o inv�lidos:\n" + response.substring (2));
}
else
{
    
if (__context.clientCallbackError != null)
__context.clientCallbackError (response ,__context.context);
    document.write(response);
    document.close();

}
getElementById(__callbackId).value = '';
getElementById(__callbackparam).value = '';
}
}
function DataSource (lista, valores)
{
this.DataBind = DataBind;
this._DataSource = valores;
this._lista = lista;
function DataBind ()
{
if (this._lista == null)
{
alert ("Cannot databind to selected list");
return ;
}
this._lista.options.length = 0;
this._lista.length = 0;
if (this._DataSource.length == 0)
return ;

var namevalues = this._DataSource.split ('\n');



for (var i = 0 ; i < namevalues.length; i++)
{
var opt = document.createElement ("option");
opt.text = formatValue (namevalues[i].split ('=')[0]);
opt.value = formatValue (namevalues[i].split ('=')[1].split (';')[0]);
opt.selected = namevalues[i].split ('=')[1].split (';')[1] == formatValue ('1')?true:false;
lista.options.add (opt);
}
}

var names = valores.split ('<\n');
for (var i = 0; i < names.length; i++)
{
if (names[i] == lista.id || names[i] == lista.name)
{
var search = names[i] + '<\n';

this._DataSource = valores.substring (valores.indexOf(search) + search.length);

this._DataSource = this._DataSource.substring(0, this._DataSource.indexOf ('>') - 1);
this._lista = lista;
break;
}
}
}

function formatValue (valor)
{
for (var i = 0 ; i < commonHtmlValues.length; i++)
{
var re = new RegExp (commonHtmlValues[i], "gim");
valor = valor.replace (re, commonReplaceValues[i]);
}

return unescape (valor);
}
function CallbackManager (valor)
{
var reader = new StringReader (valor);
this.ControlStream = reader.ReadNext ("\n\n");
this.UserStream = reader.ReadToEnd ();
this.UpdateData = function (lastIndex)
{
var nextIndex = (lastIndex == null?0:lastIndex) + 1;
var nameValues = this.ControlStream.split ('<');
var element = null;
for (i = 0; i < nameValues.length - 1; i++) 
{
var name = nameValues[i].split ('=')[0];

var value = nameValues[i].split ('=')[1];


    element = getElementById (name.split(":").join("_").split("$").join("_"));

    if (element == null)
    {
    continue;
    }
    switch(element.tagName.toLowerCase())
    {
        case "input":
    element.value = formatValue(value);
        break;
        case "select":
            var selectCount = element.length;
for (j = 0; j < selectCount; j++)
{
var selectChild = element[j];
if ((selectChild.tagName.toLowerCase() == "option") && (selectChild.value == value)) 
{
selectChild.selected = true;
}
}
break;
case "span":
case "div":
/*var curStyle = element.style.visibility;
    element.style.visibility = 'hidden';
    */
    var val = formatValue (value).split("\\n").join("\n").split("\n").join("");
element.innerHTML = val;
//element.style.visibility = curStyle;
break;        
case "img":
    element.src = formatValue (value);
    break;

    }
}
}
}
function registerHiddenField (name, value)
{
var element = document.forms[0].elements[name];
if (!element)
{
element = document.createElement ("input");
element.type = "hidden";
document.forms[0].appendChild(element);
}
element.name = name;
element.value = unescape(value);
element.id = element.name;
element.type = "hidden";
}
function createXmlObject ()
{
if (__nonMSBrowser)
{
return new XMLHttpRequest();
}
else
return new ActiveXObject ("Microsoft.XMLHTTP");
}
function getElementById (id)
{
id = id.split(':').join('_');
id = id.split("$").join("_");
var element = document.getElementById (id);
if (!element)
{
element = theForm.elements[id];
}
if (!element)
{
var n = new String ();
var re = /__/g;
id = id.replace(re,':_');
element = document.getElementById(id);
if (!element)
{
element = document.getElementsByName(id)[0];
}
if (!element)
{
    element = eval('document.body.' + id);
    if(element)
        alert(element);
}
if (!element)
{
    element = eval('document.' + id);
    if(element)
        alert(element);
}
}
return element;
}

function EnableTimerCallback (id, interval, fnCallback)
{
var el = getElementById (id);
if(!el)
return ;
el.timerCallback = setInterval(fnCallback, interval);
}
function DisableTimerCallback (id)
{
var el = getElementById (id);
if (!el)
return ;
clearInterval(el.timerCallback);
}

function StringReader(currentStr)
{
var str = currentStr;
var idx = 0;
this.str = currentStr;
this.ReadNext = function (paramString)
{
var newIdx = this.str.indexOf(paramString);

var ret = this.str.substring(0, newIdx);
this.idx = newIdx + paramString.length;
this.str = this.str.substring(this.idx);
return ret;
}
this.ReadToEnd = function ()
{
var x = this.str;
this.str = "";
return x;
}
}
function ServiceCall(functionName, arguments)
{
    this.args = arguments;
    this.fnName = functionName;
    this.Call = function(async, evntHandler)
    {
        var __context = new Object();
        
        __context.clientCallback = evntHandler;
        var xmlRequest = createXmlObject ();
    var reqObject = new RequestObject (xmlRequest, __context);
    var fnPtr = function ()
    {
    
var x = reqObject;
__callBackComplete(x);

};
    if (__nonMSBrowser)
    {
    xmlRequest.onload = fnPtr;
    }
    else
    {
    xmlRequest.onreadystatechange = fnPtr;
    }
    re = new RegExp("\\x2B", "g");

    registerHiddenField ("__EVENTTARGET", "");
    registerHiddenField ("__EVENTARGUMENT", escape(this.args).replace(re, "%2B"));
    registerHiddenField (__callbackId, "");
    registerHiddenField (__callbackparam, escape(this.args).replace(re, "%2B"));
    registerHiddenField (__serviceCall, escape(this.fnName).replace(re, "%2B"));
    __InitCallback (this);
    xmlRequest.open("POST",  document.forms[0].action, async);
        xmlRequest.setRequestHeader("CONTENT-TYPE", "application/x-www-form-urlencoded");
    xmlRequest.send(this.__theFormPostData);
    registerHiddenField (__serviceCall, '');
    }   
}