/*********************************************************************************************
 **          MGF.GEMAIRE v1.0.20101201 | ©2010 Mediagistic | All rights reserved.           **
 **                  http://www.mediagisticpageone.com | +1.813.909.7770                    **
 ********************************************************************************************/

var MG;

var MG_runFSlider = false;
if (typeof jQuery == 'undefined'){
	var url = window.location.href;
	if (url.search(/localhost/) != -1){
		alert("Warning: jQuery not found.\nThis is a fundamental error. Functionality beyond this point should not be expected.");
	}
}

$('document').ready(function(){
	MG = new MediagisticFunctions();
	MG.BuildMenu();
	$("#mg-win").fadeIn("fast");
	var t = setTimeout(function(){
		if (typeof MG_showFSlider == 'undefined') {
			MG_runFSlider = false;
		} else {
			MG_runFSlider = MG_showFSlider;	
		}
		if (MG_runFSlider == true){
			MG.Widgets.FSlider = new MG.Widgets.FeaturedSlider();
			MG.Widgets.FSlider.Go();
			MG.Widgets.WC = new MG.Widgets.WxClock();
			MG.Widgets.WC.Go();
		}
	},500);
});

function MediagisticFunctions() {
//	this.SystemMessage = "";
//	this.OutputSysMsg = function() {
//		$("#mg-widget-wxclock").html(this.SystemMessage);
//	}
	this.Widgets = new MG_Widgets();

	this.BuildMenu = function(){
		//--- quick dropmenu
		var menu = new function(){
			this.showMenu = function(child_menu) {
				if ($(child_menu).is(":hidden")) {
					$(child_menu).slideDown('fast');
				}
			}
			this.hideMenu = function(child_menu) {
				$(child_menu).slideUp('fast');
			}
			this.showFlyOut = function(child_menu) {
				if ($(child_menu).is(":hidden")) {
					$(child_menu).fadeIn('fast');
				}
			}
			this.hideFlyOut = function(child_menu) {
				$(child_menu).fadeOut('fast');
			}
		};
	
		$('.parent').mouseenter(function() {
			menu.showMenu($(this).find('ul.dropdown'));
		});
		$('.parent').mouseleave(function() {
			menu.hideMenu($(this).find('ul.dropdown'));
		});
		$('li.childitem').mouseenter(function() {
			menu.showFlyOut($(this).find('ul.flyout'));
		});
		$('li.childitem').mouseleave(function() {
			menu.hideFlyOut($(this).find('ul.flyout'));
		});
		//$('ul.flyout').css({width:'0px',opacity:0});
	}
	
}

MediagisticFunctions.prototype.ScrollPageTo = function(tgtElementById, offsetPx, openDivAfter) {
	var tgt = $("#"+tgtElementById);
	var tgtY = tgt.offset();
	if (!offsetPx){offsetPx=0;}
	var adjScroll = tgtY.top+offsetPx;
	$('html, body').animate({
		scrollTop: adjScroll
	},500,function(openDivAfter){
		if(typeof(openDivAfter)!="undefined"){
			$("#"+openDivAfter).slideDown("fast");
		}
	});
}








function MG_Widgets(){
	// Global Widget Settings (if any) go here.  Widgets themselves defined below.
}

MG_Widgets.prototype.WxClock = function(){
	// weather information handled using server-side code.  Only the time will be javascript.
	this.Go = function(){
		if ($("#mg-wxclock-clock")) {
			UpdateTime();
		}
	}
	function UpdateTime() {
		var d = new Date();
		var hrs,min,ind;
		if (d.getHours() > 12){
			hrs = d.getHours() - 12;
			ind = "PM";
		} else if (d.getHours() == 0) {
			hrs = 12;
			ind = "AM";
		} else {
			hrs = d.getHours();
			ind = "AM";
		}
		if (d.getMinutes() < 10){
			min = "0" + d.getMinutes().toString();
		} else {
			min = d.getMinutes();
		}
		$("#mg-wxclock-clock-hrs").html(hrs);
		$("#mg-wxclock-clock-min").html(min);
		$("#mg-wxclock-clock-ind").html(ind);
		var t = setTimeout(function(){
			UpdateTime()},10000);
	}
	//mg-wxclock-clock-hrs
	
}

MG_Widgets.prototype.FeaturedSlider = function(){
// fields...
	var firstRun = true;
	var isTxRunning = false; // true during transitions. used to prevent executing multiple transitions at once.
	var isTimerRunning = false; // true to evaluate if MG.Widgets.FSlider.waitForIt contains a running timer.
	var isPaused = false; 
	var direction = 1; // -1=REV[<-] | 0=STOP[--] | 1=FWD[->]
	var slideIdPrefix = "mg-feature-slide";
	var slideCount = 4;
	var currentSlideNum = 1;
	var prevSlideNum = function(){
		if (currentSlideNum == 1){
			return 1;
		} else {
			return slideCount;
		}
	}
	var nextSlideNum = function(){
		if (currentSlideNum == slideCount){
			return 1;
		} else {
			return currentSlideNum + 1;
		}
	}
	var posDefault = 0;
	var posLeft = -1300;
	var posRight = 1300;
	var mouseX = 0;
	var mouseY = 0;
	var swipeActive = false;
	var swipeListening = false;
	var swipeStartX = 0;
	var swipeEndX = 0;

	var waitTime = 5000; // time between transitions, in ms

	var currentSlideId = function(){
		if (currentSlideNum < 10) {
			return slideIdPrefix + "0" + currentSlideNum;
		} else {
			return slideIdPrefix + currentSlideNum;
		}
	}
	var nextSlideId = function(){
		var nsn;
		if (currentSlideNum == slideCount) {
			nsn = 1;
		} else {
			nsn = currentSlideNum + 1;
		}			
		if (nsn < 10) {
			return slideIdPrefix + "0" + nsn;
		} else {
			return slideIdPrefix + nsn;
		}
	}
	var prevSlideId = function(){
		if (currentSlideNum == 1) {
			psn = slideCount;
		} else {
			psn = currentSlideNum - 1;
		}
		if (psn < 10) {
			return slideIdPrefix + "0" + psn;
		} else {
			return slideIdPrefix + psn;
		}
	}

	this.Go = function() {
		// initialize position + opacity for slides
		var p = "";
		for(i=1;i<=slideCount;i++){
			if (i < 10) { p = "0"; } else { p = ""; } // include "0" if under 10
			// set initial positions...
			$("#"+slideIdPrefix+p+i).css({marginLeft : posLeft,	opacity : 0});
			$("#"+slideIdPrefix+p+i).show(); // opacity still 0, prepared for animation
		}

		// bind pause on mouseover/ resume on mouseout
		$("#mg-feature-layer").mouseover(function(){MG.Widgets.FSlider.Pause();});
		$("#mg-feature-layer").mouseout(function(){MG.Widgets.FSlider.ResumePlay();});
		
		// bind swipe nav action
		$("#mg-feature-layer").mousemove(function(e){
			// we don't care where it really is, we're just looking for a difference
			e.preventDefault();
			mouseX = e.pageX;
			mouseY = e.pageY;
		});
		$("#mg-feature-layer").mousedown(function(e){
			e.preventDefault();
			// get current mouse position
			swipeStartX = mouseX;
			// listen for movement
			swipeListening = true;
		});
		$("#mg-feature-layer").mouseup(function(){
			var swipeeval = 0;
			if (swipeListening == true){
				swipeEndX = mouseX;
				if (swipeEndX < swipeStartX) {
					// back
					if ((swipeStartX - swipeEndX) > 12) {
						// intentional swipe detected
						var prev;
						if (currentSlideNum == 1) {
							prev = slideCount;
						} else {
							prev = currentSlideNum - 1;
						}
						MG.Widgets.FSlider.ResumePlay(prev);
					}
				} else {
					// fwd
					if ((swipeEndX - swipeStartX) > 12) {
						// intentional swipe detected
						var next;
						if (currentSlideNum == slideCount) {
							next = 1;
						} else {
							next = currentSlideNum + 1;
						}
						MG.Widgets.FSlider.ResumePlay(next);
					}
				}
			}
		});

		// bind micronav slide links...
		$("#mg-feature-micronav").children(".slideLink").each(function(index){
			var tgt = index+1;
			$(this).click(function(e){
				MG.Widgets.FSlider.ResumePlay(tgt);
				return false;
			});
			$(this).css({fontStyle:"italic"});
			$(this).attr("title","navigate to slide ("+tgt+")");
			
			// need to dynamically assign an id to each
			var mnid = "mg-feature-micronav-i"+tgt
			$(this).attr("id",mnid);
			
			// set first bkg color
//			$("#mg-feature-micronav-i1").css({
//				backgroundColor:"#FFFFFF"
//			});

		});
		
		// bind first run control links
		var $btnBack = $("#mg-feature-btback");
		if ($btnBack){
			$btnBack.bind("click",function(e){
				var prev;
				if (currentSlideNum == 1) {
					prev = slideCount;
				} else {
					prev = currentSlideNum - 1;
				}
				MG.Widgets.FSlider.ResumePlay(prev);
			});
		}
		var $btnNext = $("#mg-feature-btnext");
		if ($btnNext){
			$btnNext.bind("click",function(e){
				var next;
				if (currentSlideNum == slideCount) {
					next = 1;
				} else {
					next = currentSlideNum + 1;
				}
				MG.Widgets.FSlider.ResumePlay(next);
			});
		}

		// animate first slide in
		isTxRunning = true; // is this needed anymore?
		var $cs = $("#"+currentSlideId());
		$cs.css({marginLeft : posDefault,opacity : 0});
		$cs.animate({opacity : 1},1000,"swing");

		// hand over to main cycle loop
		firstRun = false;
		isTxRunning = false;
		MG.Widgets.FSlider.ResumePlay();

	} // end this.Go()

	this.WaitForIt; //container for timers

	this.Pause = function() {
		isPaused = true;
		clearInterval(MG.Widgets.FSlider.WaitForIt);
	}

	this.ResumePlay = function(tgt) {
		isPaused = false;
		if (!tgt) {
			tgt = 0;
		}
		if (tgt != 0 && tgt != currentSlideNum){ // micronav click
			clearInterval(MG.Widgets.FSlider.WaitForIt);
			MG.Widgets.FSlider.WaitForIt = setInterval(function(){
				FxCrossSlide(tgt);
				//tgt = 0
			},1);
		} else {
			clearInterval(MG.Widgets.FSlider.WaitForIt);
			MG.Widgets.FSlider.WaitForIt = setInterval(function(){
				FxCrossSlide();
			},5000);
		}
	}

	
	// main slide transition...
	function FxCrossSlide(tgt){
		//clearInterval(MG.Widgets.FSlider.WaitForIt);
		if (tgt != currentSlideNum || isTxRunning != true) {
			isTxRunning = true;
			
			var $tgt;
			var $cs = $("#"+currentSlideId());
			if (!tgt || tgt == "" || tgt == 0) { // micronav and manual controls pass a number to specify next slide
												 // if arg not provided, assume this.nextSlideId is the next slide
												 // tgt, if provided will be a number from 1 to 99
				tgt = 0;
				$tgt = $("#"+nextSlideId());
			} else { // target arg provided. It is the next slide
				var p = "";
				if (tgt < 10) { p = "0"; }
				$tgt = $("#"+slideIdPrefix+p+tgt);
			}
			// 1. Current Slide Out, Next Slide In...

			//	a. set direction
			if (!tgt || tgt == 0) { 
				direction = 1; // normal forward operation
			} else if (tgt < currentSlideNum){ // change direction on any manual "back" action
				if (currentSlideNum == slideCount && tgt == 1) {
					direction = 1; // so it doesn't look funny if going forward to slide 1. will affect micronav, but no big deal
				} else {
					direction = -1;
				}
			} else { // switch to forward
				direction = 1;
			}		

			//	b. position next slide. set out position for current slide.
			var curPosOut; // dynamic container for the direction-dependent out left margin

			if (direction == -1){ // reverse. start next slide in the right position.
				$tgt.css({
					marginLeft : posRight,
					opacity : 0
				});
				curPosOut = posLeft; // set current slide out position to left
			} else { // forward. start next slide in the left position and hide it
				$tgt.css({
					marginLeft : posLeft,
					opacity : 0
				});
				curPosOut = posRight; // set current slide out position to the right
			}

			$tgt.hide(); // if for whatever reason it isn't in this state already
			//	c. animate
			
			$cs.animate({
				marginLeft : curPosOut,
				opacity : 0
			},1000,"swing",function(){
				$cs.hide();
			});
			$tgt.css({opacity : 0});

			//	d. change micronav
			// micronav background

//			$("#mg-feature-micronav-i"+currentSlideNum).css({
//				backgroundColor:"#CCCCCC"
//			});

			var tgts;
			if (tgt == 0) {
				tgts = nextSlideNum();
			} else {
				tgts = tgt;
			}
//			$("#mg-feature-micronav-i"+tgts).css({
//				backgroundColor:"#FFFFFF"
//			});
			
			switchMap(tgts);
			
			$tgt.show();
			$tgt.animate({marginLeft : 0,opacity : 1},1000,"swing");
			

			// 2. Update Current, Previous, Next...
			if (tgt == 0) { // tgt = 0 during normal automatic operation - need to get currentSlideNum and advance to next
				if (currentSlideNum == slideCount){
					currentSlideNum = 1;
				} else {
					currentSlideNum += 1;
				}
			} else { // tgt != 0 if transitioning due to a click in the mininav or a manual fwd/back action - either way, 
						// tgt = the number of the slide we should have just transitioned to. - treat tgt as currentSlideNum and advance to next
				currentSlideNum = tgt;
			}

			var $btnBack = $("#mg-feature-btback");
			if ($btnBack){
				$btnBack.bind("click",function(e){
					var prev;
					if (currentSlideNum == 1) {
						prev = slideCount;
					} else {
						prev = currentSlideNum - 1;
					}
					MG.Widgets.FSlider.ResumePlay(prev);
				});
			}
			var $btnNext = $("#mg-feature-btnext");
			if ($btnNext){
				$btnNext.bind("click",function(e){
					var next;
					if (currentSlideNum == slideCount) {
						next = 1;
					} else {
						next = currentSlideNum + 1;
					}
					MG.Widgets.FSlider.ResumePlay(next);
				});
			}
			// 3. Wait For Next Loop...
			isTxRunning = false;		
			if (isPaused != true) {
				MG.Widgets.FSlider.ResumePlay();
			}
		}
	} // end FxCrossSlide()
	
	function switchMap(tgt) {
		// these are NOT dynamic
		var img;
		switch(tgt){
			case 1:
				img = "g1";
				break;
			case 2:
				img = "gd";
				break;
			case 3: 
				img = "as";
				break;
			case 4:
				img = "hc";
				break;
			default:
				img = "g0";
				break;
		}
		$("#mg-content-map").css({backgroundImage : "url('/images/map_"+img+".png')"});
	}
}

