function Connection(webmqUrl, gpshandler) {
    this.messageListeners = new Array()
    this.webmqUrl = webmqUrl
    this.gpshandler = gpshandler
    this.connectionOn = false

    // TODO don't start anything until document has finished loading
    var http = this.createHttpControl()
    //alert('connecton created ' + webmqUrl)
    this.getNextMessageAndLoop(webmqUrl, http, gpshandler)
}

Connection.prototype.start = function() {
	var connection = this
	var http = connection.createHttpControl()
	var webmqUrl = connection.webmqUrl
	var gpshandler = connection.gpshandler
	
	//alert('webmqUrl = ' + webmqUrl)
	connection.connectionOn = true
	connection.getNextMessageAndLoop(webmqUrl, http, gpshandler)
}

Connection.prototype.stop = function() {
	var connection = this
	connection.connectionOn = false
}

Connection.prototype.getNextMessageAndLoop = function(webmqUrl, http, gpshandler) {
    http.open("GET", webmqUrl + "&xml=true" + "&timeout=2000", true)
    var connection = this
    http.onreadystatechange = function() {
        if (http.readyState == 4) {
            var ok
            try {
                ok = http.status && http.status == 200
            } 
            catch (e) {
                ok = false // sometimes accessing the http.status fields causes errors in firefox. dunno why. -joe
            }
            if (ok) {
                connection.processIncomingMessage(http, gpshandler)
            }
            // why do we have to create a new instance?
            // this is not required on firefox but is on mozilla
            //http.abort()
            http = connection.createHttpControl()
            //connection.getNextMessageAndLoop(webmqUrl, http, gpshandler)
            
            //alert('message');
            //setInterval(function(){connection.getNextMessageAndLoop(webmqUrl,http,gpshandler)}, 1000);
            //alert 
            if (connection.connectionOn)
              setTimeout (function(){connection.getNextMessageAndLoop(webmqUrl,http,gpshandler)}, 5000)
        }
    }
    http.send(null)
}

Connection.prototype.sendMessage = function(destination, message, type) {
    // TODO should post via body rather than URL
    // TODO specify destination in message
    var connection = this
    var gpshandler = connection.gpshandler
    var http = connection.createHttpControl()
    //alert('send message = ' + this.webmqUrl + "&destination=" + destination + "&type=" + type + "&message=" + message);
    http.open("POST", this.webmqUrl + "&destination=" + destination + "&type=" + type + "&message=" + message + "&timeout=2000", true)
    http.onreadystatechange = function() {
    if (http.readyState == 4) {
        var ok
        try {
                ok = http.status && http.status == 200
            } 
            catch (e) {
                ok = false // sometimes accessing the http.status fields causes errors in firefox. dunno why. -joe
            }
            if (ok) {
                connection.processIncomingMessage(http, gpshandler)
            }
        }
    }
    http.send(null)
}

Connection.prototype.processIncomingMessage = function(http, gpshandler) {
    var destination = http.getResponseHeader("destination")
    var message = http.responseXML
    if (message == null) {
        message = http.responseText
    }

    var response = message.documentElement;
    var header = response.tagName;
    var numOfChildren = response.childNodes.length;
    
    for (var i = 0; i < numOfChildren; i++)
    {
       if (response.childNodes[i].tagName == "device")
       {
          var deviceIdent = response.childNodes[i].getAttribute("ident");
          var device = gpshandler.getDevice(deviceIdent);
          if (device != null)
          {
            if (response.childNodes[i].childNodes[0].tagName == "tetra")
            {
            	  var tetra = response.childNodes[i].childNodes[0].firstChild.data;
            	  if (tetra == 1)
            	  {
            	     $jq("#devicemanager").devices.setGpsColor(deviceIdent,'TETRA',1);
                }
                else if (tetra == 0)
                {
                   $jq("#devicemanager").devices.setGpsColor(deviceIdent,'TETRA',0);
                }
            }
            else
            {
              var time = response.childNodes[i].childNodes[0].firstChild.data;
              var coordinateX = response.childNodes[i].childNodes[1].firstChild.data;
              var coordinateY = response.childNodes[i].childNodes[2].firstChild.data;
              var isPositionValid = response.childNodes[i].childNodes[3].firstChild.data;
              var address = response.childNodes[i].childNodes[4].firstChild.data;
              var addressDistance = response.childNodes[i].childNodes[5].firstChild.data;
              var speed = response.childNodes[i].childNodes[6].firstChild.data;
              var isTravel = response.childNodes[i].childNodes[7].firstChild.data;
              var digitalSensor = response.childNodes[i].childNodes[8].firstChild.data;
              var digitalSensorText = response.childNodes[i].childNodes[9].firstChild.data;
              
              //alert('inside jms time = ' + time);
              
              //var position = new position_obj(coordinateX,coordinateY,time,address,addressDistance,speed,isPositionValid,isTravel,digitalSensor);
              $jq("#devicemanager").devices.setGpsColor(deviceIdent,'TETRA',1);
              gpshandler.handleGpsPosition(deviceIdent,coordinateX,coordinateY,time,address,addressDistance,speed,isPositionValid,isTravel,digitalSensor,digitalSensorText,false);
              //gpshandler.addGpsPosition(deviceIdent,position);
              //alert('after gpshandler');
            }
          }
       }
       else if (response.childNodes[i].tagName == "message")
       {
       	 var message = response.childNodes[i].firstChild.data;
       	 alert('Opozorilo: ' + message);
       }
    }

}

Connection.prototype.createHttpControl = function() {
    // for details on using XMLHttpRequest see
    // http://webfx.eae.net/dhtml/xmlextras/xmlextras.html
   try {
      if (window.XMLHttpRequest) {
         var req = new XMLHttpRequest()

         // some older versions of Moz did not support the readyState property
         // and the onreadystate event so we patch it!
         if (req.readyState == null) {
            req.readyState = 1
            req.addEventListener("load", function () {
               req.readyState = 4
               if (typeof req.onreadystatechange == "function") {
                  req.onreadystatechange()
               }
            }, false)
         }

         return req
      }
      if (window.ActiveXObject) {

         //return new ActiveXObject(this.getControlPrefix() + ".XmlHttp")
         return new ActiveXObject("Microsoft.XMLHTTP")
      }
   }
   catch (ex) {}
   // fell through
   throw new Error("Your browser does not support XmlHttp objects")
}


//var connection = new Connection("http://192.168.0.138/servletjms/amq?poll=true");
//var connection = new Connection(mapSettings['jmsConnection']);
