/*!
* Json plug in 
* 
* Usage : 
* 
* var json = $.evalJSON("{property1:'value1'}");
* var strJson = $.toJSON(json);
*/
(function($) {
    function toIntegersAtLease(n)
    { return n < 10 ? '0' + n : n; }
    Date.prototype.toJSON = function(date) {
        return this.getUTCFullYear() + '-' +
toIntegersAtLease(this.getUTCMonth()) + '-' +
toIntegersAtLease(this.getUTCDate());
    }; var escapeable = /["\\\x00-\x1f\x7f-\x9f]/g; var meta = { '\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"': '\\"', '\\': '\\\\' }; $.quoteString = function(string) {
        if (escapeable.test(string)) {
            return '"' + string.replace(escapeable, function(a) {
                var c = meta[a]; if (typeof c === 'string') { return c; }
                c = a.charCodeAt(); return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
            }) + '"';
        }
        return '"' + string + '"';
    }; $.toJSON = function(o, compact) {
        var type = typeof (o); if (type == "undefined")
            return "undefined"; else if (type == "number" || type == "boolean")
            return o + ""; else if (o === null)
            return "null"; if (type == "string")
        { return $.quoteString(o); }
        if (type == "object" && typeof o.toJSON == "function")
            return o.toJSON(compact); if (type != "function" && typeof (o.length) == "number") {
            var ret = []; for (var i = 0; i < o.length; i++) { ret.push($.toJSON(o[i], compact)); }
            if (compact)
                return "[" + ret.join(",") + "]"; else
                return "[" + ret.join(", ") + "]";
        }
        if (type == "function") { throw new TypeError("Unable to convert object of type 'function' to json."); }
        var ret = []; for (var k in o) {
            var name; type = typeof (k); if (type == "number")
                name = '"' + k + '"'; else if (type == "string")
                name = $.quoteString(k); else
                continue; var val = $.toJSON(o[k], compact); if (typeof (val) != "string") { continue; }
            if (compact)
                ret.push(name + ":" + val); else
                ret.push(name + ": " + val);
        }
        return "{" + ret.join(", ") + "}";
    }; $.compactJSON = function(o)
    { return $.toJSON(o, true); }; $.evalJSON = function(src)
    { return eval("(" + src + ")"); }; $.secureEvalJSON = function(src) {
        var filtered = src; filtered = filtered.replace(/\\["\\\/bfnrtu]/g, '@'); filtered = filtered.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'); filtered = filtered.replace(/(?:^|:|,)(?:\s*\[)+/g, ''); if (/^[\],:{}\s]*$/.test(filtered))
            return eval("(" + src + ")"); else
            throw new SyntaxError("Error parsing JSON, source is not valid.");
    };
})(jQuery);


/*!
* coordinate plug in 
* 
* Usage : 
* 
* $("#ele").x();
* $("#ele").y();
*/
$.fn.x = function(n){var result=null;this.each(function(){var o=this;if(n===undefined){var x=0;if(o.offsetParent){while(o.offsetParent){x+=o.offsetLeft;o=o.offsetParent}}if(result===null){result=x}else{result=Math.min(result,x)}}else{o.style.left=n+'px'}});return result};
$.fn.y = function(n){var result = null; this.each(function() { var o = this; if (n === undefined) { var y = 0; if (o.offsetParent) { while (o.offsetParent) { y += o.offsetTop; o = o.offsetParent } } if (result === null) { result = y } else { result = Math.min(result, y) } } else { o.style.top = n + 'px' } }); return result };


/*!
* Retrieve Json string from class attribute
* 
* Usage : <div id="ele" class="class1 {property1:'value1'} class2"></div>
* 
* $("#ele").classJson().property1;
*/
(function($) {
    $.fn.classJson = function(options) {
        if ($(this).attr("class") == null)
            return null;
        var matches = $(this).attr("class").match(/{[^}]*}/);

        if (matches != undefined && matches.length > 0) {
            return $.evalJSON(matches[0]);
        }
        return null;
    }
})(jQuery);

/*
 * Style File - jQuery plugin for styling file input elements
 *  
 * Copyright (c) 2007-2008 Mika Tuupola
 *
 * Licensed under the MIT license:
 *   http://www.opensource.org/licenses/mit-license.php
 *
 * Based on work by Shaun Inman
 *   http://www.shauninman.com/archive/2007/09/10/styling_file_inputs_with_css_and_the_dom
 *
 * Revision: $Id: jquery.filestyle.js 303 2008-01-30 13:53:24Z tuupola $
 *
 */
 
(function($){$.fn.filestyle=function(options){var settings={width:250};if(options){$.extend(settings,options);};return this.each(function(){var self=this;var wrapper=$("<div>").css({"width":settings.imagewidth+"px","height":settings.imageheight+"px","background":"url("+settings.image+") 0 0 no-repeat","background-position":"right","display":"inline","position":"absolute","overflow":"hidden"});var filename=$('<input class="file">').addClass($(self).attr("class")).css({"display":"inline","width":settings.width+"px"});$(self).before(filename);$(self).wrap(wrapper);$(self).css({"position":"relative","height":settings.imageheight+"px","width":settings.width+"px","display":"inline","cursor":"pointer","opacity":"0.0"});if($.browser.mozilla){if(/Win/.test(navigator.platform)){$(self).css("margin-left","-142px");}else{$(self).css("margin-left","-168px");};}else{$(self).css("margin-left",settings.imagewidth-settings.width+"px");};$(self).bind("change",function(){filename.val($(self).val());});});};})(jQuery);

