
function utf8_encode ( string ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: sowberry
    // +    tweaked by: Jack
    // +   bugfixed by: Onno Marsman
    // +   improved by: Yves Sucaet
    // +   bugfixed by: Onno Marsman
    // *     example 1: utf8_encode('Kevin van Zonneveld');
    // *     returns 1: 'Kevin van Zonneveld'
 
    string = (string+'').replace(/\r\n/g, "\n").replace(/\r/g, "\n");
 
    var utftext = "";
    var start, end;
    var stringl = 0;
 
    start = end = 0;
    stringl = string.length;
    for (var n = 0; n < stringl; n++) {
        var c1 = string.charCodeAt(n);
        var enc = null;
 
        if (c1 < 128) {
            end++;
        } else if((c1 > 127) && (c1 < 2048)) {
            enc = String.fromCharCode((c1 >> 6) | 192) + String.fromCharCode((c1 & 63) | 128);
        } else {
            enc = String.fromCharCode((c1 >> 12) | 224) + String.fromCharCode(((c1 >> 6) & 63) | 128) + String.fromCharCode((c1 & 63) | 128);
        }
        if (enc != null) {
            if (end > start) {
                utftext += string.substring(start, end);
            }
            utftext += enc;
            start = end = n+1;
        }
    }
 
    if (end > start) {
        utftext += string.substring(start, string.length);
    }
 
    return utftext;
}

function utf8_decode ( str_data ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Webtoolkit.info (http://www.webtoolkit.info/)
    // +      input by: Aman Gupta
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Norman "zEh" Fuchs
    // +   bugfixed by: hitwork
    // +   bugfixed by: Onno Marsman
    // +      input by: Brett Zamir (http://brettz9.blogspot.com)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: utf8_decode('Kevin van Zonneveld');
    // *     returns 1: 'Kevin van Zonneveld'
 
    var tmp_arr = [], i = 0, ac = 0, c1 = 0, c2 = 0, c3 = 0;
    
    str_data += '';
    
    while ( i < str_data.length ) {
        c1 = str_data.charCodeAt(i);
        if (c1 < 128) {
            tmp_arr[ac++] = String.fromCharCode(c1);
            i++;
        } else if ((c1 > 191) && (c1 < 224)) {
            c2 = str_data.charCodeAt(i+1);
            tmp_arr[ac++] = String.fromCharCode(((c1 & 31) << 6) | (c2 & 63));
            i += 2;
        } else {
            c2 = str_data.charCodeAt(i+1);
            c3 = str_data.charCodeAt(i+2);
            tmp_arr[ac++] = String.fromCharCode(((c1 & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
            i += 3;
        }
    }
 
    return tmp_arr.join('');
}

function base64_encode( data ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Tyler Akins (http://rumkin.com)
    // +   improved by: Bayron Guevara
    // +   improved by: Thunder.m
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Pellentesque Malesuada
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // -    depends on: utf8_encode
    // *     example 1: base64_encode('Kevin van Zonneveld');
    // *     returns 1: 'S2V2aW4gdmFuIFpvbm5ldmVsZA=='
 
    // mozilla has this native
    // - but breaks in 2.0.0.12!
    //if (typeof window['atob'] == 'function') {
    //    return atob(data);
    //}
        
    var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, enc="", tmp_arr = [];
 
    if (!data) {
        return data;
    }
 
    data = utf8_encode(data+'');
    
    do { // pack three octets into four hexets
        o1 = data.charCodeAt(i++);
        o2 = data.charCodeAt(i++);
        o3 = data.charCodeAt(i++);
 
        bits = o1<<16 | o2<<8 | o3;
 
        h1 = bits>>18 & 0x3f;
        h2 = bits>>12 & 0x3f;
        h3 = bits>>6 & 0x3f;
        h4 = bits & 0x3f;
 
        // use hexets to index into b64, and append result to encoded string
        tmp_arr[ac++] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4);
    } while (i < data.length);
    
    enc = tmp_arr.join('');
    
    switch( data.length % 3 ){
        case 1:
            enc = enc.slice(0, -2) + '==';
        break;
        case 2:
            enc = enc.slice(0, -1) + '=';
        break;
    }
 
    return enc;
}

function base64_decode( data ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Tyler Akins (http://rumkin.com)
    // +   improved by: Thunder.m
    // +      input by: Aman Gupta
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Onno Marsman
    // +   bugfixed by: Pellentesque Malesuada
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: Brett Zamir (http://brettz9.blogspot.com)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // -    depends on: utf8_decode
    // *     example 1: base64_decode('S2V2aW4gdmFuIFpvbm5ldmVsZA==');
    // *     returns 1: 'Kevin van Zonneveld'
 
    // mozilla has this native
    // - but breaks in 2.0.0.12!
    //if (typeof window['btoa'] == 'function') {
    //    return btoa(data);
    //}
 
    var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    var o1, o2, o3, h1, h2, h3, h4, bits, i = 0, ac = 0, dec = "", tmp_arr = [];
 
    if (!data) {
        return data;
    }
 
    data += '';
 
    do {  // unpack four hexets into three octets using index points in b64
        h1 = b64.indexOf(data.charAt(i++));
        h2 = b64.indexOf(data.charAt(i++));
        h3 = b64.indexOf(data.charAt(i++));
        h4 = b64.indexOf(data.charAt(i++));
 
        bits = h1<<18 | h2<<12 | h3<<6 | h4;
 
        o1 = bits>>16 & 0xff;
        o2 = bits>>8 & 0xff;
        o3 = bits & 0xff;
 
        if (h3 == 64) {
            tmp_arr[ac++] = String.fromCharCode(o1);
        } else if (h4 == 64) {
            tmp_arr[ac++] = String.fromCharCode(o1, o2);
        } else {
            tmp_arr[ac++] = String.fromCharCode(o1, o2, o3);
        }
    } while (i < data.length);
 
    dec = tmp_arr.join('');
    dec = utf8_decode(dec);
 
    return dec;
}

function explode( delimiter, string, limit ) {
    // http://kevin.vanzonneveld.net
    // +     original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     improved by: kenneth
    // +     improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +     improved by: d3x
    // +     bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: explode(' ', 'Kevin van Zonneveld');
    // *     returns 1: {0: 'Kevin', 1: 'van', 2: 'Zonneveld'}
    // *     example 2: explode('=', 'a=bc=d', 2);
    // *     returns 2: ['a', 'bc=d']
 
    var emptyArray = { 0: '' };
    
    // third argument is not required
    if ( arguments.length < 2 ||
        typeof arguments[0] == 'undefined' ||
        typeof arguments[1] == 'undefined' )
    {
        return null;
    }
 
    if ( delimiter === '' ||
        delimiter === false ||
        delimiter === null )
    {
        return false;
    }
 
    if ( typeof delimiter == 'function' ||
        typeof delimiter == 'object' ||
        typeof string == 'function' ||
        typeof string == 'object' )
    {
        return emptyArray;
    }
 
    if ( delimiter === true ) {
        delimiter = '1';
    }
    
    if (!limit) {
        return string.toString().split(delimiter.toString());
    } else {
        // support for limit argument
        var splitted = string.toString().split(delimiter.toString());
        var partA = splitted.splice(0, limit - 1);
        var partB = splitted.join(delimiter.toString());
        partA.push(partB);
        return partA;
    }
}


function strlen (string) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Sakimori
    // +      input by: Kirk Strobeck
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Onno Marsman
    // +    revised by: Brett Zamir (http://brettz9.blogspot.com)
    // %        note 1: May look like overkill, but in order to be truly faithful to handling all Unicode
    // %        note 1: characters and to this function in PHP which does not count the number of bytes
    // %        note 1: but counts the number of characters, something like this is really necessary.
    // *     example 1: strlen('Kevin van Zonneveld');
    // *     returns 1: 19
    // *     example 2: strlen('A\ud87e\udc04Z');
    // *     returns 2: 3
 
    var str = string+'';
    var i = 0, chr = '', lgth = 0;
 
    var getWholeChar = function (str, i) {
        var code = str.charCodeAt(i);
        var next = '', prev = '';
        if (0xD800 <= code && code <= 0xDBFF) { // High surrogate(could change last hex to 0xDB7F to treat high private surrogates as single characters)
            if (str.length <= (i+1))  {
                throw 'High surrogate without following low surrogate';
            }
            next = str.charCodeAt(i+1);
            if (0xDC00 > next || next > 0xDFFF) {
                throw 'High surrogate without following low surrogate';
            }
            return str[i]+str[i+1];
        } else if (0xDC00 <= code && code <= 0xDFFF) { // Low surrogate
            if (i === 0) {
                throw 'Low surrogate without preceding high surrogate';
            }
            prev = str.charCodeAt(i-1);
            if (0xD800 > prev || prev > 0xDBFF) { //(could change last hex to 0xDB7F to treat high private surrogates as single characters)
                throw 'Low surrogate without preceding high surrogate';
            }
            return false; // We can pass over low surrogates now as the second component in a pair which we have already processed
        }
        return str[i];
    };
 
    for (i=0, lgth=0; i < str.length; i++) {
        if ((chr = getWholeChar(str, i)) === false) {
            continue;
        } // Adapt this line at the top of any loop, passing in the whole string and the current iteration and returning a variable to represent the individual character; purpose is to treat the first part of a surrogate pair as the whole character and then ignore the second part
        lgth++;
    }
    return lgth;
}

function str_replace(search, replace, subject) 
{
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Gabriel Paderni
    // +   improved by: Philip Peterson
    // +   improved by: Simon Willison (http://simonwillison.net)
    // +    revised by: Jonas Raoni Soares Silva (http://www.jsfromhell.com)
    // +   bugfixed by: Anton Ongson
    // +      input by: Onno Marsman
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +    tweaked by: Onno Marsman
    // +      input by: Brett Zamir (http://brettz9.blogspot.com)
    // +   bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // *     example 1: str_replace(' ', '.', 'Kevin van Zonneveld');
    // *     returns 1: 'Kevin.van.Zonneveld'
    // *     example 2: str_replace(['{name}', 'l'], ['hello', 'm'], '{name}, lars');
    // *     returns 2: 'hemmo, mars'
 
    var s = subject;
    var ra = r instanceof Array, sa = s instanceof Array;
    var f = [].concat(search);
    var r = [].concat(replace);
    var i = (s = [].concat(s)).length;
    var j = 0;
    
    while (j = 0, i--) {
        if (s[i]) {
            while (s[i] = (s[i]+'').split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f){};
        }
    }
 
    return sa ? s : s[0];
}




function addslashes( str ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Ates Goral (http://magnetiq.com)
    // +   improved by: marrtins
    // +   improved by: Nate
    // +   improved by: Onno Marsman
    // *     example 1: addslashes("kevin's birthday");
    // *     returns 1: 'kevin\'s birthday'
 
    return (str+'').replace(/([\\"'])/g, "\\$1").replace(/\0/g, "\\0");
}



function get_html_translation_table(table, quote_style) {
    // http://kevin.vanzonneveld.net
    // +   original by: Philip Peterson
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: noname
    // +   bugfixed by: Alex
    // +   bugfixed by: Marco
    // +   bugfixed by: madipta
    // %          note: It has been decided that we're not going to add global
    // %          note: dependencies to php.js. Meaning the constants are not
    // %          note: real constants, but strings instead. integers are also supported if someone
    // %          note: chooses to create the constants themselves.
    // %          note: Table from http://www.the-art-of-web.com/html/character-codes/
    // *     example 1: get_html_translation_table('HTML_SPECIALCHARS');
    // *     returns 1: {'"': '&quot;', '&': '&amp;', '<': '&lt;', '>': '&gt;'}
    
    var entities = {}, histogram = {}, decimal = 0, symbol = '';
    var constMappingTable = {}, constMappingQuoteStyle = {};
    var useTable = {}, useQuoteStyle = {};
    
    useTable      = (table ? table.toUpperCase() : 'HTML_SPECIALCHARS');
    useQuoteStyle = (quote_style ? quote_style.toUpperCase() : 'ENT_COMPAT');
    
    // Translate arguments
    constMappingTable[0]      = 'HTML_SPECIALCHARS';
    constMappingTable[1]      = 'HTML_ENTITIES';
    constMappingQuoteStyle[0] = 'ENT_NOQUOTES';
    constMappingQuoteStyle[2] = 'ENT_COMPAT';
    constMappingQuoteStyle[3] = 'ENT_QUOTES';
    
    // Map numbers to strings for compatibilty with PHP constants
    if (!isNaN(useTable)) {
        useTable = constMappingTable[useTable];
    }
    if (!isNaN(useQuoteStyle)) {
        useQuoteStyle = constMappingQuoteStyle[useQuoteStyle];
    }
 
    if (useTable == 'HTML_SPECIALCHARS') {
        // ascii decimals for better compatibility
        entities['38'] = '&amp;';
        if (useQuoteStyle != 'ENT_NOQUOTES') {
            entities['34'] = '&quot;';
        }
        if (useQuoteStyle == 'ENT_QUOTES') {
            entities['39'] = '&#039;';
        }
        entities['60'] = '&lt;';
        entities['62'] = '&gt;';
    } else if (useTable == 'HTML_ENTITIES') {
        // ascii decimals for better compatibility
      entities['38']  = '&amp;';
        if (useQuoteStyle != 'ENT_NOQUOTES') {
            entities['34'] = '&quot;';
        }
        if (useQuoteStyle == 'ENT_QUOTES') {
            entities['39'] = '&#039;';
        }
      entities['60']  = '&lt;';
      entities['62']  = '&gt;';
      entities['160'] = '&nbsp;';
      entities['161'] = '&iexcl;';
      entities['162'] = '&cent;';
      entities['163'] = '&pound;';
      entities['164'] = '&curren;';
      entities['165'] = '&yen;';
      entities['166'] = '&brvbar;';
      entities['167'] = '&sect;';
      entities['168'] = '&uml;';
      entities['169'] = '&copy;';
      entities['170'] = '&ordf;';
      entities['171'] = '&laquo;';
      entities['172'] = '&not;';
      entities['173'] = '&shy;';
      entities['174'] = '&reg;';
      entities['175'] = '&macr;';
      entities['176'] = '&deg;';
      entities['177'] = '&plusmn;';
      entities['178'] = '&sup2;';
      entities['179'] = '&sup3;';
      entities['180'] = '&acute;';
      entities['181'] = '&micro;';
      entities['182'] = '&para;';
      entities['183'] = '&middot;';
      entities['184'] = '&cedil;';
      entities['185'] = '&sup1;';
      entities['186'] = '&ordm;';
      entities['187'] = '&raquo;';
      entities['188'] = '&frac14;';
      entities['189'] = '&frac12;';
      entities['190'] = '&frac34;';
      entities['191'] = '&iquest;';
      entities['192'] = '&Agrave;';
      entities['193'] = '&Aacute;';
      entities['194'] = '&Acirc;';
      entities['195'] = '&Atilde;';
      entities['196'] = '&Auml;';
      entities['197'] = '&Aring;';
      entities['198'] = '&AElig;';
      entities['199'] = '&Ccedil;';
      entities['200'] = '&Egrave;';
      entities['201'] = '&Eacute;';
      entities['202'] = '&Ecirc;';
      entities['203'] = '&Euml;';
      entities['204'] = '&Igrave;';
      entities['205'] = '&Iacute;';
      entities['206'] = '&Icirc;';
      entities['207'] = '&Iuml;';
      entities['208'] = '&ETH;';
      entities['209'] = '&Ntilde;';
      entities['210'] = '&Ograve;';
      entities['211'] = '&Oacute;';
      entities['212'] = '&Ocirc;';
      entities['213'] = '&Otilde;';
      entities['214'] = '&Ouml;';
      entities['215'] = '&times;';
      entities['216'] = '&Oslash;';
      entities['217'] = '&Ugrave;';
      entities['218'] = '&Uacute;';
      entities['219'] = '&Ucirc;';
      entities['220'] = '&Uuml;';
      entities['221'] = '&Yacute;';
      entities['222'] = '&THORN;';
      entities['223'] = '&szlig;';
      entities['224'] = '&agrave;';
      entities['225'] = '&aacute;';
      entities['226'] = '&acirc;';
      entities['227'] = '&atilde;';
      entities['228'] = '&auml;';
      entities['229'] = '&aring;';
      entities['230'] = '&aelig;';
      entities['231'] = '&ccedil;';
      entities['232'] = '&egrave;';
      entities['233'] = '&eacute;';
      entities['234'] = '&ecirc;';
      entities['235'] = '&euml;';
      entities['236'] = '&igrave;';
      entities['237'] = '&iacute;';
      entities['238'] = '&icirc;';
      entities['239'] = '&iuml;';
      entities['240'] = '&eth;';
      entities['241'] = '&ntilde;';
      entities['242'] = '&ograve;';
      entities['243'] = '&oacute;';
      entities['244'] = '&ocirc;';
      entities['245'] = '&otilde;';
      entities['246'] = '&ouml;';
      entities['247'] = '&divide;';
      entities['248'] = '&oslash;';
      entities['249'] = '&ugrave;';
      entities['250'] = '&uacute;';
      entities['251'] = '&ucirc;';
      entities['252'] = '&uuml;';
      entities['253'] = '&yacute;';
      entities['254'] = '&thorn;';
      entities['255'] = '&yuml;';
    } else {
        throw Error("Table: "+useTable+' not supported');
        return false;
    }
    
    // ascii decimals to real symbols
    for (decimal in entities) {
        symbol = String.fromCharCode(decimal);
        histogram[symbol] = entities[decimal];
    }
    
    return histogram;
}

function serialize( mixed_value ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Arpad Ray (mailto:arpad@php.net)
    // +   improved by: Dino
    // +   bugfixed by: Andrej Pavlovic
    // +   bugfixed by: Garagoth
    // %          note: We feel the main purpose of this function should be to ease the transport of data between php & js
    // %          note: Aiming for PHP-compatibility, we have to translate objects to arrays
    // *     example 1: serialize(['Kevin', 'van', 'Zonneveld']);
    // *     returns 1: 'a:3:{i:0;s:5:"Kevin";i:1;s:3:"van";i:2;s:9:"Zonneveld";}'
    // *     example 2: serialize({firstName: 'Kevin', midName: 'van', surName: 'Zonneveld'});
    // *     returns 2: 'a:3:{s:9:"firstName";s:5:"Kevin";s:7:"midName";s:3:"van";s:7:"surName";s:9:"Zonneveld";}'
 
    var _getType = function( inp ) {
        var type = typeof inp, match;
        var key;
        if (type == 'object' && !inp) {
            return 'null';
        }
        if (type == "object") {
            if (!inp.constructor) {
                return 'object';
            }
            var cons = inp.constructor.toString();
            if (match = cons.match(/(\w+)\(/)) {
                cons = match[1].toLowerCase();
            }
            var types = ["boolean", "number", "string", "array"];
            for (key in types) {
                if (cons == types[key]) {
                    type = types[key];
                    break;
                }
            }
        }
        return type;
    };
    var type = _getType(mixed_value);
    var val, ktype = '';
    
    switch (type) {
        case "function": 
            val = ""; 
            break;
        case "undefined":
            val = "N";
            break;
        case "boolean":
            val = "b:" + (mixed_value ? "1" : "0");
            break;
        case "number":
            val = (Math.round(mixed_value) == mixed_value ? "i" : "d") + ":" + mixed_value;
            break;
        case "string":
            val = "s:" + mixed_value.length + ":\"" + mixed_value + "\"";
            break;
        case "array":
        case "object":
            val = "a";
            /*
            if (type == "object") {
                var objname = mixed_value.constructor.toString().match(/(\w+)\(\)/);
                if (objname == undefined) {
                    return;
                }
                objname[1] = serialize(objname[1]);
                val = "O" + objname[1].substring(1, objname[1].length - 1);
            }
            */
            var count = 0;
            var vals = "";
            var okey;
            var key;
            for (key in mixed_value) {
                ktype = _getType(mixed_value[key]);
                if (ktype == "function") { 
                    continue; 
                }
                
                okey = (key.match(/^[0-9]+$/) ? parseInt(key) : key);
                vals += serialize(okey) +
                        serialize(mixed_value[key]);
                count++;
            }
            val += ":" + count + ":{" + vals + "}";
            break;
    }
    if (type != "object" && type != "array") val += ";";
    return val;
}

function unserialize(data){
    // http://kevin.vanzonneveld.net
    // +     original by: Arpad Ray (mailto:arpad@php.net)
    // +     improved by: Pedro Tainha (http://www.pedrotainha.com)
    // +     bugfixed by: dptr1988
    // +      revised by: d3x
    // +     improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: Brett Zamir
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // %            note: We feel the main purpose of this function should be to ease the transport of data between php & js
    // %            note: Aiming for PHP-compatibility, we have to translate objects to arrays 
    // *       example 1: unserialize('a:3:{i:0;s:5:"Kevin";i:1;s:3:"van";i:2;s:9:"Zonneveld";}');
    // *       returns 1: ['Kevin', 'van', 'Zonneveld']
    // *       example 2: unserialize('a:3:{s:9:"firstName";s:5:"Kevin";s:7:"midName";s:3:"van";s:7:"surName";s:9:"Zonneveld";}');
    // *       returns 2: {firstName: 'Kevin', midName: 'van', surName: 'Zonneveld'}
    
    var error = function (type, msg, filename, line){throw new window[type](msg, filename, line);};
    var read_until = function (data, offset, stopchr){
        var buf = [];
        var chr = data.slice(offset, offset + 1);
        var i = 2;
        while (chr != stopchr) {
            if ((i+offset) > data.length) {
                error('Error', 'Invalid');
            }
            buf.push(chr);
            chr = data.slice(offset + (i - 1),offset + i);
            i += 1;
        }
        return [buf.length, buf.join('')];
    };
    var read_chrs = function (data, offset, length){
        var buf;
        
        buf = [];
        for(var i = 0;i < length;i++){
            var chr = data.slice(offset + (i - 1),offset + i);
            buf.push(chr);
        }
        return [buf.length, buf.join('')];
    };
    var _unserialize = function (data, offset){
        var readdata;
        var readData;
        var chrs = 0;
        var ccount;
        var stringlength;
        var keyandchrs;
        var keys;
 
        if(!offset) offset = 0;
        var dtype = (data.slice(offset, offset + 1)).toLowerCase();
        
        var dataoffset = offset + 2;
        var typeconvert = new Function('x', 'return x');
        
        switch(dtype){
            case "i":
                typeconvert = new Function('x', 'return parseInt(x)');
                readData = read_until(data, dataoffset, ';');
                chrs = readData[0];
                readdata = readData[1];
                dataoffset += chrs + 1;
            break;
            case "b":
                typeconvert = new Function('x', 'return (parseInt(x) == 1)');
                readData = read_until(data, dataoffset, ';');
                chrs = readData[0];
                readdata = readData[1];
                dataoffset += chrs + 1;
            break;
            case "d":
                typeconvert = new Function('x', 'return parseFloat(x)');
                readData = read_until(data, dataoffset, ';');
                chrs = readData[0];
                readdata = readData[1];
                dataoffset += chrs + 1;
            break;
            case "n":
                readdata = null;
            break;
            case "s":
                ccount = read_until(data, dataoffset, ':');
                chrs = ccount[0];
                stringlength = ccount[1];
                dataoffset += chrs + 2;
                
                readData = read_chrs(data, dataoffset+1, parseInt(stringlength));
                chrs = readData[0];
                readdata = readData[1];
                dataoffset += chrs + 2;
                if(chrs != parseInt(stringlength) && chrs != readdata.length){
                    error('SyntaxError', 'String length mismatch');
                }
            break;
            case "a":
                readdata = {};
                
                keyandchrs = read_until(data, dataoffset, ':');
                chrs = keyandchrs[0];
                keys = keyandchrs[1];
                dataoffset += chrs + 2;
                
                for(var i = 0;i < parseInt(keys);i++){
                    var kprops = _unserialize(data, dataoffset);
                    var kchrs = kprops[1];
                    var key = kprops[2];
                    dataoffset += kchrs;
                    
                    var vprops = _unserialize(data, dataoffset);
                    var vchrs = vprops[1];
                    var value = vprops[2];
                    dataoffset += vchrs;
                    
                    readdata[key] = value;
                }
                
                dataoffset += 1;
            break;
            default:
                error('SyntaxError', 'Unknown / Unhandled data type(s): ' + dtype);
            break;
        }
        return [dtype, dataoffset - offset, typeconvert(readdata)];
    };
    return _unserialize(data, 0)[2];
}


function stripslashes( str ) 
{
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Ates Goral (http://magnetiq.com)
    // +      fixed by: Mick@el
    // +   improved by: marrtins
    // +   bugfixed by: Onno Marsman
    // +   improved by: rezna
    // *     example 1: stripslashes('Kevin\'s code');
    // *     returns 1: "Kevin's code"
    // *     example 2: stripslashes('Kevin\\\'s code');
    // *     returns 2: "Kevin\'s code"
 
    return (str+'').replace(/\0/g, '0').replace(/\\([\\'"])/g, '$1');
}

function htmlspecialchars_decode(string, quote_style) {
    // http://kevin.vanzonneveld.net
    // +   original by: Mirek Slugen
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Mateusz "loonquawl" Zalega
    // +      input by: ReverseSyntax
    // +      input by: Slawomir Kaniecki
    // +      input by: Scott Cariss
    // +      input by: Francois
    // +   bugfixed by: Onno Marsman
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // -    depends on: get_html_translation_table
    // *     example 1: htmlspecialchars_decode("<p>this -&gt; &quot;</p>", 'ENT_NOQUOTES');
    // *     returns 1: '<p>this -> &quot;</p>'
 
    var histogram = {}, symbol = '', tmp_str = '', entity = '';
    tmp_str = string.toString();
    
    if (false === (histogram = get_html_translation_table('HTML_SPECIALCHARS', quote_style))) {
        return false;
    }
 
    // &amp; must be the last character when decoding!
    delete(histogram['&']);
    histogram['&'] = '&amp;';
 
    for (symbol in histogram) {
        entity = histogram[symbol];
        tmp_str = tmp_str.split(entity).join(symbol);
    }
    
    return tmp_str;
}


function Object2Array(obj)
{
	
 	var array = new Object();
 	for(prop in obj)
 	{ 			
 		array[prop] = obj[prop];		
 	}
 		
 	return array;
} 

function htmlspecialchars (string, quote_style) {
    // http://kevin.vanzonneveld.net
    // +   original by: Mirek Slugen
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   bugfixed by: Nathan
    // +   bugfixed by: Arno
    // +    revised by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // -    depends on: get_html_translation_table
    // *     example 1: htmlspecialchars("<a href='test'>Test</a>", 'ENT_QUOTES');
    // *     returns 1: '&lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;'
 
    var histogram = {}, symbol = '', tmp_str = '', entity = '';
    tmp_str = string.toString();
    
    if (false === (histogram = get_html_translation_table('HTML_SPECIALCHARS', quote_style))) {
        return false;
    }
    
    for (symbol in histogram) {
        entity = histogram[symbol];
        tmp_str = tmp_str.split(symbol).join(entity);
    }
    
    return tmp_str;
}

function count( mixed_var, mode ) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +      input by: Waldo Malqui Silva
    // *     example 1: count([[0,0],[0,-4]], 'COUNT_RECURSIVE');
    // *     returns 1: 6
    // *     example 2: count({'one' : [1,2,3,4,5]}, 'COUNT_RECURSIVE');
    // *     returns 2: 6
 
    var key, cnt = 0;
 
    if( mode == 'COUNT_RECURSIVE' ) mode = 1;
    if( mode != 1 ) mode = 0;
 
    for (key in mixed_var){
        cnt++;
        if( mode==1 && mixed_var[key] && (mixed_var[key].constructor === Array || mixed_var[key].constructor === Object) ){
            cnt += count(mixed_var[key], 1);
        }
    }
 
    return cnt;
}







function EmbdedFlash()
{
	return "<script type=\"text/javascript\"> if (AC_FL_RunContent == 0) { alert(\"This page requires AC_RunActiveContent.js.\"); } else{AC_FL_RunContent('codebase', 'http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0','width', '100','height', '100','base','public/flash/','src', 'public/flash/loader','quality', 'high','pluginspage', 'http://www.macromedia.com/go/getflashplayer','align', 'middle','play', 'true','loop', 'true','wmode', 'transparent','devicefont', 'false','id', 'loader_wf','menu', 'true','bgcolor', '#ffffff','name', 'loader','allowFullScreen', 'false','movie', 'public/flash/loader','salign', '');}</script><noscript>Trwa zapisywanie. Proszę czekać....</noscript>"; 
}







 function CreateBookmarkLink(title,url) {

 //title = "Webpage Title"; 
  /// Blogger - Replace with <$BlogItemTitle$> 
  // MovableType - Replace with <$MTEntryTitle$>

 //url = "Webpage URL";
  // Blogger - Replace with <$BlogItemPermalinkURL$> 
  // MovableType - Replace with <$MTEntryPermalink$>
  // WordPress - <?php bloginfo('url'); ?>

	if (window.sidebar) { // Mozilla Firefox Bookmark
		window.sidebar.addPanel(title, url,"");
	} else if( window.external ) { // IE Favorite
		window.external.AddFavorite( url, title); }
	else if(window.opera && window.print) { // Opera Hotlist
		return true; }
}

function DodajDoUlubionych(title,url)
{

	
 if (window.external) 
 {
  document.write('<a class="red" href = "javascript:CreateBookmarkLink('+"'"+title+"','"+url+"'"+');">dodaj do ulubionych</a>'); 
  } 
  else  if (window.sidebar) 
  {
  	 document.write('<a class="red" href = "javascript:CreateBookmarkLink('+"'"+title+"','"+url+"'"+');">dodaj do zakładek</a>'); 
 } 
 else if (window.opera && window.print) 
 {	
   document.write('<a class="red" href = "javascript:CreateBookmarkLink('+"'"+title+"','"+url+"'"+');">dodaj do zakładek</a>');
 }
} 

document.getElementsByClassName = function(cl)
{
	var retnode = [];
	var myclass = new RegExp('\\b'+cl+'\\b');
	var elem = this.getElementsByTagName('*');
	for (var i = 0; i < elem.length; i++) 
	{
		var classes = elem[i].className;
		if (myclass.test(classes))
			retnode.push(elem[i]);
	}
	return retnode;
};


document.getAllDivByTitle = function(title)
{
	var retnode = [];
	
	var elem = this.getElementsByTagName('*');
	for (var i = 0; i < elem.length; i++) 
	{						
		if (elem[i].title == title && elem[i].nodeName == 'DIV')
			retnode.push(elem[i]);
	}
	
	return retnode;
}




function CreateEditPanel(sender, left, top, minwidth, minheight, minmax)
{
	//pobierz identyfikator rodzica wysyłanego elementu		
	parent = sender.parent;
	
	
	if (minmax == 'min') 
	{
		width = parseInt(parent.clientWidth - 2);
		if (width < minwidth) 
			width = minwidth;
		
		height = parseInt(parent.clientHeight - 2);
		if (height < minheight) 
			height = minheight;
	}
	else if (minmax == 'max')
	{
		width = parseInt(parent.clientWidth - 2);
		if (width > minwidth) 
			width = minwidth;
		
		height = parseInt(parent.clientHeight - 2);
		if (height > minheight) 
			height = minheight;
	}
	else
	{
		width = minwidth;
		height = minheight;
	}
			
		
	//ukryj wszystkie przyciski klasy startEditButton
	var edity = document.getElementsByClassName('startEditButton');	
	for (var i=0; i<edity.length; i++)
		edity[i].style.display = 'none';
	

	
	
	var belka =  document.createElement('div');
	belka.className = 'menu_panel';
	
	
		
	var btn_Close = document.createElement('div');
	btn_Close.className = 'menu_panel_button close';	
	belka.appendChild(btn_Close);
	
	var btn_Ok = document.createElement('div');
	btn_Ok.className = 'menu_panel_button ok';
	belka.appendChild(btn_Ok);
	
	var panel =  document.createElement('div');	
	SetElemStyle(panel, GetCSSSize(0, belka.style.height, width, height) );
	
	 
			
	//określ maxymalne położenie w pionie aby zmieścić na ekranie
	maxtop = (document.documentElement||document.body).scrollTop + 
			 ((document.documentElement||document.body).clientHeight - height - 20);	
	if (top > maxtop) 	
		top = maxtop - 5;
	if (top < 0)
		top = 0;	
		
	//określ maxymalne położenie w pionie aby zmieścić na ekranie
	maxleft = (document.documentElement||document.body).scrollLeft + 
			  ((document.documentElement||document.body).clientWidth - width - 5);	
	if (left > maxleft) 	
		left = maxleft - 5;
	if (left < 0)
		left = 0;		
		
		
	var frame = document.createElement('iframe');		
	SetElemStyle(frame,"z-index:-1; position:absolute; background-color:"+ DlgBkColor+"; border:none;" + 
					 GetCSSSize(0, 0, width, height + belka.style.height) );
					 
	var div = document.createElement('div');		
	SetElemStyle(div,"position:absolute; background-color:"+ DlgBkColor+"; border: solid black 1px; z-index:3;" + 
					 GetCSSSize(left, top, width, height + belka.style.height) );
					 
	
	//forma.appendChild(div);
	div.appendChild(frame);
	div.appendChild(belka);
	div.appendChild(panel);
	
	
	btn_Close.onclick = function() 
	{ 
		sender.parent.style.display = 'block'; 
		document.body.removeChild(div);
		//pokaż wszystkie przyciski klasy startEditButton
		var edity = document.getElementsByClassName('startEditButton');		
		for (var i=0; i<edity.length; i++)
		   edity[i].style.display = 'block'; 	 
		   
		
	};
	
	btn_Ok.onclick = function()
	{	
		
		
		//SelectList_SelectAll(document.getElementById('imagesList'));
		
		document.getElementById('sendZmiany').submit();	
		
		document.body.removeChild(div);
		//pokaż wszystkie przyciski klasy startEditButton
		var edity = document.getElementsByClassName('startEditButton');		
		for (var i=0; i<edity.length; i++)
		   edity[i].style.display = 'block'; 
		   
		sender.parent.style.display = 'block';   
		//utwórz obiekt wyszarzenia		 	
		/*CreateShadow();
		//opcja dla dialogu loader	
		var load = document.getElementById('loader');
		load.style.display = 'block' ;
		load.style.position = "absolute";	
		load.style.left = (document.body.clientWidth / 2) - 50 + "px";		
		load.style.top = (document.documentElement||document.body).scrollTop +
		                 ((document.documentElement||document.body).clientHeight / 2)
		                  - load.clientHeight + "px";*/
	
		 
		 
    }
	
	
	
	var pudlo = new Pudlo();
	pudlo.kontener = div;
	pudlo.panel = panel;
	pudlo.btnClose = btn_Close;
	pudlo.btnOk = btn_Ok;
	return pudlo;
}

//deklaracja obiektu Select List zawierajace dwa pola: Kontener (uchwyt na diva obejmującego listę i opis)
//oraz Lista uchwyt na Liste Select 
function Pudlo()
{	
  this.kontener = null;
  this.panel = null;
  this.btnOk = null;
  this.form = null;
  this.btnClose = null;    
}

function addbookmark()
{
	var bookmarkurl=document.location;
	var bookmarktitle="RedWoods";

	if (document.all)
		window.external.AddFavorite(bookmarkurl,bookmarktitle);
} 

function FCK (sender, posID, nazwa, retID)
{	
	poz = getPos(sender);
	pudlo = CreateEditPanel(sender, poz[0], poz[1], 600, 350, 'min');
	
	param = getParam(parseInt(sender.title))			
	var str = "param." + nazwa + " == undefined ? init = '' : init = param." + nazwa;
	eval(str);
	
	
		
	width = parseInt(pudlo.panel.style.width)-7;
	height = parseInt(pudlo.panel.style.height)-27;
	
	var fck = CreateFckInstance(nazwa, width, height, init); 
	
	pudlo.panel.innerHTML = 
		'<form id="sendZmiany" action="Admin/index/upload" method="POST" enctype="multipart/form-data">'+
		'	<table style="padding: 5px;"><tr><td style="width:590px;">' +		
		   		fck.CreateHtml() + 
		'   	</td></tr><tr><td >' + 						  			  					   					 
		'		<input type="hidden" name="id" value="' + parseInt(sender.title) + '" />' +		
		'		<input type="hidden" name="retID" value="' + retID + '" />' +
		'	</td></tr></table></form>';
		
	document.body.appendChild(pudlo.kontener);
}





function getParam(id)
{
	var param = document.getElementById('param' + id);
	
	if (param && param.value != '') 
	{
		param = unserialize(  base64_decode (param.value)  );		
		if (param) 
			return param;
	}
	return false;
}


function CreateFckInstance(nazwa, width, height, init)
{
	var fck = new FCKeditor(nazwa, width+ "px", height+"px", 'redwoods', init);
	fck.BasePath = "Admin/public/scripts/fckeditor/";
	return fck;
}

function FileUpload(sender)
{	
	//sender.parent.style.display = 'none';
	poz = getPos(sender);
	pudlo = CreateEditPanel(sender, poz[0], poz[1], 255, 55, 'minmax');
		
	pudlo.panel.innerHTML = 
		'<form id="sendZmiany" action="Admin/index/upload" method="POST" enctype="multipart/form-data">'+
		'	<table style="padding: 5px;"><tr><td style="width:250px;">' + 
		'		<input id="file" size="20" type="file" name="file" />' +	
		'		<input type="hidden" name="katalog" value="public" />' +					  			  					   					 
		'		<input type="hidden" name="id" value="' + parseInt(sender.title) + '" />' +
		'	</td></tr></table></form>';
					  
	document.body.appendChild(pudlo.kontener);
}

function NewsShort(sender, retID)
{
	poz = getPos(sender);
	pudlo = CreateEditPanel(sender, poz[0], poz[1], 600, 350, 'min');
	
		
	
	param = getParam(parseInt(sender.title))	
	param.opis == undefined ? init = '' : init = param.opis;
		
		
	
	width = parseInt(pudlo.panel.style.width)-7;
	height = parseInt(pudlo.panel.style.height)-27;
	var fck = CreateFckInstance('opis', width, height, init); 
	
	pudlo.panel.innerHTML = 
		'<form id="sendZmiany" action="Admin/index/upload" method="POST" enctype="multipart/form-data">'+
		'	<table style="padding: 5px;"><tr><td style="width:590px;">' +		
		   		fck.CreateHtml() + 
		'   	</td></tr><tr><td >' + 						  			  					   					 
		'		<input type="hidden" name="id" value="' + parseInt(sender.title) + '" />' +
		'		<input type="hidden" name="retID" value="' + retID + '" />' +
		'	</td></tr></table></form>';
		
	document.body.appendChild(pudlo.kontener);
}

function SzkolenieShort(sender, retID)
{
	width = 600;
	elemwidth = width-20; 
	
	poz = getPos(sender);
	pudlo = CreateEditPanel(sender, poz[0], poz[1], width, 635, 'min');
	
	
	
	param = getParam(parseInt(sender.title))	
	param.opisKrotki == undefined ? initKrotki = '' : initKrotki = param.opisKrotki;
	param.opis == undefined ? init = '' : init = param.opis;	
	param.nazwa == undefined ? nazwa= '' : nazwa = param.nazwa;
	param.lokalizacja  == undefined ? lokalizacja = '' : lokalizacja = param.lokalizacja;
	param.dzien  == undefined ? dzien= '' : dzien = param.dzien;
	param.miesiac  == undefined ? miesiac = '' : miesiac = param.miesiac;
	param.rok  == undefined ? rok = '' : rok = param.rok;
	
		
	initopiskrotki = '';
	var fck1 = CreateFckInstance('opisKrotki',elemwidth, 200, initKrotki);
	
	initopisDlugi = '';
	var fck2 = CreateFckInstance('opis',elemwidth, 250, init);
	
	
	
	 
	
	pudlo.panel.innerHTML = 
		'<form id="sendZmiany" action="Admin/index/upload" method="POST" enctype="multipart/form-data">'+
		'	<table  cellspacing="3" style="padding: 5px;"><tr><td >' +		
		' 		<table cellspacing="2"  ><tr><td>Dzień</td><td>Miesiąc</td><td>Rok</td></tr> ' +
		'		<tr><td>' +
		'   	<select name="dzien" style="width:140px;" id="dzien" >' +
		'  			<option> 1</option> <option> 2</option> <option> 3</option> <option> 4</option>' +
		'   		<option> 5</option> <option> 6</option> <option> 7</option> <option> 8</option>' +
		'   		<option> 9</option> <option> 10</option> <option> 11</option> <option> 12</option>' +
		'   		<option> 13</option> <option> 14</option> 15<option> 16</option> 17<option> 18</option>' +
		'   		<option> 19</option> <option> 20</option> 21<option> 22</option> 23<option> 24</option>' +
		'   		<option> 25</option> <option> 26</option> <option> 27</option> <option> 28</option>' +
		'   		<option> 29</option> <option> 30</option> <option> 31</option> '+							
		'   	</select>' +	
		'		</td><td>' +
		'   	<select name="miesiac" style="width:140px;" id="miesiac" >' +
		'   		<option> Styczeń</option> <option> Luty</option> <option> Marzec</option> <option> Kwiecień</option>' +
		'			<option> Maj</option> <option> Czerwiec</option> <option> Lipiec</option> <option> Sierpień</option>' +
		'   		<option> Wrzesień</option> <option> Pażdziernik</option> <option> Listopad</option> <option> Grudzień</option>' +
		'   		</select>' +
		'		</td><td>' +
		'   	<select name="rok" style="width:140px;" id="rok" >' +
		'   		<option> 2007</option> <option> 2008</option> <option> 2009</option> <option> 2010</option>' +
		'   		<option> 2011</option> <option> 2012</option> <option> 2013</option> <option> 2014</option>' +							
		'   	</select>' +							
		'		</td></tr></table>'+
		'   	</td></tr><tr><td >' +
		
		'   	Tytuł szkolenia ' +
		'   	</td></tr><tr><td>' +
		'   	<input type="text" name="nazwa" value="'+nazwa+'" style="width:'+elemwidth+'px;" />' +
		'   	</td></tr><tr><td>' +		
		'   	Lokalizacja szkolenia ' +
		'   	</td></tr><tr><td>' +
		'   	<input type="text" name="lokalizacja" value="'+lokalizacja+'" style="width:'+elemwidth+'px;" />' +
		'   	</td></tr><tr><td>' +
		 	
		'		Krótki opis szkolenia' + 			   		 
		'   	</td></tr><tr><td >' + 		
		   		fck1.CreateHtml() + 
		'   	</td></tr><tr><td >' + 		
		'		Pełny opis szkolenia' +
		'   	</td></tr><tr><td >' + 	
		'		<input type="button" id="przepisz" value="przepisz" />' +
		'   	</td></tr><tr><td >' + 		
		   		fck2.CreateHtml() +
		'		<input type="hidden" name="id" value="' + parseInt(sender.title) + '" />' +
		'		<input type="hidden" name="retID" value="' + retID + '" />' +
		'	</td></tr></table></form>';
		
	document.body.appendChild(pudlo.kontener);
	
	elem = document.getElementById('dzien');
	SelectList_SelectOption(elem,dzien);
	elem = document.getElementById('miesiac');
	SelectList_SelectOption(elem,miesiac);
	elem = document.getElementById('rok');
	SelectList_SelectOption(elem,rok);
	
	przepisz = document.getElementById('przepisz');
	przepisz.onclick= function() 
	{ 		
		var fck1 = FCKeditorAPI.GetInstance('opisKrotki') ;
		var fck2 = FCKeditorAPI.GetInstance('opis') ;
		fck2.SetHTML( fck1.GetHTML( true ));			
	} ;
	
	
	
}

function Cytat(sender, retID)
{
	poz = getPos(sender);
	pudlo = CreateEditPanel(sender, poz[0], poz[1], 300, 200, 'min');
	
	param = getParam(parseInt(sender.title))	
	param.tresc == undefined ? tresc = '' : tresc = param.tresc;
	param.autor == undefined ? autor = '' : autor = param.autor;
	
	width = parseInt(pudlo.panel.style.width)-20;
	height = parseInt(pudlo.panel.style.height)-27;
	
	
	pudlo.panel.innerHTML = 
		'<form id="sendZmiany" action="Admin/index/upload" method="POST" enctype="multipart/form-data">'+
		'	<table style="padding: 5px;"><tr><td >' +
		'		Treść Cytatu' +		
		'   	</td></tr><tr><td >' +
		'		<textarea rows="6" name="tresc"  style="width:'+width+ 'px;">' + tresc + '</textarea>' +					 
		'   	</td></tr><tr><td >' + 						  			  					   		
		'		Autor cytatu'	+	
		'   	</td></tr><tr><td >' +		
		'   	<input type="text" name="autor" value="'+autor+'" style="width:'+width+'px;" />' +			 
		'		<input type="hidden" name="id" value="' + parseInt(sender.title) + '" />' +
		'		<input type="hidden" name="retID" value="' + retID + '" />' +
		'	</td></tr></table></form>';
		
	document.body.appendChild(pudlo.kontener);
}

//funkcja twory panel wyboru daty jako pierwszy parametr przekazujemy opis panelu, jako drugi unikalny identyfiaktor
//pozwalający rzrożnić daty jesli jest ich więcej niż jedna na jednym panelu
function getDynamicDataPanel(opis,uniqID, dzien, miesiac, rok)
{	
	var miesiace = ['Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj','Czerwiec',
				    'Lipiec','Sierpień', 'Wrzesień','Pażdziernik','Listopad','Grudzień'];	
						
	var res = opis + '<br />';
	res += '<select name="dzien'+uniqID+'" style="width:60px;" id="dzien'+uniqID+'" >';			
				for (var i=1; i<32; i++)
					i == dzien ? res += '<option  selected="selected" >' + i + '</option>' :
								 res += '<option>' + i + '</option>'; 			
	res += '</select>&nbsp;&nbsp;' +					
		   '<select name="miesiac'+uniqID+'" style="width:100px;" id="miesiac'+uniqID+'" >';
				for (var i=0; i<12; i++)
					miesiace[i] == miesiac ? res += '<option  selected="selected" >' + miesiace[i] + '</option>' :
								 res += '<option>' + miesiace[i] + '</option>'; 		
	res += '</select>&nbsp;&nbsp;'+
		   '<select name="rok'+uniqID+'" style="width:80px;" id="rok'+uniqID+'" >';
		   		for (var i=2007; i<2026; i++)
					i == rok ? res += '<option  selected="selected" >' + i + '</option>' :
							   res += '<option>' + i + '</option>'; 		
	res += '</select>';					
		   
	return res;
			
}

function TerazPolecamy(sender, retID)
{	
	poz = getPos(sender);
	pudlo = CreateEditPanel(sender, poz[0], poz[1], 600, 625, 'min');
	
	param = getParam(parseInt(sender.title));		
	param.opisKrotki == undefined ? initKr = '' : initKr = param.opisKrotki;
	param.opis == undefined ? init = '' : init = param.opis;
	param.nazwa == undefined ? nazwa = '' : nazwa = param.nazwa;	
	param.miejscowosc == undefined ? miejscowosc = '' : miejscowosc = param.miejscowosc;	
	param.dzien == undefined ? dzien = '' : dzien = param.dzien;
	param.miesiac == undefined ? miesiac = '' : miesiac = param.miesiac;
	param.rok == undefined ? rok = '' : rok = param.rok;
	
	
	width = parseInt(pudlo.panel.style.width)-7;
	//height = parseInt(pudlo.panel.style.height)-27;
	var fck1 = CreateFckInstance('opisKrotki', width-5, 160, initKr);
	var fck2 = CreateFckInstance('opis', width-5, 250, init); 
	
	pudlo.panel.innerHTML = 
		'<form id="sendZmiany" action="Admin/index/upload" method="POST" enctype="multipart/form-data">'+
		'	<table style="padding: 5px;"><tr><td style="width:590px;">' +
		
		'  		Nazwa pozycji :<br/>' +				
		'   	<input type="text" name="nazwa" value="'+nazwa+'" style="width:580px;" />' +
		'   	</td></tr><tr><td >' +
		
		'  		Lokalizacja :<br />' +				
		'   	<input type="text" name="miejscowosc" value="'+miejscowosc+'" style="width:580px;" />' +
		'   	</td></tr><tr><td >' +
		
				getDynamicDataPanel("Data zdarzenia :","", dzien, miesiac, rok) +		
		'   	</td></tr><tr><td >' +
		
		'  		Treść krótka :<br/>' +		
		   		fck1.CreateHtml() + 
		'   	</td></tr><tr><td >' +
				 
		'		<input type="button" id="przepisz" value="przepisz" />' +
		'   	</td></tr><tr><td >' +
			
		'  		Treść długa :<br />' + 		
		  		fck2.CreateHtml() + 
		'   	</td></tr><tr><td >' + 							  			  					   					 
		'		<input type="hidden" name="id" value="' + parseInt(sender.title) + '" />' +
		'		<input type="hidden" name="retID" value="' + retID + '" />' +
		'	</td></tr></table></form>';
		
	document.body.appendChild(pudlo.kontener);
	
	var przepisz = document.getElementById('przepisz');
	przepisz.onclick= function() 
	{ 		
		var fck1 = FCKeditorAPI.GetInstance('opisKrotki') ;
		var fck2 = FCKeditorAPI.GetInstance('opis') ;
		fck2.SetHTML( fck1.GetHTML( true ));			
	} ;
}


function TematMiesiaca(sender, retID)
{
	var panelWidth = 300;
	var panelPadding = 5;	
	
	
	poz = getPos(sender);
	pudlo = CreateEditPanel(sender, poz[0], poz[1], panelWidth, 200, 'min');
	
	param = getParam(parseInt(sender.title));		
	//param.TematMiesiaca_file == undefined ? plik = '' : plik = param.TematMiesiaca_file;
	param.TematMiesiaca_opis == undefined ? opis = '' : opis = param.TematMiesiaca_opis;	
	
	
	
	
	pudlo.panel.innerHTML = 
		'<form id="sendZmiany" action="Admin/index/upload" method="POST" enctype="multipart/form-data">'+
		'	<table style="margin:0px; padding: ' + panelPadding + 'px; width:100%; "><tr><td style="" >' +
		
		'  		Plik multimedialny :<br/>' +				
		'   	<input type="file" name="TematMiesiaca_file" value="" size="25" />' +					
		'   	</td></tr><tr><td >' + 		
		'  		Opis tekstowy :<br/>' +				
		'   	<textarea name="TematMiesiaca_opis" style="width:280px; height:100px;">' + opis + '</textarea>' +					
		'   	</td></tr><tr><td >' + 									  			  					   					
		'		<input type="hidden" name="id" value="' + parseInt(sender.title) + '" />' +
		'		<input type="hidden" name="retID" value="' + retID + '" />' +
		'	</td></tr></table></form>';
		
	document.body.appendChild(pudlo.kontener);
	
	
}


function SzkoleniaPlayer(sender, retID)
{
	var panelWidth = 300;
	var panelPadding = 5;	
	
	
	poz = getPos(sender);
	pudlo = CreateEditPanel(sender, poz[0], poz[1], panelWidth, 200, 'maxmin');
	
	param = getParam(parseInt(sender.title));		
	//param.TematMiesiaca_file == undefined ? plik = '' : plik = param.TematMiesiaca_file;
	param.SzkoleniaPlayer_opis == undefined ? opis = '' : opis = param.SzkoleniaPlayer_opis;	
	
	
	
	
	pudlo.panel.innerHTML = 
		'<form id="sendZmiany" action="Admin/index/upload" method="POST" enctype="multipart/form-data">'+
		'	<table style="margin:0px; padding: ' + panelPadding + 'px; width:100%; "><tr><td style="" >' +
		
		'  		Plik multimedialny :<br/>' +				
		'   	<input type="file" name="SzkoleniaPlayer_file" value="" size="25" />' +					
		'   	</td></tr><tr><td >' + 		
		'  		Opis tekstowy :<br/>' +				
		'   	<textarea name="SzkoleniaPlayer_opis" style="width:280px; height:100px;">' + opis + '</textarea>' +					
		'   	</td></tr><tr><td >' + 									  			  					   					
		'		<input type="hidden" name="id" value="' + parseInt(sender.title) + '" />' +
		'		<input type="hidden" name="retID" value="' + retID + '" />' +
		'	</td></tr></table></form>';
		
	document.body.appendChild(pudlo.kontener);
	
	
}


function Linki(sender, retID)
{
	poz = getPos(sender);
	pudlo = CreateEditPanel(sender, poz[0], poz[1], 300, 110, 'min');
	
	param = getParam(parseInt(sender.title))	
	param.opis1 == undefined ? opis1 = '' : opis1 = param.opis1;
	param.opis2 == undefined ? opis2 = '' : opis2 = param.opis2;
	
	width = parseInt(pudlo.panel.style.width)-20;
	height = parseInt(pudlo.panel.style.height)-27;
	
	
	pudlo.panel.innerHTML = 
		'<form id="sendZmiany" action="Admin/index/upload" method="POST" enctype="multipart/form-data">'+
		'	<table style="padding: 5px;"><tr><td >' +
		'		Opis pierwszej pozycji' +		
		'   	</td></tr><tr><td >' +
		'   	<input type="text" name="opis1" value="'+opis1+'" style="width:'+width+'px;" />' +					 
		'		Opis drugiej pozycji' +		
		'   	</td></tr><tr><td >' +
		'   	<input type="text" name="opis2" value="'+opis2+'" style="width:'+width+'px;" />' +					 
		'   	</td></tr><tr><td >' + 						  			  					   		
		'		<input type="hidden" name="id" value="' + parseInt(sender.title) + '" />' +
		'		<input type="hidden" name="retID" value="' + retID + '" />' +
		'	</td></tr></table></form>';
		
	document.body.appendChild(pudlo.kontener);
}


function NewsLong(sender, retID)
{
	poz = getPos(sender);
	pudlo = CreateEditPanel(sender, poz[0], poz[1], 600, 600, 'min');
		
	param = getParam(parseInt(sender.title))
			
	param.opisKrotki == undefined ? initKr = '' : initKr = param.opisKrotki;
	param.opis == undefined ? init = '' : init = param.opis;
	param.nazwa == undefined ? nazwa = '' : nazwa = param.nazwa;
		
		
	
	width = parseInt(pudlo.panel.style.width)-7;
	//height = parseInt(pudlo.panel.style.height)-27;
	var fck1 = CreateFckInstance('opisKrotki', width-5, 160, initKr);
	var fck2 = CreateFckInstance('opis', width-5, 300, init); 
	
	
	
	pudlo.panel.innerHTML = 
		'<form id="sendZmiany" action="Admin/index/upload" method="POST" enctype="multipart/form-data">'+
		'	<table style="padding: 5px;"><tr><td style="width:590px;">' +
		'  		Nazwa pozycji :' +		
		'   	</td></tr><tr><td >' +
		'   	<input type="text" name="nazwa" value="'+nazwa+'" style="width:580px;" />' +
		'   	</td></tr><tr><td >' +
		'  		Treść krótka :' +
		'   	</td></tr><tr><td >' +
		   		fck1.CreateHtml() + 
		'   	</td></tr><tr><td >' +		 
		'		<input type="button" id="przepisz" value="przepisz" />' +
		'   	</td></tr><tr><td >' +	
		'  		Treść długa :' + 		 
		'   	</td></tr><tr><td >' +
		  		fck2.CreateHtml() + 
		'   	</td></tr><tr><td >' + 							  			  					   					 
		'		<input type="hidden" name="id" value="' + parseInt(sender.title) + '" />' +
		'		<input type="hidden" name="retID" value="' + retID + '" />' +
		'	</td></tr></table></form>';
		
	document.body.appendChild(pudlo.kontener);	
	
	przepisz = document.getElementById('przepisz');
	przepisz.onclick= function() 
	{ 		
		var fck1 = FCKeditorAPI.GetInstance('opisKrotki') ;
		var fck2 = FCKeditorAPI.GetInstance('opis') ;
		fck2.SetHTML( fck1.GetHTML( true ));			
	} ;
}

function Obrazek(sender, retID)
{
	//sender.parent.style.display = 'none';
	poz = getPos(sender);
	pudlo = CreateEditPanel(sender, poz[0], poz[1], 255, 55, 'minmax');
		
	pudlo.panel.innerHTML = 
		'<form id="sendZmiany" action="Admin/index/upload" method="POST" enctype="multipart/form-data">'+
		'	<table style="padding: 5px;"><tr><td style="width:250px;">' + 
		'		<input id="file" size="20" type="file" name="obrazek" />' +	
		'		<input type="hidden" name="katalog" value="public" />' +					  			  					   					 
		'		<input type="hidden" name="id" value="' + parseInt(sender.title) + '" />' +
		'	</td></tr></table></form>';
					  
	document.body.appendChild(pudlo.kontener);
}

function ObrazekMaly(sender, retID)
{
	//sender.parent.style.display = 'none';
	poz = getPos(sender);
	pudlo = CreateEditPanel(sender, poz[0], poz[1], 255, 55, 'minmax');
		
	pudlo.panel.innerHTML = 
		'<form id="sendZmiany" action="Admin/index/upload" method="POST" enctype="multipart/form-data">'+
		'	<table style="padding: 5px;"><tr><td style="width:250px;">' + 
		'		<input id="file" size="20" type="file" name="ObrazekMaly" />' +	
		'		<input type="hidden" name="katalog" value="public" />' +					  			  					   					 
		'		<input type="hidden" name="id" value="' + parseInt(sender.title) + '" />' +
		'		<input type="hidden" name="retID" value="' + retID + '" />' +
		'	</td></tr></table></form>';
					  
	document.body.appendChild(pudlo.kontener);
}

function adresEMail(sender, retID)
{
	poz = getPos(sender);
	pudlo = CreateEditPanel(sender, poz[0], poz[1], 300, 75, 'minmax');
	
	param = getParam(parseInt(sender.title));
	var adres;	
	param.adresEMail == undefined ? adres = '' : adres = param.adresEMail;
	
	width = parseInt(pudlo.panel.style.width)-20;
	height = parseInt(pudlo.panel.style.height)-27;
	
	
	pudlo.panel.innerHTML = 
		'<form id="sendZmiany" action="Admin/index/upload" method="POST" enctype="multipart/form-data">'+
		'	<table style="padding: 5px;"><tr><td >' +
		'		Adres wysyłki formularza' +		
		'   	</td></tr><tr><td >' +
		'   	<input type="text" name="adresEMail" value="'+adres+'" style="width:'+width+'px;" />' +					 
		'		<input type="hidden" name="id" value="' + parseInt(sender.title) + '" />' +
		'		<input type="hidden" name="retID" value="' + retID + '" />' +
		'	</td></tr></table></form>';
		
	document.body.appendChild(pudlo.kontener);
}

function Galeria(sender, retID)
{
	poz = getPos(sender);
	pudlo = CreateEditPanel(sender, poz[0], poz[1], 400, 280, 'minmax');
	
	param = getParam(parseInt(sender.title));
	var adres;	
	param.adresEMail == undefined ? adres = '' : adres = param.adresEMail;
	
	width = parseInt(pudlo.panel.style.width)-20;
	height = parseInt(pudlo.panel.style.height)-27;
	
	
	var pom = 
		'<form id="sendZmiany" action="Admin/index/upload" method="POST" enctype="multipart/form-data" >'+
		'	<table style="padding: 5px;"><tr><td >' +
		'		Dodaj nowy obrazek' +		
		'   	</td></tr><tr><td >' +
		'		<input id="file" size="43" type="file" name="file" />' +
		
		'		Obrazki w galerii' +		
		'   	</td></tr><tr><td >' + 	
	
	    '<select name="obrazki[]" style="width:380px;" multiple="multiple" id="imagesList" size="10">';
		 for (var i=0; i<tempgallery.length; i++ )
			pom += '<option>' + tempgallery[i][0] + '</option>';
		
		
	pom +=
		'   	</select >' +
		'		<input type="button"  value="Usuń zaznaczone" onclick="SelectList_DelSelectedOptions(document.getElementById(\'imagesList\')); return false;" style="margin-top:5px;" />' +
		'   	</td></tr><tr><td >' +
		
		'		<input type="hidden" name="id" value="' + parseInt(sender.title) + '" />' +
		'		<input type="hidden" name="galeria" value="galeria" />' +
		'		<input type="hidden" name="retID" value="' + retID + '" />' +
		'	</td></tr></table></form>';
	
	pudlo.panel.innerHTML = pom;
	
	
		
	document.body.appendChild(pudlo.kontener);
}


function zaznacz()
{
	//alert('test');
	return false;
}










function clearElem(sender,defValue)
{	
	if (sender.value == defValue)
		sender.value = '';	
}
function restoreElem(sender, defValue)
{
	if (sender.value == '')
		sender.value = defValue;
}
function confirmFormularz()
{
	
	elem = document.getElementById('nazwisko_form');	
	if (elem.value == 'Imię i nazwisko')
	{
		alert('Wypełnij wszystkie pola oznaczone gwiazdką');
		return false;
	}
	
	elem = document.getElementById('mail_form');	
	if (elem.value == 'E-mail')
	{
		alert('Wypełnij wszystkie pola oznaczone gwiazdką');		
		return false;
	}		
	return true;
}

function confirmFormularzPolec()
{
	elem = document.getElementById('mail_znajomego');
	if (elem.value == 'E-mail znajomego')
	{
		alert('Wypełnij wszystkie pola oznaczone gwiazdką');
		return false;
	}
	
	elem = document.getElementById('mail_form');
	if (elem.value == 'Twój e-mail')
	{
		alert('Wypełnij wszystkie pola oznaczone gwiazdką');		
		return false;
	}		
	return true;
}






function GetEditButton (parent)
{
	poz = getPos(parent);
	
	var div = document.createElement('div');	
	div.title = parent.id;
	div.parent = parent;	 
	div.className = 'startEditButton';
	SetElemStyle(div, GetCSSSize(poz[0], poz[1], 10, 10));
	document.body.appendChild(div);
	return div;
} 











function RozmiescEdity(id)
{
	var return2Panel = document.createElement('div');
	return2Panel.className = 'mainCMSButton';	
	return2Panel.onclick = function() { location='Admin/index.php' }; 
	document.body.appendChild(return2Panel);
	
	
	var pozycje = document.getElementsByClassName('olowek')
	for (i = 0; i < pozycje.length; i++) 
	{		
		elem = GetNewEditButton(pozycje[i]);		
		elem.onclick = function(e) { CreateAutoEditField (this, id); };
	}	
}

function CreateAutoEditField (sender, posID) 
{
	var width=400, height=300, editID = '';
	var tab = explode(" ",sender.parent.className);
	for (var i = 0; i < tab.length; i++) 
	{
		//poszukaj wyskości				
		tab[i].search('h_') > -1 ? height = tab[i].substr(2) : false;
		//poszukaj szerokosci				
		tab[i].search('w_') > -1 ? width = tab[i].substr(2) : false;
		//poszukaj identyfikator pozycji któr jest edytowana
		tab[i].search('id_') > -1 ? editID = tab[i].substr(3) : false;
	} 
	
	
	poz = getPos(sender);
	pudlo = CreateEditPanel(sender, poz[0], poz[1], width, height, 'minmax');
	
	var pom = 
		'<form id="sendZmiany" action="Admin/index/upload" method="POST" enctype="multipart/form-data">'+
		'	<table style="padding: 5px 8px 5px 5px; width:'+width+'px;">';		
		
	
	    //wyszukaj wśród dzieci danej pozycji edytowalnej wszystkie edytowane
	    var edytowane = document.getEdytowane(sender.parent,'edit');
		var typ, name, opis;
	    for (i = 0; i < edytowane.length; i++) 
		{			
	    	//rozbij klasę edytowanego obiektu na składowe
			var typ = getClassParam(edytowane[i].className, 'typ');
			var name = getClassParam(edytowane[i].className, 'name');
			var opis = str_replace('_',' ', getClassParam(edytowane[i].className, 'opis'));			
			if (typ != '' || opis != '' || name != '')				
				pom += getEditField(typ,opis,name,posID, width, height, edytowane[i].className, editID);
		}
			
	pom += '<input type="hidden" name="id" value="' + posID + '" />' + 
		   '</table></form>';	
	//alert(pom);
	pudlo.panel.innerHTML = pom;	
	document.body.appendChild(pudlo.kontener);
}

function getEditField(typ, opis, name, posID, width, height, className, editID)
{
	var res = "";
	
	
	
	if (editID != '')
		posID = editID;
	
	param = getParam(posID);
	
		
	
	switch(typ)
	{
	case 'img' : 	
		var img_height = getClassParam(className,'h');
		img_height == '' ? img_height = parseInt(width*3/4) : false;
		var img_width = getClassParam(className,'w');
		img_width == '' ? img_width = parseInt(width*3/4) : false;		
		res = '<tr><td>'+opis+':<br /><input id="file" type="file" name="'+ name + posID + '" /></td></tr>' + 
			  '<tr><td>Aktualnie wybrany obrazek<br /><div style="width:' + img_width + 'px; height:'+ img_height + 'px; border: solid black 1px;"> ' +
			  ' <img src="public/upload/' + getParamField(param,name+posID) + '" style="width:'+img_width+'px; height:'+img_height+'px;" alt="" /> ' +
			  ' </div></td></tr>';
		break;
	
	case 'edit':
		res = '<tr><td>'+opis+':<br /><input type="edit" style="width:100%" name="'+ name + posID + '" value="' + str_replace('"','&#34;',getParamField(param,name+posID)) + '" /></td></tr>';		
		break;
		
	case 'file':
		res = '<tr><td>'+opis+':<br /><input id="file" type="file" name="'+ name + posID + '" /></td></tr>';
		break;
		
	case 'textarea':
		var textarea_height = getClassParam(className,'h');;
		textarea_height == '' ? fck_height = height-30  : false;
		res = '<tr><td>'+opis+':<br /><textarea style="width:100%; height:'+textarea_height+'px;" name="'+ name + posID + '" >' + getParamField(param,name+posID) + '</textarea></td></tr>';
		break;
		
		
	case 'fck' :
		var fck_height = getClassParam(className,'h');;
		fck_height == '' ? fck_height = height-30  : false;
		opis != '' ? opis += ':<br />' : false;
		res = '<tr><td>'+opis + CreateFckInstance(name+posID, '100%', fck_height, getParamField(param,name+posID)).CreateHtml() + '</td></tr>'; 			
		break;
		
	case 'galeria' : 
		res = '<tr><td >Dodaj nowy obrazek' +						  
			  '<input id="file" size="43" type="file" name="file" />'+
			  '</td></tr>' +
		      '<tr><td>Obrazki dodane do galerii:<br /><select name="obrazki[]" style="width:380px;" multiple="multiple" id="imagesList" size="10">';
		for (var i=0; i<tempgallery.length; i++ )
			res += '<option>' + tempgallery[i][0] + '</option>';
		res += '</select ></td></tr>' + 
			   '<input type="hidden" name="galeria" value="galeria" />' +
			   '<input type="button" value="Usuń zaznaczone" onclick="SelectList_DelSelectedOptions(document.getElementById(\'imagesList\')); return false;" style="margin-top:5px;" />';
		break;
		
	case 'data' :
		res += getDynamicDataPanel("Data zdarzenia :",posID, getParamField(param,'dzien'+posID),
								   getParamField(param,'miesiac'+posID) , getParamField(param,'rok'+posID));
		break;
		
	default: alert('Niezdefiniowane wejście ' + typ + '. Skontaktuj się z autorem oprogramowania.');	
	}
	
	//alert('editID = ' + editID);
	if (editID != '')
		res += '<input type="hidden" name="editID" value="' + editID + '" />';
			
	return res;
}


function getClassParam(className, param)
{
	var tab = explode(' ',className);
	var res = '';
	for (var j=0; j<tab.length; j++)
	{
		//poszukaj typu pozycji				
		tab[j].search(param+'_') > -1 ? res = tab[j].substr(param.length+1): false; 					
	}
	return res;
}

function getParamField(param, field)
{
	var res = "";
	
	var value = "param." + name+field + " == undefined ? res = '' : res = param." + name+field;
	
	eval(value);		
	return res;
}

function GetNewEditButton (parent)
{
	poz = getPos(parent);	
	var div = document.createElement('div');	
	div.title = "Rozpocznij edycję";
	div.parent = parent;	 
	div.className = 'startEditButton';
	SetElemStyle(div, GetCSSSize(poz[0], poz[1], 10, 10));
	document.body.appendChild(div);
	return div;
} 


document.getElementsByClassName = function(cl) 
{
	var retnode = [];
	
	var myclass = new RegExp('\\b'+cl+'\\b');
	var elem = this.getElementsByTagName('*');
	for (var i = 0; i < elem.length; i++) 
	{
		var classes = elem[i].className;
		if (myclass.test(classes)) 
			retnode.push(elem[i]);
	}
	return retnode;
};

document.getEdytowane= function(parent,klasa)
{
	var retnode = [];
		
	var myclass = new RegExp('\\b'+klasa+'\\b');
	var elem = this.getElementsByTagName('*');
	for (var i = 0; i < elem.length; i++) 
	{
		var classes = elem[i].className;
		if (myclass.test(classes))
		{
			rodzic = elem[i].parentNode;						
			while (rodzic != undefined)
			{								
				if (rodzic.id == parent.id)
				{					
					retnode.push(elem[i]);
					break;
				}
				rodzic = rodzic.parentNode;			
			}							
		}
	}
	
	return retnode;
}

 
 function gray()
 { 	
 	CreateShadow();
	//opcja dla dialogu loader	
	var load = document.getElementById('loader');
	load.style.display = 'block' ;
	load.style.position = "absolute";	
	load.style.zIndex = 1;
	load.style.left = (document.body.clientWidth / 2) - 50 + "px";		
	load.style.top = (document.documentElement||document.body).scrollTop +
	                 ((document.documentElement||document.body).clientHeight / 2)
	                  - load.clientHeight + "px";
		 
	
	return false;
 }
 
 var licznik = 0;
 var t;
 
 function ustawieniagray(panel)
 {
 	var cien = document.getElementById('shadow'); 
	if (cien != null)
	{		
		cien.style.opacity= '0.7';
		cien.style.filter="Alpha(Opacity=70)";
		cien.style.display = 'block';
		cien.style.height = document.body.clientHeight + 'px';
		cien.style.width = document.body.clientWidth + 'px';
	}		

	if (panel != null)
	{		
		panel.style.display = 'block';	
		panel.style.top = 100 + 'px' ;
		panel.style.left = cien.offsetWidth/2 - panel.offsetWidth/2 + 'px';
		panel.style.opacity= '0.01';
		panel.style.filter="Alpha(Opacity=1)";		
	}
	return false;
 }
 
 
 
 
 

function checkSend()
{
	var wybrano = false;
	var Wybrani = document.getElementById('Wybrani');	
	for (i = Wybrani.length - 1; i>=0; i--)  
	{
		Wybrani.options[i].selected = true;
		wybrano  = true;
	}
	
	if (wybrano == false)
	{
		alert('Wybierz przynajmniej jeden adres e-mail.');
		return false;
	}
	
	//kontrola ustawien serwera SMTP
	var settings = true;
	var elem = document.getElementById("mail_smtp");
	if (elem != false)
	{
		if (elem.value == '')
			settings = false;	

	}
	elem = document.getElementById("mail_adres");
	if (elem != false)
	{
		if (elem.value == '')
			settings = false;
	}
	elem = document.getElementById("mail_user");
	if (elem != false)
	{
		if (elem.value == '')
			settings = false;
	}
	elem = document.getElementById("mail_pass");
	if (elem != false)
	{
		if (elem.value == '')
			settings = false;	
	}
	
	if (settings == false)
	{
		alert('Nie wprowadzono wszystkich danych konfiguracyjnych. Kliknij przycisk Ustawienia e-mail.');
		return false;
	}
	
	gray();
	
	return true;
}





var speed=1
var currentpos=0; 
function scrollwindow()
{
   window.scroll(0,currentpos)
} 


function setActualWindowPosition()
{
	currentpos=document.body.scrollTop;
}























var rozmiar_timer = null;	//timer przesuwanie elementu
var przesuwany = null;		//przesuwany element
var full_x = null; //docelowy rozmiar x obiektu
var full_y = null;	//docelowy rozmiar y obiektu
var window_middle_x = null;	//srodek obrzaru okna przegladarki
var opacity_value = 0;

function startSlidePos(obj, toLeft, toTop) 
{  
  
  if (rozmiar_timer != null)
    window.clearTimeout(rozmiar_timer);
    
  
  przesuwany = document.getElementById(obj);
  if (przesuwany != null)
  {
    //ustawieniagray(przesuwany); 
  	//opacity_value = 0;   		  	
  	//przesuwany.style.opacity= opacity_value/100;
  	//przesuwany.style.filter='Alpha(Opacity='+opacity_value+')';  	
  	//rozmiar_timer = window.setTimeout(slideNextPos, 40);
  	ustawieniagray(przesuwany);
  	przesuwany.style.opacity= 1;
  	przesuwany.style.filter='Alpha(Opacity=100)';  	
  }
  return false;
} // startSlidePos


function slideNextPos() 
{
  opacity_value+=5;
    

  przesuwany.style.opacity= opacity_value/100;
  przesuwany.style.filter='Alpha(Opacity='+opacity_value+')';
  
  
  // check for more need to move
  if (opacity_value < 100)
    rozmiar_timer = window.setTimeout(slideNextPos, 40);
  else
  {
  	clearTimeout(rozmiar_timer);
    rozmiar_timer = null;   
  }
} 




 function notgray()
 {
 	var elem;
 	 	
 	elem = document.getElementById('loader');
 	if (elem != null)		
		elem.style.display = 'none';


	elem = document.getElementById('shadow');
 	if (elem != null)		
		elem.style.display = 'none';
		
	elem = document.getElementById('ustawienia_panel');
 	if (elem != null)		
		elem.style.display = 'none';
		
	elem = document.getElementById('pageSettings');
 	if (elem != null)		
		elem.style.display = 'none';
		
	elem = document.getElementById('kontenerSettings');
 	if (elem != null)		
		elem.style.display = 'none';
		
	elem = document.getElementById('newsSettings');
 	if (elem != null)		
		elem.style.display = 'none';
		
	elem = document.getElementById('EMailSet');
 	if (elem != null)		
		elem.style.display = 'none';
			
	scrollwindow();
	currentpos = 0;
	
	
	//if ( !isIE() && !isOpera() )
	//{
		//wyszukaj wszystkie elementy klasy belka i uczyn je przesuwalnymi
		//var draggables = document.getElementsByTagName('*');
		//for(i=0;i<draggables.length;i++)
	 		//if (draggables[i].className.match(/(^|\s)belka(\s|$)/))			
				//	dragContainerInit(draggables[i]);
	//}
				
		
 }




function showSettPanel(dane) 
{  
  
  var panel = null;
  var form = null;  
  
  //wyświetl odpowiedni panel w zależnosci od typu pozycji
  switch (dane['typ'])
  {
  	case 'kontener' : panel = document.getElementById('kontenerSettings');
  					  form  = document.getElementById('kontenerSettings_form');
  					  break;
  	case 'news' :     panel = document.getElementById('newsSettings');
  					  form  = document.getElementById('newsSettings_form');
  					  break;
  					  
  	default : alert('Nieznany typ pozycji - ' + dane['typ']);  break;
  }
  
  if (panel != null)
  {
  	 //dodaj do panelu ukryte pole z informację o identyfikatorze pozycji 
  	 ustawieniagray(panel);
  	 panel.style.opacity= 1;
  	 panel.style.filter='Alpha(Opacity=100)';  	
  	 var nowy = document.createElement('input');  	   	
  	 nowy.type = "hidden";  	   	 
     nowy.name = "id";          
     nowy.value = dane['id'];   
     if (form != null)           
     	form.appendChild(nowy);
     	
     //przeglądaj wszystkie elementy tablicy asocjacyjnej dane 
     for (klucz in dane)     
        if (klucz != 'typ' && klucz != 'id')			//pomin typ i id przekazywane dodatkowo
        {
     		//znajdz element o nazwie klucz i wpisz dla niego wartosc dane[klucz]
     		var elem = GetFirstDlgItemByName(panel,klucz);
     		if (elem == null)	//jesli nie znalazłeś eleementu wprost poszukaj z [] w celu znlezienia pola selct
     			elem = GetFirstDlgItemByName(panel,klucz+"[]");
     		
     		if (elem != null)
     		{      			
     			//zastosuj odpowiednią funkcę wpisująca w zależności od typu pola
     			if (elem.type == 'text' || elem.type == 'password' || elem.type == 'textarea')     			
     				elem.value = dane[klucz];     			
     			else if (elem.type == 'select-multiple')    
     			{
     				for (var i=0; i<dane[klucz].length; i++)
     					if (!SelectList_isOptionInsideList(elem,dane[klucz][i]))
     						SelectList_AddOption(elem,dane[klucz][i]);
     				
     			}     			
     			else if (elem.type == 'select-one')     			
     				SelectList_SelectOption(elem,dane[klucz]);     			
     		}
     		else
     			alert("nie znalazłem elementu " +  klucz);    		   		     		
     	}     
  }
  
  return false;
} 









function allTosend()
{
	var Wybrani = document.getElementById('Wybrani');
	//znajdz zaznaczone elementy
	var Wszyscy = document.getElementById('Wszyscy');
	for (i = Wszyscy.length - 1; i>=0; i--)  
	{ 	
     	var zaznaczony = Wszyscy.options[i];
     	var nowy = document.createElement('option');
		nowy.text = zaznaczony.text;
		nowy.value = zaznaczony.value;
		
		
		try 
		{
 			Wybrani.add(nowy, null); // standards compliant; doesn't work in IE
		}
		catch(ex) 
		{
  			Wybrani.add(nowy); // IE only
		}
		Wszyscy.remove(i);		
    }
    
    var button = document.getElementById('WyslijDoWybranych');
    if (Wybrani.length > 0)
		button.disabled = false;
	else
		button.disabled = true;
}

function allToWszyscy()
{	
	var Wybrani = document.getElementById('Wybrani');
	//znajdz zaznaczone elementy
	var Wszyscy = document.getElementById('Wszyscy');
	for (i = Wybrani.length - 1; i>=0; i--)  
	{ 	
    	     	
     	var zaznaczony = Wybrani.options[i];
     	var nowy = document.createElement('option');
     		
		nowy.text = zaznaczony.text;
		nowy.value = zaznaczony.value;
		
		try 
		{
 			Wszyscy.add(nowy, null); // standards compliant; doesn't work in IE
		}
		catch(ex) 
		{
  			Wszyscy.add(nowy); // IE only
		}
		Wybrani.remove(i);
    }
    var button = document.getElementById('WyslijDoWybranych');
    if (Wybrani.length > 0)
		button.disabled = false;
	else
		button.disabled = true;
}

function selectToWszyscy()
{	
	var Wybrani = document.getElementById('Wybrani');
	//znajdz zaznaczone elementy
	var Wszyscy = document.getElementById('Wszyscy');
	for (i = Wybrani.length - 1; i>=0; i--)  
	{ 	
    	if (Wybrani.options[i].selected)
    	{     	
	     	var zaznaczony = Wybrani.options[i];
	     	var nowy = document.createElement('option');
	     		
			nowy.text = zaznaczony.text;
			nowy.value = zaznaczony.value;
			
			try 
			{
	 			Wszyscy.add(nowy, null); // standards compliant; doesn't work in IE
			}
			catch(ex) 
			{
	  			Wszyscy.add(nowy); // IE only
			}
			Wybrani.remove(i);			
		}
    }
    var button = document.getElementById('WyslijDoWybranych');
    if (Wybrani.length > 0)
		button.disabled = false;
	else
		button.disabled = true;
}

function selectToSend()
{	
	var Wybrani = document.getElementById('Wybrani');
	//znajdz zaznaczone elementy
	var Wszyscy = document.getElementById('Wszyscy');
	for (i = Wszyscy.length - 1; i>=0; i--)  
	{ 
		if (Wszyscy.options[i].selected)
		{	
	     	var zaznaczony = Wszyscy.options[i];
	     	var nowy = document.createElement('option');
			nowy.text = zaznaczony.text;
			nowy.value = zaznaczony.value;
			
			try 
			{
	 			Wybrani.add(nowy, null); // standards compliant; doesn't work in IE
			}
			catch(ex) 
			{
	  			Wybrani.add(nowy); // IE only
			}
			Wszyscy.remove(i);			
		}
    }
    var button = document.getElementById('WyslijDoWybranych');
    if (Wybrani.length > 0)
		button.disabled = false;
	else
		button.disabled = true;
}
















//funkcja wyświetla na dialopgu stronę "kontrolki TabCtrl" o id przekazanym w zmiennej strona
//pozostałe strony ukrywa
function ShowPage(strona) 
{ 	
	
	//znajdz wybraną stronę
	var page = document.getElementById(strona);
	//znajdż rodzica wybranej strony
	var panel = page.parentNode;	
	
	//jęlsi nie znajdziesz chociaż jednej z pozycji zakończ
	if (panel == null || page == null)
		return false;
	
	
	//przeglądaj po wszystkich dzieciach
	for (var i=0; i < panel.childNodes.length; i++)
	{
		var elem = panel.childNodes[i];
		if ( elem.className != null)
		{
			//ukryj wszystkie strony 
			if (elem.className == "page")
				elem.id == strona ? elem.style.display = "block" : elem.style.display = "none";
					
			//wyświetl wszystkie przyciski jako normalne	
			if (elem.className.match(/(^|\s)przycisk(\s|$)/))
				elem.name == strona ? elem.className = "przycisk select" : elem.className = "przycisk normal";
		}
	}			
	return false;
} 














 var indexLevel = 1;
  
 function dragContainerInit(el)
 {
  
  	var fadeIn = new fx.Opacity(el.parentNode, {duration:300});
	
	var dragContainerOptions = {

		handle: el, 
		
		onStart: function(){
			indexLevel++; 
			el.parentNode.style.zIndex = indexLevel;
		}.bind(this),
		 
		onComplete: function(){
			//var fadeIn = new fx.Opacity(el.parentNode, {duration:300});
			//fadeIn.custom(.5,1);
		
		}.bind(this)
	};
	
  	el.style.cursor = 'move';
		
	el.parentNode.makeDraggable(dragContainerOptions);
  
  }

 
 

 
 
 function pause(numberMillis) 
 {
  var now = new Date();
  var exitTime = now.getTime() + numberMillis;
  while (true) {
    now = new Date();
    if (now.getTime() > exitTime)
   return;
  }
}
 

 
 function normal()
 {
	
	var elem1 = document.getElementById('tabelaMenu');
	if (elem1 != null)
	{		
		elem1.style.opacity= '0.5'
		elem1.style.filter="Alpha(Opacity=50)";
		elem1.style.display=none;
	}		
	else
		alert('nic nie znalazlem tabelaMenu');
			
	
	var elem = document.getElementById('MainDiv');
	if (elem != null)
	{		
		elem.style.opacity= '0.5'
		elem.style.filter="Alpha(Opacity=50)";
	}		
	else
		alert('nic nie znalazlem maindiv');
		
	return false;
 }
 
 
 
 
 
 
 


 
 function PrintObject(obj, ileWlini)
 {
 	var str="";
 	var i = 0;
 	for(prop in obj)
 	{
 		i++;
 		str+= prop + "=" + obj[prop] + "\t";
 		if ( (i%ileWlini) == 0)
 		{
 			i =0 ;
 			str += "\n";
 		}
 	}
 		
 	alert(str);
 }
 
 
 //funkcja ustawia styl CSS obiektu przekazanego ajko pierwszy argument funkcji
 function SetElemStyle(Obj, styl)
 {
 	Obj.style.cssText = styl;
 }
 
 //funkcja sprawdza czy używana przegl;adarka to Internet Explorer
 function isIE()
 {
 	if (navigator.appName == "Microsoft Internet Explorer")
 		return true;
 	else
 		return false; 		
 }
 function isOpera()
 {
 	if (navigator.appName == "Opera")
 		return true;
 	else
 		return false;
 }
 
 
 


function Wybierz(e)
{	
	//pobieranie obiektu event
	if (!e)
		var e = window.event;
	
	//pobierz uchwyty do okna wďż˝aďż˝ciwego i okna wyďż˝wietlonego na dialogu
	var hList = document.getElementById('zrodlaDanych');
	var hSlownikList = document.getElementById('IDC_LIST');
	
	//jesli nie wykryto ktďż˝rejďż˝ z list zakoďż˝cz wybieranie 
	if (hList == false || hSlownikList == false)
		return false;
		
	//jesli tylko jedna pozycja i do tego pusta usun jďż˝ ( ta pozycja potrzebna aby przejďż˝ďż˝ proces walidacji w3c )
	if (hList.length == 1 && hList.options[0].text.length==0)		
		hList.remove(0);	
	
	//przepisz zaznaczone pozycje ze sďż˝ownika do wďż˝aďż˝ciwej listy
	for (i = hSlownikList.length - 1; i>=0; i--)  	 
    	if (hSlownikList.options[i].selected)
    	{    		    		
    		SelectList_AddOption(hList,hSlownikList.options[i].text);
    		hSlownikList.remove(i);     		    	
    	}    	
}

 function addDataSource(daneZbazy)
 { 	 	
 	//jesli dialog zostaďż˝ juďż˝ utworzony i nie zostaďż˝ jeszcze zamkniety nic nie rob
 	if (hDlg != false)
 		return;
 		
 	var WybraneZrodlaList = document.getElementById('zrodlaDanych');
 	var panel = document.getElementById('kontenerSettings');
 	var button = document.getElementById('ZrodlaPlus');
 	
 	if (WybraneZrodlaList==null || panel == null || button == null)
 		return false;
 	 	
 	
 	
	//spozycjonuj Dialog do wyboru zrodla danych pod przyciskiem +
	var size = new Object(); 		
	size["left"] = parseInt(button.style.left);
	size["top"] = parseInt(button.style.top) + parseInt(button.style.height) + 1; 
	size["width"] = 250;
	size["height"] = 200;
	
	//stworz Dialog wyboru ďż˝rďż˝dďż˝a danych
	hDlg = CreateDialog (panel, 'Dialog', size, 'Dostępne źródła' );
	
	//przypisz do przycisku Cancel Akcjďż˝ zamykania dialogu		
	SetDlgItemAction("BTN_CANCEL", "onclick", CloseDialog); 
	
	var myselect = null;	
	if ( isIE() )
	{
		myselect = document.createElement('<select name="pomZrodla[]" size="3" multiple><\/select>');
		myselect.id = "IDC_LIST";
		SetElemStyle(myselect,"position: absolute; left:5px; top:30px; width:240px; height:135px;");
		myselect.multiple = true;
		myselect.size = daneZbazy.length;
	
	}
	else
	{		
		myselect = document.createElement("select");
		myselect.setAttribute("name","pomZrodla[]");
		myselect.setAttribute("id","IDC_LIST");
		myselect.setAttribute("style","position: absolute; left:5px; top:30px; width:240px; height:135px;");
		myselect.setAttribute("multiple","multiple");
	}	
		
			
	//dodaj dostepne pola z bazy danych do listy wyboru
	for (i=0; i<daneZbazy.length; i++)	
		//jesli pozycja ktora sprawdzamy nie jest jeszcze dodana dodaj ją 					
		if ( !SelectList_isOptionInsideList(WybraneZrodlaList, daneZbazy[i]) )
			SelectList_AddOption(myselect,daneZbazy[i]);				
			
	//pokaďż˝ listďż˝ z opcjami na dialogu dodawania listy
	hDlg.appendChild(myselect);
	
	//przypisz do przycisku Listy pozycji na dialogu akcjďż˝ pod dwuklik		
	SetDlgItemAction("IDC_LIST", "ondblclick", Wybierz);
		
 	return true;
 	
 }
 
 function kontener_zapisz() 		  
 {
 	//zaznacz wszystki pozycje dodane do poszczegolnych list
 	var List = document.getElementById('zrodlaDanych');
 	SelectList_SelectAll(List);
 	
 	var List = document.getElementById('wybranePozycje');
 	SelectList_SelectAll(List);
 	
 	return true;
 }

 

 
 
 
 