function getAbsolutePos(el) {
	var r = { x: el.offsetLeft, y: el.offsetTop };
	if (el.offsetParent) {
		var tmp = getAbsolutePos(el.offsetParent);		
		r.x += tmp.x;
		r.y += tmp.y;
	}
	return r;
}

var prevpos;
var prevroom;

function enterpass(el, room) {
	prevroom = room;
	prevpos = getAbsolutePos(el);
	showform(prevpos, 0, '');
}

function showform(pos, type, message) {
	var dialog = document.getElementById('form');
	dialog.style.left = pos.x - 30 + 'px';
	dialog.style.top = pos.y + 35 + 'px';
	dialog.style.display = 'block';
	
	document.getElementById('f_enterpass').style.display = (type == 0) ? 'block' : 'none';
	document.getElementById('f_progress').style.display = (type == 1) ? 'block' : 'none';
	document.getElementById('f_message').style.display = (type == 2) ? 'block' : 'none';
	
	stopProgress = (type != 1);
	
	if (type == 0) {
		with (document.getElementById('pass')) {
			value = '';
			focus();
		}
	} else if (type == 1) {
		document.getElementById('f_progress').innerHTML = '';
		progress();
	} else if (type == 2) {
		document.getElementById('f_message').innerHTML = message;
	}
}

function createRequest() {
    var request = null;
	try{
        request = new XMLHttpRequest();
    }catch (trymicrosoft){
        try{
            request = new ActiveXObject("Msxml2.XMLHTTP");
        }catch (othermicrosoft){
            try{
                request = new ActiveXObject("Microsoft.XMLHTTP");
            }catch (failed){
                request = null;
            }
        }
    }
    if (request == null){
        alert("Error creating request object!");
    }
	return request;
}

var stopProgress = false;

function progress() {
	if (stopProgress) return;
	setTimeout('progress()', 100);
	var text = document.getElementById('f_progress').innerHTML;
	if (text.length > 14) text = '';
	text += '.';
	document.getElementById('f_progress').innerHTML = text;
}

var req = null;

var timeout = false;
function cancelReq() {
	timeout = false;
	if (req != null) {
		req.onreadystatechange = function () {};
		req.abort();
	}
	req = null;
	showform(prevpos, 0, '');
}

function enterroom() {
	if (req != null) req.abort();
	
	showform(prevpos, 1, '');
	
	var pass = document.getElementById('pass').value;
	req = createRequest();
	var url = 'enterroom.php?r=' + prevroom + '&p=' + pass + '&t=' + new Date().getTime();
	req.open('GET', url, true);
	req.onreadystatechange = function() {
		if (req.readyState == 4) {
			try {
				if (req.status == 200) {
					var s = req.responseText;
					if (s == 'OK') {
						window.location.href = 'room.php?r=' + prevroom;
					} else {
						showform(prevpos, 2, 'Грешна парола!');
						setTimeout('showform({x:' + prevpos.x + ', y:' + prevpos.y + '}, 0, 0)', 2000);
					}
				} else {
					showform(prevpos, 2, 'Грешка, опитайте пак!');
					setTimeout('showform({x:' + prevpos.x + ', y:' + prevpos.y + '}, 0, 0)', 2000);
				}
			} catch (e) {
				setTimeout('enterroom()', 200);
			}
			
			req = null;
			if (timeout) {
				window.clearTimeout(timeout);
			}
		}
	}
	req.send(null);
	timeout = setTimeout('cancelReq()', 5000);
}

function passkey(event) {
	if (event.keyCode == 13) {
		enterroom();
		if (event.preventDefault) event.preventDefault();
		else event.returnValue = false;
	} else if (event.keyCode == 27) {
		document.getElementById('form').style.display = 'none';
		if (event.preventDefault) event.preventDefault();
		else event.returnValue = false;
	}
}