var cameras;
function cameraAjaxRequest() {
	if(window.XMLHttpRequest) {
		try {
			request = new XMLHttpRequest();
		}
		catch(e) {
			request = false;
		}
	}
	else if(window.ActiveXObject) {
		try {
			request = new ActiveXObject('Msxml2.XMLHTTP');
		}
		catch(e) {
			try {
				request = new ActiveXObject('Microsoft.XMLHTTP');
			}
			catch(e) {
				request = false;
			}
		}
	}
	if(request) {		
		request.open('GET','/json/cameras.json',true);
		request.onreadystatechange = function() {
			if (request.readyState == 4) {				
				eval('cameras = '+request.responseText);
				for(var cameraWindow in cameras.cameraWindows) {
					cameraSelectorPopulate(cameraWindow,cameraWindow+'Selector');
				}
				cameraStreamInit();
			}
		}
		request.send(null);
	}
}
function cameraSelectorPopulate(cameraWindow,cameraSelector) {
	var cameraSelector = document.getElementById(cameraSelector);
	cameraSelector.options.length = 0;
	var i = 0;
	for(var camera in cameras.cameras) {
		cameraSelector.options[i] = new Option(cameras.cameras[camera].name,camera);
		if(cameras.cameraWindows[cameraWindow].camera == camera) {
			cameraSelector.options[i].selected = true;
		}
		i++;
	}
}
function cameraSelectorOnChange(cameraWindow,cameraSelector) {
	cameras.cameraWindows[cameraWindow].camera = cameraSelector.value;
}
function cameraStreamFetch(cameraWindow) {
	var date = new Date();
	var nowTime = date.getTime();
	if(nowTime > cameras.expireTime) {
		if(!cameras.cameraWindows[cameraWindow].expired) {
			cameras.cameraWindows[cameraWindow].image.src = cameras.timeoutSource;
			cameras.cameraWindows[cameraWindow].expired = true;
		}
	}
	else {
		cameras.cameraWindows[cameraWindow].image.src = cameras.cameras[cameras.cameraWindows[cameraWindow].camera].source+'?'+cameraWindow+cameras.cameras[cameras.cameraWindows[cameraWindow].camera].counter;
		cameras.cameras[cameras.cameraWindows[cameraWindow].camera].counter++;
	}
}
function cameraStreamInit() {
	if(!cameras.initialised) {
		var date = new Date();
		var nowTime = date.getTime();
		cameras.initialised = true;
		cameras.expireTime = nowTime + (cameras.timeout * 1000);
		for(var cameraWindow in cameras.cameraWindows) {
			cameras.cameraWindows[cameraWindow].image = new Image();
			var imageOnload = 'cameras.cameraWindows.'+cameraWindow+'.image.onload = function() { cameraStreamSet(\''+cameraWindow+'\'); }';
			eval(imageOnload);
			cameraStreamRefresh(cameraWindow);
		}
	}
}
function cameraStreamRefresh(cameraWindow) {
	setTimeout('cameraStreamFetch(\''+cameraWindow+'\')',500);
}
function cameraStreamSet(cameraWindow) {
	document.getElementById(cameraWindow).src = cameras.cameraWindows[cameraWindow].image.src;
	if(!cameras.cameraWindows[cameraWindow].expired) {
		cameraStreamRefresh(cameraWindow);
	}
}
