roomName = ""

function connectToRoom(roomInput) {
	roomName = roomInput
	
	//Create or join the room
	conn = Apideo.connect("0D851CAEDA56DDC8A3")
	room = conn.joinRoom("demo2_" + roomName, "")
	
	stream = null
	sentStream = false
	
	document.getElementById("connect_button").disabled = "disabled"
	//TODO: when a new user connect the room send all input values
	
	room.onLoad(function() {
		//Control the list of user in this room
		
		var count = countNbUserConnected()
		
		if(count > 2) {
			//If there are more than two users connected to the room, remove the last user.
			conn.quitRoom(room)
			alert('Two users are already connected in this room. Please try another room to test Apideo.')
			document.getElementById("connect_button").disabled = ""
		} else {
			
			//Recover the other room's user stream
			room.registerListener(onConnect, "connectToRoom_demo2_" + roomName)
			
			//Recover the input values
			room.registerListener(setInputValues, "inputValues_demo2_" + roomName)
		
			cameraId = room.myId
			
			//Hide the room connection input
			document.getElementById('searchRoom').style.display = 'none'
			document.getElementById('roomInfo').style.display = 'block'
			document.getElementById('form').style.display = 'block'
			document.getElementById('video').style.display = 'block'
			document.getElementById('sharedObject').style.display = 'block'
			
			//Display the room name
			var new_title = document.createElement('h1')
			new_title.id = 'h1_tag'
			new_title.innerHTML = "Room: " + roomName
			document.getElementById('roomConnect').appendChild(new_title)
						
			camera = this.startCamera(
				"myCamera","demo2_" + roomName + "_" + cameraId, 
				{width:300, height:225, camera:{width:300, height:225, fps:10, quality:0, bandwidth:30000, micRate:11}})
			
			//Recover all inputs to set their onchange action
			var inputs = document.getElementById("form").getElementsByTagName("input")
			for (i=0; i<inputs.length; i++) {
				element = inputs[i]
				element.onkeyup = onFieldChange
				if (element.captureEvents) element.captureEvents(Event.CHANGE)
			}
			
			//Recover the shared objects
			room.registerListener(displayReceivedObject, "sharedObject")
			
			//Recover text box values
			room.registerListener(onClientTextBoxChange, "textBoxChange")
		
			camera.onCameraStarted(function() {
				nbUserConnected = countNbUserConnected()
				if(nbUserConnected > 1) {
					if(!sentStream) {
						sentStream = true
						room.sendEvent({streamId: "demo2_" + roomName + "_" + cameraId}, "connectToRoom_demo2_" + roomName, true)
					}
				} else {
					document.getElementById("wait").style.display = "block"
				}
			});
			
			room.onUserQuit(function(userId, userObj) {
				if(stream != null) {
					room.removeStream(stream)
					stream = null
				}
				sentStream = false
				document.getElementById("wait").style.display = "block"
			});
			
			room.onUserJoin(function(userId, userObj) {
				//for each input text send the value
				var inputs = document.getElementById("form").getElementsByTagName("input")
				var myObject = new Object()
				for (i=0; i<inputs.length; i++) {
					element = inputs[i]

					myObject[element.id] = element.value
				}
				room.sendEvent({value: myObject}, "inputValues_demo2_" + roomName, true)
			});
		}
	});
}

Apideo.onError(function(type, message) {
	quitRoom()
	alert(message)
});

function countNbUserConnected() {
	var count = 0
	for (var key in room.userList) {
		count++
	}
	return count
}

function onFieldChange(e) {
	if (!e) var e = window.event
	
	document.getElementsByName(this.name)[0].value = this.value
	
	room.sendEvent({name:this.name,value:this.value}, "textBoxChange", true)
}

function onClientTextBoxChange(msg, senderId, triggeredListener) {
	document.getElementsByName(msg.name)[0].value = msg.value
}

function onConnect(msg, senderId, triggeredListener) {
	document.getElementById("wait").style.display = "none"
	stream = room.playStream("myPlayer", msg.streamId, {width:300, height:225})
	if(!sentStream) {
		sentStream = true
		room.sendEvent({streamId: "demo2_" + roomName + "_" + cameraId}, "connectToRoom_demo2_" + roomName, true)
	}
}

function setInputValues(msg, senderId, triggeredListener) {
	var myArray = msg.value
	for (var key in myArray) {
		document.getElementById(key).value = myArray[key]
	}
}

function quitRoom() {
	room.removeCamera(camera)
	if(stream != null) {
		room.removeStream(stream)
		stream = null
	}
	sentStream = false
	conn.quitRoom(room)
	
	window.location = "/"
}

function pushObject(id,val,type) {
	room.sendEvent({id: id, value: val, type: type, senderId: room.myId}, "sharedObject")
}

function displayReceivedObject(msg, senderId, triggeredListener) {
	if(msg.type == 'sound') {
		playSound(msg.value)
	} else if(msg.type == 'image') {
		displayImage(msg.value)
	} else if(msg.type == 'file') {
		downloadFile(msg.value)
	} else if(msg.type == 'html') {
		goto(msg.value)
	}
}

function displayImage(img) {
	if(document.getElementById('shared_receive') != null
			&& document.getElementById('received_image') != null)
		document.getElementById('shared_receive')
			.removeChild(document.getElementById('received_image'))

	var new_object = document.createElement('img')
	new_object.id = 'received_image'
	new_object.className = 'image'
	new_object.src = '/sites/default/files/' + img
	/*new_object.style.width = '250px'
	new_object.style.height = '250px'*/
	document.getElementById('shared_receive').appendChild(new_object)
}

function playSound(sound) {
	alert('Function play sound not already available')
	//This function is ok with IE7 and Opera
	// but not with IE6 an FF
	/*
	Element.insert(
		document.getElementById('shared_receive'), 
		'<script type="javascript">Sound.play(\'/sites/default/files/' + sound + '\')</script>')
	*/
}

function downloadFile(file) {
	alert('Function download file not already available')
}

function goto(url) {
	alert('Function go to not already available')
}