/*##########################################
POPUP Class, inherits default values from POPUPBASE
Takes in parameters for offsets and dimensions or content and/or custom options, run after document is fully loaded.

USAGE: 
pointer_name = new POPUP('div_identifier', {w:123,h:456,mode:'iframe',message:'/lilPopUp/pop1.jhtml',customeFunction:function(){code}});

IMPORTANT PARAMS:
message: the HTML to be inside the div or the url if mode=iframe
mode: (optional) 'iframe' to indicate it'll be loading in an iframe
w: width (optional)
h: height (optional)

**** SCROLL TO BOTTOM FOR OVERLAY INITIALIZATION CONDITIONS

##########################################*/

listOfInstances = []; // Used to store initialized instances for closing all before opening

var POPUPBASE = function() // Base class
{
	this.popup = document.createElement('div');
}

	POPUPBASE.prototype.baseInit = function(){
	}
	POPUPBASE.prototype.ajaxSuccess = function(tp){
		var dAJAXSuccess = "Ajax request successful";
		var msg = dAJAXSuccess;
		return msg;
	}
	POPUPBASE.prototype.ajaxFailure = function(tp){
		var dAJAXFail = "Ajax request failed";
		var msg = dAJAXFail;
		return msg;
	}
	POPUPBASE.prototype.ajaxLoading = function(){
		var dAJAXLoading = "Loading...";
		var msg = dAJAXLoading;
		return msg;
	}
	
	POPUPBASE.prototype.getWindowDim = function(){
		var dim = {}
		if( typeof( window.innerWidth ) == 'number' ) {
			//Non-IE
			dim.width = window.innerWidth;
			dim.height = window.innerHeight;
		} else if( document.documentElement && ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ) {
			//IE 6+ in 'standards compliant mode'
			dim.width = document.documentElement.clientWidth;
			dim.height = document.documentElement.clientHeight;
		} else if( document.body && ( document.body.clientWidth || document.body.clientHeight ) ) {
			//IE 4 compatible
			dim.width = document.body.clientWidth;
			dim.height = document.body.clientHeight;
		}
		return dim
	}
	
var POPUP = function(divId, options) // POPUP class, inherits from what's in base
{
	var ptr = this; // self pointer

	this.container = document.body;
	this.divId = divId;
	this.options = options || {};
	
	// Initialize default values, override if provided as one of the options
	this.h = ('h' in this.options) ? this.options.h : 300;
	this.w = ('w' in this.options) ? this.options.w : 380;
	this.site_width = ('site_width' in this.options) ? this.options.site_width : 950;
	this.init_top = ('init_top' in this.options) ? this.options.init_top : 130;
	this.offset_top = ('offset_top' in this.options) ? this.options.offset_top : 0;
	this.offset_left = ('offset_left' in this.options) ? this.options.offset_left : 0;
	this.mode = ('mode' in this.options) ? this.options.mode : 'default';
	this.position_h = ('position_h' in this.options) ? this.options.position_h : 'left';
	this.position_v = ('position_v' in this.options) ? this.options.position_v : 'center';
	this.sticky = ('sticky' in this.options) ? this.options.sticky : true;
	this.modal = ('modal' in this.options) ? this.options.modal : true;
	this.modal_id = ('modal_id' in this.options) ? this.options.modal_id : 'modal';
	this.close_able = ('close_able' in this.options) ? this.options.close_able : true;
	this.close_div_class = ('close_div_class' in this.options) ? this.options.close_div_class : 'olCloserDiv';
	this.onHide = ('onHide' in this.options) ? this.options.onHide : function(){};
	this.state = 'hidden'; // popup initialized as hidden
	this.animated = ('animated' in this.options) ? this.options.animated : false;
	this.animation_type = ('animation_type' in this.options) ? this.options.animation_type : 'slide';
	this.close_others = ('close_others' in this.options) ? this.options.close_others : true; // close other overlays before opening this one

	this.message = options.message || "";

	
	this.baseInit();
	this.initPopup();
	//this.populate(this.message,this.mode);
	
	this.animation = ('animation' in options) ? this.options.animation : new POPUPANIMATION(this.popup,{});

	
	// Create event listeners in IE
	if ( window.attachEvent ) {
		window.attachEvent("onresize", this.reposition.bind(this));
	}
	// Create event listeners in Gecko browsers
	else if (window.addEventListener) {
		window.addEventListener("resize", this.reposition.bind(this), false);
	}
	
	listOfInstances.push(this.divId); // storing id to a list of established instances
}
	
	POPUP.prototype = new POPUPBASE;

	POPUP.prototype.initPopup = function(){
		var drawnDiv = document.createElement('div');
		var olWidth = this.w + 'px';
		var olHeight = (this.close_able) ? (parseInt(this.h) + 20) + 'px' : this.h + 'px';
		drawnDiv.id = this.divId;
		drawnDiv.style.position = "absolute";
		if (this.divClassName){
			drawnDiv.className = this.divClassName;
		}else{
			drawnDiv.className = 'drawnDivs'
		}
		var iFrameBlock = document.createElement('iframe');
		iFrameBlock.src = "http://" + location.host + "/sitewide/inc/blank.html";
		//iFrameBlock.style.border = '0px';
		iFrameBlock.style.border = "0px none #ffffff"
		iFrameBlock.style.height = olHeight;
		iFrameBlock.style.width = olWidth;
		//iFrameBlock.style.position = "absolute";
		//iFrameBlock.style.top = '0px';
		//iFrameBlock.style.left = '0px';
		var innerDiv = document.createElement('div');
		innerDiv.className = 'opaquetext';
		innerDiv.style.position = "absolute";
		innerDiv.style.top = '0px';
		innerDiv.style.left = '0px';
		innerDiv.style.width = olWidth;
		innerDiv.style.height = this.h + 'px';
		drawnDiv.appendChild(iFrameBlock);
		drawnDiv.appendChild(innerDiv);
		
		drawnDiv.style.display = 'none';
		//drawnDiv.style.top = (this.offset_top) + 'px';
		drawnDiv.style.top = '-1000px'; // off the screen
		//drawnDiv.style.left = (this.offset_left) + 'px';
		drawnDiv.style.left = '-1000px'; // off the screen
		drawnDiv.style.height = olHeight;
		drawnDiv.style.width = olWidth;
		this.container.appendChild(drawnDiv);
		
		this.popup = drawnDiv;
	}
	
	POPUP.prototype.resizeOverlay = function(w,h,reposition){ // resize the popup then repositions ****BROKEN???
		this.w = w; this.h = h;
		var olWidth = this.w + 'px';
		var olHeight = (this.close_able) ? (parseInt(this.h) + 20) + 'px' : this.h + 'px';
		this.popup.style.height = olHeight;
		this.popup.style.width = olWidth;
		for (var i=0; i < this.popup.childNodes.length; i++){
			this.popup.childNodes[i].style.width = olWidth;
			this.popup.childNodes[i].style.height = (i==0) ? olHeight : this.h + 'px';
		}
		if (reposition) this.reposition();
	}
	
	POPUP.prototype.positioning = function(t,l){ // reposition hover, top, left
		this.popup.style.top = t + 'px';
		this.popup.style.left = l + 'px';
	}
	
	POPUP.prototype.reposition = function(){ // positions the overlay in its default position
		var tPos = 0; var lPos = 0;
		var winDim = this.getWindowDim();
		//alert(this.popup.offsetHeight)
		//tPos = Math.round(windowHeight/2) - Math.round(this.popup.offsetHeight/2) + this.offset_top;
		tPos = this.init_top + this.offset_top;
		
		/*
		if (windowWidth <= this.site_width ){
			lPos = this.offset_left;			
		} else {
			lPos = Math.round(windowWidth/2) - Math.round(this.site_width/2) + this.offset_left;
		}
		*/
		lPos = Math.round(winDim.width/2) - Math.round(this.popup.offsetWidth/2) + this.offset_left;
		if (lPos <= 0) lPos = 0;
		
		this.positioning(tPos, lPos);
	}

	POPUP.prototype.show = function(populate){ // show
		
		if (this.close_others){ // closing other popups
			for (var i = 0; i < listOfInstances.length; i++){
				//eval(listOfInstances[i]+".hide()");
				eval(listOfInstances[i]+".showModal(false)");
				eval(listOfInstances[i]+".popup.style.display = 'none'");
				eval(listOfInstances[i]+".state = 'hidden'");
			}
		}
		if (this.modal){ // creating modal over background
			this.showModal(this.modal);
		}
		if (this.animated){ // if popup is animated
			this.popup.style.display = 'block';
			new Effect.SlideDown(this.popup);
		}
		else{
			this.popup.style.display = 'block';
		}
		if (populate==null || populate==true) this.populate(this.message,this.mode);
		this.reposition();
		this.state = 'visible';
	}
		
	POPUP.prototype.showModal = function(show){ // show modal
		if (show){ // show 
			var modal = document.createElement('div');
			modal.id = this.modal_id;
			var modalHeight = (document.all) ? document.body.offsetHeight : document.height;
			var winDim = this.getWindowDim();
			if ( Math.round(winDim.height) >= modalHeight ) modalHeight = Math.round(winDim.height);
			modal.style.height = modalHeight + "px";
			modal.innerHTML = "&nbsp;";
			this.container.appendChild(modal);
		}
		else{ // remove
			var modal = document.getElementById(this.modal_id);
			if (modal) this.container.removeChild(modal);
		}
	}
		
	POPUP.prototype.hide = function(){ // hide
		if (this.modal){ // removing modal over background
			this.showModal(false);
		}
		if (this.animated){ // if popup is animated
			new Effect.SlideUp(this.popup);
		}
		else{
			this.popup.style.display = 'none';
		}
		this.state = 'hidden';
		this.onHide();
	}
	
	POPUP.prototype.toggle = function(){ // toggle visibility
		if (this.state == 'hidden')
			this.show();
		else if (this.state == 'visible')
			this.hide();
	}
	
	POPUP.prototype.animation = function(type){ // define animation
		var type = type || this.animation_type;
	}
	
	POPUP.prototype.populate = function(content, type){
		var type = type ? type : "";
		var content = content ? content : "";
		//var nodeNum = (this.close_able) ? 2 : 1;
		var nodeNum = 1;
		var contentDiv = this.popup.childNodes[nodeNum];

		while (contentDiv.hasChildNodes())
		{	// removing all children in contentDiv
			contentDiv.removeChild(contentDiv.firstChild);
		}

		if (this.close_able) contentDiv.appendChild(this.closeDiv()); // add close div
		if (type=="iframe"){ // add iframe with content
			var iFrameBlock = document.createElement('iframe');
			iFrameBlock.src = content;
			//iFrameBlock.style.border = '0px';
			iFrameBlock.style.border = "0px none #ffffff"
			iFrameBlock.style.height = this.h + 'px';
			iFrameBlock.style.width = this.w + 'px';
			
			contentDiv.appendChild(iFrameBlock);
		}
		else{ // add content div
			var htmlDiv = document.createElement('div');
			htmlDiv.innerHTML = content;
			contentDiv.appendChild(htmlDiv);
		}
	}
	
	POPUP.prototype.closeDiv = function(){
		var popCloser = document.createElement('div');
		popCloser.className = this.close_div_class;
		popCloser.innerHTML = '<a href="#" onclick="'+this.divId+'.hide(); return false;" style="text-decoration: none;" class="closeButton">&nbsp;</a>';
		return popCloser;
	}


	
	POPUP.prototype.messaging = function(){
		alert(this.sticky);
	}
	
	
var POPUPANIMATION = function(element, options){
	this.element = element || document.createElement('div');
	this.options = options || {};
	this.mode = ('mode' in this.options) ? this.options.mode : 'slide';
	this.toX = ('toX' in this.options) ? this.options.toX : 200;
	this.toY = ('toY' in this.options) ? this.options.toY : 200;
	this.fromX = ('fromX' in this.options) ? this.options.fromX: (0 - this.element.style.width);
	this.fromY = ('fromY' in this.options) ? this.options.fromY : (this.element.y);
	this.steps = ('steps' in this.options) ? this.options.steps : 99;
	this.interval = ('interval' in this.options) ? this.options.interval : 50;
	
	this.timer = null;
	this.active = 0;
	this.num = 0;
	this.path = [];
}
	
	POPUPANIMATION.prototype.alertMe = function(){
		alert(this.toX)
	}
	
	POPUPANIMATION.prototype.animate = function(interval){
		if (this.active) return;
		this.active = 1;
		this.timer = setInterval(this.element.id + ".animation.step()", interval);
		var ar = Array();
		for (var i = 0; i < this.steps; i++){
			var fx = this.left();
			var fy = this.top();
			var dx = this.toX - fx;
			var dy = this.toY - fy;
			var sx = dx / this.steps;
			var sy = dy / this.steps;
			fx += sx; fx = Math.round(fx)
			fy += sy; fy = Math.round(fy)
$("debug").update("fx: "+fx+", fy: "+fy+"<br/>");
			ar[i] = {x:fx, y:fy};
		}
		this.path = ar;
	}

	POPUPANIMATION.prototype.step = function(){
		this.moveTo(this.path[this.num].x,this.path[this.num].y);
		if ( this.num >= this.path.length - 1 ){
			clearInterval(this.timer);
			this.active = 0;
		} else {
			this.num++;
		}
	}
	POPUPANIMATION.prototype.left = function(){
		return parseInt(this.element.style.left);
	}
	POPUPANIMATION.prototype.top = function(){
		return parseInt(this.element.style.top);
	}
	POPUPANIMATION.prototype.moveTo = function(x,y){
		this.element.style.left = x + "px";
		this.element.style.top = y + "px";
	}
	





// Initializing overlays
function initializeOverlays(){
	olLogin = new POPUP('olLogin',{message:'/sitewide/inc/overlay/login.jhtml?hdrType=simple',mode:'iframe',h:420});
	olSignup = new POPUP('olSignup',{message:'/sitewide/inc/overlay/signup_lazona.jhtml?hdrType=simple',mode:'iframe',w:450,h:420});
	olSignupLZ = new POPUP('olSignupLZ',{message:'/sitewide/inc/overlay/signup.jhtml?hdrType=simple',mode:'iframe',w:450,h:420});
	olShare = new POPUP('olShare',{message:'/sitewide/inc/overlay/share.jhtml?hdrType=simple',h:540,mode:'iframe'});
	olEmailVerify = new POPUP('olEmailVerify',{message:'/sitewide/inc/overlay/email_verify.jhtml?hdrType=simple',mode:'iframe',h:340,w:420});
	olAgreeTerms = new POPUP('olAgreeTerms',{message:'/sitewide/inc/overlay/agreeToTerms.jhtml',mode:'iframe',h:340,w:420});
	//olSignOff = new POPUP('olSignOff',{message:'<div class="olMsgContainer"><div align="center"><br/><br/><strong>You are now signed off.</strong><br/><br/><br/><a href="#" onclick="olSignOff.hide(); return false;" class="btnBlue">CLOSE</a></div></div>'});
	//olCommJoin = new POPUP('olCommJoin',{message:'/sitewide/inc/overlay/join.jhtml?hdrType=simple',mode:'iframe',close_able:false,h:390,w:450});
	olCommJoin = new POPUP('olCommJoin',{message:'/sitewide/inc/overlay/join.jhtml?hdrType=simple',mode:'iframe',h:670,w:470});
	olPasswordLZ = new POPUP('olPasswordLZ',{message:'/sitewide/inc/overlay/password_reminder_lazona.jhtml?hdrType=simple',mode:'iframe',w:450,h:420});
	olPassword = new POPUP('olPassword',{message:'/sitewide/inc/overlay/password_reminder.jhtml?hdrType=simple',mode:'iframe',w:450,h:420});
	
	olGeneral = new POPUP('olGeneral',{message:""});

	// community joining alert
	if (typeof(isCommunityMember) != "undefined"){
		launchCommunityJoin(isCommunityMember);
	}
	// email verification alert
	else if (typeof(isEmailVerified) != "undefined"){
		launchEmailVerify(isEmailVerified);
	}
	
	// for login errors
	/*
	if (loginErrors.length > 0)
	{ 
		var repopulate = false;

		olLogin.populate('<div class="olMsgContainer"><h1>Sign In</h1><br/><strong>'+loginErrors+'</strong><br/>Please <a href="#" onclick="olLogin.populate(olLogin.message,\'iframe\');">login again</a> or create a <a href="#" onclick="olLogin.populate(olSignup.message,\'iframe\');">new a2n account</a></div>');
		//olLoginError = new POPUP('olLoginError',{message:loginErrors});
		olLogin.show(repopulate);
   }
   */
}

// used for launching joining community popup
function launchCommunityJoin(member){
	if (member=="false"){
		olCommJoin.show();
	}
}

// used for launching email verification popup
function launchEmailVerify(verified){
	if (verified==false){
		olEmailVerify.show();
	}
}