Function.prototype.bind = function(obj) {
  var method = this,
   temp = function() {
    return method.apply(obj, arguments);
   };
 
  return temp;
 } 
 if(!Array.indexOf){
  Array.prototype.indexOf = function(obj){
   for(var i=0; i<this.length; i++){
    if(this[i]==obj){
     return i;
    }
   }
   return -1;
  }
}
var dyn_scripts=new Array();

function dynRegion(url, target, script_file){
  function update(parameters) {
	var targetElement=document.getElementById(this.target);
	targetElement.innerHTML='<img class="loading" src="/images/loading.gif" alt="loading...">';
   this.lastParams = parameters;
    this.http_request = false;
  if (window.XMLHttpRequest) { // Mozilla, Safari,...
         this.http_request = new XMLHttpRequest();
         if (this.http_request.overrideMimeType) {
         	// set type accordingly to anticipated content type
            //http_request.overrideMimeType('text/xml');
            this.http_request.overrideMimeType('text/html');
         }
      } else if (window.ActiveXObject) { // IE
         try {
            this.http_request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               this.http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
      }
     if (!this.http_request) {
         alert('Cannot create XMLHTTP instance');
         return false;
     }
      
      this.http_request.onreadystatechange = alertContents.bind(this);
      this.http_request.open('POST', this.url, true);
      this.http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
	  this.http_request.setRequestHeader("Content-length", parameters.length);
	  this.http_request.setRequestHeader("Connection", "close");
      this.http_request.send(parameters);
   }

   function alertContents() {
      if (this.http_request.readyState == 4) {
         if (this.http_request.status == 200) {
            //alert(http_request.responseText);
            result = this.http_request.responseText;
            document.getElementById(this.target).innerHTML = result;
			if(this.script_file!=""){
				if(this.script_file.substr(0,4)!='http'){
					this.script_file=window.location.protocol+'//'+window.location.host+this.script_file;
				}
				var e = document.createElement("script");
   				e.src = this.script_file;
			    e.type="text/javascript";
				head=document.getElementsByTagName("head")[0];
				scripts=head.childNodes;
				for(i=0;i<scripts.length;i++){
					if(scripts[i].src && scripts[i].src==this.script_file){
						head.removeChild(scripts[i]);
					}
				}
   				head.appendChild(e);
			}
			if(this.onloadevent!=""){
			  eval(this.onloadevent);
			}
         } else if(this.http_request.status) {
            alert('There was a problem with the request. Request Status:' + this.http_request.status);
         }
      }
   }
   
   function setOnLoad(onloadevent){
	   this.onloadevent=onloadevent;
   }
   
	function submit_form(form_id, add_params){
		params=this.lastParams;
		checks_empty=new Array();
		checks_found=new Array();
		targetElement = document.getElementById(this.target);
		targetForm = document.getElementById(form_id);
		if(targetForm && targetForm.tagName=='FORM'){
			for (j=0; j<targetForm.elements.length; j++){
				if(targetForm.elements[j].type == 'checkbox' || targetForm.elements[j].type == 'radio'){
					if(targetForm.elements[j].checked){
						params += "&" + targetForm.elements[j].name + "=";
						params += escape(targetForm.elements[j].value);
						if(checks_found.indexOf(targetForm.elements[j].name)<0)
							checks_found.push(targetForm.elements[j].name);
					}else{
						if(checks_empty.indexOf(targetForm.elements[j].name)<0)
							checks_empty.push(targetForm.elements[j].name);
					}
				}else{
					params += "&" + targetForm.elements[j].name;
					params += "=" + escape(targetForm.elements[j].value);
				}
			}
			for(k=0; k<checks_empty.length; k++){
				if(checks_found.indexOf(checks_empty[k])<0)
					params += "&" + checks_empty[k]+'=';
			}		
		}
		if(add_params!==undefined){
			params += add_params;
		}
		this.update(params);
	}
	function clear(){
		var target_object=document.getElementById(this.target);
		target_object.innerHTML='';
	}


	this.lastParams="";
	this.target=target;
	this.url = url;
	this.http_request=false;
    this.update=update;
    this.alertContents = alertContents;
	this.onloadevent="";
	this.setOnLoad=setOnLoad;
	this.clear=clear;
	this.submit_form = submit_form;
	if(script_file===undefined){
		this.script_file="";
	}else{
		this.script_file=script_file;
	}
	
} 
