// JavaScript Document

var net = new Object();
net.READY_STATE_UNINITIALIZED = 0;
net.READY_STATE_LOADING = 1;
net.READY_STATE_LOADED = 2;
net.READY_STATE_INTERACTIVE = 3;
net.READY_STATE_COMPLETE = 4;

net.XMLHTTPRequestWrapper = function(onload, onerror) {
  this.req = null;
  this.onload = (onload) ? onload : this.defaultLoad;
  this.onerror = (onerror) ? onerror : this.defaultError;
}

net.XMLHTTPRequestWrapper.prototype.loadData = function(url, method, params, contentType) {
  if (!method) {
    method="GET";
  }
  if (!contentType && method == "POST") {
    contentType = 'application/x-www-form-urlencoded';
  }
  if (window.XMLHttpRequest) {
    this.req = new XMLHttpRequest();
  } else if (window.ActiveXObject) {
    this.req = new ActiveXObject("Microsoft.XMLHTTP");
  }
  if (this.req) {
    try {
      var loader = this;
      this.req.onreadystatechange = function() {
        net.XMLHTTPRequestWrapper.onReadyState.call(loader);
      }
      this.req.open(method, url, true);
      if (contentType) {
        this.req.setRequestHeader('Content-Type', contentType);
      }
      this.req.send(params);
    }
    catch (err) {
      this.onerror.call(this);
    }
  }
}

net.XMLHTTPRequestWrapper.onReadyState = function() {
  var req = this.req;
  if (req.readyState == net.READY_STATE_COMPLETE) {
    if (req.status == 200 || req.status == 0) {
       this.onload.call(this);
    }
    else {
      this.onerror.call(this);
    }
  }
}

net.XMLHTTPRequestWrapper.prototype.defaultError = function() {
	
	if (window.confirm('Errore di comunicazione con il server! \n E\' consigliabile riavviare il browser. Confermi? \n(Se il problema persiste, contattare l\' amministratore di sistema) ')){
			document.location.href='index.php';
	}
}

net.XMLHTTPRequestWrapper.prototype.defaultLoad = function() {
	/*	
	  alert("Servers Procedure Correctly Executed!"
		+"\n\nresponseText:" + this.req.responseText
		+"\nresponseXML: " + this.req.responseXML); 
	  */
}

function receivedData() {

	alert('receivedData');
	//tracking_callback(this.req.responseText);
		
}



function AyaxRequest(url, method, params, callbackfunction) {
  new net.XMLHTTPRequestWrapper(callbackfunction).loadData(url, method, params);
}


function php_serialize(obj){
	
	// SERIALIZZA UN OGGETTO PER LA SPEDIZIONE VIA GET O POST O PER IL SALVATAGGIO COME STRINGA.
	
    var string = '';

    if (typeof(obj) == 'object') {
        if (obj instanceof Array) {
            string = 'a:';
            tmpstring = '';
            count = 0;
            for (var key in obj) {
                tmpstring += php_serialize(key);
                tmpstring += php_serialize(obj[key]);
                count++;
            }
            string += count + ':{';
            string += tmpstring;
            string += '}';
        } else if (obj instanceof Object) {
            classname = obj.toString();

            if (classname == '[object Object]') {
                classname = 'StdClass';
            }

            string = 'O:' + classname.length + ':"' + classname + '":';
            tmpstring = '';
            count = 0;
            for (var key in obj) {
                tmpstring += php_serialize(key);
                if (obj[key]) {
                    tmpstring += php_serialize(obj[key]);
                } else {
                    tmpstring += php_serialize('');
                }
                count++;
            }
            string += count + ':{' + tmpstring + '}';
        }
    } else {
        switch (typeof(obj)) {
            case 'number':
                if (obj - Math.floor(obj) != 0) {
                    string += 'd:' + obj + ';';
                } else {
                    string += 'i:' + obj + ';';
                }
                break;
            case 'string':
                string += 's:' + obj.length + ':"' + obj + '";';
                break;
            case 'boolean':
                if (obj) {
                    string += 'b:1;';
                } else {
                    string += 'b:0;';
                }
                break;
        }
    }

    return string;
}


function PHP_Unserialize(input)
{
	var result = PHP_Unserialize_(input);
	return result[0];
}


function PHP_Unserialize_(input)
{
	var length = 0;
	
	switch (input.charAt(0)) {
		/**
		* Array
		*/
		case 'a':
			length = PHP_Unserialize_GetLength(input);
			input  = input.substr(String(length).length + 4);

			var arr   = new Array();
			var key   = null;
			var value = null;

			for (var i=0; i<length; ++i) {
				key   = PHP_Unserialize_(input);
				input = key[1];

				value = PHP_Unserialize_(input);
				input = value[1];

				arr[key[0]] = value[0];
			}

			input = input.substr(1);
			return [arr, input];
			break;
		
		/**
		* Objects
		*/
		case 'O':
			length = PHP_Unserialize_GetLength(input);
			var classname = String(input.substr(String(length).length + 4, length));
			
			input  = input.substr(String(length).length + 6 + length);
			var numProperties = Number(input.substring(0, input.indexOf(':')))
			input = input.substr(String(numProperties).length + 2);

			var obj      = new Object();
			var property = null;
			var value    = null;

			for (var i=0; i<numProperties; ++i) {
				key   = PHP_Unserialize_(input);
				input = key[1];
				
				// Handle private/protected
				key[0] = key[0].replace(new RegExp('^\x00' + classname + '\x00'), '');
				key[0] = key[0].replace(new RegExp('^\x00\\*\x00'), '');

				value = PHP_Unserialize_(input);
				input = value[1];

				obj[key[0]] = value[0];
			}

			input = input.substr(1);
			return [obj, input];
			break;

		/**
		* Strings
		*/
		case 's':
			length = PHP_Unserialize_GetLength(input);
			return [String(input.substr(String(length).length + 4, length)), input.substr(String(length).length + 6 + length)];
			break;

		/**
		* Integers and doubles
		*/
		case 'i':
		case 'd':
			var num = Number(input.substring(2, input.indexOf(';')));
			return [num, input.substr(String(num).length + 3)];
			break;
		
		/**
		* Booleans
		*/
		case 'b':
			var bool = (input.substr(2, 1) == 1);
			return [bool, input.substr(4)];
			break;
		
		/**
		* Null
		*/
		case 'N':
			return [null, input.substr(2)];
			break;

		/**
		* Unsupported
		*/
		case 'o':
		case 'r':
		case 'C':
		case 'R':
		case 'U':
			alert('Error: Unsupported PHP data type found!');

		/**
		* Error
		*/
		default:
			return [null, null];
			break;
	}
}


function PHP_Unserialize_GetLength(input)
{
input = input.substring(2);
var length = Number(input.substr(0, input.indexOf(':')));
return length;
}


