Therefore, you need some changes. The s_filter can contain multiple filters and therefore you'll need to write multiple strings into the databloc. Luckily, Choli made a nice function for doing that. 
 
I've edited Matty's code to use WriteMultiStringW and removed the OFN_FILEMUSTEXIST flag because that can't be used on a Save As dialog! 
 
code:
function SaveFileAs(sTitle, sInitialDir){
    if (typeof(sTitle) === 'undefined') sTitle = '';
    if (typeof(sInitialDir) === 'undefined') sInitialDir = 'C:\\';
    var OpenFileName = Interop.Allocate(88);
    with (OpenFileName){
        WriteDWORD(0, 88); // Dodgy Microsoft, why can't you figure out the size of the struct yourself...
        var filter = 'JPEG (*.jpg;*.jpeg)|*.JPEG;*.JPG|All Files (*.*)|*.*||'; // This string will be used to generate an s_filter databloc
        var s_filter = Interop.Allocate(512);
        WriteMultiStringW(s_filter, filter);
            WriteDWORD(12, s_filter.DataPtr);
        WriteDWORD(24, 1);
        s_file = Interop.Allocate(512);
        // s_file.WriteString(0, '*.*');
            WriteDWORD(28, s_file.DataPtr);
        WriteDWORD(32, 255);
        var sTmp = Interop.Allocate((254+1)*2);
        WriteDWORD(36, sTmp.DataPtr);
        WriteDWORD(40, 255);
        var s_initdir = Interop.Allocate((sInitialDir.length+1)*2);
        s_initdir.WriteString(0, sInitialDir);
            WriteDWORD(44, s_initdir.DataPtr);
        s_title = Interop.Allocate((sTitle.length+1)*2);
            WriteDWORD(48, s_title.DataPtr);
        WriteDWORD(52, 0x800000 /* OFN_ENABLESIZING */ | 0x80000 /* OFN_EXPLORER */ | 0x4 /* OFN_HIDEREADONLY */ | 0x200000 /* OFN_LONGNAMES */ | 0x800 /* OFN_PATHMUSTEXIST */ | 0x1000 /* OFN_OVERWRITEPROMPT */);
    }
    return Interop.Call('comdlg32', 'GetSaveFileNameW', OpenFileName) !== 0 ? s_file.ReadString(0) : false;
    function WriteMultiStringW (datablock, string) {
        var pos = 0;
        datablock.WriteString(0, string);
        pos = string.indexOf("|", pos);
        while (pos != -1) {
            datablock.WriteWORD(2 * pos, 0);
            pos = string.indexOf("|", pos + 1);
        }
    }
}