var browserAgent = navigator.userAgent.toLowerCase();

function CheckBrowser()
{
	if( browserAgent.indexOf( "msie 5.0" ) > -1 && browserAgent.indexOf( "mac_powerpc" ) > -1 )
	{
		return PopWindow( '/ngm/browser_popup.html', 455, 190, 'no');
	}
}

var subscribeURL = "https://www.subscribengm.com/joinin15.aspx?MSCCMPLX=06FEBNGMGL9";

function CheckSubscribe()
{
	if( window.location.search.toLowerCase().indexOf( 'subscriber' ) == -1 )
	{
		setTimeout( "PopWindow(subscribeURL, 800, 600)", 3000 );
	}
}

//- If the rendered page contains a flash movie, check the user's browser for the plug-in -//
if( typeof( NGMPageContainsFlash ) != 'undefined' )
{

	if( NGMPageContainsFlash && window.location.href.indexOf( 'editor.aspx' ) == -1 )
	{
		var flashinstalled = 0;
		var flashversion = 0;
		MSDetect = "false";
		if (navigator.plugins && navigator.plugins.length)
		{
			x = navigator.plugins["Shockwave Flash"];
			if (x)
			{
				flashinstalled = 2;
				if (x.description)
				{
					y = x.description;
					flashversion = y.charAt(y.indexOf('.')-1);
				}
			}
			else
				flashinstalled = 1;
			if (navigator.plugins["Shockwave Flash 2.0"])
			{
				flashinstalled = 2;
				flashversion = 2;
			}
		}
		else if (navigator.mimeTypes && navigator.mimeTypes.length)
		{
			x = navigator.mimeTypes['application/x-shockwave-flash'];
			if (x && x.enabledPlugin)
				flashinstalled = 2;
			else
				flashinstalled = 1;
		}
		else
			MSDetect = "true";

		if( flashinstalled == 0 && MSDetect == "false" )
		{
			document.write( '<div style="padding:0px; margin:0px; width:100%; align:left">' );
			document.write( '<table cellspacing=0 cellpadding=0 border=0><tbody><tr>' );
			document.write( '<td align=left><span class="greyHeader">You don\'t have the latest version of Macromedia Flash Player.</span></td>' );
			document.write( '<td align=left><a href="http://www.macromedia.com/go/getflashplayer"><img src="/ngm/images/alternate.gif" border="0" width="88" height="31" /></a></td></tr>' );
			document.write( '<tr><td colspan="2"><span class="popupContent">The <i>National Geographic</i> magazine web site makes use of Macromedia<sup>&reg;</sup> Flash content which cannot be played by your current Macromedia Flash Player.<br><br></span></td>' );
			document.write( '</tr></tbody></table></div>' );
		}
	}
}

function HideAll()
{
	var navTableObj = document.getElementById( 'topNavTable' );
	var imgCollection = navTableObj.getElementsByTagName( 'IMG' );
	for( var i = 0; i < imgCollection.length; i++ )
	{
		if( imgCollection[i].src.indexOf( '_on.gif' ) > -1 )
		{
			var tempSrc = imgCollection[i].src.slice( 0, imgCollection[i].src.indexOf( '_on.gif' ) );
			tempSrc += '.gif';
			imgCollection[i].src = tempSrc;
		}
	}
}

function MM_findObj(n, d)
{ //v4.01
	var p,i,x;

	if(!d) d=document;

	if((p=n.indexOf("?"))>0&&parent.frames.length)
	{
		d=parent.frames[n.substring(p+1)].document;
		n=n.substring(0,p);
	}

	if(!(x=d[n])&&d.all) x=d.all[n];

	for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];

	for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);

	if(!x && d.getElementById) x=d.getElementById(n);

	return x;
}

function MM_preloadImages()
{ //v3.0
	var d=document;

	if(d.images)
	{
		if(!d.MM_p) d.MM_p=new Array();
		var i,j=d.MM_p.length,a=MM_preloadImages.arguments;

		for(i=0; i<a.length; i++)
		{
			if (a[i].indexOf("#")!=0)
			{
				d.MM_p[j]=new Image;
				d.MM_p[j++].src=a[i];
			}
		}
	}
}

function MM_swapImage()
{ //v3.0
	var i,j=0,x,a=MM_swapImage.arguments;
	document.MM_sr=new Array;

	for(i=0;i<(a.length-2);i+=3)
	{
		if ((x=MM_findObj(a[i]))!=null)
		{
			document.MM_sr[j++]=x;
			if(!x.oSrc) x.oSrc=x.src;
			x.src=a[i+2];
		}
	}
}

function MM_swapImgRestore()
{ //v3.0
	var i,x,a=document.MM_sr;
	for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++)
		x.src=x.oSrc;
}

function P7_autoHide() { //v1.3 by PVII
 var i,g,args=P7_autoHide.arguments;
 for(i=0;i<args.length;i++){if((g=MM_findObj(args[i]))!=null){
  g.p7aHide=true;if(document.layers){
  g.captureEvents(Event.MOUSEOUT);}g.onmouseout=P7_hideDiv;g.p7ahD=true;}}
}

function P7_autoLayers() { //v1.4 by PVII
 var g,b,k,f,args=P7_autoLayers.arguments;a=parseInt(args[0]);if(isNaN(a))a=0;
 if(!document.p7setc){p7c=new Array();document.p7setc=true;for(var u=0;u<10;u++){
 p7c[u]=new Array();}}for(k=0;k<p7c[a].length;k++){if((g=MM_findObj(p7c[a][k]))!=null){
 b=(document.layers)?g:g.style;b.visibility="hidden";}}for(k=1;k<args.length;k++){
 if((g=MM_findObj(args[k]))!=null){b=(document.layers)?g:g.style;b.visibility="visible";f=false;
 for(var j=0;j<p7c[a].length;j++){if(args[k]==p7c[a][j]) {f=true;}}
 if(!f){p7c[a][p7c[a].length++]=args[k];}}}
}

function P7_hideDiv(evt) { //v1.3 by PVII
 var b,relT,mT=false;
 if(document.layers){b=evt.target;if(b.p7aHide){
  b.visibility="hidden";}else{routeEvent(evt);}
 }else if(document.all&&!window.opera){b=event.srcElement;
  while(b!=null){if(b.tagName=="DIV" && b.p7ahD){mT=true;break;}b=b.parentElement;}
  if(!b.contains(event.toElement)){b.style.visibility="hidden";}
 }else if(document.getElementById){b=evt.currentTarget;relT=evt.relatedTarget;
  while(relT!=null){if(b==relT){mT=true;break;}
  relT=relT.parentNode;}if(!mT){b.style.visibility="hidden";}}
}

function P7_Snap() { //v2.63 by PVII
 var x,y,ox,bx,oy,p,tx,a,b,k,d,da,e,el,tw,q0,xx,yy,w1,pa='px',args=P7_Snap.arguments;a=parseInt(a);
 if(document.layers||window.opera){pa='';}for(k=0;k<(args.length);k+=4){
 if((g=MM_findObj(args[k]))!=null){if((el=MM_findObj(args[k+1]))!=null){
 a=parseInt(args[k+2]);b=parseInt(args[k+3]);x=0;y=0;ox=0;oy=0;p="";tx=1;
 da="document.all['"+args[k]+"']";if(document.getElementById){
 d="document.getElementsByName('"+args[k]+"')[0]";if(!eval(d)){
 d="document.getElementById('"+args[k]+"')";if(!eval(d)){d=da;}}
 }else if(document.all){d=da;}if(document.all||document.getElementById){while(tx==1){
 p+=".offsetParent";if(eval(d+p)){x+=parseInt(eval(d+p+".offsetLeft"));y+=parseInt(eval(d+p+".offsetTop"));
 }else{tx=0;}}ox=parseInt(g.offsetLeft);oy=parseInt(g.offsetTop);tw=x+ox+y+oy;
 if(tw==0||(navigator.appVersion.indexOf("MSIE 4")>-1&&navigator.appVersion.indexOf("Mac")>-1)){
  ox=0;oy=0;if(g.style.left){x=parseInt(g.style.left);y=parseInt(g.style.top);}else{
  w1=parseInt(el.style.width);bx=(a<0)?-5-w1:-10;a=(Math.abs(a)<1000)?0:a;b=(Math.abs(b)<1000)?0:b;
  x=document.body.scrollLeft+event.clientX+bx;y=document.body.scrollTop+event.clientY;}}
 }else if(document.layers){x=g.x;y=g.y;q0=document.layers,dd="";for(var s=0;s<q0.length;s++){
  dd='document.'+q0[s].name;if(eval(dd+'.document.'+args[k])){x+=eval(dd+'.left');y+=eval(dd+'.top');
  break;}}}e=(document.layers)?el:el.style;xx=parseInt(x+ox+a),yy=parseInt(y+oy+b);
 if(navigator.appVersion.indexOf("MSIE 5")>-1 && navigator.appVersion.indexOf("Mac")>-1){
  xx+=parseInt(document.body.leftMargin);yy+=parseInt(document.body.topMargin);}
 e.left=xx+pa;e.top=yy+pa;}}}
}

function PopImage(file, width, height, showScroll)
{
	if ( typeof( showScroll ) == 'undefined' )
		showScroll = 'yes';

	var imageWindow = window.open( "", "Popup", "height=" + height + ",width=" + width +
	",toolbar=no,location=no,directories=no,status=no,menubar=no,resizable=no,scrollbars=" + showScroll )

	imageWindow.document.write('<html><head><title>National Geographic Magazine @ nationalgeographic.com</title></head>');
	imageWindow.document.write('<body style="margin:0px; padding:0px;">');
	imageWindow.document.write('<img src="' + file + '" alt="National Geographic Magazine Gallery Image" />');
	imageWindow.document.write('</body></html>');
	imageWindow.document.close();

	return false;
}

function PopWindow(file, width, height, showScroll)
{
	if ( typeof( showScroll ) == 'undefined' )
		showScroll = 'yes';

	window.open(file, "Popup", "height=" + height + ",width=" + width +
	",toolbar=no,location=no,directories=no,status=no,menubar=no,resizable=no,scrollbars=" + showScroll)
	return false;
}

function PopWindowWildCam(file, width, height)
{
	parent.window.open(file, "Popup", "height=" + height + ",width=" + width +
	",toolbar=no,location=no,directories=no,status=no,menubar=no,resizable=no,scrollbars=no")
	return false;
}

function PopWindowToolbar(file, width, height, showScroll)
{
	if ( typeof( showScroll ) == 'undefined' )
		showScroll = 'yes';

	window.open(file, "Popup", "height=" + height + ",width=" + width +
	",toolbar=1,location=1,directories=0,status=1,menubar=1,resizable=1,scrollbars=1")
	return false;
}

function ResetNav( navType)
{
	var pagePath = window.location.href.toLowerCase();

	if( pagePath.indexOf( 'editor.aspx' ) > -1 )
		return;

	if( pagePath.indexOf( 'forums.ngm.com' ) > -1 || pagePath.indexOf( 'localhost' ) > -1 || pagePath.indexOf( 'aurora' ) > -1 )
		var issueDate = 9999;
	else if( pagePath.indexOf( '/finaledit/' ) > -1 )
		var issueDate = window.location.href.slice( window.location.href.indexOf( '/finaledit/' ) + 11, window.location.href.indexOf( '/finaledit/' ) + 15 );
	else if( pagePath.indexOf( '/zipcode/' ) > -1 )
		var issueDate = window.location.href.slice( window.location.href.indexOf( '/zipcode/' ) + 9, window.location.href.indexOf( '/zipcode/' ) + 13 );
	else
	{
		var issueDate = window.location.href.slice( window.location.href.indexOf( '/ngm/' ), window.location.href.indexOf( '/ngm/' ) + 9 );
		var tempArray = new Array();
		tempArray = issueDate.split( '/' );
		issueDate = tempArray[2];
	}

	if( issueDate < '0605' )
	{
		var templateNames = new Array( 'features', 'departments', 'multimedia', 'onlineextra', 'forums', 'funstuff', 'archives', 'subscribe', 'home' );
		var imageNames = new Array( 'features', 'departments', 'multimedia', 'online_extras', 'forums', 'fun_stuff', 'archives', 'subscribe', 'home' );

		if( navType == 8 )
			navType = 0;
	}
	else
	{
		var templateNames = new Array( 'features', 'multimedia', 'onlineextra', 'forums', 'funstuff', 'archives', 'subscribe', 'home' );
		var imageNames = new Array( 'features', 'multimedia', 'online_extras', 'forums', 'fun_stuff', 'archives', 'subscribe', 'home' );

		if( navType == 7 )
			navType = 0;
	}

	MM_swapImgRestore();
	MM_swapImage( templateNames[navType],'','/ngm/redesign/nav/top_' + imageNames[navType] + '_on.gif',1);

	SwapSubNav( navType );

	if( browserAgent.indexOf( "gecko" ) > -1 )
		NavOnLoadEvent();
}

function RefreshAds()
{
	var f = top.frames;
  for (var i=0; i<f.length; i++)
  {
		var cur_f = f[i];
		if (cur_f.name.indexOf("adFrame") != -1) 
    {
			cur_f.location.reload();
		}
	}
}


function load(targetWindow, page)
{
	try
	{
		if (!document.getElementById)
			document.layers[targetWindow].src = page;
		else
			eval('window.'+targetWindow+'.location.href = page');
	}
	catch(e){}
}

/*** deprecated -- we're now reloading the iframes, 
 *** (regardless of what content they contain)

function ReallyRefreshAds()
{
	load("ngmLeaderboard", "/ngm/ads/ngmLeader.html");
	load("ngmTower", "/ngm/ads/ngmTower.html");
	load("ngmBigBox", "/ngm/ads/ngmBigBox.html");
	load("ysngmLeaderboard", "/ngm/ads/ysngmLeader.html");
	load("ysngmTower", "/ngm/ads/ysngmTower.html");
	load("ysngmBigBox", "/ngm/ads/ysngmBigBox.html");
	load("voengmLeaderboard", "/ngm/ads/voengmLeader.html");
	load("voengmTower", "/ngm/ads/voengmTower.html");
	load("ngmMiniLeader", "/ngm/ads/ngmMiniLeader.html");
}
***/

function SwapArchive( pagePath )
{
	var currentLoc = window.location.href;
	currentLoc = currentLoc.slice( 0, currentLoc.indexOf( '/ngm/' ) );

	window.location.href = currentLoc + pagePath;
}

function SwapSubNav( subNavID )
{
	var subNavHTML = "";

	subNavHTML = unescape( navArray[subNavID] );

	var tableObj = document.getElementById( 'yellowNav' );

	if( browserAgent.indexOf( "msie" ) > -1 )
	{
		if( browserAgent.indexOf( "msie 5.0" ) > -1 && browserAgent.indexOf( "mac_powerpc" ) > -1 )
			return;
		else
			tableObj.outerHTML = subNavHTML;
	}
	else if( browserAgent.indexOf( "gecko" ) > -1 )
	{
		var myObj = document.getElementById( "yellowNav" );
		var tempHTML = subNavHTML.slice( subNavHTML.indexOf( '<tbody' ), subNavHTML.lastIndexOf( '</tbody>' ) + 8 );
		myObj.innerHTML = tempHTML;

		return;
	}
	else
		tableObj.outerHTML = subNavHTML;

	NavOnLoadEvent();
}

function Reset2007Navigation()
{
	var navContainer = document.getElementById( 'navFix' );
	var linkColl = navContainer.getElementsByTagName( 'A' );

	for( var i = 0; i < linkColl.length; i++ )
	{
		var tempSrc = linkColl[i].getElementsByTagName( 'IMG')[0].src;

		if( tempSrc.indexOf( '_on.gif' ) > -1 )
		{
			tempSrc = tempSrc.replace( "_on.gif", ".gif" );
			linkColl[i].getElementsByTagName( 'IMG')[0].src = tempSrc;
		}
	}

	Update2007Navigation();
}

function Update2007Navigation()
{
	var navContainer = document.getElementById( 'navFix' );
	var linkColl = navContainer.getElementsByTagName( 'A' );
	var pageLoc = window.location.href;
	for( var i = 0; i < linkColl.length; i++ )
	{
		if( pageLoc == linkColl[i] )
		{
			var tempSrc = linkColl[i].getElementsByTagName( 'IMG')[0].src;
			linkColl[i].getElementsByTagName( 'IMG')[0].src = tempSrc.slice( 0, tempSrc.indexOf( '.gif' ) ) + '_on.gif';
			break;
		}
		else if( pageLoc.indexOf( '/yourshot/' ) > -1 )
		{
			var tempSrc = linkColl[2].getElementsByTagName( 'IMG')[0].src;
			linkColl[2].getElementsByTagName( 'IMG')[0].src = tempSrc.slice( 0, tempSrc.indexOf( '.gif' ) ) + '_on.gif';
			break;
		}
		else if( pageLoc.indexOf( 'forums.ngm.com' ) > -1 || pageLoc.indexOf( 'community.ngm.com' ) > -1 )
		{
			var tempSrc = linkColl[5].getElementsByTagName( 'IMG')[0].src;
			linkColl[5].getElementsByTagName( 'IMG')[0].src = tempSrc.slice( 0, tempSrc.indexOf( '.gif' ) ) + '_on.gif';
			break;
		}
	}
}

//- DOTCOM Scripts for NGM Blog -//
function submitForms()
{
	if ( ( isFirstname() ) && ( isLastname() ) && ( isAddress1() ) && ( isCity() ) && ( isState() ) && ( isZip() ) && ( isGender() ) && ( isSubscriber() ) && ( isEmail() ) )
		return true;

	return false;
}

function isFirstname()
{
	var str = document.regform.formfirstname.value;
	if ( str == "" )
	{
		alert( "\nThe First Name field is blank.\n\nPlease enter your first name." )
		document.regform.formfirstname.focus();
		return false;
	}

	for ( var i = 0; i < str.length; i++ )
	{
		var ch = str.substring( i, i + 1 );
		if ( ( ( ch < "a" || "z" < ch ) && ( ch < "A" || "Z" < ch ) ) && ch != ' ' )
		{
			alert( "\nThe First Name field only accepts letters & spaces.\n\nPlease re-enter your first name." );
			document.regform.formfirstname.select();
			document.regform.formfirstname.focus();
			return false;
		}
	}

	return true;
}

function isLastname()
{
	var str = document.regform.formlastname.value;
	if ( str == "" )
	{
		alert( "\nThe Last Name field is blank.\n\nPlease enter your last name." )
		document.regform.formlastname.focus();
		return false;
	}

	for ( var i = 0; i < str.length; i++ )
	{
		var ch = str.substring(i, i + 1);
		if ( ( ( ch < "a" || "z" < ch ) && ( ch < "A" || "Z" < ch ) ) && ch != ' ' )
		{
			alert( "\nThe Last Name field only accepts letters & spaces.\n\nPlease re-enter your last name." );
			document.regform.formlastname.select();
			document.regform.formlastname.focus();
			return false;
		}
	}

	return true;
}

function isAddress1()
{
	var str = document.regform.formaddress.value;
	if ( str == "" )
	{
		alert( "\nThe Address field is blank.\n\nPlease enter your address." )
		document.regform.formaddress.focus();
		return false;
	}

	return true;
}

function isCity()
{
	var str = document.regform.formcity.value;
	if ( str == "" )
	{
		alert( "\nThe City field is blank.\n\nPlease enter your city." )
		document.regform.formcity.focus();
		return false;
	}

	return true;
}

function isState()
{
	var str = document.regform.formstate.value;
	if ( str == "" )
	{
		alert( "\nThe State field is blank.\n\nPlease enter your state." )
		document.regform.formstate.focus();
		return false;
	}

	return true;
}

function isZip()
{
	var str = document.regform.formzip.value;
	if ( str == "" )
	{
		alert( "\nThe Zip Code field is blank.\n\nPlease enter your Zip code." )
		document.regform.formzip.focus();
		return false;
	}

	if ( document.regform.formzip.value.length < 5 )
	{
		alert( "\nThe Zip Code field must be at least 5 digits long.\n\nPlease enter your Zip code." )
		document.regform.formzip.focus();
		return false;
	}

	return true;
}


function isGender()
{
	if ( ( document.regform.gender[0].checked == false ) && ( document.regform.gender[1].checked == false ) )
    	{
		alert ( "\nPlease specify your Gender: Male or Female" );
		return false;
    	}

	return true;
}

function isSubscriber()
{
	if ( ( document.regform.receive_magazine[0].checked == false ) && ( document.regform.receive_magazine[1].checked == false ) )
    	{
		alert ( "\nPlease specify whether or not you receive National Geographic Magazine." );
		return false;
    	}

	return true;
}

function isEmail()
{
	emailAddress=document.regform.formemail.value;
	if ( document.regform.formemail.value == "" )
	{
		alert( "\nThe E-MAIL field is blank.\n\nPlease enter your e-mail address." );
		document.regform.formemail.focus();
		return false;
	}

	if ( document.regform.formemail.value.indexOf ( '@',0 ) == -1 || document.regform.formemail.value.indexOf ( '.',0 ) == -1 )
	{
		alert( "\nThe E-MAIL field requires a \"@\" and a \".\"be used.\n\nPlease re-enter your e-mail address." );
		document.regform.formemail.select();
		document.regform.formemail.focus();
		return false;
	}
	else
		return true;

}



// The sm_object function retrieves a handle to the specified Flash
// object, accomodating for different DOM methods supported by 
// different browsers.  This is the method recommended by Adobe.

function sm_object(ID) {
	return (navigator.appName.indexOf("Microsoft") != -1) ? window[ID] : document[ID];
}

// The querystring function retrieves and parses query string arguments
// passed to the current page, if any, storing them in an associative array

function querystring() {
	var returnData = new Array();
	var url = parent.document.location.href.split('?', 2);
	if(url.length != 2) return returnData;

	var arguments = url[1].split('&');

	for(var i = 0; i < arguments.length; i++) {
		var argument = arguments[i].split('=', 2);
		returnData[argument[0]] = argument[1];
	}

	return returnData;
}

// The onExternalInterfaceReady function is invoked by the StoryPlate when
// the JavaScript API has been initialized.  This event handler parses 
// the (optional) index from the query string and navigates to the
// corresponding record in the StoryPlate.

function onExternalInterfaceReady(ID) {
	// retrieve reference to StoryMaker project
	var flashID = sm_object('flashObj');

	// retrieve query string
	var query = querystring();

	// identify selected index specified via query string
	if(!isNaN(query['index'])) {
		// set active slide in the StoryMaker project
		flashID.setFocusByIndex(query['index'] - 1);
	}

	// send page load omniture event
}

// The onEndChangeFocus function is invoked by the StoryPlate when the
// user navigates from record to record.  This event handler currently 
// logs nav events to a text field beneath the slideshow, but the code
// could be modified to invoke Omniture tracking events.

function onEndChangeFocus(ID, record) {
	pageIncrement();
}



// The pageIncrement function coordinates the analytics page view call and
// the ad refresh call, so that they have time to complete and don't step on each other (IE bug)
function pageIncrement() {
	var adTimeOut = window.setTimeout(RefreshAds, 500);
	var pvTimeOut = window.setTimeout(ngsPageView, 100);
}


// The ngmPageView function is a wrapper that calls the standard adrefresh/pageView code, 
// but throttles it to not occur more frequently than 1 pageView per minute
var pvCnt		= 0; 		//placeholder
function ngmPageView(pgName,delay) 
{
	if (!delay) {
		pageIncrement();
	} else {

		var now = new Date();
		var now_ms = now.getTime();
		if (pvCnt == 0) 
		{
			//counter was not set previously, initialize
			pvCnt = now_ms;
			pageIncrement();
		} else {
			var diff_time = now_ms - pvCnt;
			
			//check if threshold has been met...
			if (diff_time/1000 >= 30) 
			{
				pageIncrement();
				//reset counter
				pvCnt = 0; 		
			}
		}
	}
}


function ngsPageView() {
	//stub function for dev/stage
	//this will get overwritten when omniture_code.js loads
	//(which only loads in production)
	//so this function needs to be here for dev/testing
}

