/*********************************************************/
/*				RDA Ajax JS Library						 /*
/*				Last Update: 29/02/08					 /*
/*				Copyright 2008 RDA Comunicações			 /*
/*********************************************************/
function $() {
  var elements = new Array();
  for (var i=0;i<arguments.length;i++) {
    var element=arguments[i];
    if (typeof element == 'string') element=document.getElementById(element);
    if (arguments.length == 1) return element;
    elements.push(element);
  }
  return elements;
}
Object.extend = function(destination, source) {
  for (property in source) {
    destination[property] = source[property];
  }
  return destination;
}
var objAjax = {
	getTransport: function () {
		var requestElements = ["MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","MICROSOFT.XMLHTTP.1.0","MICROSOFT.XMLHTTP.1","MICROSOFT.XMLHTTP"];
		var requestElement;
		if(typeof XMLHttpRequest == 'undefined' && typeof ActiveXObject != 'undefined') {
			for (var a=0;a<requestElements.length;a++) {
				var b=requestElements[a];
				try {
					new ActiveXObject(b);
					requestElement=b;
					break;
				} catch(c){}
			}
			if (typeof requestElement == 'undefined') {
				throw "Could not create ActiveXObject. ActiveX might be disabled, or msxml might not be installed";
			}
		}
		if(typeof requestElement != 'undefined') return new ActiveXObject(requestElement); else return new XMLHttpRequest;
	},
	Get: function (page,vars,target,method,callback) {
		var req=objAjax.getTransport();
		var rnd=parseInt(Math.random()*99999999);
		if(req) {
			var isGet = new RegExp(/undefined|get/i).test(method);
			var isPost = new RegExp(/post/i).test(method);
			req.open(isPost?"POST":"GET",page+(isGet ? '?'+vars+'&rand='+rnd : ''),true);
			if(isPost) req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
			req.onreadystatechange = function () { objAjax.loadContent(target,req); }
			req.send(isGet?null:vars);
			return req;
		} else {alert('Erro!\n Este navegador não suporta as funcionalidades desta página. Atualize-o.'); return false;}		
	},
	loadContent: function (target,request) {
		var loader = $('ajax_loader');
		if(loader == null) {
			loader = document.createElement('DIV');loader.innerHTML="Carregando...";loader.id='ajax_loader';
			with (loader.style) {
				display='none';		position='absolute';	right='0';					top='0';
				zIndex='1000';		color='#FFFFFF';		fontSize='8pt';				height='15px';
				width='100px';		textAlign='center';		backgroundColor='#DD0000';	padding='4px';
				fontFamily='Tahoma,Verdana,Arial,sans-serif';
			}
			document.body.appendChild(loader);
		}
		if(request.readyState<4 && request.readyState>0) {
			loader.style.display='block';
		}
		if(request.readyState==4) {
			var content = request.responseText;
			if(target) {
				target = $(target);
				if(target.tagName && new RegExp(/input|textarea/i).test(target.tagName)){target.value = content; }
				else{target.innerHTML=content;}
			}
			objAjax.JSRun(content);
			loader.style.display='none';
		}
		if(typeof callback == 'function') { callback(); }
	},
	JSRun: function (text){
		var start = 0;
		var end = 0;
		var code = "";
		var script = document.createElement('script');
		while (start!=-1){
			start = text.indexOf('<scr'+'ipt', start);
			if (start >=0){
				start  = text.indexOf('>', start)+1;
				end = text.indexOf('</scr'+'ipt>', start);
				code = text.substring(start,end);
				script.type		= 'text/javascript';
				script.language	= 'javascript';
				script.text = code;
				document.body.appendChild(script);
			}
		}
	}
}
var Ajax = function (){var o=new Object(); Object.extend(o,objAjax);return o;}

var Form = {
  serialize: function(form) {
    var elements = Form.getElements($(form));
    var queryComponents = new Array();

    for (var i = 0; i < elements.length; i++) {
      var queryComponent = Form.Element.serialize(elements[i]);
      if (queryComponent)
        queryComponents.push(queryComponent);
    }
    return queryComponents.join('&');
  },

  getElements: function(form) {
    form = $(form);
    var elements = new Array();

    for (tagName in Form.Element.Serializers) {
      var tagElements = form.getElementsByTagName(tagName);
      for (var j = 0; j < tagElements.length; j++)
        elements.push(tagElements[j]);
    }
    return elements;
 	},

  getInputs: function(form, typeName, name) {
    form = $(form);
    var inputs = form.getElementsByTagName('input');

    if (!typeName && !name)
      return inputs;

    var matchingInputs = new Array();
    for (var i = 0; i < inputs.length; i++) {
      var input = inputs[i];
      if ((typeName && input.type != typeName) ||
          (name && input.name != name))
        continue;
      matchingInputs.push(input);
    }

    return matchingInputs;
  },

  disable: function(form) {
    var elements = Form.getElements(form);
    for (var i = 0; i < elements.length; i++) {
      var element = elements[i];
      element.blur();
      element.disabled = 'true';
    }
  },

  enable: function(form) {
    var elements = Form.getElements(form);
    for (var i = 0; i < elements.length; i++) {
      var element = elements[i];
      element.disabled = '';
    }
  },

  findFirstElement: function(form) {
    return Form.getElements(form).find(function(element) {
      return element.type != 'hidden' && !element.disabled &&
        ['input', 'select', 'textarea'].include(element.tagName.toLowerCase());
    });
  },

  focusFirstElement: function(form) {
    Field.activate(Form.findFirstElement(form));
  },

  reset: function(form) {
    $(form).reset();
  }
}

Form.Element = {
  serialize: function(element) {
    element = $(element);
    var method = element.tagName.toLowerCase();
    var parameter = Form.Element.Serializers[method](element);

    if (parameter) {
      var key = encodeURIComponent(parameter[0]);
      if (key.length == 0) return;
      if (parameter[1].constructor != Array) parameter[1] = [parameter[1]];
      return parameter[1].map(function(value) {
        return key + '=' + encodeURIComponent(value);
      }).join('|');
    }
  },

  getValue: function(element) {
    element = $(element);
    var method = element.tagName.toLowerCase();
    var parameter = Form.Element.Serializers[method](element);

    if (parameter)
      return parameter[1];
  }
}

Form.Element.Serializers = {
  input: function(element) {
    switch (element.type.toLowerCase()) {
      case 'submit':
      case 'hidden':
      case 'password':
      case 'text':
        return Form.Element.Serializers.textarea(element);
      case 'checkbox':
      case 'radio':
        return Form.Element.Serializers.inputSelector(element);
    }
    return false;
  },

  inputSelector: function(element) {
    if (element.checked)
      return [element.name, element.value];
  },

  textarea: function(element) {
    return [element.name, element.value];
  },

  select: function(element) {
    return Form.Element.Serializers[element.type == 'select-one' ?
      'selectOne' : 'selectMany'](element);
  },

  selectOne: function(element) {
    var value = '', opt, index = element.selectedIndex;
    if (index >= 0) {
      opt = element.options[index];
      value = opt.value;
      if (!value && !('value' in opt))
        value = opt.text;
    }
    return [element.name, value];
  },

  selectMany: function(element) {
    var value = new Array();
    for (var i = 0; i < element.length; i++) {
      var opt = element.options[i];
      if (opt.selected) {
        var optValue = opt.value;
        if (!optValue && !('value' in opt))
          optValue = opt.text;
        value.push(optValue);
      }
    }
    return [element.name, value];
  }
}
function sendForm(element,target) {
	var form = $(element);
	if(!form.method && form.method == 'undefined') form.method = 'post';
	if(!target && typeof target == 'undefined') target = form.target;
	AjaxGet(form.action,Form.serialize(element),target,form.method);
	return false;
}

function AjaxGet(page,vars,target,method) {
	return Ajax().Get(page,vars,target,method);
}

function marcar(table,id,value,field) {
	AjaxGet('marcar.php','table='+table+'&field='+field+'&id='+id+'&value='+(value?'Y':'N'),'messagebox','GET');
}
function publicar(table,id,isPublic) {
	marcar(table,id,isPublic,'public');
}

/*********************************************************/
/*					 FIM DO TRECHO AJAX					 */
/*********************************************************/
var pageGetter = {
	current:'',
	verify: function() {
		var url = document.location.href.toString();
		if(new RegExp(/#/g).test(url)) {
			var params = url.split('#');
			if (params[1] == '' || params[1] == 'undefined') return;
			if (params[1] != pageGetter.current) {
				AjaxGet((params[1].charAt(0)!='/'?'/':'')+params[1],'',activeItem,'GET');
				pageGetter.current = params[1];
				return true;
			}
		}
	}
}
