<?xml version="1.0" encoding="UTF-8"?>
<installer-gui-script minSpecVersion='1'>
    <platforms>
        <client arch="i386"/>
        <server arch="i386"/>
    </platforms>
    <title>SU_TITLE</title>
    <options hostArchitectures='i386' customize='never' rootVolumeOnly='true'/>
    <choices-outline>
        <line choice='manual'/>
    </choices-outline>
    <choices-outline ui='SoftwareUpdate'>
        <line choice='su'/>
    </choices-outline>
    <choice id='manual' title='SU_TITLE' versStr='SU_VERS'>
        <pkg-ref auth='Root' id='manual'>#SuperDriveFWU.pkg</pkg-ref>
    </choice>
    <choice id='su' suDisabledGroupID='iMacFirmwareUpdate'>
        <pkg-ref auth='Root' id='su'>SuperDriveFWU.pkg</pkg-ref>
    </choice>
    <choice id='su' start_selected='true'/>
    <choice id='su' title='SU_TITLE' versStr='SU_VERS'/>
    <choice id='su' description='SU_DESCRIPTION' description-mime-type='text/html'/>
    <installation-check script='InstallationCheck()'/>
    <volume-check script='VolumeCheck()'/>
    <script>
	
	function InstallationCheck() {
        if ( !isValidMachine() || !hasValidEFI() || !hasValidDeviceVersion()) {
            my.result.message = system.localizedStringWithFormat('ERR_HW');
            my.result.type = 'Fatal';
            return false;	       
        }
        
        return true;	   
	}
	
	function VolumeCheck() {
        if (system.env.OS_INSTALL == 1) {
            return true;
        }

        if ( !hasOS() || !hasOSVer() ) {
            my.result.type = 'Fatal';
            return false;	       
        }
                
        if ( !isNotDowngrade() ) {
            my.result.message = system.localizedStringWithFormat('ERR_HW');
            my.result.type = 'Fatal';
            return false;	       
        }
        
        return true;
	}
	
    function hasOS() {
        if (!system.files.fileExistsAtPath(my.target.mountpoint + "/System/Library/CoreServices/SystemVersion.plist")) {
			my.result.message = system.localizedStringWithFormat('ERR_OS', '10.5.7');
			return false;
		}
		return true;
    }

    function hasOSVer() {
		if( -1 == system.compareVersions(my.target.systemVersion.ProductVersion, '10.5.7') )
		{
			my.result.message = system.localizedStringWithFormat('ERR_OS_MIN', '10.5.7');
		    return false;
		}
		
		if( -1 != system.compareVersions(my.target.systemVersion.ProductVersion, '10.7') ) {
			my.result.message = system.localizedStringWithFormat('ERR_OS', '10.6');
			return false;
		}

        return true;
    }
       
	var invalidEFIVersions = [
		'IM91.88Z.008D.B00.0901142258',
		'IM91.88Z.008D.B04.0902261905',
		'MB51.88Z.007D.B00.0901301153',
		'MB51.88Z.0073.B06.0810291326', 
		'MB51.88Z.0073.B02.0810061247',
		'MB51.88Z.0073.B00.0809221748', 
		'MB52.88Z.0088.B02.0902171256',
		'MB52.88Z.0088.B00.0901131104',
		'MBP51.88Z.007E.B00.0902031928',
		'MBP51.88Z.0074.B01.0810311509', 
		'MBP51.88Z.0074.B00.0810241236', 
		'MBP51.88Z.0073.B02.0810061244', 
		'MBP51.88Z.0073.B00.0809221733',
		'MBP52.88Z.008E.B00.0902031716',
		'MM31.88Z.0081.B02.0902101738',
		'MM31.88Z.0081.B00.0812030802',
	];

	function hasValidEFI() {
		var obj = system.ioregistry.fromPath("IODeviceTree:/rom@0");
		if (obj) {
			var property = obj.version;
			if (!property) { return false; };
			
			for (var i = 0; i &lt; invalidEFIVersions.length; i = i + 1) {
				if (invalidEFIVersions[i] == property) {
					return false;
				}
			}
			
			return true;
		}
		
		return false;
    }
    
	var validMachineVersions = [
		'MacBook5,1',
		'MacBook5,2',
		'MacBookPro5,1',
		'MacBookPro5,2',
		'Macmini3,1',
		'iMac9,1',
	];
	function isValidMachine() {
		var property = system.sysctl("hw.model");
		if (!property) { return false; };
		
		for (var i = 0; i &lt; validMachineVersions.length; i = i + 1) {
			if (validMachineVersions[i] == property) {				
				return true;
			}
		}
		        
		return false;
	}
		
	var deviceVersionsTable = [
		['HL-DT-STDVDRW  GA11N','KA15','COR7'],
		['HL-DT-STDVDRW  GS21N','SA15','COR7'],
		['HL-DT-STDVDRW  GS21N','SA14','COR7'],
		['HL-DT-STDVDRW  GS21N','SA17','COR7'],
		['HL-DT-STDVDRW  GS22N','CP06','COR7'],
		['MATSHITADVD-R   UJ867A','KK07','0038'],
		['MATSHITADVD-R   UJ-868','KA14','0038'],
		['MATSHITADVD-R   UJ-868','KA19','0038'],
		['OPTIARCDVD RW AD-5670S','2AHF','0.08'],
		['OPTIARCDVD RW AD-5670S','2AHG','0.08'],
		['OPTIARCDVD RW AD-5670S','2AHC','0.08'],
		['OPTIARCDVD RW AD-5960S','1APF','0.02'],		
	];
	
	var specialKernelVersions = [ 'COR1', 'COR2', 'COR3', 'COR4', 'COR5', 'COR6', 'COR7', 'COR8', 'COR9', 'CORA' ];
		
	function hasValidDeviceVersion() {
		var dvdDevices = system.ioregistry.matchingName('IODVDServices');
		if (dvdDevices.length == 0) {
			return false;
		}
		
		for (var i = 0; i &lt; dvdDevices.length; i++) {
			var device = dvdDevices[i];
			var deviceCharacteristics = device['Device Characteristics'];
			if (!deviceCharacteristics) {
				return false;
			}
			
			var model = deviceCharacteristics['Vendor Name'] + deviceCharacteristics['Product Name'];
			var revision = deviceCharacteristics['Product Revision Level'];
			
			for (var j = 0; j &lt; deviceVersionsTable.length; j++) {
				if (model == deviceVersionsTable[j][0]) {
					if (model.search('HL-DT') == 0) {
						if (revision == deviceVersionsTable[j][1]) return true;
						for (var k = 0; k &lt; specialKernelVersions.length; k++ ) {
							if (revision == specialKernelVersions[k]) return true;
						}
					} else if (revision == deviceVersionsTable[j][1] || revision == deviceVersionsTable[j][2]) {
						return true;
					}
				}
			}
		}
		
		return false;
	}
	
    function isNotDowngrade() {
        var action = null;
        if (choices.manual) {
            action = choices.manual.packageUpgradeAction;
        }
        else {
            action = choices.su.packageUpgradeAction;
        }
        
        if ((action == 'downgrade') || (action == 'mixed')) {
            return false;
        }
        
        return true;
    }
	
	</script>
    <welcome file="SUDescription.html"/>
    <conclusion file="Conclusion.rtf"/>
    <license file="License.rtf" sla="EA0325"/>
    <localization>
        <strings language="pl"><![CDATA["SU_TITLE" = "Uaktualnienie oprogramowania sprzętowego SuperDrive";
"SU_VERS" = "3.0";
"SU_SERVERCOMMENT" = "Dla komputerów klienckich i serwerów.";

"SU_DESCRIPTION"='<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  <meta http-equiv="Content-Style-Type" content="text/css">
  <title></title>
  <style type="text/css">
	p {margin-left: 0.0px; margin-top: 0.0px; font: 11.0px "Lucida Grande";}
  </style>
</head>
<body>
<p>To uaktualnienie eliminuje hałas wydawany przez napęd optyczny w czasie budzenia Maca ze snu. Jest ono zgodne z następującymi uaktualnieniami EFI:</p>
<p>
Uaktualnienie oprogramowania sprzętowego iMac EFI 1.4<br />
Uaktualnienie oprogramowania sprzętowego Mac mini EFI 1.2<br />
Uaktualnienie oprogramowania sprzętowego MacBook EFI 1.4<br />
Uaktualnienie oprogramowania sprzętowego MacBook Pro EFI 1.8<br />
</p>
<p>Aby uaktualnić oprogramowanie sprzętowe, postępuj zgodnie z instrukcjami programu uaktualniającego (/Programy/Narzędzia/Uaktualnienie oprogramowania SuperDrive.app). Program uaktualniający zostanie uruchomiony automatycznie po zamknięciu Instalatora.</p>
</body>
</html>
';
]]></strings>
    </localization>

	<pkg-ref id='su' installKBytes='67161' version='1.0.1.1260496060'/>
</installer-gui-script>