/* 
============================================================================================================================= CREDITS
Copyright 	: Copyright 2010 JPL. All Rights Reserved.
Author(s) 	: Larry Daughenbaugh - ldaughenbaugh@jplcreative.com
Date    	: 05/07/2010
Notes     	: JavaScript file for handling all things relative to modals.
            : Inspiration (Chris Campbell - http://particletree.com, Simon de Haan - http://blog.eight.nl)
============================================================================================================================= CHANGE LOG
Date		Name			Desc
---			---				---
============================================================================================================================= BEGIN JAVASCRIPT
*/
/* ====================================================================================================== MULTIPLE ONLOAD HANDLER */

var onLoadFunctions = new Array();
var iloadFunction = 0;
var modalsArray = new Array();

// Pass each function that needs to load
function addOnLoad(func) {
    onLoadFunctions[iloadFunction] = func;
    iloadFunction++;
}
// Loops through all of the functions that were added
function loadAllFunctions() {
    for(i=0; i < onLoadFunctions.length; i++) {
        eval(onLoadFunctions[i]+"()");
    }
}
// Load all of the functions that you've set
window.onload = loadAllFunctions;

/* ====================================================================================================== CALL FUNCTIONS TO BE LOADED */

addOnLoad("load_modals");
addOnLoad("load_flash");

/* ====================================================================================================== LOAD MODALS */

function load_modals() {
	init_modal();
	
}

/* CREATE NEW MODAL OBJECT AND ACTIVATE THE MODAL */
function open_modal(href, rel) {
	if (rel == "undefined" || rel == null) {
		rel = this.rel;
		href = this.href;
		var openthis = href;
		if (rel != "modal_image") {
			openthis = this.href.split("#")[1];
		}
	} else {
		var openthis = href;
		if (rel != "modal_image") {
			openthis = href.split("#")[1];
		}
	}	
	new_modal = new modal(openthis,true);
	modalsArray.push(new_modal);	
	new_modal.activate();
	return false;
}

/* CLOSE ALL OPEN MODALS */
function close_open_modals() {
	for(i = 0; i < modalsArray.length; i++) {
		modalsArray[i].deactivate();
	}	
}

/* ========================================================================================================================== SET UP EVEN HANDLERS FOR MODAL OBJECTS */
/* init_modal should be called on page load witin template.js file */

function init_modal() {
	var arrLinks = document.getElementsByTagName("a");
	for (var i = 0; i < arrLinks.length; i++) { 
		if (arrLinks[i].rel == "modal" || arrLinks[i].rel == "modal_image") {
			arrLinks[i].onclick = open_modal;
		}
	}

	/* OPEN MODAL VIA QUERYSTRING - example.html?modal=modal0 */
	if (window.location.search != "") {
		if (window.location.search.indexOf("modal=") >= 0) {

			/* GET QUERYSTRING PARAMETER'S VALUE */
			function getQS(key) {
				key = key.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");

				var regex = new RegExp("[\\?&]" + key + "=([^&#]*)");
				var qs = regex.exec(window.location.href);
				if (qs == null) {
					return "";
				}
				return qs[1];
			}
			var modal_value = getQS('modal');
			if (modal_value != "") {
				if (document.getElementById(modal_value) != null) {
					new_url_modal = new modal(modal_value,false);
					new_url_modal.activate();
				}
			}
		}
	}
}

/* ========================================================================================================================== MODAL OBJECT/CLASS */

function modal(obj,overlayclick) {
	/*
	* ARGUMENTS
	* 1. obj			: name of the modal (that is the name of the html element) that should be on the page
	* 2. overlayclick	: opt. argument - 'true' will have overlay clickable so that it closes the modal
	*/


	this.obj = obj;	
	this.imgonly = false;
	this.overlayclick = overlayclick;
	this.setAttributes = true;
	this.isie = navigator.userAgent.toLowerCase().indexOf('msie');
	this.imgcontainer = "modal_image";
	this.imgpreloader = '<img src="lib/img/loading.gif" alt="Loading Image" />';
	this.overlay = "overlay";
	this.yPos = 0;

	if (obj.indexOf('.jpg') > -1 || obj.indexOf('.png') > -1 || obj.indexOf('.gif') > -1) {
		this.imgonly = true;
	}

	// ---------------------------------------------------------------------------------------------- CREATE OVERLAY / OVERLAY CLICK FUNCTION
	modal.prototype.createoverlay = function(mObj,div) {
		var overlay_object = document.getElementById(div);
		
		// OBJECT DOES NOT EXIST, WE NEED TO CREATE IT
		if (overlay_object == null) {
			var overlayDiv = document.createElement("div");
			overlayDiv.id = div;
			document.getElementsByTagName('body')[0].appendChild(overlayDiv);
			
			overlay_object = document.getElementById(div);
		}
		if (overlayclick == null || overlayclick == true) {
			overlay_object.onclick = close_object;
		}

		function close_object() {
			mObj.deactivate();
			resetVideoPlayer();
			return false;
		}
	}
	
	// ---------------------------------------------------------------------------------------------- ACTIVATE (PREP WORK)
	modal.prototype.activate = function() {
		this.createoverlay(this,this.overlay);

		if (this.setAttributes)	{
			this.setMargins();
		}
		if (this.isie > -1) {
			this.ieFunctions(0,'100%','hidden','hidden',true);
		}
		this.display("block");
	}

	// ---------------------------------------------------------------------------------------------- DEACTIVATE (PREP WORK)
	modal.prototype.deactivate = function() {
		if (this.isie > -1)	{
			this.ieFunctions(this.yPos,'auto','auto','visible',false);
			resetVideoPlayer();
		}
		this.display("none");
	}

	// ---------------------------------------------------------------------------------------------- MODAL DISPLAY (SHOW OR HIDE)
	modal.prototype.display = function(str) {
		document.getElementById(this.overlay).style.display = str;
		if (this.imgonly != '' && this.imgonly == true) {
			this.standalone(this,str);	
		} else {
			document.getElementById(this.obj).style.display = str;
		}
		if (str == "block") {
			this.closeOpenMore(this);	
		}
	}

	// ---------------------------------------------------------------------------------------------- ADDITIONAL IE-ONLY FUNCTIONS
	modal.prototype.ieFunctions = function(y,height,overflow,visible,update) {
		if (update) {
			// GET POSITION OF VERTICAL SCROLLBAR BEFORE HIDING OVERFLOW
			if (document.documentElement && document.documentElement.scrollTop){
				this.yPos = document.documentElement.scrollTop; 
			} else if (document.body) {
				this.yPos = document.body.scrollTop;
			}
			window.scrollTo(0,0); 
		}

		// DISABLE SCROLLBARS (SO YOU CAN'T SCROLL DOWN PAST OVERLAY)
		document.getElementsByTagName('body')[0].style.height = height;
		document.getElementsByTagName('body')[0].style.overflow = overflow;
	
		// HIDE SELECTS (THESE WILL SHOW THROUGH OR ON TOP OF THE OVERLAY)
		var selects = document.getElementsByTagName("select");
		for (var i = 0; i < selects.length; i++) {
			selects[i].style.visibility = visible;
		}
		if (!update) {
			// RESET VERTICAL SCROLLBAR POSITION AFTER SHOWING OVERFLOW
			window.scrollTo(0,this.yPos); 
		}
	}
	
	// ---------------------------------------------------------------------------------------------- ATTACH EVEN HANDLERS TO CLOSE (OR OPEN MORE MODALS)
	modal.prototype.closeOpenMore = function(mObj) {
		var modalobj = document.getElementById(this.obj);
		var arrModalLinks = document.getElementsByTagName("a");
		if (modalobj != null) {
			arrModalLinks = modalobj.getElementsByTagName("a");
			for (var i = 0; i < arrModalLinks.length; i++) { 
				if (arrModalLinks[i].rel == "modal_close") {
					arrModalLinks[i].onclick = close_object;
				} else if (arrModalLinks[i].rel == "modal" || arrModalLinks[i].rel == "modal_image") {
					arrModalLinks[i].onclick = open_object;
				}
			}
		} else {
			for (var i = 0; i < arrModalLinks.length; i++) { 
				if (arrModalLinks[i].rel == "modal_close") {
					arrModalLinks[i].onclick = close_object;
				}
			}
		}

		function close_object() {
			mObj.deactivate();
			return false;
		}

		function open_object() {
			mObj.deactivate();
			open_modal(this.href, this.rel);
			return false;
		}
	}

	// ---------------------------------------------------------------------------------------------- OPEN STANDALONE IMAGE
	modal.prototype.standalone = function(mObj,display) {
		var container = this.imgcontainer;
		if (display == "none") {
			alert("TEST");
			document.getElementById(container).style.display = display;
		} else {
			var imgwrapper;
			if (document.getElementById(container) == null) {
				imgwrapper = document.createElement("div");					
				imgwrapper.setAttribute('id',container);
				document.getElementsByTagName('body')[0].appendChild(imgwrapper);
			} else {
				imgwrapper = document.getElementById(container);
			}

			function load_modal_image(img) {
				var pagerequest = false;
				if (img != "") {		
					if (window.XMLHttpRequest) {
						pagerequest = new XMLHttpRequest();
					} else if (window.ActiveXObject) {
						try { pagerequest = new ActiveXObject("Msxml2.XMLHTTP"); } 
						catch (e) {
							try { pagerequest = new ActiveXObject("Microsoft.XMLHTTP"); }
						catch (e) {}
						}
					}
					pagerequest.onreadystatechange = function() { display_image(pagerequest, img); }
					pagerequest.open('GET', img, true);
					pagerequest.send(null);
					
					function display_image(pagerequest, img) {			
						if (pagerequest.readyState == 4 && (pagerequest.status == 200 || window.location.href.indexOf("http") == -1)) {
							var objLoadingImage = new Image();
								objLoadingImage.src = img;
							
							objLoadingImage.onload = function() {
								imgwrapper.style.marginTop = "-" + Math.ceil(objLoadingImage.height / 2) + "px";
								imgwrapper.style.marginLeft = "-" + Math.ceil(objLoadingImage.width / 2) + "px";
								
								document.getElementById(container).innerHTML = '<a href="#" rel="modal_close"><img src="' + img + '" alt="Loading Image" /></a>';
								mObj.closeOpenMore(mObj);
							}
						} else {
							// POSITION CONTENT SO IT IS CENTERED (APPROXIMATE BASED ON INIITAL TEXT/LOADING IMAGE GRAPHIC)
							imgwrapper.style.marginTop = "-35px";
							imgwrapper.style.marginLeft = "-35px";

							document.getElementById(container).style.display = "block";
							document.getElementById(container).innerHTML = '<p>loading image</p><p>' + mObj.imgpreloader + '</p>';
						}
					}
				}
			}
			load_modal_image(this.obj);
		}
	}
	
	// ---------------------------------------------------------------------------------------------- SET MARGINS BASED ON WIDTH/HEIGHT	
	modal.prototype.setMargins = function() {
		var container = document.getElementById(this.obj);
		if (container != null) {
			// HIDE MODAL SO THAT WE CAN SET ITS DISPALY TO BLOCK
			container.style.visibility = "hidden";
			container.style.display = "block";

			/* WITH ITS DISPLAY TYPE AS "BLOCK" WE CAN GET ITS WIDTH/HEIGHT VALUES */
			var divHeight = container.clientHeight;
			var divWidth = container.clientWidth;
			
			if (divHeight > 0) container.style.marginTop = "-" + Math.ceil(divHeight / 2) + "px";
			if (divWidth > 0) container.style.marginLeft = "-" + Math.ceil(divWidth / 2) + "px";
						
			/* RESET VISITBILITY AND DISPLAY ATTRIBUTES */
			container.style.visibility = "";
			container.style.display = "none";
		}
	}
}

function thisMovie(movieName) {
	if (window.document[movieName]) return window.document[movieName];
	if (navigator.appName.indexOf("Microsoft Internet") == -1) {
		if (document.embeds && document.embeds[movieName]) return document.embeds[movieName]; 
	} else {
		return document.getElementById(movieName);
	} 
}

function resetVideoPlayer() {
	if (document.getElementById('flash0-alt') == null) {
		if (document.getElementById('flash0') != null) thisMovie('flash0').resetVideoPlayer();
	}
}

function load_flash() {
	var alt = document.getElementById('flash0-alt');
	var params = { wmode: "opaque", allowFullScreen: "true", scale: "false" };
	
	var attributes = {};
	

	if (document.getElementById('flash0') != null) {
		var flashvars = {vidurl:"/lib/flv/workingtogether.flv"};
		
		swfobject.embedSWF(
						   "/lib/swf/vidPlayer.swf", "flash0", "768", "465", "9.0.0", "lib/swf/expressInstall.swf",
						   flashvars, params, attributes
						   );
		if (alt != null) alt.style.visibility = "visible";
	}
	if (document.getElementById('flash1') != null) {
		var flashvars = {vidurl:"/lib/flv/gettingstarted.flv"};
		swfobject.embedSWF(
						   "/lib/swf/vidPlayer.swf", "flash1", "768", "465", "9.0.0", "lib/swf/expressInstall.swf", 
						   flashvars, params, attributes
						   );
	}
}