
/* Main SSAT JS stuff ***************************** */

/* jquery Utilities ******************************* */

function log(message){
	if(window.console)console.log(message);
}

function centerObjInWindow(oDomObject){
	if(window.console)console.log("centering map");
	if(oDomObject){
		var $jqObj = jQuery(oDomObject);
	} else {
		var $jqObj = jQuery("#gmapiframe");
	}
	var $jqWinObj = jQuery(window);
	var leftTarget = Math.round(($jqWinObj.width()/2) - ($jqObj.width()/2));  //+ "px";
	var topTarget =  Math.round(($jqWinObj.height()/2) - ($jqObj.height()/2)); // + "px";
	leftTarget = (leftTarget < 0) ? 0 : leftTarget;
	topTarget = (topTarget < 0) ? 0 : topTarget;
	$jqObj.hide();
	log("leftTarget:"+leftTarget);
	log("topTarget:"+topTarget);
	$jqObj.css({left:leftTarget,top:topTarget}).fadeIn("fast");
}

function getRef(sID){
	if(document.getElementById){
		return document.getElementById(sID);
	} else if(document.all) {
		return document.all[sID];
	} else if(document[sID]){
		return document[sID];
	} else {
		return false;
	}
}

/* dojo utilities ********************************* */

// <!-- load dojo cross-domain -->
for (var module in dojo._modulePrefixes ) {   // rewrite the protocol on the hardcoded http:// aolcdn module prefixes
    dojo._modulePrefixes[module].value = dojo._modulePrefixes[module].value.replace(/http:/g, dojo.doc.location.protocol); 
  }
dojo.require("dojo.parser");
dojo.addOnLoad(function(){dojo.parser.parse();});


// <!-- toaster utilities -- for adding reminders -->
dojo.require("dojox.widget.Toaster");
if (typeof SSATB == 'undefined' || !SSATB) { var SSATB = {}; }
SSATB.namespace = function() {var a=arguments, o=null, i, j, d; for (i=0; i<a.length; i=i+1) { d=a[i].split('.'); o=SSATB; for (j=(d[0] == 'SSATB') ? 1 : 0; j<d.length; j=j+1) { o[d[j]]=o[d[j]] || {};o=o[d[j]]; } } return o; };
SSATB.namespace("SSATB.ui.toaster");
SSATB.ui.toaster.showMessage = function( msg ) {
  if (! ("widget" in SSATB.ui.toaster)) { 
    SSATB.ui.toaster.widget = new dojox.widget.Toaster(
      {id: 'toaster', positionDirection: 'tr-left', duration: 3000, type:'message'}  , dojo.byId('toaster')
    );
  }
  SSATB.ui.toaster.widget.setContent( msg ) ;
  SSATB.ui.toaster.widget.show();
}
// <!-- for managing reminder cookies reminders -->
SSATB.namespace("SSATB.reminder.ctr");
dojo.require("dojo.cookie");
SSATB.reminder.ctr.add= function(code){
  var remind = dojo.cookie("remindtc");
  remind = ( (typeof(remind) =="undefined" || remind =="" ) ? "" : remind+"^" ) + code;
  var d = document.domain.split(".");
  while (d.length>2) d.shift();
  d.unshift("");
  d = d.join(".")
  dojo.cookie("remindtc",remind , {expires:30,domain:d,path:'/'});
  SSATB.ui.toaster.showMessage("Added reminder for test center code " + code );
}
SSATB.reminder.ctr.clear= function(){
  dojo.cookie("remindtc" , null , {expires: -1});
}

// <!-- for help popup -->
dojo.require("dijit.Dialog");
dojo.addOnLoad(function(){dojo.parser.parse()});


/* Flash Player Load ****************************** */

jQuery.noConflict();

jQuery(document).ready(function(){
	var callback = function(msg){
		//console.debug( msg );
		if ( ! msg.success ) {
			jQuery("#showNoFlash").show();
		}
	};
	var flashvars = {};
	//var needsWmodeTransparent = false;
	var needsWmodeTransparent = (jQuery.browser.safari);
	//if(needsWmodeTransparent){log("we are using transp wmode because your browser sux")}
	
	var swfSrc = "";
	if(jQuery("body").hasClass("testcenters")){
		swfSrc = "swf/ssattestcenters.swf";
	} else {
		swfSrc = "swf/ssatsearch.swf";
	}
	
	if(jQuery("body").hasClass("wmodetransparent") || needsWmodeTransparent){
		var params = {
				scale: 'noScale',
				salign: 'TL',
				allowFullScreen: 'true',
				allowScriptAccess: 'sameDomain',
				wmode: 'transparent'
		};		
	} else {
		var params = {
				scale: 'noScale',
				salign: 'TL',
				allowFullScreen: 'true',
				allowScriptAccess: 'sameDomain'
		};		
	}
	if(jQuery("body").hasClass("wmodetransparent") || needsWmodeTransparent){
		var attributes = {
			id: 'ssatInterface',
			wmode: 'transparent'
		};	
	} else {
		var attributes = {
			id: 'ssatInterface'
		};	
	}
	var playerVersion = swfobject.getFlashPlayerVersion();
	var majorVersion = playerVersion.major;
	var minorVersion = playerVersion.minor;
	var playerRelease = playerVersion.release;
	//log("playerVersion:"+playerVersion+" ;majorVersion:"+majorVersion+" ;minorVersion:"+minorVersion+" ;release:"+ playerRelease);
	if(window.console)console.log("playerVersion:",playerVersion);
	
	swfobject.embedSWF(swfSrc, "flashContainer", "100%", "100%", "9", false, flashvars, params, attributes, callback);
	if (swfobject.hasFlashPlayerVersion("9.0.0")) {
		swfobject.addDomLoadEvent(createFullBrowserFlash);
	}
	getMembers = function() {		
		var requestURL = (jQuery("body").hasClass("testcenters")) ?  'data/ssattestcenters' : 'data/ssatbmembers' ;
		var jsonsuffix = (typeof(jsonExtension)=="undefined")?"":(jsonExtension||"");
		requestURL = requestURL + ".json" + jsonsuffix;
		var flashObj = document.getElementById('ssatInterface');
		var returnData;
		log(typeof(flashObj));
		//if(window.console)console.time("timing getMembers");

		jQuery.getJSON(requestURL, function(data) {
			if(flashObj.getMembersComplete){
				flashObj.getMembersComplete(data);
				//if(window.console)console.timeEnd("timing getMembers");
			}else{
				log('couldn\'t find flashObj.getMembersComplete');
			}
		});
		
		return true;

	};
}); 

/* Mapping  ****************************** */

function geoLocate(sQ){
	
	var gKey = (document.domain.indexOf("ssat.org")>-1) ? 
	"ABQIAAAArwL44gxkTmwd-zrJOCAo_xToiYQk2H-lVUZ-tXGHko7cSKaJCxSEWcYI94xCSYJiag5fzpObWeoW_w" :  // ssat.org
	"ABQIAAAAjAaucBu5f4FVHEoz-Ig5-xSYGISqi-lmNFthLfo5T_7wMVlhqxSaz_2JmoJyucgmDoD9zMwtIdsz7w" ;  // fmi
  // "ABQIAAAArwL44gxkTmwd-zrJOCAo_xRhdgyFGfOG13tgTWAcV9IXC9oAUBR6h_eC8zzd6UjM2RapAGMruuVVfQ" :  // ssatb.com
	
	var sBaseUrl = "//maps.google.com/maps/geo?key="+gKey+"&q=";
	var now = (new Date).getTime();
	var ts = "&_="+now;
	var sUrl = sBaseUrl + sQ+ts;
	var $xhrInstance =  jQuery.ajax({
		type: "GET",
		dataType:"jsonp",
		url: sUrl,
		cache:true,
		success: function(msg){
			callFlash("geoLocateComplete",msg);
			if(window.console){
				console.log( "Data returned: " , msg );
			}
		},
		error: function(XMLHttpRequest, textStatus, errorThrown) {
			// typically only one of textStatus or errorThrown  will have info
			callFlash("geoLocateFail",errorThrown);
			if(window.console){
				console.log('textStatus:',textStatus); 
				console.log('errorThrown:',errorThrown); 
			}
		},
		complete: function(){
			if(window.console)console.log("Request complete");
		}
	 });
}

var mapResultsAttempts = 0;
var maxMapResultsAttempts = 8;
var aPointObjects = [];

function mapResults(aPointObjectsFromFlash){
	aPointObjects = aPointObjectsFromFlash;
	mapResultsAttempts=mapResultsAttempts+1;
	var oMapIframe = document.getElementById('gmapiframe');
	
	log("mapResults() called with "+aPointObjects.length+" points");
	trackEvent(pageType+"MapResults");
	
	if(window.console)console.log("oMapIframe:",oMapIframe);
	if(window.console)console.log("oMapIframe.contentWindow.openGoogleMapPoints:",oMapIframe.contentWindow.openGoogleMapPoints);
	
	//oMapIframe.contentWindow.createSchoolsMap(aPointObjects); 

	if(typeof oMapIframe.contentWindow.createSchoolsMap == "function"){
		log("map iframe and function found, continuing");
		oMapIframe.contentWindow.createSchoolsMap(aPointObjects); 
	}else{
		if(mapResultsAttempts <= maxMapResultsAttempts){
			log("map iframe and function not found, waiting a few ms to trying again");
			setTimeout("mapResultsTryAgain()",400);
		} else {
			log("After "+maxMapResultsAttempts+" attempts, couldnt call mapping function");
		}
	}
}

function mapResultsTryAgain(){
	mapResultsAttempts=mapResultsAttempts+1;
	log("mapResultsTryAgain try "+mapResultsAttempts);
	var oMapIframe = document.getElementById('gmapiframe');
	if(window.console)console.log("oMapIframe:",oMapIframe);
	if(window.console)console.log("oMapIframe.contentWindow.openGoogleMapPoints:",oMapIframe.contentWindow.openGoogleMapPoints);
	if(typeof oMapIframe.contentWindow.createSchoolsMap == "function"){
		log("map iframe and function found, continuing");
		oMapIframe.contentWindow.createSchoolsMap(aPointObjects); 
	}else{
		if(mapResultsAttempts <= maxMapResultsAttempts){
			log("map iframe and function not found, trying again");
			setTimeout("mapResultsTryAgain()",500);
		} else {
			log("After "+maxMapResultsAttempts+" attempts, couldnt call mapping function");
		}
	}
}

function mapResultsClose(){closeGoogleMapPoints()}

function closeGoogleMapPoints(){	
	var oMapIframe = document.getElementById('gmapiframe');
				//oMapIframe.contentDocument.GUnload();
				//if(oMapIframe.contentDocument.gmap)oMapIframe.contentDocument.gmap.clearOverlays();
	//oMapIframe.contentDocument.location.reload(true);
	jQuery("#gmapiframe").css({left:-1000,top:-1000});
				//removeDim();
	callFlash("mapResultsComplete");
}

function addDim(nOpacity){
	var ua = navigator.userAgent.toLowerCase();
	var newOpacity = isNaN(parseFloat(nOpacity))  ? 1 :	(parseFloat(nOpacity) <= 1) ? parseFloat(nOpacity) : parseFloat(nOpacity / 100);
	if(window.console){console.log('addDim(',newOpacity,')');}
	if(typeof(sOverlay)==='undefined'){
		oOverlay = jQuery("<div></div>")
			.attr('id','contentoverlay')
			.css({position:'fixed',width:'100%',height:'100%',zIndex:50,top:0,left:0,backgroundColor:'#1d2941'})
			.css('opacity',newOpacity);
		jQuery("#container").after(oOverlay);
		oOverlay.bind("click",function(){
			closeGoogleMapPoints();				
		});
	}
}

function removeDim(){
	jQuery("#contentoverlay").remove();
}

/* Flash Support functions  ********************************************** */

function getViewPort(){
	var scrolledDown = jQuery(document).scrollTop();	
	var scrolledLeft = jQuery(document).scrollLeft();
	var oViewPortInfo = {x:scrolledLeft,y:scrolledDown,width:jQuery(window).width(),height:jQuery(window).height(),pageWidth:jQuery(document).width(),pageHeight:jQuery(document).height()};
	return oViewPortInfo;
}

function getViewportSize() { 
	var size = [0, 0]; 
	if (typeof window.innerWidth != "undefined") { 
		size = [window.innerWidth, window.innerHeight];
	} 
	else if (typeof document.documentElement != "undefined" && typeof document.documentElement.clientWidth != "undefined" && document.documentElement.clientWidth != 0) {
		size = [document.documentElement.clientWidth, document.documentElement.clientHeight]; 
	}
	else {
		size = [document.getElementsByTagName("body")[0].clientWidth, document.getElementsByTagName("body")[0].clientHeight]; 
	}
	return size; 
}

function createFullBrowserFlash() {
	var viewPortDimensions = getViewportSize();
	var flashHeightLessBar = viewPortDimensions[1] - 40;
	swfobject.createCSS("html", "height:100%;");
	swfobject.createCSS("body", "height:100%;");
	swfobject.createCSS("#container", "margin:0; width:100%; height:"+flashHeightLessBar+"px; min-width:960px; min-height:768px;");
	window.onresize = function() {
		var el = document.getElementById("container");
		var size = getViewportSize(); 
		el.style.width = size[0] < 960 ? "960px" : "100%";
		el.style.height = size[1] < 768 ? "768px" : flashHeightLessBar+"px";
	};
	window.onresize();
}

function changeFHeight(newH){
	var nNewH=parseInt(newH);
	var sNeqHPx=nNewH+"px";
	if($.browser.msie || $.browser.safari){
	}
	Jquery("#container").height(nNewH);
	if (Jquery.browser.safari){
		Jquery("embed","#container").height(nNewH);
	}
	//createFullBrowserFlash();
	//window.onresize();
} 


/* Flash/javascript integration **************************** */

function callFlash(sCallbackFunName,withData){
	if(window.console)console.log("callFlash(",sCallbackFunName,",",withData,")");
	var oSSATFUI = document.getElementById("ssatInterface");
	var sErr;
	if(oSSATFUI){
		if(oSSATFUI[sCallbackFunName]){
			if(withData){
				oSSATFUI[sCallbackFunName](withData);
				log(sCallbackFunName + "() called with "+ withData);
			} else {
				oSSATFUI[sCallbackFunName]();
				log(sCallbackFunName + "() called");
			}
		} else {
			sErr = "I see the SSAT flash interface but "+sCallbackFunName+"() is undefined or I cant detect it";
			if(window.console){
				console.log(sErr);
				console.log("was going to pass to Flash:",withData);
			} else {
				alert(sErr);
			}
		}	
	} else {
		sErr = "I can't even see the SSAT flash interface!";
		if(window.console){
			console.log(sErr);
			console.log("was going to pass to Flash:",withData);
		} else {
			alert( sErr);
		}
	}
}

function cbLoadComplete(withData){
	callFlash("loadComplete",withData);
}
function cbLoginAndLoadComplete(withData){
	callFlash("loginAndLoadComplete",withData);
}
function cbSaveComplete(withData){
	callFlash("saveComplete");
}

function cbLoadFail(withData){
	callFlash("loadFail",withData);
}
function cbLoginAndLoadFail(withData){
	callFlash("loginAndLoadFail",withData);
}
function cbSaveFail(withData){
	callFlash("saveFail",withData);
}

function remindMe(sCode){
	log("remindMe('"+sCode+"')");
	SSATB.reminder.ctr.add(sCode);
	trackEvent(pageType+"RemindMe");
}

function trackEvent(sEventDescription){
	var send = sEventDescription.split("|")[0];
	if (!(/^SchoolDetails|SchoolPrograms|SchoolApplying|SchoolLinks|CenterNational|CenterFlex|CenterLinks$/.test(send))) {
		log("trackEvent:"+pageType + "," + send);
    if (pageTracker) pageTracker._trackEvent("Search"+pageType, send);
  }
}

function loginHelp(){
	log("loginHelp()");
   dijit.byId("loginHelp").show();
}

function loginAccount(){
	log("loginAccount()");
   dijit.byId("loginHelp").show();
}

function openSchoolWebsite(sURL){
	log("openSchoolWebsite("+sURL+")");
	//add protocol if none found
	sURL = (sURL.indexOf("http://") != 0 && sURL.indexOf("https://")!= 0) ? "http://" + sURL : sURL;
	var schoolWin = window.open(sURL,'schoolWin');
	if(window.focus){schoolWin.focus()}
}

function openRequest(sCode){
	log("openRequest("+sCode+")");
	var sBaseURL = "https://www.ssat.org/inquire/";
	var sURL = sBaseURL + sCode;
	var infoReqWin = window.open(sURL,'infoReqWin');
	if(window.focus){infoReqWin.focus()}
}

function openApply(sCode){
	log("openRequest("+sCode+")");
	var sBaseURL = "https://www.ssat.org/webapply/";
	var sURL = sBaseURL + sCode;
	var applyWin = window.open(sURL,'applyWin');
	if(window.focus){applyWin.focus()}
}

