﻿/// <reference path="../lib/jquery-1.4.1-vsdoc.js" />

// register namespace
if (!window.MartinCollege) {
    window.MartinCollege = {};
}

/*! MartinCollege.utils */
MartinCollege.utils = (function() {
    var AJAX_OVERLAY_TIMEOUT,
		OVERLAY_PENDING_OR_VISIBLE = false;

    return {

        showOverlay: function(text) {
            // overlay may be about to be shown (via timeout) so check
            // otherwise previous overlay message will be overwritten
            if (OVERLAY_PENDING_OR_VISIBLE) {
                return;
            }
            $("#af-overlay-text p").text(text);
            OVERLAY_PENDING_OR_VISIBLE = true;
            AJAX_OVERLAY_TIMEOUT = setTimeout(function() {
                $("#af-overlay-text, #af-overlay").show();
            }, 400);
        },

        hideOverlay: function() {
            clearTimeout(AJAX_OVERLAY_TIMEOUT);
            $("#af-overlay-text, #af-overlay").hide().removeClass("ui-state-error");
            OVERLAY_PENDING_OR_VISIBLE = false;
        },

        showErrorOverlay: function(text) {
            if ($("#af-overlay-text, #af-overlay").length === 0) {
                MartinCollege.utils.createOverlay();
            }
            OVERLAY_PENDING_OR_VISIBLE = false; // force display of this message
            $("#af-overlay-text").toggleClass("ui-state-error");
            MartinCollege.utils.showOverlay(text);
        },

        createOverlay: function() {
            var overlay = '<div id="af-overlay" class="ui-widget-overlay"></div>\
						<div id="af-overlay-text" class="ui-widget ui-widget-content ui-corner-all">\
							<p></p>\
						</div>';
            $("body").prepend(overlay);
        },

        convertDateFromDBFormat: function(s) {
            // util to convert from DB date format to UI format
            // yyyy-mm-dd => dd/mm/yyyy
            return s ? s.split('-').reverse().join("/") : "";
        },

        convertDateToDBFormat: function(s) {
            // util to convert to desired DB date format from UI format
            // "dd/mm/yyyy => yyyy-mm-dd
            return s ? s.split('/').reverse().join("-") : "";
        },

        loadStyleSheet: function(url) {
            var headID = document.getElementsByTagName("head")[0];
            var cssNode = document.createElement('link');
            cssNode.type = 'text/css';
            cssNode.rel = 'stylesheet';
            cssNode.href = url;
            cssNode.media = 'screen';
            headID.appendChild(cssNode);
        },

        loadScriptFile: function(url, success) {
            $.getScript(url, success);
        },

        getIndexById: function(id, array) {
            // returns index of object in array with supplied id
            var i = array.length;
            while (i--) {
                if (array[i].Id === id) {
                    return i;
                }
            }
            return 0;
        },

        populateWebsiteId: function(id) {
            // websiteId is crucial to routing submissions into workflow
            $("#websiteId").val(id);
        },

        populateBrandId: function(id) {
            // websiteId is crucial to routing submissions into workflow
            $("#brandId").val(id);
        },
            
        queryStringValueForKey: function(paramName) {
            var qs = window.location.search.substring(1);
            var parms = qs.split('&');
            var paramValue = "";

            for (var i = 0; i < parms.length; i++) {
                var pos = parms[i].indexOf('=');
                if (pos > 0) {
                    var key = parms[i].substring(0, pos);
                    var val = parms[i].substring(pos + 1);

                    if (key == paramName) {
                        paramValue = val;
                    }
                }
            }
            return paramValue;
        },

        queryStringToObject: function(qs) {
            var obj = {};
            var qs = unescape(qs);
            var keyVals = qs.split('&');
            for (var i in keyVals) {
                var kv = keyVals[i].split('=');
                var k = kv[0]
                if (k.indexOf("[]") != -1) {
                    // support '[]' qs array convention for multiple values, same key
                    k = k.replace("[]", "");
                    if (!obj[k]) {
                        obj[k] = [];
                    }
                    obj[k].push(kv[1]);
                } else {
                    // support multiple values, same key not following '[]' convention
                    if (typeof obj[k] == 'object' && 'length' in obj[k]) {
                        obj[k].push(kv[1]);
                    } else {
                        if (obj[k] && obj[k] != kv[1]) {
                            // duplicate k/v pair, convert to array
                            var tmp = obj[k];
                            obj[k] = [];
                            obj[k].push(tmp);
                            obj[k].push(kv[1]);
                        } else {
                            obj[k] = kv[1];
                        }
                    }
                }
            }
            return obj;
        },

        typeOf: function(obj) {
            if (typeof obj == 'object') {
                if ("length" in obj) {
                    return 'array';
                } else {
                    return 'object';
                }
            }
            return typeof (obj);
        }

    };
})();



