var refreshRoot = false;
//var skipHistory = false;
var oldTitle;

// Set listener so back and forward buttons work on panels
SWFAddress.addEventListener(SWFAddressEvent.CHANGE, handleChange);

function bindCloseButton() {
	$('.closeDOMWindow').bind('click', function() {
		$.closeDOMWindow({
			functionCallOnClose: function() {
				callOnClose();
			}
		});				
	});
}

function isAuthenticated() {
	if ($.cookie("MYLIONEL_SSO") == null) {
		return false;	
	} else {
		return true;
	}
}

// Used to set address bar with swfAddress and open the panel. 
function openPanel(panelName, redirect, queryString) {	
	// Clear the timeout of any timers since the DOM doesn't close to open new panels
	if (typeof(timeoutID) !=  'undefined') {
		clearTimeout(timeoutID);
	}
	
	var append = "";
	
	if (redirect) {
		append = "?redirect=" + escape(redirect);
	}

	// This has to go here so we don't interupt the history chain if they are already authenticated	
	if (isAuthenticated() || panelName == "profile" || panelName == "password-lookup") {
		if (queryString) {
			append += (append.length) ? "&" : "?";
			append += queryString;
		}
		
		if (panelName == "sign-in") {
			if (redirect) {
				location.href = redirect;	
			} else {
				SWFAddress.setValue("/dashboard" + append)		
			}
		} else {
			SWFAddress.setValue("/" + panelName + append);	
		} 
	} else {
		if (panelName != "sign-in" && panelName != "dashboard") {
			append += (append.length) ? "&" : "?";
			append += "redirect=" + panelName + escape("?" + queryString);
		} else {
			if (queryString) {
				append += (append.length) ? "&" : "?";
				append += queryString;
			}
		}
		
		SWFAddress.setValue("/sign-in" + append);
	}
	
	return false;
}

function openSignInPanel(queryString) {
	$.openDOMWindow({
        windowSourceURL: "/mylionel/includes/framework/panels/signIn.cfm" + queryString,
		functionCallOnOpen: function () { 
			$("#signin").focus();
			refreshRoot = true;
			SWFAddress.setTitle("My Lionel - Sign-In");
		},
		functionCallOnClose: function() {
			callOnClose();
		},
		anchoredSelector: ".windowAnchor",
		positionType: "anchoredSingleWindow",
		height: 622,
		width: 893,
		borderSize: 0,        		
        positionTop: 20,
		overlayOpacity: 80,
		overlayColor: "#000",
		windowBGColor: "",
		windowPadding: 0,
		modal: 1
    });

	return false;
}

function openPasswordLookupPanel(queryString) {
	$.openDOMWindow({
        windowSourceURL: "/mylionel/includes/framework/panels/passwordLookup.cfm" + queryString,
		functionCallOnOpen: function () {       			
			adjustDOMHeight();
			$("#email").focus();
			SWFAddress.setTitle("My Lionel - Password Lookup");
		},
		functionCallOnClose: function() {
			callOnClose();
		},
		anchoredSelector: ".windowAnchor",
		positionType: "anchoredSingleWindow",
		height: 702,
		width: 893,
		borderSize: 0,        		
        positionTop: 20,
		overlayOpacity: 80,
		overlayColor: "#000",
		windowBGColor: "",
		windowPadding: 0,
		modal: 1
    });

	return false;
}

function openCreateUsernamePanel(queryString) {
	$.openDOMWindow({
        windowSourceURL: "/mylionel/includes/framework/panels/createUsername.cfm" + queryString,
		functionCallOnOpen: function () {       			
			$("#username").focus();
			SWFAddress.setTitle("My Lionel - Create User Name");
		},
		functionCallOnClose: function() {
			callOnClose();
		},
		anchoredSelector: ".windowAnchor",
		positionType: "anchoredSingleWindow",
		height: 622,
		width: 893,
		borderSize: "0",        		
        positionTop: 20,
		overlayOpacity: 80,
		overlayColor: "#000",
		windowBGColor: "",
		windowPadding: 0,
		modal: 1
    });

	return false;
}

function openVisionRewardsPanel(queryString) {
	$.openDOMWindow({
        windowSourceURL: "/mylionel/includes/framework/panels/visionRewards.cfm" + queryString,
        functionCallOnOpen: function () {            
			adjustDOMHeight();
			SWFAddress.setTitle("My Lionel - Vision Rewards");
        },
		functionCallOnClose: function() {
			callOnClose();
		},
		anchoredSelector: ".windowAnchor",
		positionType: "anchoredSingleWindow",
		height: 702,
		width: 893,
		borderSize: 0,        		
        positionTop: 20,
		overlayOpacity: 80,
		overlayColor: "#000",
		windowBGColor: "",
		windowPadding: 0,
		modal: 1
    });

	return false;
}

function openLRRCPanel(queryString) {
	$.openDOMWindow({
        windowSourceURL: "/mylionel/includes/framework/panels/lrrc.cfm" + queryString,
        functionCallOnOpen: function () {      
			adjustDOMHeight();
			SWFAddress.setTitle("My Lionel - Lionel Rail Roader Club");
        },
		functionCallOnClose: function() {
			callOnClose();
		},
		anchoredSelector: ".windowAnchor",
		positionType: "anchoredSingleWindow",
		height: 702,
		width: 893,
		borderSize: 0,        		
        positionTop: 20,
		overlayOpacity: 80,
		overlayColor: "#000",
		windowBGColor: "",
		windowPadding: 0,
		modal: 1
    });

	return false;
}

function openOnlineStorePanel(queryString) {
	$.openDOMWindow({
        windowSourceURL: "/mylionel/includes/framework/panels/onlineStore.cfm" + queryString,
        functionCallOnOpen: function () {            
			adjustDOMHeight();
			SWFAddress.setTitle("My Lionel - Online Store Orders");
        },
		functionCallOnClose: function() {
			callOnClose();
		},
		anchoredSelector: ".windowAnchor",
		positionType: "anchoredSingleWindow",
		height: 702,
		width: 893,
		borderSize: 0,        		
        positionTop: 20,
		overlayOpacity: 80,
		overlayColor: "#000",
		windowBGColor: "",
		windowPadding: 0,
		modal: 1
    });

	return false;
}

function openOrderDetailsPanel(queryString) {
	$.openDOMWindow({
        windowSourceURL: "/mylionel/includes/framework/panels/onlineStore.detail.cfm" + queryString,
        functionCallOnOpen: function () {            
			adjustDOMHeight();
			SWFAddress.setTitle("My Lionel - Order Details");
        },
		functionCallOnClose: function() {
			callOnClose();
		},
		anchoredSelector: ".windowAnchor",
		positionType: "anchoredSingleWindow",
		height: 702,
		width: 893,
		borderSize: 0,        		
        positionTop: 20,
		overlayOpacity: 80,
		overlayColor: "#000",
		windowBGColor: "",
		windowPadding: 0,
		modal: 1
    });

	return false;
}

function openServicePanel(queryString) {
	$.openDOMWindow({
        windowSourceURL: "/mylionel/includes/framework/panels/service.cfm" + queryString,
        functionCallOnOpen: function () {            
			adjustDOMHeight();
			SWFAddress.setTitle("My Lionel - Service");
        },
		functionCallOnClose: function() {
			callOnClose();
		},
		anchoredSelector: ".windowAnchor",
		positionType: "anchoredSingleWindow",
		height: 702,
		width: 893,
		borderSize: 0,        		
        positionTop: 20,
		overlayOpacity: 80,
		overlayColor: "#000",
		windowBGColor: "",
		windowPadding: 0,
		modal: 1
    });

	return false;
}

function openPartOrdersPanel(queryString) {
	$.openDOMWindow({
        windowSourceURL: "/mylionel/includes/framework/panels/partOrders.cfm" + queryString,
        functionCallOnOpen: function () {            
			adjustDOMHeight();
			SWFAddress.setTitle("My Lionel - Part Orders");
        },
		functionCallOnClose: function() {
			callOnClose();
		},
		anchoredSelector: ".windowAnchor",
		positionType: "anchoredSingleWindow",
		height: 702,
		width: 893,
		borderSize: 0,        		
        positionTop: 20,
		overlayOpacity: 80,
		overlayColor: "#000",
		windowBGColor: "",
		windowPadding: 0,
		modal: 1
    });

	return false;
}

function openPartOrderDetailsPanel(queryString) {
	$.openDOMWindow({
        windowSourceURL: "/mylionel/includes/framework/panels/partOrders.detail.cfm" + queryString,
        functionCallOnOpen: function () {            
			adjustDOMHeight();
			SWFAddress.setTitle("My Lionel - Part Order Details");
        },
		functionCallOnClose: function() {
			callOnClose();
		},
		anchoredSelector: ".windowAnchor",
		positionType: "anchoredSingleWindow",
		height: 702,
		width: 893,
		borderSize: 0,        		
        positionTop: 20,
		overlayOpacity: 80,
		overlayColor: "#000",
		windowBGColor: "",
		windowPadding: 0,
		modal: 1
    });

	return false;
}

function openCatalogsPanel(queryString) {
	$.openDOMWindow({
        windowSourceURL: "/mylionel/includes/framework/panels/catalogs.cfm" + queryString,
        functionCallOnOpen: function () {            
			adjustDOMHeight();
			SWFAddress.setTitle("My Lionel - Catalogs");
        },
		functionCallOnClose: function() {
			callOnClose();
		},
		anchoredSelector: ".windowAnchor",
		positionType: "anchoredSingleWindow",
		height: 702,
		width: 893,
		borderSize: 0,        		
        positionTop: 20,
		overlayOpacity: 80,
		overlayColor: "#000",
		windowBGColor: "",
		windowPadding: 0,
		modal: 1
    });

	return false;
}

function openWishListPanel(queryString) {
	$.openDOMWindow({
        windowSourceURL: "/mylionel/includes/framework/panels/wishList.cfm" + queryString,
        functionCallOnOpen: function () {            
			adjustDOMHeight();
			SWFAddress.setTitle("My Lionel - Wish List");
        },
		functionCallOnClose: function() {
			callOnClose();
		},
		anchoredSelector: ".windowAnchor",
		positionType: "anchoredSingleWindow",
		height: 732,
		width: 893,
		borderSize: 0,        		
        positionTop: 20,
		overlayOpacity: 80,
		overlayColor: "#000",
		windowBGColor: "",
		windowPadding: 0,
		modal: 1
    });

	return false;
}

function openGiftCertsPanel(queryString) {
	$.openDOMWindow({
        windowSourceURL: "/mylionel/includes/framework/panels/giftCerts.cfm" + queryString,
        functionCallOnOpen: function () {            
			adjustDOMHeight();
			SWFAddress.setTitle("My Lionel - E-Gift Certificates");
        },
		functionCallOnClose: function() {
			callOnClose();
		},
		anchoredSelector: ".windowAnchor",
		positionType: "anchoredSingleWindow",
		height: 732,
		width: 893,
		borderSize: 0,        		
        positionTop: 20,
		overlayOpacity: 80,
		overlayColor: "#000",
		windowBGColor: "",
		windowPadding: 0,
		modal: 1
    });

	return false;
}

function openNewslettersPanel(queryString) {
	$.openDOMWindow({
        windowSourceURL: "/mylionel/includes/framework/panels/newsletters.cfm" + queryString,
        functionCallOnOpen: function () {            
			adjustDOMHeight();
			SWFAddress.setTitle("My Lionel - Newsletters");
        },
		functionCallOnClose: function() {
			callOnClose();
		},
		anchoredSelector: ".windowAnchor",
		positionType: "anchoredSingleWindow",
		height: 732,
		width: 893,
		borderSize: 0,        		
        positionTop: 20,
		overlayOpacity: 80,
		overlayColor: "#000",
		windowBGColor: "",
		windowPadding: 0,
		modal: 1
    });

	return false;
}

// User menu panels
function openDashboardPanel(queryString) {	
	$.openDOMWindow({
        windowSourceURL: "/mylionel/includes/framework/panels/dashboard.cfm" + queryString,
        functionCallOnOpen: function () {            
			adjustDOMHeight();
			SWFAddress.setTitle("My Lionel - Dashboard");
        },
		functionCallOnClose: function() {
			callOnClose();
		},
		anchoredSelector: ".windowAnchor",
		positionType: "anchoredSingleWindow",
		height: 622,
		width: 893,
		borderSize: 0,        		
        positionTop: 20,
		overlayOpacity: 80,
		overlayColor: "#000",
		windowBGColor: "",
		windowPadding: 0,
		modal: 1
    });

	return false;
}

function openProfilePanel(queryString) {
	$.openDOMWindow({
        windowSourceURL: "/mylionel/includes/framework/panels/profile.cfm" + queryString,
        functionCallOnOpen: function () {            
			adjustDOMHeight();
			
			if (isAuthenticated() || queryString.search(/changePassword/i) >= 0) {
				$("#password").focus();	
			} else {
				$("#email").focus();
			}
			
			SWFAddress.setTitle("My Lionel - Profile");
        },
		functionCallOnClose: function() {
			callOnClose();
		},
		anchoredSelector: ".windowAnchor",
		positionType: "anchoredSingleWindow",
		height: 702,
		width: 893,
		borderSize: 0,        		
        positionTop: 20,
		overlayOpacity: 80,
		overlayColor: "#000",
		windowBGColor: "",
		windowPadding: 0,
		modal: 1
    });

	return false;
}







// Sub nav panels
function openWarrantyReturnsPanel(queryString) {	
	$.openDOMWindow({
        windowSourceURL: "/mylionel/includes/framework/panels/warrantyReturns.cfm" + queryString,
        functionCallOnOpen: function () {            
			adjustDOMHeight();
			SWFAddress.setTitle("My Lionel - Warranty Returns History");
        },
		functionCallOnClose: function() {
			callOnClose();
		},
		anchoredSelector: ".windowAnchor",
		positionType: "anchoredSingleWindow",
		height: 622,
		width: 893,
		borderSize: 0,        		
        positionTop: 20,
		overlayOpacity: 80,
		overlayColor: "#000",
		windowBGColor: "",
		windowPadding: 0,
		modal: 1
    });

	return false;
}

function openContactServicePanel(queryString) {	
	$.openDOMWindow({
        windowSourceURL: "/mylionel/includes/framework/panels/contactService.cfm" + queryString,
        functionCallOnOpen: function () {            
			adjustDOMHeight();
			SWFAddress.setTitle("My Lionel - Contact Lionel Service");
        },
		functionCallOnClose: function() {
			callOnClose();
		},
		anchoredSelector: ".windowAnchor",
		positionType: "anchoredSingleWindow",
		height: 622,
		width: 893,
		borderSize: 0,        		
        positionTop: 20,
		overlayOpacity: 80,
		overlayColor: "#000",
		windowBGColor: "",
		windowPadding: 0,
		modal: 1
    });

	return false;
}

function openServiceNewsLandingPanel(queryString) {	
	$.openDOMWindow({
        windowSourceURL: "/mylionel/includes/framework/panels/serviceNewsLanding.cfm" + queryString,
        functionCallOnOpen: function () {            
			adjustDOMHeight();
			SWFAddress.setTitle("My Lionel - Tech Talk/Service News");
        },
		functionCallOnClose: function() {
			callOnClose();
		},
		anchoredSelector: ".windowAnchor",
		positionType: "anchoredSingleWindow",
		height: 622,
		width: 893,
		borderSize: 0,        		
        positionTop: 20,
		overlayOpacity: 80,
		overlayColor: "#000",
		windowBGColor: "",
		windowPadding: 0,
		modal: 1
    });

	return false;
}

function openTechTalkPanel(queryString) {	
	$.openDOMWindow({
        windowSourceURL: "/mylionel/includes/framework/panels/techTalk.cfm" + queryString,
        functionCallOnOpen: function () {            
			adjustDOMHeight();
			SWFAddress.setTitle("My Lionel - Tech Talk");
        },
		functionCallOnClose: function() {
			callOnClose();
		},
		anchoredSelector: ".windowAnchor",
		positionType: "anchoredSingleWindow",
		height: 622,
		width: 893,
		borderSize: 0,        		
        positionTop: 20,
		overlayOpacity: 80,
		overlayColor: "#000",
		windowBGColor: "",
		windowPadding: 0,
		modal: 1
    });

	return false;
}

function openServiceNewsPanel(queryString) {	
	$.openDOMWindow({
        windowSourceURL: "/mylionel/includes/framework/panels/serviceNews.cfm" + queryString,
        functionCallOnOpen: function () {            
			adjustDOMHeight();
			SWFAddress.setTitle("My Lionel - Service News");
        },
		functionCallOnClose: function() {
			callOnClose();
		},
		anchoredSelector: ".windowAnchor",
		positionType: "anchoredSingleWindow",
		height: 622,
		width: 893,
		borderSize: 0,        		
        positionTop: 20,
		overlayOpacity: 80,
		overlayColor: "#000",
		windowBGColor: "",
		windowPadding: 0,
		modal: 1
    });

	return false;
}

function openReplacementPartsPanel(queryString) {	
	$.openDOMWindow({
        windowSourceURL: "/mylionel/includes/framework/panels/replacementParts.cfm" + queryString,
        functionCallOnOpen: function () {            
			adjustDOMHeight();
			SWFAddress.setTitle("My Lionel - Find Replacement Parts");
        },
		functionCallOnClose: function() {
			callOnClose();
		},
		anchoredSelector: ".windowAnchor",
		positionType: "anchoredSingleWindow",
		height: 622,
		width: 893,
		borderSize: 0,        		
        positionTop: 20,
		overlayOpacity: 80,
		overlayColor: "#000",
		windowBGColor: "",
		windowPadding: 0,
		modal: 1
    });

	return false;
}




function openErrorPanel(queryString) {
	$.openDOMWindow({
        windowSourceURL: "/mylionel/500.html" + queryString,
        functionCallOnOpen: function () {            
			SWFAddress.setTitle("My Lionel - Error");
        },
		functionCallOnClose: function() {
			callOnClose();
		},
		anchoredSelector: ".windowAnchor",
		positionType: "anchoredSingleWindow",
		height: 400,
		width: 893,
		borderSize: 0,        		
        positionTop: 20,
		overlayOpacity: 80,
		overlayColor: "#000",
		windowBGColor: "",
		windowPadding: 0,
		modal: 1
    });

	return false;
}

function callOnClose() {
	if (typeof(timeoutID) !=  'undefined') {
		clearTimeout(timeoutID);
	}
	
	// Only refresh if they were not logged in but now they are
	if (isAuthenticated() && refreshRoot) {
		// Reload the top right hand corner of the site to show they are logged in if on store
		if (location.hostname.search(/lionelstore/i) >= 0) {
			$("#myAccount").load("/layouts/footer.cfm #ajaxWrapper");
			SWFAddress.setValue("/");
		} else {
			SWFAddress.setValue("/");
			location.reload(true);	
		}
	} else {
		SWFAddress.setValue("/");	
	}
}

function signOut(redirect) {
	if (redirect) {
		location.replace("/mylionel/includes/framework/pageProcessor.cfm?doAction=Logout&redirect=" + redirect);
	} else {
		location.replace("/mylionel/includes/framework/pageProcessor.cfm?doAction=Logout");
	}
}

// Adjusts the DOM window with contents of #panel + header + footer.
// Using a set value for the footer because there are 2 different footers.
function adjustDOMHeight() {
	 // If statement put in to prevent firing when re-directing to sign-in if not authenticated 
	if ($("#DOMWindow #panel").height() && $("#DOMWindow #panelHeader").height()) {
		var domHeight = $("#DOMWindow #panel").height() + $("#DOMWindow #panelHeader").height() + 81;
		$("#DOMWindow").height(domHeight);	
	}
}

// Allows swfAddress to open the panel per the address
function handleChange(event) {
	var queryString = "";
	
	for (var p in event.parameters) {
        if (queryString == "") {
			queryString = "?" + p + "=" + event.parameters[p];	
		} else {
			queryString += "&" + p + "=" + event.parameters[p];
		}
    }	
	
	// Temp fix to scroll up so you can see the dom since it's anchored
	if (event.path != "/") {
		scroll(0,0);
	}
	
	/*if (event.parameters["skipHistory"] && skipHistory) {
		history.go(-1);
		
		skipHistory = false;
		
		return;
	} else if (event.parameters["skipHistory"]) {
		skipHistory = true;
	}*/
	
	if (!oldTitle) {
		oldTitle = document.title;
	}

	switch (event.path) {
		case "/":
			// If DOMWindow exists close it. 
			// Using .children instead of .find because it"s faster since this function runs on every page load.
			if ($("body").children("#DOMWindow").length && window.location.pathname.search(/openpanel.cfm/i) == -1) {
				$.closeDOMWindow();
				SWFAddress.setTitle(oldTitle);
			}
			break;
			
		case "/sign-in":			
			openSignInPanel(queryString);
			break;
			
		case "/password-lookup":
			openPasswordLookupPanel(queryString);
			break;

		case "/create-username":
			openCreateUsernamePanel(queryString);
			break;
			
		case "/vision-rewards":
			openVisionRewardsPanel(queryString);
			break;
			
		case "/lrrc":
			openLRRCPanel(queryString);
			break;
		
		case "/online-store":
			openOnlineStorePanel(queryString);
			break;

		case "/order-details":
			openOrderDetailsPanel(queryString);
			break;

		case "/service":
			openServicePanel(queryString);
			break;

		case "/part-orders":
			openPartOrdersPanel(queryString);
			break;
			
		case "/part-order-details":
			openPartOrderDetailsPanel(queryString);
			break;			

		case "/catalogs":
			openCatalogsPanel(queryString);
			break;
			
		case "/wish-list":
			skip = true;
			openWishListPanel(queryString);	
			break;
		
		case "/e-gift-certificates":
			openGiftCertsPanel(queryString);
			break;
			
		case "/newsletters":
			openNewslettersPanel(queryString);
			break;
			
		case "/dashboard":			
			openDashboardPanel(queryString);
			break;
		
		case "/profile":
			openProfilePanel(queryString);		
			break;
		
		case "/warranty-returns":
			openWarrantyReturnsPanel(queryString);		
			break;

		case "/contact-service":
			openContactServicePanel(queryString);		
			break;

		case "/service-news-landing":
			openServiceNewsLandingPanel(queryString);		
			break;

		case "/tech-talk":
			openTechTalkPanel(queryString);		
			break;

		case "/service-news":
			openServiceNewsPanel(queryString);		
			break;

		case "/replacement-parts":
			openReplacementPartsPanel(queryString);		
			break;

		case "/error":
			openErrorPanel(queryString);
			break;
	}
}
