﻿function ajaxEvents_load(eventId, serviceLocation) {
    if(!serviceLocation)
        serviceLocation = '../js/ajax-events.aspx';
    
    var xmlHttp;
    try { xmlHttp = new XMLHttpRequest(); }
    catch(e) {
        try { xmlHttp = new ActiveXObject('Msxml2.XMLHTTP'); }
        catch(e) {
            try { xmlHttp = new ActiveXObject('Microsoft.XMLHTTP'); }
            catch (e) { return true; }
        }
    }
    
    xmlHttp.onreadystatechange = function() {
        if(xmlHttp.readyState == 4)
            ajaxEvents_showEventbox(xmlHttp.responseText);
    }
    xmlHttp.open('GET', serviceLocation + '?id=' + eventId, true);
    xmlHttp.send(null);
    return false;
}

function ajaxEvents_getPageScroll() {
	var yScroll;

	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
	} else if (document.body) {// all other Explorers
		yScroll = document.body.scrollTop;
	}

	arrayPageScroll = new Array('',yScroll) 
	return arrayPageScroll;
}

function ajaxEvents_getPageSize(){
	
	var xScroll, yScroll;
	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}
    
    
	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}

function ajaxEvents_getKey(e){
	if (e == null) { // ie
		keycode = event.keyCode;
	} else { // mozilla
		keycode = e.which;
	}
	key = String.fromCharCode(keycode).toLowerCase();
	
	if(key == 'x'){ ajaxEvents_hideEventbox(); }
}

function ajaxEvents_listenKey () {	document.onkeypress = ajaxEvents_getKey; }

function ajaxEvents_showEventbox(innerHTML) {
    var objMainDiv = document.getElementById('page');
    if(objMainDiv)
        objMainDiv.className = 'NoPrinting';
    
    if(document.getElementById('eventboxInside') == null)
        ajaxEvents_initEventbox();
    document.getElementById('eventboxInside').innerHTML = innerHTML;
    
	var arrayPageSize = ajaxEvents_getPageSize();
	var arrayPageScroll = ajaxEvents_getPageScroll();
	
	var selects = document.getElementsByTagName("select");
    for(i = 0; i < selects.length; ++i)
        selects[i].style.visibility = "hidden";
	
    var eventbox = document.getElementById('eventbox');
    var eventboxTop = arrayPageScroll[1] + ((arrayPageSize[3] - 417) / 2);
	var eventboxLeft = ((arrayPageSize[0] - 678) / 2);
	eventbox.style.top = (eventboxTop < 0) ? '0' : eventboxTop + 'px';
	eventbox.style.left = (eventboxLeft < 0) ? '0' : eventboxLeft + 'px';
	eventbox.style.display = 'block';
    
	var overlay = document.getElementById('overlay');
	overlay.style.height = (arrayPageSize[1] + 'px');
	overlay.style.display = 'block';
	
    ajaxEvents_listenKey();
}


function ajaxEvents_hideEventbox() {
    var objMainDiv = document.getElementById('page');
    if(objMainDiv)
        objMainDiv.className = '';
    
    document.onkeypress = '';
    
	document.getElementById('overlay').style.display = 'none';
	document.getElementById('eventbox').style.display = 'none';
    
	var selects = document.getElementsByTagName('select');
    for(i = 0; i < selects.length; ++i)
		selects[i].style.visibility = 'visible';
}

function ajaxEvents_initEventbox() {
	var objBody = document.getElementsByTagName("body").item(0);
    
    var objOverlayWrapper = document.createElement('div');
    objOverlayWrapper.id = 'overlay_wrapper';
    
	var objOverlay = document.createElement("div");
	objOverlay.setAttribute('id','overlay');
	objOverlay.onclick = function() {
	    ajaxEvents_hideEventbox();
	    return false;
	}
	objOverlay.style.display = 'none';
	objOverlay.style.top = '0';
	objOverlay.style.left = '0';
	objOverlay.style.zIndex = '90';
 	objOverlay.style.width = '100%';
 	objOverlayWrapper.appendChild(objOverlay);
 	
	objBody.insertBefore(objOverlayWrapper, objBody.firstChild);
	
	var arrayPageSize = ajaxEvents_getPageSize();
	var arrayPageScroll = ajaxEvents_getPageScroll();
    
	var objEventbox = document.createElement("div");
	objEventbox.setAttribute('id','eventbox');
	objEventbox.style.display = 'none';
	objEventbox.style.zIndex = '100';	
	objBody.insertBefore(objEventbox, objOverlayWrapper.nextSibling);
	
	var objEventboxInside = document.createElement('div');
	objEventboxInside.id = 'eventboxInside';
	objEventbox.appendChild(objEventboxInside);
}

function ajaxEvents_addLoadEvent(func) {
	var oldOnload = window.onload;
	if(typeof window.onload != 'function') {
    	window.onload = func;
	} else {
		window.onload = function(){
		    oldOnload();
		    func();
		}
	}
}
ajaxEvents_addLoadEvent(ajaxEvents_initEventbox);

