/**
 * @(#) $RCSfile: mx.js,v $ $Revision: 1.1 $ $Date: 2004/08/10 23:00:52 $
 *
 * Copyright 2003 Orgdot AS. All Rights Reserved.
 * http://dev.swfit.com
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 2
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 */

/**
 * Use of Javascript to embed and configure flash movies in a browser.
 *
 * @author      Olaf Havnes
 * @version     $Revision: 1.1 $ $Date: 2004/08/10 23:00:52 $
 * @since       SWFIT2.0
 */




/**
 * Flash 7 embed code
 */
function flash7Code (mov_src, mov_wdt, mov_hgt, mov_col)
{
    if (mov_src.length == mov_src.lastIndexOf ("&") + 1)
    {
        // then we have a trailing '&'
        mov_src += "in_browser=true";
    }
    else
    {
        mov_src += "&in_browser=true";
    }


    var code = '<object \n';
    code += '  classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" \n';
    code += '  codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0"\n';
    code += '  width="' + mov_wdt + '" height="' + mov_hgt + '">\n';
    code += '  <param name="allowScriptAccess" value="sameDomain" />\n';
    code += '  <param name="movie" value="' + mov_src + '">\n';
    code += '  <param name="quality" value="best">\n';
    code += '  <param name=wmode value=transparent>\n';
    code += '  <param name="menu" value="false">\n';
    code += '  <param name="align" value="lt">\n';
    code += '  <param name="scale" value="showall" \n';
    code += '  <param name="bgcolor" value="' + mov_col + '">\n';
    code += '<embed \n';
    code += '  src="' + mov_src + '" \n';
    code += '  quality="best" scale="showall" salign="lt" menu="false" \n';
    code += '  wmode=transparent  \n';
    code += '  bgcolor="' + mov_col + '" \n';
    code += '  width="' + mov_wdt + '" \n';
    code += '  height="' + mov_hgt + '" \n';
    code += '  type="application/x-shockwave-flash" \n';
    code += '  allowScriptAccess="sameDomain" \n';
    code += '  pluginspage="http://www.macromedia.com/go/getflashplayer">\n';
    code += '</embed></object>';
    return code;
}



/**
 * URL-encode the old-fashioned way
 */


function urlEncVar (str)
{
    return str + "=" + escape (eval (str)) + "&";
}





/**
 * When we URL-encode the UTF8 way (for charsets that go into Flash MX), we need
 * to do some work to make up for the missing char data type in Javascript ....
 */





/**
 * Get a single-character String from a given character code from 0 to 255.
 */
var hex_chars = '0123456789ABCDEF';
function strFromCharCode (n)
{
    return unescape ('%' + hex_chars.charAt (n >> 4) + '' + hex_chars.charAt (n % 16));
}

/**
 * Get a character code from a single-character String.
 */
function allChars ()
{
    var ac = new Array (256);
    for (var i = 0; i < 256; i++) ac[i] = strFromCharCode(i);
    return ac;
}
var all_chars = allChars();

function charCodeFromStr (str)
{
    for (var i = 0; i < all_chars.length; i++)
    if (all_chars[i] == str) return i;
    return 0;
}


/**
 * Create a table of char values.
 */
var char_A_cap = charCodeFromStr ("A");
var char_Z_cap = charCodeFromStr ("Z");

var char_a = charCodeFromStr ("a");
var char_z = charCodeFromStr ("z");

var char_0 = charCodeFromStr ("0");
var char_9 = charCodeFromStr ("9");

var char_space = charCodeFromStr (" ");



/**
 * I ported this routine to JavaScript from the Java class downloaded from
 * http://cvs.sourceforge.net/viewcvs.py/lazy-x/src/URLUTF8Encoder.java
 *
 * Provides a method to encode any string into a URL-safe
 * form, the so-called "x-www-form-urlencoded" form.
 * Non-ASCII characters are first encoded as sequences of
 * two or three bytes, using the UTF-8 algorithm, before being
 * encoded in "x-www-form-urlencoded".
 *
 * @author Cryptix
 *
 * Modified by JG
 *
 * Ported to JavaScript by Olaf Havnes
 */


var hex = new Array
(
    "%00", "%01", "%02", "%03", "%04", "%05", "%06", "%07",
    "%08", "%09", "%0A", "%0B", "%0C", "%0D", "%0E", "%0F",
    "%10", "%11", "%12", "%13", "%14", "%15", "%16", "%17",
    "%18", "%19", "%1A", "%1B", "%1C", "%1D", "%1E", "%1F",
    "%20", "%21", "%22", "%23", "%24", "%25", "%26", "%27",
    "%28", "%29", "%2A", "%2B", "%2C", "%2D", "%2E", "%2F",
    "%30", "%31", "%32", "%33", "%34", "%35", "%36", "%37",
    "%38", "%39", "%3A", "%3B", "%3C", "%3D", "%3E", "%3F",
    "%40", "%41", "%42", "%43", "%44", "%45", "%46", "%47",
    "%48", "%49", "%4A", "%4B", "%4C", "%4D", "%4E", "%4F",
    "%50", "%51", "%52", "%53", "%54", "%55", "%56", "%57",
    "%58", "%59", "%5A", "%5B", "%5C", "%5D", "%5E", "%5F",
    "%60", "%61", "%62", "%63", "%64", "%65", "%66", "%67",
    "%68", "%69", "%6A", "%6B", "%6C", "%6D", "%6E", "%6F",
    "%70", "%71", "%72", "%73", "%74", "%75", "%76", "%77",
    "%78", "%79", "%7A", "%7B", "%7C", "%7D", "%7E", "%7F",
    "%80", "%81", "%82", "%83", "%84", "%85", "%86", "%87",
    "%88", "%89", "%8A", "%8B", "%8C", "%8D", "%8E", "%8F",
    "%90", "%91", "%92", "%93", "%94", "%95", "%96", "%97",
    "%98", "%99", "%9A", "%9B", "%9C", "%9D", "%9E", "%9F",
    "%A0", "%A1", "%A2", "%A3", "%A4", "%A5", "%A6", "%A7",
    "%A8", "%A9", "%AA", "%AB", "%AC", "%AD", "%AE", "%AF",
    "%B0", "%B1", "%B2", "%B3", "%B4", "%B5", "%B6", "%B7",
    "%B8", "%B9", "%BA", "%BB", "%BC", "%BD", "%BE", "%BF",
    "%C0", "%C1", "%C2", "%C3", "%C4", "%C5", "%C6", "%C7",
    "%C8", "%C9", "%CA", "%CB", "%CC", "%CD", "%CE", "%CF",
    "%D0", "%D1", "%D2", "%D3", "%D4", "%D5", "%D6", "%D7",
    "%D8", "%D9", "%DA", "%DB", "%DC", "%DD", "%DE", "%DF",
    "%E0", "%E1", "%E2", "%E3", "%E4", "%E5", "%E6", "%E7",
    "%E8", "%E9", "%EA", "%EB", "%EC", "%ED", "%EE", "%EF",
    "%F0", "%F1", "%F2", "%F3", "%F4", "%F5", "%F6", "%F7",
    "%F8", "%F9", "%FA", "%FB", "%FC", "%FD", "%FE", "%FF"
);



function escapeUTF8 (str)
{
    var out_str = "";

    for (var i = 0; i < str.length; i++) 
    {
        var letter = str.charAt (i);
        var c = charCodeFromStr (letter);

        // Don't encode these
        if
        (
            (char_A_cap <= c && c <= char_Z_cap) ||
            (char_a <= c && c <= char_z) ||
            (char_0 <= c && c <= char_9) ||
            (c == char_space)
        )
        {
            out_str += letter;
        }
        else if (c <= 0x007f)
        {
            // other ASCII
            out_str += (hex[c]);
        }

        // The remainder is left in for clarity, but the charCodeFromStr() method above
        // only returns values < 256, so they are of limited use ...

        else if (c <= 0x07FF) 
        {
            // non-ASCII <= 0x7FF
            out_str += (hex[0xc0 | (c >> 6)]);
            out_str += (hex[0x80 | (c & 0x3F)]);
        }
        else
        {
            // 0x7FF < c <= 0xFFFF
            out_str += (hex[0xc0 | (c >> 12)]);
            out_str += (hex[0x80 | ((c >> 6) & 0x3F)]);
            out_str += (hex[0x80 | (c & 0x3F)]);
        }
    }
    return out_str;
}




function urlEncVarMX (str)
{
    return str + "=" + escapeUTF8 (eval (str)) + "&";
}


