/* 
 * More info at: http://phpjs.org
 * 
 * This is version: 3.07
 * php.js is copyright 2010 Kevin van Zonneveld.
 * 
 * Portions copyright Brett Zamir (http://brett-zamir.me), Kevin van Zonneveld
 * (http://kevin.vanzonneveld.net), Onno Marsman, Theriault, Michael White
 * (http://getsprink.com), Waldo Malqui Silva, Paulo Ricardo F. Santos, Jack,
 * Jonas Raoni Soares Silva (http://www.jsfromhell.com), Philip Peterson, Ates
 * Goral (http://magnetiq.com), Legaev Andrey, Alex, Ratheous, Martijn
 * Wieringa, Nate, lmeyrick (https://sourceforge.net/projects/bcmath-js/),
 * Enrique Gonzalez, Philippe Baumann, Webtoolkit.info
 * (http://www.webtoolkit.info/), travc, Carlos R. L. Rodrigues
 * (http://www.jsfromhell.com), Jani Hartikainen, Ash Searle
 * (http://hexmen.com/blog/), Ole Vrijenhoek, stag019, d3x, Erkekjetter,
 * GeekFG (http://geekfg.blogspot.com), T.Wild, Johnny Mast
 * (http://www.phpvrouwen.nl), Michael Grier,
 * http://stackoverflow.com/questions/57803/how-to-convert-decimal-to-hex-in-javascript,
 * pilus, marrtins, Andrea Giammarchi (http://webreflection.blogspot.com),
 * WebDevHobo (http://webdevhobo.blogspot.com/), Caio Ariede
 * (http://caioariede.com), Thunder.m, Aman Gupta, Martin
 * (http://www.erlenwiese.de/), Tyler Akins (http://rumkin.com), Lars Fischer,
 * Paul Smith, Alfonso Jimenez (http://www.alfonsojimenez.com), Michael White,
 * mdsjack (http://www.mdsjack.bo.it), Pellentesque Malesuada, gettimeofday,
 * David, Joris, saulius, Robin, Steven Levithan
 * (http://blog.stevenlevithan.com), Public Domain
 * (http://www.json.org/json2.js), Kankrelune (http://www.webfaktory.info/),
 * Tim de Koning (http://www.kingsquare.nl), Arpad Ray (mailto:arpad@php.net),
 * AJ, KELAN, Sakimori, Mailfaker (http://www.weedem.fr/), Oleg Eremeev, Marc
 * Palau, Josh Fraser
 * (http://onlineaspect.com/2007/06/08/auto-detect-a-time-zone-with-javascript/),
 * Karol Kowalski, Chris, Breaking Par Consulting Inc
 * (http://www.breakingpar.com/bkp/home.nsf/0/87256B280015193F87256CFB006C45F7),
 * Mirek Slugen, majak, Felix Geisendoerfer (http://www.debuggable.com/felix),
 * gorthaur, Steve Hilder, LH, Stoyan Kyosev (http://www.svest.org/), Der
 * Simon (http://innerdom.sourceforge.net/), HKM, echo is bad, nord_ua, Ozh,
 * metjay, XoraX (http://www.xorax.info), Eugene Bulkin
 * (http://doubleaw.com/), JB, strcasecmp, strcmp, Taras Bogach, Francesco,
 * Marco, noname, class_exists, madipta, Alan C, mktime, Douglas Crockford
 * (http://javascript.crockford.com), uestla, Frank Forte, David James, Steve
 * Clay, J A R, jpfle, Marc Jansen, Paul, Hyam Singer
 * (http://www.impact-computing.com/), T. Wild, Ole Vrijenhoek
 * (http://www.nervous.nl/), Raphael (Ao RUDLER), kenneth, Brad Touesnard,
 * ChaosNo1, Subhasis Deb, Norman "zEh" Fuchs, 0m3r, Sanjoy Roy, Rob, Gilbert,
 * Bayron Guevara, paulo kuong, Orlando, duncan, sankai, hitwork, Philippe
 * Jausions (http://pear.php.net/user/jausions), Aidan Lister
 * (http://aidanlister.com/), ejsanders, Nick Callen, Brian Tafoya
 * (http://www.premasolutions.com/), johnrembo, sowberry, Yves Sucaet, Denny
 * Wardhana, Ulrich, kilops, dptr1988, john (http://www.jd-tech.net), MeEtc
 * (http://yass.meetcweb.com), Peter-Paul Koch
 * (http://www.quirksmode.org/js/beat.html), T0bsn, Tim Wiel, Bryan Elliott,
 * Alexander Ermolaev (http://snippets.dzone.com/user/AlexanderErmolaev), JT,
 * Thomas Beaucourt (http://www.webapp.fr), David Randall, DxGx, Soren Hansen,
 * lmeyrick (https://sourceforge.net/projects/bcmath-js/this.), Le Torbi,
 * djmix, Lincoln Ramsay, Linuxworld, Thiago Mata
 * (http://thiagomata.blog.com), Pedro Tainha (http://www.pedrotainha.com),
 * James, Pyerre, Jon Hohle, felix, ger, Russell Walker
 * (http://www.nbill.co.uk/), Garagoth, Andrej Pavlovic, Dino, Jamie Beck
 * (http://www.terabit.ca/), DtTvB
 * (http://dt.in.th/2008-09-16.string-length-in-bytes.html), setcookie, YUI
 * Library: http://developer.yahoo.com/yui/docs/YAHOO.util.DateLocale.html,
 * Blues at http://hacks.bluesmoon.info/strftime/strftime.js, Andreas, rem,
 * meo, Jay Klehr, Kheang Hok Chin (http://www.distantia.ca/), Luke Smith
 * (http://lucassmith.name), Rival, Amir Habibi
 * (http://www.residence-mixte.com/), Cagri Ekin, Greenseed, mk.keck, Leslie
 * Hoare, booeyOH, Ben Bryan, Michael, Christian Doebler, Kirk Strobeck, Brant
 * Messenger (http://www.brantmessenger.com/), Rick Waldron, Mick@el, Martin
 * Pool, Pierre-Luc Paour, Daniel Esteban, Christoph, Saulo Vallory, Kristof
 * Coomans (SCK-CEN Belgian Nucleair Research Centre), rezna, Tomasz
 * Wesolowski, Gabriel Paderni, Marco van Oort, Philipp Lenssen,
 * penutbutterjelly, Simon Willison (http://simonwillison.net), Anton Ongson,
 * Eric Nagel, Bobby Drake, Pul, Blues (http://tech.bluesmoon.info/), Luke
 * Godfrey, Diogo Resende, Howard Yeend, vlado houba, Jalal Berrami, Itsacon
 * (http://www.itsacon.net/), date, Billy, stensi, Cord, fearphage
 * (http://http/my.opera.com/fearphage/), Victor, Matteo, Artur Tchernychev,
 * Francois, nobbler, Fox, marc andreu, Nick Kolosov (http://sammy.ru),
 * Nathan, Arno, Scott Cariss, Slawomir Kaniecki, ReverseSyntax, Jason Wong
 * (http://carrot.org/), Mateusz "loonquawl" Zalega, Manish, Wagner B. Soares,
 * 3D-GRAF, jakes, Yannoo, gabriel paderni, daniel airton wermann
 * (http://wermann.com.br), Atli Þór, Allan Jensen
 * (http://www.winternet.no), Benjamin Lupton, davook, Maximusya, FGFEmperor,
 * baris ozdil, Luis Salazar (http://www.freaky-media.com/), Tim de Koning,
 * taith, Matt Bradley, FremyCompany, T.J. Leahy, Greg Frazier, Valentina De
 * Rosa, Tod Gentille, Riddler (http://www.frontierwebdev.com/), Alexander M
 * Beedie
 * 
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the
 * "Software"), to deal in the Software without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Software, and to
 * permit persons to whom the Software is furnished to do so, subject to
 * the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included
 * in all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 * IN NO EVENT SHALL KEVIN VAN ZONNEVELD BE LIABLE FOR ANY CLAIM, DAMAGES
 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 */ 


// jslint.com configuration options: see http://jslint.com/
/*jslint evil: true, forin: true, newcap: true*/
/*global window */
(function() {
    if(typeof(this.PHP_JS) === "undefined"){ 
        // This references at top of namespace allows PHP_JS class to
        // be included directly inside an object (unusual use)
        var PHP_JS = function(cfgObj) {
            if(!(this instanceof PHP_JS)) {
                // Allow invokation without "new"
                return new PHP_JS(cfgObj);
            }
            // Allow user to pass in window, e.g., if in context
            // without access to window but need to pass in, like
            // a Mozilla JavaScript module
            this.window = cfgObj && cfgObj.window ? cfgObj.window : window;

            // Allow user to pass in object representing initial ini values
            this.php_js = {};
            this.php_js.ini = {};
            if (cfgObj) {
                for (var ini in cfgObj.ini) {
                    this.php_js.ini[ini] = {};
                    this.php_js.ini[ini].local_value = cfgObj.ini[ini]; // changeable by ini_set()
                    this.php_js.ini[ini].global_value = cfgObj.ini[ini]; // usable by ini_restore()
                }
            }
        };
    }
    // Private static holder across all instances; we usually use
    // instance variables, but this is necessary for a very few
    // like require_once()/include_once()
    var php_js_shared = {};

    PHP_JS.prototype = {
        constructor: PHP_JS,


        
        /*----------------------------------------------------------------------
         * FUNCIONES: START
         * ---------------------------------------------------------------------
         */
        
        htmlspecialchars_decode: function(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)
            // +   bugfixed by: Brett Zamir (http://brett-zamir.me)
            // +      input by: Ratheous
            // +      input by: Mailfaker (http://www.weedem.fr/)
            // +      reimplemented by: Brett Zamir (http://brett-zamir.me)
            // +    bugfixed by: Brett Zamir (http://brett-zamir.me)
            // *     example 1: htmlspecialchars_decode("<p>this -&gt; &quot;</p>", 'ENT_NOQUOTES');
            // *     returns 1: '<p>this -> &quot;</p>'
            // *     example 2: htmlspecialchars_decode("&amp;quot;");
            // *     returns 2: '&quot;'

            var optTemp = 0, i = 0, noquotes= false;
            if (typeof quote_style === 'undefined') {
                quote_style = 2;
            }
            string = string.toString().replace(/&lt;/g, '<').replace(/&gt;/g, '>');
            var OPTS = {
                'ENT_NOQUOTES': 0,
                'ENT_HTML_QUOTE_SINGLE' : 1,
                'ENT_HTML_QUOTE_DOUBLE' : 2,
                'ENT_COMPAT': 2,
                'ENT_QUOTES': 3,
                'ENT_IGNORE' : 4
            };
            if (quote_style === 0) {
                noquotes = true;
            }
            if (typeof quote_style !== 'number') { // Allow for a single string or an array of string flags
                quote_style = [].concat(quote_style);
                for (i=0; i < quote_style.length; i++) {
                    // Resolve string input to bitwise e.g. 'PATHINFO_EXTENSION' becomes 4
                    if (OPTS[quote_style[i]] === 0) {
                        noquotes = true;
                    }
                    else if (OPTS[quote_style[i]]) {
                        optTemp = optTemp | OPTS[quote_style[i]];
                    }
                }
                quote_style = optTemp;
            }
            if (quote_style & OPTS.ENT_HTML_QUOTE_SINGLE) {
                string = string.replace(/&#0*39;/g, "'"); // PHP doesn't currently escape if more than one 0, but it should
                // string = string.replace(/&apos;|&#x0*27;/g, "'"); // This would also be useful here, but not a part of PHP
            }
            if (!noquotes) {
                string = string.replace(/&quot;/g, '"');
            }
            // Put this in last place to avoid escape being double-decoded
            string = string.replace(/&amp;/g, '&');

            return string;
        }
        

		/*----------------------------------------------------------------------
         * FUNCIONES: END
         * ---------------------------------------------------------------------
         */



	}; // end PHP_JS.prototype
	
	// 1) You must now instantiate PHP_JS yourself to use it (you don't need
	// "new" to do it, though it is slightly faster and better practice if you do
	// use "new").
	// You can do so like this:   var $P = PHP_JS();
	// 2) To pass in initial ini values without requiring ini_set() calls (see the
	// individual functions and
	// http://trac.phpjs.org/projects/phpjs/wiki/php_js_Global for
	// which ones are available), you can pass in the ini data as follows:
	// var $P = new PHP_JS({ini: {
	//     'date.timezone':'America/Chicago', // PHP ini's used in PHP.JS
	//     'phpjs.objectsAsArrays': true // custom PHP.JS ini's
	// }});
	// 3) If you place this namespace in a context like a JavaScript module
	// (e.g., for a Firefox extension) without access to the global
	// window object, you could instantiate in code which can obtain a
	// "window" object like this: var $P = PHP_JS({window:window});
	// This is not necessary for regular HTML JavaScript.
	this.PHP_JS = PHP_JS; // Make PHP_JS available outside of namespace
}());