
function AjaxRequest() {
  var req = new Object();
   req.timeout = null;
  req.generateUniqueUrl = true;
  req.url = window.location.href;
  req.method = "GET";
  req.async = true;
  req.username = null;
  req.password = null;
  req.parameters = new Object();
  req.requestIndex = AjaxRequest.numAjaxRequests++;
  req.responseReceived = false;
  req.groupName = null;
  req.queryString = "";
  req.responseText = null;
  req.responseXML = null;
  req.status = null;
  req.statusText = null;
  req.aborted = false;
  req.xmlHttpRequest = null;
  req.onTimeout = null; 
  req.onLoading = null;
  req.onLoaded = null;
  req.onInteractive = null;
  req.onComplete = null;
  req.onSuccess = null;
  req.onError = null;
  req.onGroupBegin = null;
  req.onGroupEnd = null;
  req.xmlHttpRequest = AjaxRequest.getXmlHttpRequest();
  if (req.xmlHttpRequest==null) { return null; }

  req.xmlHttpRequest.onreadystatechange = 
  function() {
    if (req==null || req.xmlHttpRequest==null) { return; }
    if (req.xmlHttpRequest.readyState==1) { req.onLoadingInternal(req); }
    if (req.xmlHttpRequest.readyState==2) { req.onLoadedInternal(req); }
    if (req.xmlHttpRequest.readyState==3) { req.onInteractiveInternal(req); }
    if (req.xmlHttpRequest.readyState==4) { req.onCompleteInternal(req); }
  };

  req.onLoadingInternalHandled = false;
  req.onLoadedInternalHandled = false;
  req.onInteractiveInternalHandled = false;
  req.onCompleteInternalHandled = false;
  req.onLoadingInternal = 
    function() {
      if (req.onLoadingInternalHandled) { return; }
      AjaxRequest.numActiveAjaxRequests++;
      if (AjaxRequest.numActiveAjaxRequests==1 && typeof(window['AjaxRequestBegin'])=="function") {
        AjaxRequestBegin();
      }
      if (req.groupName!=null) {
        if (typeof(AjaxRequest.numActiveAjaxGroupRequests[req.groupName])=="undefined") {
          AjaxRequest.numActiveAjaxGroupRequests[req.groupName] = 0;
        }
        AjaxRequest.numActiveAjaxGroupRequests[req.groupName]++;
        if (AjaxRequest.numActiveAjaxGroupRequests[req.groupName]==1 && typeof(req.onGroupBegin)=="function") {
          req.onGroupBegin(req.groupName);
        }
      }
      if (typeof(req.onLoading)=="function") {
        req.onLoading(req);
      }
      req.onLoadingInternalHandled = true;
    };
  req.onLoadedInternal = 
    function() {
      if (req.onLoadedInternalHandled) { return; }
      if (typeof(req.onLoaded)=="function") {
        req.onLoaded(req);
      }
      req.onLoadedInternalHandled = true;
    };
  req.onInteractiveInternal = 
    function() {
      if (req.onInteractiveInternalHandled) { return; }
      if (typeof(req.onInteractive)=="function") {
        req.onInteractive(req);
      }
      req.onInteractiveInternalHandled = true;
    };
  req.onCompleteInternal = 
    function() {
      if (req.onCompleteInternalHandled || req.aborted) { return; }
      req.onCompleteInternalHandled = true;
      AjaxRequest.numActiveAjaxRequests--;
      if (AjaxRequest.numActiveAjaxRequests==0 && typeof(window['AjaxRequestEnd'])=="function") {
        AjaxRequestEnd(req.groupName);
      }
      if (req.groupName!=null) {
        AjaxRequest.numActiveAjaxGroupRequests[req.groupName]--;
        if (AjaxRequest.numActiveAjaxGroupRequests[req.groupName]==0 && typeof(req.onGroupEnd)=="function") {
          req.onGroupEnd(req.groupName);
        }
      }
      req.responseReceived = true;
      req.status = req.xmlHttpRequest.status;
      req.statusText = req.xmlHttpRequest.statusText;
      req.responseText = req.xmlHttpRequest.responseText;
      req.responseXML = req.xmlHttpRequest.responseXML;
      if (typeof(req.onComplete)=="function") {
        req.onComplete(req);
      }
      if (req.xmlHttpRequest.status==200 && typeof(req.onSuccess)=="function") {
        req.onSuccess(req);
      }
      else if (typeof(req.onError)=="function") {

        req.onError(req);
      }

      // Clean up so IE doesn't leak memory
      delete req.xmlHttpRequest['onreadystatechange'];
      req.xmlHttpRequest = null;
    };
  req.onTimeoutInternal = 
    function() {
      if (req!=null && req.xmlHttpRequest!=null && !req.onCompleteInternalHandled) {
        req.aborted = true;
        req.xmlHttpRequest.abort();
        AjaxRequest.numActiveAjaxRequests--;
        if (AjaxRequest.numActiveAjaxRequests==0 && typeof(window['AjaxRequestEnd'])=="function") {
          AjaxRequestEnd(req.groupName);
        }
        if (req.groupName!=null) {
          AjaxRequest.numActiveAjaxGroupRequests[req.groupName]--;
          if (AjaxRequest.numActiveAjaxGroupRequests[req.groupName]==0 && typeof(req.onGroupEnd)=="function") {
            req.onGroupEnd(req.groupName);
          }
        }
        if (typeof(req.onTimeout)=="function") {
          req.onTimeout(req);
        }

      delete req.xmlHttpRequest['onreadystatechange'];
      req.xmlHttpRequest = null;
      }
    };


  req.process = 
    function() {
      if (req.xmlHttpRequest!=null) {
        // Some logic to get the real request URL
        if (req.generateUniqueUrl && req.method=="GET") {
          req.parameters["AjaxRequestUniqueId"] = new Date().getTime() + "" + req.requestIndex;
        }
        var content = null; // For POST requests, to hold query string
        for (var i in req.parameters) {
          if (req.queryString.length>0) { req.queryString += "&"; }
          req.queryString += encodeURIComponent(i) + "=" + encodeURIComponent(req.parameters[i]);
        }
        if (req.method=="GET") {
          if (req.queryString.length>0) {
            req.url += ((req.url.indexOf("?")>-1)?"&":"?") + req.queryString;
          }
        }
        req.xmlHttpRequest.open(req.method,req.url,req.async,req.username,req.password);
        if (req.method=="POST") {
          if (typeof(req.xmlHttpRequest.setRequestHeader)!="undefined") {
            req.xmlHttpRequest.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
          }
          content = req.queryString;
        }
        if (req.timeout>0) {
          setTimeout(req.onTimeoutInternal,req.timeout);
        }
        req.xmlHttpRequest.send(content);
      }
    };

  /**
   * An internal function to handle an Object argument, which may contain
   * either AjaxRequest field values or parameter name/values
   */
  req.handleArguments = 
    function(args) {
      for (var i in args) {
        // If the AjaxRequest object doesn't have a property which was passed, treat it as a url parameter
        if (typeof(req[i])=="undefined") {
          req.parameters[i] = args[i];
        }
        else {
          req[i] = args[i];
        }
      }
    };

  /**
   * Returns the results of XMLHttpRequest.getAllResponseHeaders().
   * Only available after a response has been returned
   */
  req.getAllResponseHeaders =
    function() {
      if (req.xmlHttpRequest!=null) {
        if (req.responseReceived) {
          return req.xmlHttpRequest.getAllResponseHeaders();
        }
        alert("Cannot getAllResponseHeaders because a response has not yet been received");
      }
    };

  /**
   * Returns the the value of a response header as returned by 
   * XMLHttpRequest,getResponseHeader().
   * Only available after a response has been returned
   */
  req.getResponseHeader =
    function(headerName) {
      if (req.xmlHttpRequest!=null) {
        if (req.responseReceived) {
          return req.xmlHttpRequest.getResponseHeader(headerName);
        }
        alert("Cannot getResponseHeader because a response has not yet been received");
      }
    };

  return req;
}

// ---------------------------------------
// Static methods of the AjaxRequest class
// ---------------------------------------

/**
 * Returns an XMLHttpRequest object, either as a core object or an ActiveX 
 * implementation. If an object cannot be instantiated, it will return null;
 */
AjaxRequest.getXmlHttpRequest = function() {
  if (window.XMLHttpRequest) {
    return new XMLHttpRequest();
  }
  else if (window.ActiveXObject) {
    // Based on http://jibbering.com/2002/4/httprequest.html
    /*@cc_on @*/
    /*@if (@_jscript_version >= 5)
    try {
      return new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        return new ActiveXObject("Microsoft.XMLHTTP");
      } catch (E) {
        return null;
      }
    }
    @end @*/
  }
  else {
    return null;
  }
};

/**
 * See if any request is active in the background
 */
AjaxRequest.isActive = function() {
  return (AjaxRequest.numActiveAjaxRequests>0);
};

/**
 * Make a GET request. Pass an object containing parameters and arguments as 
 * the second argument.
 * These areguments may be either AjaxRequest properties to set on the request 
 * object or name/values to set in the request querystring.
 */
AjaxRequest.get = function(args) {
  AjaxRequest.doRequest("GET",args);
};

/**
 * Make a POST request. Pass an object containing parameters and arguments as 
 * the second argument.
 * These areguments may be either AjaxRequest properties to set on the request 
 * object or name/values to set in the request querystring.
 */
AjaxRequest.post = function(args) {
  AjaxRequest.doRequest("POST",args);
};

/**
 * The internal method used by the .get() and .post() methods
 */
AjaxRequest.doRequest = function(method,args) {
  if (typeof(args)!="undefined" && args!=null) {
    var myRequest = new AjaxRequest();
    myRequest.method = method;
    myRequest.handleArguments(args);
    myRequest.process();
  }
}  ;

/**
 * Submit a form. The requested URL will be the form's ACTION, and the request 
 * method will be the form's METHOD.
 * Returns true if the submittal was handled successfully, else false so it 
 * can easily be used with an onSubmit event for a form, and fallback to 
 * submitting the form normally.
 */
AjaxRequest.submit = function(theform, args) {
  var myRequest = new AjaxRequest();
  if (myRequest==null) { return false; }
  var serializedForm = AjaxRequest.serializeForm(theform);
  myRequest.method = theform.method.toUpperCase();
  myRequest.url = theform.action;
  myRequest.handleArguments(args);
  myRequest.queryString = serializedForm;
  myRequest.process();
  return true;
};

/**
 * Serialize a form into a format which can be sent as a GET string or a POST 
 * content.It correctly ignores disabled fields, maintains order of the fields 
 * as in the elements[] array. The 'file' input type is not supported, as 
 * its content is not available to javascript. This method is used internally
 * by the submit class method.
 */
AjaxRequest.serializeForm = function(theform) {
  var els = theform.elements;
  var len = els.length;
  var queryString = "";
  this.addField = 
    function(name,value) { 
      if (queryString.length>0) { 
        queryString += "&";
      }
      queryString += encodeURIComponent(name) + "=" + encodeURIComponent(value);
    };
  for (var i=0; i<len; i++) {
    var el = els[i];
    if (!el.disabled) {
      switch(el.type) {
        case 'text': case 'password': case 'hidden': case 'textarea': 
          this.addField(el.name,el.value);
          break;
        case 'select-one':
          if (el.selectedIndex>=0) {
            this.addField(el.name,el.options[el.selectedIndex].value);
          }
          break;
        case 'select-multiple':
          for (var j=0; j<el.options.length; j++) {
            if (el.options[j].selected) {
              this.addField(el.name,el.options[j].value);
            }
          }
          break;
        case 'checkbox': case 'radio':
          if (el.checked) {
            this.addField(el.name,el.value);
          }
          break;
      }
    }
  }
  return queryString;
};

// -----------------------
// Static Class variables
// -----------------------

/**
 * The number of total AjaxRequest objects currently active and running
 */
AjaxRequest.numActiveAjaxRequests = 0;

/**
 * An object holding the number of active requests for each group
 */
AjaxRequest.numActiveAjaxGroupRequests = new Object();

/**
 * The total number of AjaxRequest objects instantiated
 */
AjaxRequest.numAjaxRequests = 0;

function LoadCenteredElement(url,id){

AjaxRequest.get(
  {
    'url':url
    ,'onLoading':function(req) { 
	 		var iebody=(document.compatMode && document.compatMode != "BackCompat")? document.documentElement : document.body

			var dsocleft=document.all? (document.body.clientWidth/2 - self.offsetWidth) : (window.innerWidth/2 - self.innerWidth)
			var dsoctop=document.all? iebody.scrollTop+100 : pageYOffset+100;
			
				document.getElementById('DLOAD').style.top = dsoctop + 'px';	 
	 			document.getElementById('DLOAD').style.visibility='visible';  }
    ,'onSuccess':function(req) { 
	 		
			var iebody=(document.compatMode && document.compatMode != "BackCompat")? document.documentElement : document.body

			var dsocleft=document.all? (document.body.clientWidth/2 - self.offsetWidth) : (window.innerWidth/2 - self.innerWidth)
			var dsoctop=document.all? iebody.scrollTop+200 : pageYOffset+200;			

			document.getElementById(id).style.top = dsoctop + 'px';
				
			
			
			document.getElementById(id).innerHTML = req.responseText; document.getElementById('DLOAD').style.visibility='hidden';
		}
	 ,'onError':function() { document.getElementById(id).innerHTML = "<div style='padding: 2px; border: 2px solid #CFCFCF; background-color: #CC0000; color: #FFFFFF; font-weight: bold;'>Error loading element.<br />Please refresh...</div>"; }
  }
);
}

function MakeInvisible(id){
document.getElementById(id).style.visibility = 'hidden';
}

function MakeVisible(id){
document.getElementById(id).style.visibility = 'visible';
}
function ToggleVisibility(id){
	vis = document.getElementById(id).style.visibility;
	if(vis == "hidden"){
		vis = 'visible';
	}else{
		vis = 'hidden';
	}
	document.getElementById(id).style.visibility = vis;
}


function LoadElement(url,id){
last = document.getElementById(id).innerHTML;
if(url=="inc/ajax/null.php"){
	document.getElementById(id).innerHTML = "";
}else{
	AjaxRequest.get(
	  {
		 'url':url
		 ,'groupName':'elementloading'
		 ,'onLoading':function(req) {   }
		 ,'onSuccess':function(req) { document.getElementById(id).innerHTML = req.responseText;  document.getElementById('DERROR').style.visibility='hidden'; document.getElementById('DLOAD').style.visibility='hidden';}
		 ,'onError':function() {  document.getElementById('DLOAD').style.visibility='hidden';  document.getElementById('DERROR').style.visibility='visible'}
		,'onGroupBegin': function(){document.getElementById('DLOAD').style.visibility='visible';}
		,'onGroupEnd': function(){document.getElementById('DLOAD').style.visibility='visible';}
	  }
	);
}
}

function LoadElementDelayed(url,id,delay){
	setTimeout("LoadElementSilent('"+url+"','"+id+"')",delay);
}

function LoadElementSilent(url,id){
last = document.getElementById(id).innerHTML;
AjaxRequest.get(
  {
    'url':url
    
    ,'onSuccess':function(req) { document.getElementById(id).innerHTML = req.responseText;}
	 ,'onError':function() { document.getElementById(id).innerHTML = "<div style='padding: 2px; border: 2px solid black; background-color: #CC0000; color: #FFFFF; font-weight: bold;'>Error loading element. Please refresh...</div>" }
  }
);
}

function LoadElementGroup(url,id,group){
last = document.getElementById(id).innerHTML;
AjaxRequest.get(
  {
    'url':url
    ,'onLoading':function(req) { document.getElementById(id).innerHTML = "PLEASE WAIT";  }
    ,'onSuccess':function(req) { document.getElementById(id).innerHTML = req.responseText; }
	 ,'onError':function() { document.getElementById(id).innerHTML = "<div style='padding: 2px; border: 2px solid black; background-color: #CC0000; color: #FFFFF; font-weight: bold;'>Error loading element. Please refresh...</div>"; }
  }
);
}

function submitForm(theform,id) {
  var status = AjaxRequest.submit(
    theform
    ,{
      'onLoading':function(req) { document.getElementById('DLOAD').style.visibility='visible';  }
		,'onSuccess':function(req){ document.getElementById(id).innerHTML = req.responseText; document.getElementById('DLOAD').style.visibility='hidden'; }
    }
  );
  return status;
}
 
 
	function kvon(id){
		switch(id){
			case 1: document.images.kvote.src="imagini/rating/lvl1.gif"; break;
			case 2: document.images.kvote.src="imagini/rating/lvl2.gif"; break;
			case 3: document.images.kvote.src="imagini/rating/lvl3.gif"; break;
			case 4: document.images.kvote.src="imagini/rating/lvl4.gif"; break;
			case 5: document.images.kvote.src="imagini/rating/lvl5.gif"; break;
		}
		
	}
	function kvoff(){
		document.images.kvote.src="imagini/rating/lvl0.gif";
	}

function popUp(URL) {
day = new Date();
id = "popup";
eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width=750,height=500,left = 0,top = 0');");
}

function ResizablePopUp(URL,w,h) {
day = new Date();
id = "small";
eval("page" + id + " = window.open(URL, '" + id + "', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=1,width="+w+",height="+h+",left = 0,top = 0');");
}
/*
function js_remove_artifacts(string){
s = new String(string);
s = s.replace(/[-]/g, "");
s = s.replace(/[_]/g, "")
s = s.replace(/[\/]/g, "")
s = s.replace(/[\\]/g, "")
s = s.replace(/[^]/g, "")
s = s.replace(/[+]/g, "")
s = s.replace(/[,]/g, "")

s = s.toLowerCase();
return s;
}
*/



