/*
 * HeiSoo Javascript Framework & Plugin
 *
 * Copyright (c) 2008 Jun Wang (heisoo.com)
 * Dual licensed under the MIT (MIT-LICENSE.txt)
 * and GPL (GPL-LICENSE.txt) licenses.
 *
 * $Date: 2008-09-24 15:39:00 -0400 (Wed, 24 Sep 2008) $
 */


// Defines a named constant
define = (function() {
    function toString(name, value){
        return  "const " + name + "=" + (
            /^(null|true|false|(\+|\-)?\d+(\.\d+)?)$/.test(value = String(value)) ? value : '"' + replace(value) + '"'
        )
    };
    var define, replace;
    try{
        eval("const e=1");
        replace = function(value){
            var replace = {"\x08":"b","\x0A":"\\n","\x0B":"v","\x0C":"f","\x0D":"\\r",'"':'"',"\\":"\\"};
            return  value.replace(/\x08|[\x0A-\x0D]|"|\\/g, function(value){return  "\\"+replace[value]})
        };
        define = function(name, value){
            var script = document.createElement("script");
            script.type = "text/javascript";
            script.appendChild(document.createTextNode(toString(name, value)));
            document.documentElement.appendChild(script);
            document.documentElement.removeChild(script);
        }
    }
    catch(e){
        replace = function(value){
            var replace = {"\x0A":"\\n", "\x0D":"\\r"};
            return  value.replace(/"/g, '""').replace(/\n|\r/g, function(value){return replace[value]})
        };
        define = this.execScript ?
        function(name, value){
            execScript(toString(name, value), "VBScript");
        }:
        function(name, value){
            eval(toString(name, value).substring(6));
        }
    };
    return  define;
})();



// framework segment
(function($){

    $.exec = function(fun, $Dom) {
        if ( typeof(fun) != 'function' ) return false;

        $Dom = $Dom || null;
        (fun)($Dom);

        return true;
    };
    
    $.HS = function(Obj) {

        if ( typeof(Obj) != 'object' ) return false;

        $(document).ready(
            function() {
                for( element in Obj ) {
                    if ( typeof(Obj[element]) != 'function' ) continue;

                    prefix = '__';
                    if ( typeof(MOD_PREFIX) != 'undefined' ) {
                        prefix = MOD_PREFIX;
                    }

                    $Dom = $('#' + prefix + element);
                    if ($Dom.length <= 0) {
                        $Dom = null;
                    }

                    $.exec(Obj[element], $Dom);
                }
            }
        );

        return true;
    };

})(jQuery);

