﻿var LAArtsApplication = LAArtsApplication || {};

LAArtsApplication.helpers = {
    urlEncode: function(plaintext) {
        // The Javascript escape and unescape functions do not correspond
        // with what browsers actually do...
        var SAFECHARS = "0123456789" + 				// Numeric
					"ABCDEFGHIJKLMNOPQRSTUVWXYZ" + // Alphabetic
					"abcdefghijklmnopqrstuvwxyz" +
					"-_.!~*'()"; 				// RFC2396 Mark characters
        var HEX = "0123456789ABCDEF";

        var encoded = "";
        for (var i = 0; i < plaintext.length; i++) {
            var ch = plaintext.charAt(i);
            if (ch == " ") {
                encoded += "+"; 			// x-www-urlencoded, rather than %20
            } else if (SAFECHARS.indexOf(ch) != -1) {
                encoded += ch;
            } else {
                var charCode = ch.charCodeAt(0);
                if (charCode > 255) {
                    alert("Unicode Character '"
                        + ch
                        + "' cannot be encoded using standard URL encoding.\n" +
				          "(URL encoding only supports 8-bit characters.)\n" +
						  "A space (+) will be substituted.");
                    encoded += "+";
                } else {
                    encoded += "%";
                    encoded += HEX.charAt((charCode >> 4) & 0xF);
                    encoded += HEX.charAt(charCode & 0xF);
                }
            }
        } // for

        return encoded;
    },

    urlDecode: function(encoded) {
        // Replace + with ' '
        // Replace %xx with equivalent character
        // Put [ERROR] in output if %xx is invalid.
        var HEXCHARS = "0123456789ABCDEFabcdef";
        var plaintext = "";
        var i = 0;
        while (i < encoded.length) {
            var ch = encoded.charAt(i);
            if (ch == "+") {
                plaintext += " ";
                i++;
            } else if (ch == "%") {
                if (i < (encoded.length - 2)
					&& HEXCHARS.indexOf(encoded.charAt(i + 1)) != -1
					&& HEXCHARS.indexOf(encoded.charAt(i + 2)) != -1) {
                    plaintext += unescape(encoded.substr(i, 3));
                    i += 3;
                } else {
                    alert('Bad escape combination near ...' + encoded.substr(i));
                    plaintext += "%[ERROR]";
                    i++;
                }
            } else {
                plaintext += ch;
                i++;
            }
        } // while

        return plaintext;
    },

    openPopupWindow: function(url, title, options) {
        var defaults = {
            scrollbars: "no",
            width: 680,
            height: 500
        };
        var opts = $.extend({}, defaults, options);

        var chasm = screen.availWidth;
        var mount = screen.availHeight;


        popupWindowHandle = window.open(url, title, 'width=' + opts['width'] + ',height=' + opts['height'] + ',left=' + ((chasm - opts['width'] - 10) * .5) + ',top=' + ((mount - opts['height'] - 30) * .5) + ',scrollbars=' + opts['scrollbars']);
        if (popupWindowHandle.blur) popupWindowHandle.focus();
    }
};

String.format = function() {
    if (arguments.length == 0)
        return null;

    var str = arguments[0];

    for (var i = 1; i < arguments.length; i++) {
        var re = new RegExp('\\{' + (i - 1) + '\\}', 'gm');
        str = str.replace(re, arguments[i]);
    }

    return str;
};

