// ensures formatting is performed correctly

function matchColumns() {
     var divs, contDivs, maxHeight, divHeight, d; 
     divs = document.getElementsByTagName('div'); 
     contDivs = []; 
     maxHeight = 0; 
     for (var i=0; i < divs.length ; i++) { 
          if(/\bcolumn\b/.test(divs[i].className)){ 
                d=divs[i]; 
                contDivs[contDivs.length]=d; 
                if(d.offsetHeight){ 
                     divHeight=d.offsetHeight; 					
                } 
                else if(d.style.pixelHeight){ 
                     divHeight=d.style.pixelHeight;					 
                } 
                maxHeight=Math.max(maxHeight,divHeight);
          } 
     } 

     for(var i=0;i<contDivs.length;i++){ 
          contDivs[i].style.height=maxHeight + "px"; 
     } 
} 

// for the navigation bar

function navigationHighlight() {	
	setUpHighlight("about", "#4F8FEE", "#4F90CA");
	setUpHighlight("programs", "#EEBE31", "#CEA428");
	setUpHighlight("community", "#61B94C", "#539D41");
	setUpHighlight("facilities", "#EE8134", "#D27330");
}

function setUpHighlight(identifier, onColor, offColor) {
	var lk = document.getElementById("link_" + identifier);
	if (lk == null) return;
	var div = document.getElementById("menu_" + identifier);
	
	// closures to get events handled correctly
	lk.onmouseover = function(dvi, lki) {
						return function() { 
							dvi.style.backgroundColor = onColor; 
						}
					}(div,lk);
	lk.onmouseout = function(dvi, lki) {
						return function() { 
							dvi.style.backgroundColor = offColor; 
						}
					}(div,lk);	
	
}

/*
mouseover: show(x) {
if x is showing (cancelhide)
else immediateHide
show
}

mouseout: startHide(x) {
set timer for x to be hidden
}

immediateHide() {
HIDE!
}
*/
SimpleContextMenu = {
    // private attributes
    _menus : new Array,
    _attachedElement : null,
    _menuElement : null,
    _preventDefault : true,
    _preventForms : true,
	_shownMenuId : null,
	_timer: null,

    // public method. Sets up whole context menu stuff..
    setup : function (conf) {
        if ( document.all && document.getElementById && !window.opera ) {
            SimpleContextMenu.IE = true;
        }
        if ( !document.all && document.getElementById && !window.opera ) {
            SimpleContextMenu.FF = true;
        }
        if ( document.all && document.getElementById && window.opera ) {
            SimpleContextMenu.OP = true;
        }
        if ( SimpleContextMenu.IE || SimpleContextMenu.FF ) {
//			document.oncontextmenu = SimpleContextMenu._show;
//            document.onclick = SimpleContextMenu._hide;
            if (conf && typeof(conf.preventDefault) != "undefined") {
                SimpleContextMenu._preventDefault = conf.preventDefault;
            }
            if (conf && typeof(conf.preventForms) != "undefined") {
                SimpleContextMenu._preventForms = conf.preventForms;
            }
        }
    },

    // public method. Attaches context menus to specific class names
    attach : function (element_id, menu_id) {
        if (typeof(element_id) == "string") {
            SimpleContextMenu._menus[element_id] = menu_id;
        }
		var el = document.getElementById(element_id);
		var menu = document.getElementById(menu_id);
		el.onmouseover = SimpleContextMenu._show;
		el.onmouseout = SimpleContextMenu._hide;
		menu.onmouseover = SimpleContextMenu._show;
		menu.onmouseout = SimpleContextMenu._hide;
    },

    // private method. Get which context menu to show
    _getMenuElementId : function (e) {
        if (SimpleContextMenu.IE) {
            SimpleContextMenu._attachedElement = event.srcElement;
        } else {
            SimpleContextMenu._attachedElement = e.target;
        }
				
		while(SimpleContextMenu._attachedElement != null) {
            var element_id = SimpleContextMenu._attachedElement.id;
			var className = SimpleContextMenu._attachedElement.className;

            if (element_id != null) {
                if (SimpleContextMenu._menus[element_id]) {
					return SimpleContextMenu._menus[element_id];
                }
				else if (className == "ContextMenu") {
					return element_id;	
				}
            }

            if (SimpleContextMenu.IE) {
                SimpleContextMenu._attachedElement = SimpleContextMenu._attachedElement.parentElement;
            } else {
                SimpleContextMenu._attachedElement = SimpleContextMenu._attachedElement.parentNode;
            }
        }
		
		console.log(SimpleContextMenu._attachedElement);
		var element_id = SimpleContextMenu._attachedElement.id;
		console.log(element_id);

		return SimpleContextMenu._menus[element_id] || element_id;
    },

    // private method. Shows context menu
    _getReturnValue : function (e) {
        var returnValue = true;
        var evt = SimpleContextMenu.IE ? window.event : e;
        if (evt.button != 1) {
            if (evt.target) {
                var el = evt.target;
            } else if (evt.srcElement) {
                var el = evt.srcElement;
            }
            var tname = el.tagName.toLowerCase();
            if ((tname == "input" || tname == "textarea")) {
                if (!SimpleContextMenu._preventForms) {
                    returnValue = true;
                } else {
                    returnValue = false;
                }
            } else {
                if (!SimpleContextMenu._preventDefault) {
                    returnValue = true;
                } else {
                    returnValue = false;
                }
            }
        }
        return returnValue;
    },

    // private method. Shows context menu
    _show : function (e) {
		window.clearTimeout(SimpleContextMenu._timer);
        var menuElementId = SimpleContextMenu._getMenuElementId(e);
		if (menuElementId != SimpleContextMenu._shownMenuId) {
			var k = SimpleContextMenu._hideImmediate();
			SimpleContextMenu._shownMenuId = menuElementId
		}
		else {
			return false;
		}
		
        if (k && menuElementId) {
            var m = SimpleContextMenu._getMousePosition(e);
            var s = SimpleContextMenu._getScrollPosition(e);

            SimpleContextMenu._menuElement = document.getElementById(menuElementId);
            SimpleContextMenu._menuElement.style.left = m.x + s.x + 25 + 'px';
            SimpleContextMenu._menuElement.style.top = m.y + s.y + 'px';;
            SimpleContextMenu._menuElement.style.display = 'block';
			SimpleContextMenu._shownMenuId = menuElementId;
            return false;
        }
        return SimpleContextMenu._getReturnValue(e);
    },

    // private method. Hides context menu
    _hideImmediate : function () {
        if (SimpleContextMenu._menuElement) {
            SimpleContextMenu._menuElement.style.display = 'none';
        }
		SimpleContextMenu._shownMenuId = null;
		return true;
    },
	
	_hide : function() {
		SimpleContextMenu._timer = window.setTimeout('SimpleContextMenu._hideImmediate()', 800);
	},

    // private method. Returns mouse position
    _getMousePosition : function (e) {
        e = e ? e : window.event;
        var position = {
            'x' : e.clientX,
            'y' : e.clientY
        }
        return position;
    },

    // private method. Get document scroll position
    _getScrollPosition : function () {
        var x = 0;
        var y = 0;
        if( typeof( window.pageYOffset ) == 'number' ) {
            x = window.pageXOffset;
            y = window.pageYOffset;
        } else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
            x = document.documentElement.scrollLeft;
            y = document.documentElement.scrollTop;
        } else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
            x = document.body.scrollLeft;
            y = document.body.scrollTop;
        }
        var position = {
            'x' : x,
            'y' : y
        }
        return position;
    }
}

function getElementsByClassName(strClass, strTag, objContElm) {
	  strTag = strTag || "*";
	  objContElm = objContElm || document;
	  var objColl = objContElm.getElementsByTagName(strTag);
	  if (!objColl.length &&  strTag == "*" &&  objContElm.all) objColl = objContElm.all;
	  var arr = new Array();
	  var delim = strClass.indexOf('|') != -1  ? '|' : ' ';
	  var arrClass = strClass.split(delim);
	  for (var i = 0, j = objColl.length; i < j; i++) {
			var arrObjClass = objColl[i].className.split(' ');
			if (delim == ' ' && arrClass.length > arrObjClass.length) continue;
			var c = 0;
			comparisonLoop:
			for (var k = 0, l = arrObjClass.length; k < l; k++) {
				  for (var m = 0, n = arrClass.length; m < n; m++) {
						if (arrClass[m] == arrObjClass[k]) c++;
						if (( delim == '|' && c == 1) || (delim == ' ' && c == arrClass.length)) {
						  arr.push(objColl[i]);
						  break comparisonLoop;
					}
			  }
			}
	  }
	  return arr;
}

window.onload=function(){ 
     if(document.getElementsByTagName){ 
          matchColumns();			 
     } 
	 navigationHighlight();
	 SimpleContextMenu.setup({'preventDefault':true, 'preventForms':false});
	 var all_menus = getElementsByClassName('with_menu', 'a');
	 var menu_count = all_menus.length;
	 var i = 0;
	 for (i = 0; i < menu_count; i++) {
		 var link_name = all_menus[i].id;
		 var div_name = "dest_" + link_name.substring(4);
		 SimpleContextMenu.attach(link_name, div_name);
	 }
} 