/*
 * Copyright 2012 Amadeus s.a.s.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *    http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/**
 * @class aria.utils.QueryString Utils for javascript query strings
 * @extends aria.core.JsObject
 * @singleton
 */
Aria.classDefinition({
    $classpath : 'aria.utils.QueryString',
    $singleton : true,
    $constructor : function () {
        this.keyValues = null;
    },
    $prototype : {
        /**
         * Parses current query string (from the window where the framework is loaded) and extracts the key values
         */
        _init : function () {
            var window = Aria.$frameworkWindow;
            if (window != null) {
                this.keyValues = this.parseQueryString(window.location.search);
            } else {
                this.keyValues = {};
            }
        },

        /**
         * Parses a query string and returns a map of parameter/values.
         * @param {String} queryString Query string. Can either be empty, or start with a "?" character.
         * @return {Object}
         */
        parseQueryString : function (queryString) {
            var res = {};
            if (queryString == null || queryString.length == 0) {
                return res;
            }
            queryString = queryString.substr(1, queryString.length); // remove "?" sign

            var pairs = queryString.split("&");
            for (var i = 0; i < pairs.length; i++) {
                var pair = pairs[i].split('=');
                var key = decodeURIComponent(pair[0]);
                var value = (pair.length == 2) ? decodeURIComponent(pair[1]) : key;
                res[key] = value;
            }
            return res;
        },

        /**
         * Gets the value of specific query string key (from the window where the framework is loaded,
         * Aria.$frameworkWindow)
         * @param {String} key
         * @return {String}
         */
        getKeyValue : function (key) {
            if (!this.keyValues) {
                this._init();
            }
            return this.keyValues[key];
        }
    }
});