﻿// HELP
var HelpDialog = Class.create();

HelpDialog.prototype = {
    initialize: function(targetID, title, text) {
    
        this.target = document.getElementById(targetID);
        
        if (!this.target)
			return;
        
        this.target.className = 'help';
    
    
        // CREATE ELEMENT
        this.popup = document.createElement('div');
        
        this.popup.setAttribute('id',targetID + '_help');
        this.popup.className = 'help_popup';
        
        this.popup.innerHTML =					
						'<div class="help_popup_body">'  +  
							'<div class="help_popup_inner">' + 
								'<div class="help_popup_title">' + title + '</div>' + 
								'<div class="help_popup_text">' +
									text +	
								'</div>' +
							'</div>' +
						'</div>' +
						'<div class="help_popup_footer"></div>';
                    
        this.popup.style.position = 'absolute';
        this.popup.style.zIndex = '999';
        this.popup.style.top = '0';
        this.popup.style.left = '0';
        this.popup.style.display = 'none';
        
        document.body.appendChild(this.popup);
                    
        // ATTACH
        var helpIcon = document.createElement('img');
		helpIcon.align = 'absmiddle';
		helpIcon.src = 'skins/Skin_1/dtsimages/helpicon.png';
        helpIcon.alt = 'Help Icon';
        this.target.appendChild(helpIcon);
        
        
       
        this._mouseOverListener = this.onMouseOver.bindAsEventListener(this);        
        this._mouseOutListener = this.onMouseOut.bindAsEventListener(this);
        this._mouseMoveListener = this.onMouseMove.bindAsEventListener(this);
           
        Event.observe(this.target, 'mouseover', this._mouseOverListener);
        Event.observe(this.target, 'mouseout', this._mouseOutListener);
    },
    
    onMouseOver: function(e) {
        Event.observe(document, 'mousemove', this._mouseMoveListener);
        
        this.setPosition(e);
        
        this.popup.style.display = '';
    },
    
    onMouseOut: function(e) {
        Event.stopObserving(document, 'mousemove',this._mouseMoveListener);
        this.popup.style.display = 'none';
    },
    
    onMouseMove: function(e) {
        this.setPosition(e);
    }, 
    
    setPosition: function(e) {
		
        
		var popupSize = Element.getDimensions(this.popup);
		var windowSize = getWindowDimension();	
		var scrollPos = getScrollPosition();
		var mousePos = {x:Event.pointerX(e), y: Event.pointerY(e) };
			
		var popupPos = {x:0, y:0};    
			    
		if (mousePos.x + popupSize.width <= windowSize.width + scrollPos.x) {
			popupPos.x = mousePos.x + 10;
		} else if (popupSize.width <= mousePos.x-scrollPos.x && popupSize.width < windowSize.width) {
			popupPos.x = mousePos.x - popupSize.width;
		} else {
			// keep at 0!
			popupPos.x = scrollPos.x;
		}
		
		if (mousePos.y + popupSize.height <= windowSize.height + scrollPos.y) {
			popupPos.y = mousePos.y + 10;
		} else if (popupSize.height <= mousePos.y-scrollPos.y && popupSize.height < windowSize.height) {
			popupPos.y = mousePos.y - popupSize.height;
		} else {
			// keep at 0!
			popupPos.y = scrollPos.y;
		}		
			    
        this.popup.style.top = popupPos.y + 'px';
        this.popup.style.left = popupPos.x + 'px';
        

    }
    
};

function getWindowDimension() {

	var wWidth = getSmallest (
		window.innerWidth ? window.innerWidth : 0,
		document.documentElement ? document.documentElement.clientWidth : 0,
		document.body ? document.body.clientWidth : 0
	);
	
	var wHeight = getSmallest (
		window.innerHeight ? window.innerHeight : 0,
		document.documentElement ? document.documentElement.clientHeight : 0,
		document.body ? document.body.clientHeight : 0
	);
		
	return {width:wWidth,height:wHeight};	
};

function getScrollPosition() {

	var wX = getSmallest (
		window.pageXOffset ? window.pageXOffset : 0,
		document.documentElement ? document.documentElement.scrollLeft : 0,
		document.body ? document.body.scrollLeft : 0
	);
	
	var wY = getSmallest (
		window.pageYOffset ? window.pageYOffset : 0,
		document.documentElement ? document.documentElement.scrollTop : 0,
		document.body ? document.body.scrollTop : 0
	);

	return {x:wX,y:wY};	
};

function getSmallest(n_win, n_docel, n_body) {
	var n_result = n_win ? n_win : 0;
	if (n_docel && (!n_result || (n_result > n_docel)))
		n_result = n_docel;
	return n_body && (!n_result || (n_result > n_body)) ? n_body : n_result;
};