/*Scruncher:Leave Next Comment*/
/************
       TITLE: Pulse.Player.Install Package
     VERSION: 1.0.0.6
        TYPE: Package
      AUTHOR: Chris van Rensburg
   COPYRIGHT: (c)2002 Pulse Entertainment Inc. <http://www.pulse3d.com>
    REQUIRES: Pulse.Player
 DESCRIPTION: Performs browser/platform detection and manages the Pulse Player installation process
************/

/*ScruncherSettings Mappings=",PULSE=PULSE_i" LineCompacting="TRUE"*/

//var gs_rootPathToPlayers = "http://www.virtualgallerie.net/players/";
var gs_rootPathToPlayers = gs_rootPathForPluginspage + "/";

//PULSE_Player = Pulse.Player;

function PPI_getPPFromPluginsArray() {
	if (navigator && navigator.plugins) {
		for (var i = 0; i < navigator.plugins.length; i++) {
			if (navigator.plugins[i].name.toLowerCase().indexOf("pulse") > -1) {
				var lc;
				if (((lc = navigator.plugins[i].name.toLowerCase()).indexOf("pulseplayer") > -1)
					|| ((lc.indexOf("pulse player")) > -1)) {
					return navigator.plugins[i];	
				}
			}
		}
	}
	return null;
}

function PPI_getFirefoxVersion() {
	var ua = window.navigator.userAgent.toLowerCase();
	var i;
	//BrowserDetect.browser == "Firefox"
	if ((i = ua.indexOf("firefox/")) > -1) {
		ua = ua.substring(i + 8);
		if ((i = ua.indexOf(" ")) > -1) {
			ua = ua.substring(0, i);
		}
		return ua.split(".");
	}
	return null;
}
function PP_doesWinFFNeedUpdate() {
	var os = BrowserDetect.OS, ffv;
	if ((os == "Windows") && (ffv = PPI_getFirefoxVersion())) { //ieq
		var pp = PPI_getPPFromPluginsArray();

		if (pp) {
			if (ffv[0] >= 3) {
				if (pp.description.indexOf("Pulse Player v.5.2") == -1) {
					return true;
				}
			}
		} else {

		}
	}
	return false;
}
function PULSE_Player_Install_openWindow (_URL,_name,_width,_height,_showStatus,_properties,_xpos,_ypos) {
	if (typeof _properties != 'string') _properties = '';
	var _screenDefined = typeof screen != 'undefined';
	if (typeof _xpos == 'undefined' && _screenDefined)
		_xpos = Math.max (Math.floor ((screen.width - _width - 10) / 2),0)
	;
	if (typeof _ypos == 'undefined' && _screenDefined)
		_ypos = Math.max (Math.floor ((screen.height - _height - 40) / 2),0)
	;
	var _positionStr = (typeof _xpos != 'undefined' && typeof _ypos != 'undefined') ? ('screenx=' + _xpos + ',screeny=' + _ypos + ',left=' + _xpos + ',top=' + _ypos + ',') : '';
	return window.open (_URL,_name,_properties + ',toolbar=no,location=no,directories=no,status=' + ((typeof _showStatus == 'boolean' && _showStatus) ? 'yes' : 'no') + ',menubar=no,scrollbars=no,resizable=yes,' + _positionStr + 'width=' + _width + ',height=' + _height + ',' + _properties);
}

function PULSE_Player_Install_showWindow (_windowUrl,_secondWindow) {
	if (!PULSE_Player_Install.silentInstall) {
		var _promptWindow = PULSE_Player_Install_openWindow (
			PULSE_Player_Install._messagePath + _windowUrl,
			'pulsedialogwin',
			600,300,
			false,
			'resizable=1,scrollbars=1'
		);
		if (_secondWindow == 'info') PULSE_Player_Install._promptWindowTwo = _promptWindow; else PULSE_Player_Install._promptWindow = _promptWindow;
	}
}

function PULSE_Player_Install_closeWindow () {
	var _package = PULSE_Player_Install;
	if (_package._promptWindow && !_package._promptWindow.closed) _package._promptWindow.close ();
}

function PULSE_Player_Install_showMessage (_status) {
	PULSE_Player_Install_showWindow ((typeof _status._infoPage != 'undefined') ? _status._infoPage : _status,'info');
}

function PULSE_Player_Install_offerManualInstaller () {
	var _isOsX = navigator.userAgent.toLowerCase ().indexOf ('mac os x') != -1;
	PULSE_Player_Install_showWindow ('offer-manual-installer-' + PLAT_STR_DIR + '.html');
}

function PULSE_Player_Install_setInstallProgress (_state) {
	for (var _playerNo = 0; _playerNo < PULSE_Player.instances.length; _playerNo++) {
        var
			_player = PULSE_Player.instances [_playerNo];

        if (_player.getCurrentState) { //does the function exist?
			var _playerState = _player.getCurrentState ();
            if (_player.playerTag != 'APPLET' && ((_playerState != _player.displayStates.clickToLoad || _state == 'failed') && _playerState != _player.displayStates.disabled)) {
                if (_state == 'start') {
                    _player.setState ('installing');
                } else if (_state == 'complete') {
                    _player.clickToLoad ();
                } else if (_state == 'failed'){
                    _player.enable (false,'Installation Failed!<br>Please reload and try again.');
                }
            }
        }
	}
}

function PULSE_Player_Install_installFailureMessage () {
	PULSE_Player_Install_showWindow ('general-install-failure.html');
	PULSE_Player_Install_setInstallProgress ('failed');
}

function PULSE_Player_Install_checkInstalledVersion () {
	PULSE_Player.version = '0.0.0.0';
	if (IE4 && WIN32 && typeof document.getElementById != 'undefined') {
		if (eval ('try {new ActiveXObject (\'AxPulse.AxPulse5.1\'); true} catch (error) {false}')) {
			var _playerDomObject = document.getElementById ('Pulse_dummyPlayer');
			if (_playerDomObject == null) {
				document.writeln (
					'<OBJECT' +
					' ID="PulsePlayerVersion"' +
					' STYLE="position:absolute; visibility:visible; left:-1000px; top:-1000px;"' +
					' CLASSID="CLSID:A48D0309-8DA3-41aa-98E4-89194D471890"' +
					' WIDTH=0 HEIGHT=0' +
					'>' +
					'</OBJECT>'
				);
				_playerDomObject = document.getElementById ('PulsePlayerVersion');
			}
			if (typeof _playerDomObject.Version != 'undefined') PULSE_Player.version = _playerDomObject.Version;
		}
	} else if (typeof navigator.plugins != 'undefined' && typeof navigator.plugins.PulsePlayer != 'undefined') {
		var _version = navigator.plugins.PulsePlayer.description;
		_version = _version.substr (_version.lastIndexOf ('v') + 1);
		if (_version.indexOf ('.') == '0') _version = _version.substr (1);
		PULSE_Player.version = _version;
	}
}

function PULSE_Player_Install_showInLayoutFlow (_element,_mustShow) {
	if (typeof _element == 'string') _element = document.getElementById (_element);
	if (_element != null) {
		var _elementStyle = _element.style;
		_elementStyle.position = _mustShow ? 'static' : 'absolute';
		_elementStyle.visibility = _mustShow ? 'visible' : 'hidden';
	}
}

function Pulse_Player_Install_confirmInlineInstall () {
	PULSE_Player_Install_checkInstalledVersion ();
	PULSE_Player_Install_updatePlayerStatus ();
	PULSE_Player_Install._installFailed = !PULSE_Player.isAdequate;
	PULSE_Player_Install_showInLayoutFlow (PULSE_Player_Install.sentryHaltBlockId,!PULSE_Player.isAdequate);
	PULSE_Player_Install_showInLayoutFlow (PULSE_Player_Install.sentryProceedBlockId,PULSE_Player.isAdequate);
	if (PULSE_Player.isAdequate) {
		var _sentryDiv = document.getElementById ('Pulse_Player_Install_sentryDiv');
		if (_sentryDiv != null) _sentryDiv.innerHTML = PULSE_Player_Install._sentryProperties.proceedHtml;
		PULSE_Player_Install_setInstallProgress ('complete');
	} else {
		PULSE_Player_Install_installFailureMessage ();
	}
}

/*** Support code for Mozilla-based browsers ***/

function PULSE_Player_Install_xpinstallCallback (_url,_status) {
    if (_status == 0) { //good install :)
		navigator.plugins.refresh ();
        return;
//		setTimeout (Pulse_Player_Install_confirmInlineInstall,2000);
//no! you will always have to restart the browser, well, if it's Firefox at least (how to tell if restart required?)
	} else {
		PULSE_Player_Install_installFailureMessage ();
	}
}

/*** Support code for SmartUpdate in Navigator 4.x ***/

function PULSE_Player_Install_smartUpdatePollStatus () {
	var _package = PULSE_Player_Install;
	_package._installTimerCount++;
	if (_package._promptWindow && _package._promptWindow.closed) {
		clearInterval (_package._installTimerInterval);
		window.location.reload ();
	} else if (
		navigator.mimeTypes ['application/x-pulse-player'] != null &&
		navigator.mimeTypes ['application/x-pulse-player'].enabledPlugin
	) {
		PULSE_Player_Install_closeWindow ();
		clearInterval (_package._installTimerInterval);
		window.location.reload ();
	} else if (_package._installTimerCount == 10) {
		PULSE_Player_Install_updatePlayerStatus ();
		PULSE_Player_Install_showMessage ('player-install-complete.html');
	}
}

function PULSE_Player_Install_smartUpdateStart () {
	var
		_package = PULSE_Player_Install,
		_mustSetInterval = true
	;
	if (NAV4 && (WIN32 || MAC)) {
		if (!navigator.javaEnabled ()) {
			_mustSetInterval = false;
			PULSE_Player_Install_showMessage (_package._status._javaNotEnabled);
		} else {
			var
				_installTrigger = netscape.softupdate.Trigger,
				_installMode = _package.silentInstall ? _installTrigger.SILENT_MODE : _installTrigger.DEFAULT_MODE
			;
			if (!_installTrigger.UpdateEnabled ()) {
				_mustSetInterval = false;
				PULSE_Player_Install_showMessage (_package._status._smartUpdateNotEnabled);
			} else if (!_installTrigger.StartSoftwareUpdate (_package._autoInstallerUrl,_installMode)) {
				_mustSetInterval = false;
				PULSE_Player_Install_showMessage (_package._status._smartUpdateFailed);
			}
		}
	}
	if (_mustSetInterval) {
		_package._installTimerCount = 0;
		_package._installTimerInterval = setInterval (PULSE_Player_Install_smartUpdatePollStatus,1000);
	}
}

/*** Support code for installation in Microsoft Internet Explorer ***/

function PULSE_Player_Install_startActiveXInstall () {
	PULSE_Player_Install_setInstallProgress ('start');
	document.body.insertAdjacentHTML (
		'BeforeEnd',
		'<DIV STYLE="position:absolute; visibility:visible; left:-1000px; top:-1000px;">' +
		'<OBJECT' +
		' ID=Pulse_dummyPlayer' +
		' ONREADYSTATECHANGE="setTimeout (\'Pulse_Player_Install_confirmInlineInstall ()\',1000)"' +
		' WIDTH=1' +
		' HEIGHT=1' +
		' CLASSID="CLSID:A48D0309-8DA3-41aa-98E4-89194D471890"' +
		' CODEBASE="' + PULSE_Player.Install._autoInstallerUrl + '"' +
		'>' +
		'</OBJECT>' +
		'</DIV>'
	);
}

/***/

//override this...
function PPInstallTriggerInstallFired(b_running_it) { //only for GECKO
	//firefox will put up the prevention bar, and the user needs to click "Allow"
	//so the InstallTrigger will indeed appear to fail, even though it hasn't
	//should really, instead, put some text in the page alerting the user what to do
	//this function will be called when the user hits the trigger, and b_running_it will be false, most likely,
			//if the install is blocked and waiting... so could do a time out... or at this point
			//show something in the page alerting them to the need to click the Allow button
			//may want to also just offer a LINK for a manual installer
	return true;// return false if want to offer manual installer the built-in way...
}

function PULSE_Player_Install_installPlayer () {
	var _package = PULSE_Player_Install;
	if (!PULSE_Player.browserSupported) {
		PULSE_Player_Install_showMessage (_package._status._browserNotSupported);
	} else if (IE4) {
		if (!PULSE_Player.isInstalled) {
			PULSE_Player_Install_startActiveXInstall ();
		} else {
			PULSE_Player_Install_offerManualInstaller ();
		}
	} else if (GECKO) {
		PULSE_Player_Install_setInstallProgress ('start');
		//_package._xpi = {'Pulse Player Install':"file:///Users/jantje/pulse/LL/" + _package._autoInstallerUrl};
		_package._xpi = {'Pulse Player Install': _package._autoInstallerUrl};
		var b_omi = true;
		//if ((OSX || WIN32) && !PULSE_Player.isInstalled && !OPERA) {
		if ((OSX || WIN32)  && !OPERA) {
			b_omi = !InstallTrigger.install (_package._xpi,PULSE_Player_Install_xpinstallCallback);
		    b_omi = !PPInstallTriggerInstallFired(!b_omi);

		}
		if (b_omi) PULSE_Player_Install_offerManualInstaller();

	} else if (NAV4) {
		if (PULSE_Player_Install._promptWindow && !PULSE_Player_Install._promptWindow.closed) {
			clearInterval (PULSE_Player_Install._installTimerInterval);
			PULSE_Player_Install._promptWindow.close ();
		}
		if (
			!PULSE_Player.isInstalled &&
			WIN32 &&
			parseFloat (navigator.appVersion) >= 4.5 &&
			navigator.javaEnabled () &&
			netscape.softupdate.Trigger.UpdateEnabled ()
		) {
			PULSE_Player_Install_showWindow ('smart-update-started.html');
			setTimeout (PULSE_Player_Install_smartUpdateStart,500);
		} else {
			PULSE_Player_Install_offerManualInstaller ();
		}
	}
}

function PULSE_Player_Install_startInstall () {
	if (PULSE_Player_Install._installFailed) {
		PULSE_Player_Install_installFailureMessage ();
	} else {
		PULSE_Player_execHandler (PULSE_Player_Install._installAction);
	}
}

function PULSE_Player_Install_compareVersions (_versionA,_versionB) {
	/*** possible return values
		-1: version A < version B
		 0: version A = version B
		 1: version A > version B
	***/
	var
		_result = 0,
		_tempVersionA = _versionA,
		_tempVersionB = _versionB
	;
	while ((_tempVersionA != '' || _tempVersionB != '') && _result == 0) {
		var
			_periodPosA = _tempVersionA.indexOf ('.'),
			_periodPosB = _tempVersionB.indexOf ('.')
		;
		if (_periodPosA == -1) _periodPosA = _tempVersionA.length;
		if (_periodPosB == -1) _periodPosB = _tempVersionB.length;
		_result = _tempVersionA.substr (0,_periodPosA) - _tempVersionB.substr (0,_periodPosB);
		if (_result != 0) _result = (_result > 0) ? 1 : -1
		_tempVersionA = _tempVersionA.substr (_periodPosA + 1);
		_tempVersionB = _tempVersionB.substr (_periodPosB + 1);
	}
	return _result;
}

function PULSE_Player_Install_updatePlayerStatus () {
	var
		_package = PULSE_Player_Install,
		_Pulse_Player = PULSE_Player,
		_appVersion = parseFloat (navigator.appVersion)
	;
	_Pulse_Player.isInstalled = _Pulse_Player.version != '0.0.0.0';

	/*** determine player status ***/
	if (_Pulse_Player.isInstalled && PULSE_Player_Install_compareVersions (_Pulse_Player.version,_package._requiredMinVersion) >= 0) {
		_package._playerStatus = _package._status._installed;
	} else if (_Pulse_Player.browserSupported) {
		_package._playerStatus = _Pulse_Player.isInstalled ? _package._status._upgradeRequired : _package._status._notInstalled;
	} else if ((IE3 && WIN32) || (NAV3 && (WIN32 || MAC))) {
		_package._playerStatus = _package._status._browserUpgradeRequired;
	} else {
		_package._playerStatus = _package._status._browserNotSupported;
	}
	_Pulse_Player.isAdequate = _package._playerStatus == _package._status._installed;

	/*** determine install action ***/
	if (
		_package._playerStatus == _package._status._javaNotEnabled ||
		_package._playerStatus == _package._status._browserUpgradeRequired ||
		_package._playerStatus == _package._status._browserNotSupported
	) {
		_package._installAction = 'Pulse.Player.Install.showMessage (\'' + _package._playerStatus._infoPage + '\')';
	} else {
		_package._installAction = PULSE_Player_Install_installPlayer;
	}
}

function PULSE_Player_Install_requireMinVersion (_requiredMinVersion) {
	var _package = PULSE_Player_Install;
	if (PULSE_Player_Install_compareVersions (_package._requiredMinVersion,_requiredMinVersion) < 0) _package._requiredMinVersion = _requiredMinVersion;
	PULSE_Player_Install_updatePlayerStatus ();
}

function PULSE_Player_Install_getSentryHtml (_sentryProperties) {
	var
		_package = PULSE_Player_Install,
		_isAdequate = PULSE_Player.isAdequate
	;
	PULSE_Player.addPropertiesToObject (_package._sentryProperties,_sentryProperties);
	_package.sentryHaltBlockId = 'Pulse_Player_Install_sentryHalt';
	_package.sentryProceedBlockId = 'Pulse_Player_Install_sentryProceed';
	var _html =
		'<div id="' + _package.sentryHaltBlockId + '" style="position:' + (!_isAdequate ? 'static' : 'absolute') + '; visibility:' + (!_isAdequate ? 'visible' : 'hidden') + ';">' +
		((_package._sentryProperties.haltHtml != null) ? _package._sentryProperties.haltHtml : ('<table width=100% border=0 cellspacing=0 cellpadding=1 bgcolor=#4B77DA><tr><td><table width=100% border=0 cellspacing=0 cellpadding=4 bgcolor=#ffffff><tr><td><a href="javascript://" onclick="Pulse.Player.Install.startInstall (); return false">' + PULSE_Player.getPlayerImageHtml ('align=right') + '</a><span style="font-family:Arial,Helvetica,Verdana; font-size:12px; color:#4B77DA;">You do not have the Pulse Player installed. You need to have the Pulse Player installed in order to proceed further.</span></td></tr></table></td></tr></table>')) +
		'</div>' +
		'<div id="' + _package.sentryProceedBlockId + '" style="position:' + (_isAdequate ? 'static' : 'absolute') + '; visibility:' + (_isAdequate ? 'visible' : 'hidden') + ';">' +
		_package._sentryProperties.proceedHtml +
		'</div>'
	;
	return _html;
}

function PULSE_Player_Install_initialize () {
	var
		_package = PULSE_Player_Install,
		_Pulse_Player = PULSE_Player,
		_navigator = navigator
	;
	/*** Private Static Properties ***/
	_package._installFailed = false;
	_package._sentryProperties = {
		proceedHtml:'',
		haltHtml:null
	};
	_package._requiredMinVersion = '0';

	/*** Public Static Properties ***/
	_package.sentryHaltBlockId = _package.sentryProceedBlockId = '';

	/*** Public Static Methods ***/
	_package.getSentryHtml = PULSE_Player_Install_getSentryHtml;
	_package.offerManualInstaller = PULSE_Player_Install_offerManualInstaller;
	_package.requireMinVersion = PULSE_Player_Install_requireMinVersion;
	_package.showMessage = PULSE_Player_Install_showMessage;
	_package.startInstall = PULSE_Player_Install_startInstall;

	/*** determine download path for browser language ***/
	var
		_languageCode = ((typeof _navigator.language != 'undefined') ? _navigator.language : ((typeof _navigator.browserLanguage != 'undefined') ? _navigator.browserLanguage : 'en')).toLowerCase (),
		_languagePath = 'english/',
		_languagePaths = {
			fr:'french/',
			de:'german/',
			es:'spanish/',
			ja:'japanese/',
			ko:'korean/',
			zh:'schinese/',
			'zh-tw':'tchinese/'
		}
	;
	_languageCode = 'en'; /* IMPORTANT: this temporarily overrides the browser's language, since player installation localization is not yet complete */
	for (var _languagePathCode in _languagePaths) {
		if (_languageCode.indexOf (_languagePathCode) == 0)
			_languagePath = _languagePaths [_languagePathCode]
		;
	}
	_package.silentInstall = false;

	/*** Current Player Version Info ***/
	if (NAV4) {
		_package._currentVersion = '5.2.0.0'; /* NOTE: 5.0.2.4504 is previous public shell version for Netscape Navigator 4.x */
	} else if (GECKO) {
		_package._currentVersion = '5.2.0.0'; /* NOTE: 5.2.0.6335 is previous public shell version for Netscape 6.x & Mozilla 1.x */
	} else {
		_package._currentVersion = '5.2.0.0'; /* NOTE: 5.0.1.3749 is previous public shell version for Microsoft Internet Explorer */
	}
	/*** Installer URLs ***/
	var
		_majorMinorVersion = _package._currentVersion.substr (0,_package._currentVersion.indexOf ('.',3)),
		_browserInstallerCode = NAV4 ? 'Ns' : (IE4 ? 'Ax' : (GECKO ? 'Mz' : '')),
		_installerFilenamePrefix = 'PulsePlayer' + _majorMinorVersion,
		_installerPath = _package.installerPath = gs_rootPathToPlayers, //'http://www.pulse3d.com/players/',
		/* NOTES: _installerPath
			- must be absolute URL, e.g. http://www.pulse3d.com/players/
			- for previous public release available through Akamai, use http://a320.g.akamai.net/7/320/1456/v50245/www.pulse3d.com/players/
		*/
		_currentVersionInstallerPath = _installerPath + _languagePath + _majorMinorVersion + '/'
	;
	_package._messagePath = _currentVersionInstallerPath + 'info/';
	_package._autoInstallerUrl =
		_currentVersionInstallerPath +
		PLAT_STR_DIR +  '/' +
		_installerFilenamePrefix +
		_browserInstallerCode +
		PLAT_STR_FILE + '.' +
		{Ns:'jar',Ax:'cab',Mz:'xpi'} [_browserInstallerCode] +
		(IE4 ? ('#version=' + _package._currentVersion.replace (new RegExp ('\\.','g'),',')) : '')
	;
	_package._netscapeWinInstallerFilename = _installerFilenamePrefix + 'NsWin.exe';
	_package._netscapeMacInstallerFilename = _installerFilenamePrefix + 'NsMac.hqx';

	PULSE_Player_Install_checkInstalledVersion ();

	/*** Player Status Codes ***/
	_package._status = {
		_upgradeRequired:{},
		_installed:{},
		_notInstalled:{},
		_javaNotEnabled:{_infoPage:'java-disabled.html'},
		_browserUpgradeRequired:{_infoPage:'browser-upgrade-required.html'},
		_browserNotSupported:{_infoPage:'browser-not-supported.html'},
		_smartUpdateNotEnabled:{_infoPage:'smart-update-disabled.html'},
		_smartUpdateFailed:{_infoPage:'smart-update-failed.html'}
	};

	PULSE_Player_Install_requireMinVersion ('5.2');
}

/*** Namespace ***/

PULSE_Player_Install = PULSE_Player.Install = {};

/*** Backwards Compatibility Global Functions ***/

pe_PlayerInstall = PULSE_Player_Install_installPlayer;

/*** Initialization ***/

PULSE_Player_Install_initialize ();


