<?xml version="1.0" encoding="UTF-8"?>
<installer-gui-script minSpecVersion='1'>

	<platforms>
        <client arch="ppc,i386"/>
        <server arch="ppc,i386"/>
    </platforms>

	<!-- Installer UI-ey stuff -->
	<title>MANUAL_TITLE</title>
	<welcome file="Welcome.rtf"/>
	<license file="License.rtf"/>
	
	<background file="background.tif"
				scaling="proportional"
				alignment="bottomleft"
	/>
	
	<options	customize			= "never"
				rootVolumeOnly		= "true"
				hostArchitectures	= "i386,ppc"
	/>
	
	<!-- Manual Install package layout -->
	<choices-outline>
		<line choice='manual'/>
	</choices-outline>

	<choice id='manual'>
		<pkg-ref auth='Root' id='com.apple.pkg.GarageBand_305'>.</pkg-ref>
	</choice>
	
	<choice id='manual'	title='MANUAL_TITLE' 
						versStr='SU_VERSION'/>
	

	<!-- Software Update package layout -->
	<choices-outline ui='SoftwareUpdate'>
		<line choice='su'/>
	</choices-outline>

	<choice id='su'>
		<pkg-ref auth='Root' id='b'>GarageBand_305.pkg</pkg-ref>
	</choice>
	
	<choice id='su' visible ='VisibleCheck()'
					start_selected = 'true'
					suDisabledGroupID = 'GarageBand_305'
	/>
	
	<choice id='su' title='SU_TITLE' 
					versStr='SU_VERSION'
					description='SU_DESCRIPTION' 
					description-mime-type='text/html'
	/>
	

	<installation-check script="InstallationCheck()" />	

<script>
	function InstallationCheck()
	{
		// Installation check since we're root volume only. That way, the user gets error
		// right away, not at volume select screen.
		
		return(rootVolumeHasNoTier3() &amp;&amp; systemIsLeopard() &amp;&amp; rootVolumeIsEligible());
	}
	
	function VisibleCheck()
	{
		// only show in software update if volume really needs update
		// (InstallationCheck is also run)
		return (volumeNeedsUpdate());
	}

	function systemIsLeopard()
	{
		if (-1 &lt; system.compareVersions(system.version.ProductVersion,"10.5"))
			return true;

		my.result.message = system.localizedStringWithFormat('oldSystem');
		my.result.type = 'Fatal';
		return false;
	}

	function rootVolumeHasNoTier3()
	{
		var path = "/var/db/.AppleTier3Language";
		if (!system.files.fileExistsAtPath(path))
			return true;
			
		my.result.message = system.localizedStringWithFormat('volumeHasTier3');
		my.result.type = 'Fatal';
		return false;
	}

	function rootVolumeIsEligible()
	{
		var path = "/Applications/GarageBand.app";
		var bundle = system.files.bundleAtPath(path);
		var version = BundleGetCompositeVersion5(bundle);
		
		// if version is not less than 3.0.4 (ie. greater than or equal to) and version is less than 3.0.6, this volume can run a manual update
		if (version &amp;&amp; (system.compareVersions(version, "3.0.4") != -1) &amp;&amp;  (system.compareVersions(version, "3.0.6") == -1))
			return true;

		my.result.message = system.localizedStringWithFormat('noApp');
		my.result.type = 'Fatal';
		return false;
	}
		
	function volumeNeedsUpdate()
	{
		var path = my.target.mountpoint + "/Applications/GarageBand.app";
		var bundle = system.files.bundleAtPath(path);
		var version = BundleGetCompositeVersion5(bundle);
		
		// if version is not less than 3.0.4 (ie. greater than or equal to) and version is less than 3.0.5, this volume can see auto update
		if (version &amp;&amp; (system.compareVersions(version, "3.0.4") != -1) &amp;&amp;  (system.compareVersions(version, "3.0.5") == -1))
			return true;

		return false;
	}
</script>

	<!-- Common include -->
<script>
	function _PadVersionString(version, tupleCount)
	{
		if (version == null)
			version = "0";
		var components = version.split(".");
		if (components.length &gt; tupleCount)
			components = components.slice(0, tupleCount);
		else
			for (; components.length&lt;tupleCount; )
				components.push("0");
		return components.join(".");
	}

	function BundleGetCompositeVersion5(bundle)
	{
		if (bundle == null)
			return null;
		var shortVers = bundle.CFBundleShortVersionString;
		shortVers = _PadVersionString(shortVers, 3);
		var sourceVers = bundle.SourceVersion;
		sourceVers = _PadVersionString(sourceVers, 1);
		var buildVers = bundle.BuildVersion;
		buildVers = _PadVersionString(buildVers, 1);
		var fiveTupleVers = shortVers + "." + sourceVers + "." + buildVers;
		return fiveTupleVers;
	}

	function CheckNameRegistry(path, property, value)
	{
		try
		{
			var obj = system.ioregistry.fromPath(path);
			if (obj == null)
				return false;

			var propObj = obj[property];
			if (propObj == null)
				return false;

			if (typeof(propObj) == "string")	// string
			{
				return (propObj == value);
			}
			else if (typeof(propObj) == "object")	// array contains
			{
				for (var i=0; i&lt;propObj.length; i++)
					if (propObj[i] == value)
						return true;
			}
		}
		catch (e) {}

		return false;
	}
</script>	

	<localization>
		<strings language="pl">
<![CDATA[
// From Localiazable.strings
"SU_TITLE" = "GarageBand Update";
"SU_VERSION" = "3.0.5";
"SU_SERVERCOMMENT" = "For Desktop or Server Systems";

// From HTML description file
"SU_DESCRIPTION" = '<HTML>

<BODY> 
<FONT FACE="Lucida Grande">
<P>
This update supports compatibility with Mac OS X 10.5.
</P>
</FONT> 
</BODY>

</HTML>
';
]]>
		</strings>
	</localization>
</installer-gui-script>
