﻿//Event.observe(document, "dom:loaded", document_onDOMLoaded);
Event.observe(window, "load", window_onLoad);

var bEditScreen = false;
var bShowModal = bShowModal ? bShowModal : false;

var oDisabledOverlay;
var oModel;
var oDownloadUserIntentModal;
var sServerLocation;
var oMarketingSource;
var sCampaignId;
var sProgramId;
var fnCallback;
var sHiddenClassName = "Hidden";

var bIE6;
var aHiddenItems;

function ajaxRequest_onSuccess(oEvent) {
	oMarketingSource = eval("(" + oEvent.responseText + ")");
	if (oMarketingSource.sSource.length == 0) {
		window.location = sServerLocation + "/downloads/index.aspx";
	}
	else {
		try {
			fnCallback();
		}
		catch (eException) {
		
		}
	}
}

function document_onClick(event) {
	var oElement = Event.findElement(event, "a");
	oElement = oElement ? oElement : Event.element(event);
	if (oElement.match("a") || oElement.match("area")) {
		checkElementAndCookie(oElement.href, event);
		/*var sLinkURL = oElement.href;
		if (sLinkURL) {
			//if (sLinkURL.indexOf(sServerLocation + "register/index.aspx") > -1) {
			if (sLinkURL.indexOf("register/index.aspx") > -1) {
				var sCookieName = "RegistrationDetails";
				sProgramId = getQueryStringVariable(sLinkURL, "Program");
				sCampaignId = getQueryStringVariable(sLinkURL, "c");
				if (unescape(document.cookie).indexOf(sCookieName) == -1) {
					var sVariables = sLinkURL.substr(sLinkURL.indexOf("?"));
					switch (sProgramId) {
						case "867":
						case "869":
							window.location = sServerLocation + "register/twocolumnregistrationform.aspx" + sVariables;
							break;
						default:
							window.location = sServerLocation + "register/registrationform.aspx" + sVariables;
							break;
					}
				}			
				else {
					var oProgramInformation = getProgramInformation(sProgramId, sServerLocation);
					if (oProgramInformation.url) {
						oDownloadUserIntentModal.dispatchEvent("Set Program", oProgramInformation);
						oDisabledOverlay.removeClassName(sHiddenClassName);
						fnCallback = showModalDialog;
					}
					else {
						fnCallback = insertIntoEloqua;
					}
					
					getMarketingSource(sProgramId, sCampaignId);
				}
				Event.stop(event);
			}
		}*/
	}
}

function lstdownloadLinks_onChange(event) {
	var oElement = Event.element(event);
	var sValue = oElement.value;
	if (sValue) {
		goToAndRecordDLLink(oElement);
		checkElementAndCookie(sValue, event);
	}
}

function oDownloadUserIntentModal_onBack(oEvent) {
	bEditScreen = false;
	SiteCatalyst.trackModalLinkByProductId("Registration", "Edit", "Back", sProgramId);
}

function oDownloadUserIntentModal_onClose(oEvent) {
	SiteCatalyst.trackModalLinkByProductId("Registration", bEditScreen ? "Edit" : "Summary", "Close", sProgramId);
	showHiddenItems();
}

function oDownloadUserIntentModal_onContinue(oEvent) {
	var sScreenName;
	var sLinkName;
	if (bEditScreen) {
		sScreenName = "Edit";
		sLinkName = "Save";
	}
	else {
		oModel.saveData();
		sScreenName = "Summary";
		sLinkName = "Continue";
	}
	SiteCatalyst.trackModalLinkByProductId("Registration", sScreenName, sLinkName, sProgramId);
	insertIntoEloqua();
}

function oDownloadUserIntentModal_onEditInfo(oEvent) {
	bEditScreen = true;
	SiteCatalyst.trackModalLinkByProductId("Registration", "Summary", "Edit", sProgramId);
}

function oDownloadUserIntentModal_onLoad(oEvent) {
	oDisabledOverlay.addClassName(sHiddenClassName);
	
	var sURL = new String(window.location);
	sProgramId = getQueryStringVariable(sURL, "Program");
	sCampaignId = getQueryStringVariable(sURL, "c");
	var oProgramInformation = getProgramInformation(sProgramId, sServerLocation);
	
	if (oProgramInformation.url) {
		oDownloadUserIntentModal.dispatchEvent("Set Program", oProgramInformation);
		fnCallback = showModalDialogForExternalLink;
		getMarketingSource(sProgramId, sCampaignId);
	}
	else
		window.location = "../downloads/index.aspx";
}

function oDownloadUserIntentModal_onView(oEvent) {
	SiteCatalyst.trackModalLinkByProductId("Registration", "Summary", "View Details", sProgramId);
}

function oDownloadUserIntentModal_onHide(oEvent) {
	bEditScreen = false;
	window.location = sServerLocation;
}

function window_onLoad(event) {
    bIE6 = (navigator.appVersion.indexOf("MSIE 6") > -1);
	sServerLocation = new String(window.location).match(/^\w+:[\/]+[^\/]+[\/]{1}|^[^\/]+[\/]{1}/).first();
	oDisabledOverlay = $(document.createElement("div"));
	oDisabledOverlay.addClassName("Overlay");
	oDisabledOverlay.addClassName(sHiddenClassName);
	$$("body").first().appendChild(oDisabledOverlay);

	oModel = new ContactInformationModel();


	oDownloadUserIntentModal = new ModalDialog("dlgDownloadUserIntent", "WELCOME BACK",
								  { display: true, url: "/ModalDialog/implementations/downloaduserintent/html/DownloadUserIntentLeftButton.htm", arguments: null },
								  { display: true, url: "/ModalDialog/implementations/downloaduserintent/html/DownloadUserIntentRightButton.htm", arguments: null },
								  { display: true, url: "/ModalDialog/implementations/downloaduserintent/html/DownloadUserIntentContent.htm", arguments: { model: oModel} },
								  { display: true, url: "/ModalDialog/implementations/downloaduserintent/html/DownloadUserIntentFooter.htm", arguments: null },
								  null /*"/ModalDialog/implementations/downloaduserintent/styles/ModalDialogOverride.css"*/);

	attachModalEvents();

	if (bShowModal) {
		oDisabledOverlay.removeClassName(sHiddenClassName);
		oDownloadUserIntentModal.attachEventListener("Load", oDownloadUserIntentModal_onLoad);
	}
	else {
		var oDownListBox = $("downloadLinks");
		if (oDownListBox)
			Event.observe(oDownListBox, "change", lstdownloadLinks_onChange); 
		Event.observe(document, "click", document_onClick);
	}
}

function attachModalEvents() {
    oDownloadUserIntentModal.attachEventListener("Back", oDownloadUserIntentModal_onBack);
    oDownloadUserIntentModal.attachEventListener("Close", oDownloadUserIntentModal_onClose);
    oDownloadUserIntentModal.attachEventListener("Continue", oDownloadUserIntentModal_onContinue);
    oDownloadUserIntentModal.attachEventListener("Edit Info", oDownloadUserIntentModal_onEditInfo);
    //oDownloadUserIntentModal.attachEventListener("Save And Continue", oDownloadUserIntentModal_onSaveAndContinue);
    oDownloadUserIntentModal.attachEventListener("View", oDownloadUserIntentModal_onView);
}

function checkElementAndCookie(sLinkURL, oEvent) {
	if (sLinkURL) {
		//if (sLinkURL.indexOf(sServerLocation + "register/index.aspx") > -1) {
		if (sLinkURL.indexOf("register/index.aspx") > -1) {
			var sCookieName = "RegistrationDetails";
			sProgramId = getQueryStringVariable(sLinkURL, "Program");
			sCampaignId = getQueryStringVariable(sLinkURL, "c");
			if (unescape(document.cookie).indexOf(sCookieName) == -1 || !isValidCookie()) {
			    var sVariables = sLinkURL.substr(sLinkURL.indexOf("?"));
				// this switch is duplicated on /register/index.aspx.cs
				/*switch (sProgramId) {
					case "92":
					case "214":
					case "363":
					case "428":
					case "568":
					case "607":
					case "815":
					case "852":
					case "857":
					case "866":
					case "867":
					case "868":
					case "869":
					case "874":
					case "876":
					case "878":
					case "879":
					case "881":
					case "883":
					case "888":
					case "896":
					case "897":
					case "901":
					case "908":
					case "909":
					case "911":
					case "912":
					case "915":
					case "916":
					case "925":
					case "932":
						window.location = sServerLocation + "register/registration.aspx" + sVariables; //two-column
						break;
					default:
						window.location = sServerLocation + "register/registrationform.aspx" + sVariables; //one-column
						break;
				} */
				window.location = sServerLocation + "register/index.aspx" + sVariables;
			}			
			else {
				var oProgramInformation = getProgramInformation(sProgramId, sServerLocation);
				if (oProgramInformation.url) {
					oDownloadUserIntentModal.dispatchEvent("Set Program", oProgramInformation);
					oDisabledOverlay.removeClassName(sHiddenClassName);
					fnCallback = showModalDialog;
				}
				else {
					fnCallback = insertIntoEloqua;
				}
				getMarketingSource(sProgramId, sCampaignId);
			}
			Event.stop(oEvent);
		}
	}
}

function getMarketingSource(sProgramId, sCampaignId) {
	new Ajax.Request(sServerLocation + "/register/GetMarketingSource.aspx?ProgramId=" + sProgramId +"&CampaignId=" + sCampaignId, {method: "get", onSuccess: ajaxRequest_onSuccess});
}

function getModalTitle() {
	var sTitle = "WELCOME BACK";
	var sCookieName = "RegistrationDetails";
	try {
		var aCookies = document.cookie.split(";");
		var sCookie;
		for (var iCookie = 0; iCookie < aCookies.length; iCookie++) {
			sCookie = unescape(aCookies[iCookie]);
			if (sCookie.indexOf(sCookieName) != -1) {
				var oRegistrationXML = Utilities.loadXML(sCookie.split(sCookieName + "=").pop());
				var dCurrentDate = new Date();
				var dSessionDate = new Date($A(oRegistrationXML.getElementsByTagName("Date")).first().getAttribute("session"));
				var iMillisecondsPerHour = (1000 * 60 * 60);
				var fHours = (dCurrentDate.getTime() - dSessionDate.getTime()) / iMillisecondsPerHour;
				if (fHours <= 24)
					sTitle = "WELCOME BACK";
				break;
			}
		}
	}
	catch (eException) {
	
	}
	finally {
		return sTitle;
	}
}

function getProgramInformation(sProgramId, sServerLocation) {
	var oProgramInformation = {};
	
	switch (sProgramId) {
		case "52":
			oProgramInformation.url = sServerLocation + "products/freetools/free_tftp_server.aspx";
			oProgramInformation.name = "TFTP Server";
			break;
		case "92":
			oProgramInformation.url = sServerLocation + "products/freetools/free_subnet_calculator.aspx";
			oProgramInformation.name = "Advanced Subnet Calculator";
			break;
		case "214":
			oProgramInformation.url = sServerLocation + "products/freetools/wake_on_lan.aspx";
			oProgramInformation.name = "Wake-On LAN";
			break;
		case "330":
			oProgramInformation.url = sServerLocation + "products/orion/wireless/";
			oProgramInformation.name = "Wireless Monitor";
			break;
		case "428":
		case "363":
			oProgramInformation.url = sServerLocation + "products/toolsets/";
			oProgramInformation.name = "Engineer's Toolset";
			break;
		case "402":
			oProgramInformation.url = sServerLocation + "products/LANsurveyor/";
			oProgramInformation.name = "LANsurveyor";
			break;        case "431":
            oProgramInformation.url = sServerLocation + "products/orion/eoc/";
            oProgramInformation.name = "Enterprise Operations Console";
            break;
		case "522":
			oProgramInformation.url = sServerLocation + "products/orion/voip/";
			oProgramInformation.name = "VoIP Monitor";
			break;
		case "523":
			oProgramInformation.url = sServerLocation + "products/freetools/netflow_configurator.aspx";
			oProgramInformation.name = "NetFlow Configurator";
			break;
		case "568":
			oProgramInformation.url = sServerLocation + "products/ipmonitor/";
			oProgramInformation.name = "ipMonitor";
			break;
		case "604":
		    oProgramInformation.url = sServerLocation + "products/LANsurveyorExpress/";
			oProgramInformation.name = "LANSurveyor Express";
			break;
		case "336":
		case "925":
		case "607":
		case "901":
			oProgramInformation.url = sServerLocation + "products/orion/";
			oProgramInformation.name = "Orion NPM";
			break;
		case "608":
			oProgramInformation.url = sServerLocation + "products/orion/eoc/";
			oProgramInformation.name = "Enterprise Operations Console";
			break;
		case "617":
			oProgramInformation.url = sServerLocation + "products/orion/configuration_manager/";
			oProgramInformation.name = "Orion NCM";
			break;
		case "815":
			oProgramInformation.url = sServerLocation + "products/orion/nta/";
			oProgramInformation.name = "NetFlow Traffic Analyzer";
			break;
		case "817":
			oProgramInformation.url = sServerLocation + "";
			oProgramInformation.name = "SolarWinds Starter Kit";
			break;
		case "825":
			oProgramInformation.url = sServerLocation + "products/freetools/exchange_monitor.aspx";
			oProgramInformation.name = "Exchange Monitor";
			break;
		case "846":
			oProgramInformation.url = sServerLocation + "products/orion/product_integrations.aspx";
			oProgramInformation.name = "Orion Management Pack";
			break;
		case "852":
			oProgramInformation.url = sServerLocation + "products/freetools/netflow_analyzer.aspx";
			oProgramInformation.name = "Real-time NetFlow Analyzer";
			break;
		case "585":
		case "857":
			oProgramInformation.url = sServerLocation + "products/orion/application_monitor/";
			oProgramInformation.name = "Application Performance Monitor";
			break;
		case "864":
			oProgramInformation.url = sServerLocation + "products/freetools/vm_monitor.aspx";
			oProgramInformation.name = "VM Monitor";
			break;
		case "867":
			oProgramInformation.url = sServerLocation + "";
			oProgramInformation.name = "Orion Power Pack";
			break;
		case "868":
			oProgramInformation.url = sServerLocation + "products/";
			oProgramInformation.name = "Real-Time Technical Dashboard";
			break;
		case "869":
			oProgramInformation.url = sServerLocation + "";
			oProgramInformation.name = "SolarWinds IT Pro Pack";
			break;
		case "874":
			oProgramInformation.url = sServerLocation + "products/freetools/kiwi_syslog_server/";
			oProgramInformation.name = "Free Kiwi Syslog Server";
			break;
		case "876":
			oProgramInformation.url = sServerLocation + "products/kiwi_syslog_server/";
			oProgramInformation.name = "Kiwi Syslog Server Eval Version";
			break;
		case "879":
			oProgramInformation.url = sServerLocation + "products/freetools/kiwi_cattools/";
			oProgramInformation.name = "Free Kiwi CatTools";
			break;
		case "881":
			oProgramInformation.url = sServerLocation + "products/kiwi_cattools/";
			oProgramInformation.name = "Kiwi CatTools Eval Version";
			break;
		case "888":
			oProgramInformation.url = sServerLocation + "products/ipmonitor/";
			oProgramInformation.name = "Free IP Monitor";
			break;
		case "896":
		    oProgramInformation.url = sServerLocation + "products/freetools/ip_sla_monitor/";
		    oProgramInformation.name = "IP SLA Monitor";
		    break;
		case "897":
		    oProgramInformation.url = sServerLocation + "products/freetools/ip_sla_monitor/npm.aspx";
		    oProgramInformation.name = "IP SLA Monitor + Orion NPM";
		    break;
	    case "911":
	        oProgramInformation.url = sServerLocation + "products/orion/ip_address_manager/";
		    oProgramInformation.name = "IP Address Manager";
	        break;
	    case "912":
	        oProgramInformation.url = sServerLocation + "products/freetools/ip_address_tracker/";
		    oProgramInformation.name = "IP Address Tracker";
	        break;
		case "915":
		    oProgramInformation.url = sServerLocation + "products/";
			oProgramInformation.name = "The Diagnostic Collection";
		    break;
		case "916":
		    oProgramInformation.url = sServerLocation + "products/";
			oProgramInformation.name = "The Diagnostic Collection with Orion NPM";
		    break;
		case "945":
		    oProgramInformation.url = sServerLocation + "products/orion/ip_sla_monitoring/";
			oProgramInformation.name = "Orion IP SLA Manager";
		    break;
	}
	
	return oProgramInformation;
}

function getQueryStringVariable(sURL, sName) {
	var sValue;
	var sVariables = sURL.split("?")[1];
	var aVariables = sVariables.split("&");
	var sVariable;
	for (var iVariable = 0; iVariable < aVariables.length; iVariable++) {
		sVariable = aVariables[iVariable];
		if (sVariable.toUpperCase().indexOf(sName.toUpperCase()) != -1) {
			sValue = sVariable.split("=")[1];
			break;
		}
	}
	return sValue;
}

function hideItems() {
	aHiddenItems = $$("object");
	if (bIE6)
		aHiddenItems = aHiddenItems.concat($$("select"));
	var oHiddenItem;
	for (var iHiddenItem = 0; iHiddenItem < aHiddenItems.length; iHiddenItem++) {
		oHiddenItem = aHiddenItems[iHiddenItem];
		oHiddenItem.setStyle({visibility: "hidden"});
	}
}

function insertIntoEloqua() {
    window.location = sServerLocation + "register/InsertIntoEloqua.aspx?ProgramId=" + sProgramId + "&CampaignId=" + sCampaignId + "&MarketingSource=" + oMarketingSource.sSource;
}

function isValidCookie() {
    var bIsValid = true;
    var sCookieName = "RegistrationDetails";
    var aCookies = document.cookie.split(";");
	var sCookie;
	for (var iCookie = 0; iCookie < aCookies.length; iCookie++) {
		sCookie = unescape(aCookies[iCookie]);
		if (sCookie.indexOf(sCookieName) != -1) {
			var oRegistrationXML = Utilities.loadXML(sCookie.split(sCookieName + "=").pop());
			var sEmailAddress = oRegistrationXML.getElementsByTagName("Email")[0].getAttribute("address");
			if (!sEmailAddress || sEmailAddress.length == 0) {
			    bIsValid = false;
			    break;
			}
			
		}
	}
    return bIsValid;
}

function showHiddenItems() {
	//if (bIE6) {
		var oHiddenItem;
		for (var iHiddenItem = 0; iHiddenItem < aHiddenItems.length; iHiddenItem++) {
			oHiddenItem = aHiddenItems[iHiddenItem];
			oHiddenItem.setStyle({visibility: "visible"});
		}
	//}
}

function showModalDialog() {
	SiteCatalyst.trackModal(sProgramId);
	oDisabledOverlay.addClassName(sHiddenClassName);
	oDownloadUserIntentModal.setHeaderText(getModalTitle());
	hideItems();
	oDownloadUserIntentModal.show();
}

function showModalDialogForExternalLink() {
	oDownloadUserIntentModal.attachEventListener("Hide", oDownloadUserIntentModal_onHide);
	SiteCatalyst.trackModal(sProgramId);
	oDownloadUserIntentModal.setHeaderText(getModalTitle());
	hideItems();
	oDownloadUserIntentModal.show();
}