var seatMapInfoBox;
var seatPositions = [];
var seatWidth = 16;
var seatHeight = 16;
var currentSeat = null;
var currentEffect = null;

function seatForEvent(aMouseEvent) {
    var left = aMouseEvent.pointerX();
    var top = aMouseEvent.pointerY();

    for (var i = 0; i < seatPositions.length; ++i) {
	var pos = seatPositions[i].pos
	if (top >= pos.top && top < pos.top + seatHeight &&
	    left >= pos.left && left < pos.left + seatWidth) {
	    return seatPositions[i].seat;
	}
    }
    return null;
}

function seatMapMouseMove(event) {
    var seat = seatForEvent(event);
    if (seat && seat != currentSeat) {
	seat.onmouseover();
    }
}

function seatMapClick(event) {
    var seat = seatForEvent(event);
    if (seat) {
	seat.onclick();
    }
}

function setUpSeatMapInfoBox() {
    seatMapInfoBox = $('seat-map-info-box');
    if (!seatMapInfoBox) {
	return;
    }
    
    seatMapInfoBox.observe('mousemove', seatMapMouseMove);
    seatMapInfoBox.observe('click', seatMapClick);
    
    var seats = document.getElementsByClassName('seat');
    for (var i = 0; i < seats.length; ++i) {
	seatPositions[i] = {'pos': seats[i].positionedOffset(),
			    'seat': seats[i]};
    }
}

function highlightTicket(theTicketCode) {
    var ticket = $(theTicketCode);
    if (ticket) {
	ticket.onmouseover();
    }
}

Event.observe(window, 'load', function () {
	setUpSeatMapInfoBox();
    });

function updateBoxInfo(info) {
    var children = seatMapInfoBox.childNodes;
    for (var i = children.length - 1; i >= 0; --i) {
	$(children[i]).remove();
    }

    seatMapInfoBox.insert(new Element('h3').update(info.title.escapeHTML() + (currentSeat.hasClassName('checked-in') ? ' (incheckad)' : '')));

    if (info.owner) {
	var list = new Element('dl');
	list.insert(new Element('dt').update('Användare:'));
	list.insert(new Element('dd').update(info.owner.escapeHTML()));
	if (info.clanName) {
	    list.insert(new Element('dt').update('Klan:'));
	    list.insert(new Element('dd').update(info.clanName.escapeHTML()));
	}
	seatMapInfoBox.insert(list);
    } else {
	seatMapInfoBox.insert(new Element('em').update('Platsen är ledig'));
    }
}

function mouseOverSeat(aSeat, info) {
    aSeat = $(aSeat);
    currentSeat = aSeat;
    var pos = aSeat.positionedOffset();

    var leftOffset = 200;
    if (aSeat.hasClassName('first-column')) {
	leftOffset--;
    }

    var topOffset = 107;
    if (aSeat.hasClassName('first-row')) {
	topOffset--;
    }

    if (seatMapInfoBox.getStyle('display') != 'block') {
	updateBoxInfo(info);
	seatMapInfoBox.setStyle({'left': (pos.left - leftOffset) + 'px',
		    'top': (pos.top - topOffset) + 'px',
		    'display': 'block'});
    } else {
	if (currentEffect) {
	    currentEffect.cancel();
	}
	currentEffect = new Effect.Move(seatMapInfoBox,
					{'x': (pos.left - leftOffset),
						'y': (pos.top - topOffset),
						'mode': 'absolute',
						'duration': 0.2,
						'afterFinish': function () {
						updateBoxInfo(info);
						currentEffect = null;}});
    }
}

