﻿var Strings = {
    /// <summary>
    /// Wrapper for all global strings and URLs used throughout the site.
    /// Note that the strings can be defined in a composite format (ie. "Hello {0}"). 
    /// </summary> 

    _ParserErrorTitle: "Ups, der opstod en parser fejl!"
    , _ParserErrorText: "Serveren returnerede følgende data: {0}"

    // GENERAL AJAX SERVER ERROR:
    , _AjaxErrorTitle: "Hovsa'?"
    , _AjaxErrorText: "Der opstod en fejl: <br/> {0}"

    , _AjaxReturnsNoDataErrorTitle: "Hovsa'?"
    , _AjaxReturnsNoDataErrorText: "Der opstod en fejl, der kan skyldes at der ikke l&aelig;ngere er kontakt til serveren.<br/>Pr&oslash;v evt. at opdatere siden og pr&oslash;v igen."


    , Widgets: {
        _LoadingData: "Indl&aelig;ser data..."
    }
    
    // AJAX HANDLERS:
    , Urls: {
          _CompanyHandlerUrl: "/HttpHandlers/CompanyHandler.aspx"
        , _MemberHandlerUrl: "/HttpHandlers/MemberHandler.aspx"
        , _EventHandlerUrl: "/HttpHandlers/EventHandler.aspx"
        , _WidgetHandlerUrl: "/HttpHandlers/WidgetHandler.aspx"
    }
};

// define default ajax settings:
//$.ajaxSetup({
//   global: false, //  prevents global event handlers from being used
//   type: "POST",
//   beforeSend: function (xhr) {
//	    if ($.browser.msie) 
//		    xhr.setRequestHeader("Content-type", "application/json; charset=iso-8859-1")
//	    else
//		    xhr.setRequestHeader("Content-type", "application/json; charset=utf-8")
//    }
//});


$.clearInput = function (element) {
    /// <summary>
    /// Clears the child input-elements of the passed element.     
    ///     Usage: $.clearInput('#form1');   
    ///            $.clearInput('#section1'); (clears only the section1-section in the form)
    /// </summary>
    /// <param name="text" type="selector">Element containing the input-elements to be cleared.</param>

    $(element).find(':input').each(function () {
        switch (this.type) {
            case 'password':
            case 'select-multiple':
            case 'select-one':
            case 'text':
            case 'textarea':
                $(this).val('');
                break;
            case 'checkbox':
            case 'radio':
                this.checked = false;
        }
    });
    // update selected values:
    $('select').selectmenu('refresh');
    
};

$.format = function (text) {
    /// <summary>
    ///     Javascript equivalent to String.format.
    ///     Usage: $.format("Hello, {0}.", "world") 
    /// </summary>
    /// <param name="text" type="string">A composite format string.</param>
    /// <returns type="string" />

    //check if there are two arguments in the arguments list    
    if (arguments.length <= 1) {
        //if there are not 2 or more arguments there's nothing to replace
        //just return the text
        return text;
    }
    //decrement to move to the second argument in the array
    var tokenCount = arguments.length - 2;
    for (var token = 0; token <= tokenCount; ++token) {
        //iterate through the tokens and replace their placeholders from the text in order
        text = text.replace(new RegExp("\\{" + token + "\\}", "gi"), arguments[token + 1]);
    }
    return text;
};

$.extend({
    getUrlVars: function () {
        var vars = [], hash;
        var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
        for (var i = 0; i < hashes.length; i++) {
            hash = hashes[i].split('=');
            vars.push(hash[0]);
            vars[hash[0]] = hash[1];
        }
        return vars;
    },
    getUrlVar: function (name) {
        return $.getUrlVars()[name];
    }
});


$.urlDecode = function (url) {
    var o = url;
    var binVal, t, b;
    var r = /(%[^%]{2}|\+)/;
    while ((m = r.exec(o)) != null && m.length > 1 && m[1] != '') {
        if (m[1] == '+') {
            t = ' ';
        }
        else {
            b = parseInt(m[1].substr(1), 16);
            t = String.fromCharCode(b);
        }

        o = o.replace(m[1], t);
    }
    return o;
}


$.debug = function (stringOrElement) {
    /// <summary>
    ///     Writes a message or element to the console (if one is defined).
    ///     If no console is defined no action is taken.
    /// </summary>
    if (console) {
        console.debug(stringOrElement)
    }
};




$.unparam = function (value) {
    /// <summary>
    ///     Writes a message or element to the console (if one is defined).
    ///     If no console is defined no action is taken.
    /// </summary>

    var 
    // Object that holds names => values.
    params = {},
    // Get query string pieces (separated by &)
    pieces = value.split('&'),
    // Temporary variables used in loop.
    pair, i, l;

    // Loop through query string pieces and assign params.
    for (i = 0, l = pieces.length; i < l; i++) {
        pair = pieces[i].split('=', 2);
        // Repeated parameters with the same name are overwritten. Parameters
        // with no value get set to boolean true.
        params[decodeURIComponent(pair[0])] = (pair.length == 2 ?
            decodeURIComponent(pair[1].replace(/\+/g, ' ')) : true);
    }

    return params;
};


$.queryStringToHash = function (query) {
    var query_string = {};
    var vars = query.split("&");
    for (var i = 0; i < vars.length; i++) {
        var pair = vars[i].split("=");
        pair[0] = decodeURIComponent(pair[0]);
        pair[1] = decodeURIComponent(pair[1]);
        // If first entry with this name
        if (typeof query_string[pair[0]] === "undefined") {
            query_string[pair[0]] = pair[1];
            // If second entry with this name
        } else if (typeof query_string[pair[0]] === "string") {
            var arr = [query_string[pair[0]], pair[1]];
            query_string[pair[0]] = arr;
            // If third or later entry with this name
        } else {
            query_string[pair[0]].push(pair[1]);
        }
    }
    return query_string;
};


(function ($) {
    $.dateformat = (function () {

        var parseMonth = function (value) {

            switch (value) {
                case "Jan":
                    return "01";
                case "Feb":
                    return "02";
                case "Mar":
                    return "03";
                case "Apr":
                    return "04";
                case "Maj":
                    return "05";
                case "Jun":
                    return "06";
                case "Jul":
                    return "07";
                case "Aug":
                    return "08";
                case "Sep":
                    return "09";
                case "Okt":
                    return "10";
                case "Nov":
                    return "11";
                case "Dec":
                    return "12";
                default:
                    return value;
            }
        };

        var parseTime = function (value) {
            var retValue = value;
            if (retValue.indexOf(".") !== -1) {
                retValue = retValue.substring(0, retValue.indexOf("."));
            }

            var values3 = retValue.split(":");

            if (values3.length === 3) {
                hour = values3[0];
                minute = values3[1];
                second = values3[2];

                return {
                    time: retValue,
                    hour: hour,
                    minute: minute,
                    second: second
                };
            } else {
                return {
                    time: "",
                    hour: "",
                    minute: "",
                    second: ""
                };
            }
        };

        return {
            date: function (value, dateformat) {
                //value = new java.util.Date()
                //2009-12-18 10:54:50.546
                try {
                    var year = null;
                    var month = null;
                    var dayOfMonth = null;
                    var time = null; //json, time, hour, minute, second
                    if (typeof value.getFullYear === "function") {
                        year = value.getFullYear();
                        month = value.getMonth() + 1;
                        dayOfMonth = value.getDate();
                        time = parseTime(value.toTimeString());
                    } else {
                        var values = value.split(" ");

                        if (values.length == 1) {
                            //2009-12-18T10:54:50.546
                            values = value.split("T");
                        }

                        switch (values.length) {
                            case 6: //Wed Jan 13 10:43:41 CET 2010
                                year = values[5];
                                month = parseMonth(values[1]);
                                dayOfMonth = values[2];
                                time = parseTime(values[3]);
                                break;
                            case 2: //2009-12-18 10:54:50.546
                                var values2 = values[0].split("-");
                                year = values2[0];
                                month = values2[1];
                                dayOfMonth = values2[2];
                                time = parseTime(values[1]);
                                break;
                            default:
                                return value;
                        }
                    }

                    var pattern = "";
                    var retValue = "";
                    //Issue 1 - variable scope issue in dateformat.date
                    //Thanks jakemonO
                    for (var i = 0; i < dateformat.length; i++) {
                        var currentPattern = dateformat.charAt(i);
                        pattern += currentPattern;
                        switch (pattern) {
                            case "dd":
                                retValue += dayOfMonth;
                                pattern = "";
                                break;
                            case "MM":
                                retValue += month;
                                pattern = "";
                                break;
                            case "yyyy":
                                retValue += year;
                                pattern = "";
                                break;
                            case "HH":
                                retValue += time.hour;
                                pattern = "";
                                break;
                            case "hh":
                                retValue += (time.hour === 0 ? 12 : time.hour < 13 ? time.hour : time.hour - 12);
                                pattern = "";
                                break;
                            case "mm":
                                retValue += time.minute;
                                pattern = "";
                                break;
                            case "ss":
                                retValue += time.second;
                                pattern = "";
                                break;
                            case "a":
                                retValue += time.hour > 12 ? "PM" : "AM";
                                pattern = "";
                                break;
                            case " ":
                                retValue += currentPattern;
                                pattern = "";
                                break;
                            case "/":
                                retValue += currentPattern;
                                pattern = "";
                                break;
                            case ":":
                                retValue += currentPattern;
                                pattern = "";
                                break;
                            default:
                                if (pattern.length === 2 && pattern.indexOf("y") !== 0) {
                                    retValue += pattern.substring(0, 1);
                                    pattern = pattern.substring(1, 2);
                                } else if ((pattern.length === 3 && pattern.indexOf("yyy") === -1)) {
                                    pattern = "";
                                }
                        }
                    }
                    return retValue;
                } catch (e) {
                    console.log(e);
                    return value;
                }
            }
        };
    } ());
} (jQuery));
