﻿///<reference path="../../libs/jquery-1.3.2-vsdoc.js" />
///<reference path="commons-core.js" />

swell.util = {

    removeFromArray: function(arr, from, to) {
        var rest = arr.slice((to || from) + 1 || arr.length);
        arr.length = from < 0 ? arr.length + from : from;
        return arr.push.apply(this, rest);
    },

    queryStringFrom: function(obj) {
        var addAmp = false;
        var queryString = "";
        for (var i in obj) {

            if (addAmp) {

                queryString += "&";
            }

            if ($.isArray(obj[i])) {

                $.each(obj[i], function(index, val) {

                    queryString += String.format("{0}={1}", i, val);

                    if (index < obj[i].length - 1) {
                        queryString += "&";
                    }
                });
            }
            else {

                queryString += String.format("{0}={1}", i, obj[i]);
            }

            addAmp = true;
        }
        return queryString
    },

    getQryStrParamFromUrl: function(url, param) {
        var qs = url.substring(url.indexOf("?") + 1, url.length);
        var kvps = qs.split("&");
        var result = null;
        logger.log("qs" + qs);
        $.each(kvps, function(i, val) {
            logger.log(val);
            var kvp = val.split("=");

            if (kvp[0] === param) {
                result = kvp[1];
            }
        });

        return result;
    },

    shortenUrl: function(url, callback) {
        BitlyCB.shortenResponse = function(data) {
            callback(data.results[url].shortUrl);
        }

        BitlyClient.shorten(url, 'BitlyCB.shortenResponse');
    },

    extractId: function(url) 
    {
        var regExp = /([a-zA-Z0-9\'%-]+)[-](\d+)/;
        
        var result = url.match(regExp); 
        
        if(result.length != 3) return null; 
        
        return result[2]; 
    },



    buildArgStatePath: function(reqArgs, viewState) {
        /// <summary>
        /// Iterates through the possible arugment values in the viewstate object. This object represents all the possible values that could exist for the particular view/viewstate combo. 
        /// Checks to see if the request arguments passed in is an array. If it is, that means there is a comparison operation that is beign stored in the state, and we must 
        /// serialize appropriatley based on this condition. 
        /// </summary>

        var state = "";

        if ($.isArray(reqArgs)) {

            $.each(viewState.args, function(index, stateArg) {

                for (var i = 0; i < reqArgs.length; i++) {
                    var args = reqArgs[i][stateArg];

                    if (args !== undefined) {
                        var seperator = (i < reqArgs.length - 1) ? "_" : "/";
                        state += reqArgs[i][stateArg] + seperator;
                    }
                }

            });
        }
        else {
            $.each(viewState.args, function(index, value) {
                state += reqArgs[value] + "/";
            });
        }
        //logger.log("returning state path for args: " + state); 
        return state;
    },

    buildDecoratorStatePath: function(stateReq, viewState) {

        var state = "";

        $.each(viewState.decorators, function(index, value) {
            var currDecorator = stateReq[value];

            if ($.isArray(currDecorator)) {

                $.each(currDecorator, function(index, parent) {

                    if ($.isArray(parent)) {

                        if (index > 0) {
                            state += "_";
                        }

                        $.each(parent, function(index, child) {
                            var seperator = (index < parent.length - 1) ? "-" : "";
                            state += child + seperator;
                        });
                    }
                    else {
                        state += parent;
                    }
                });

                state += "/";
            }
        });

        return state;
    },

    buildCategoriesStatePath: function(categories) {
        var state = "";
        var addSeperator = false;

        for (var i = 0; i < categories.length; i++) {
            if (addSeperator) {
                state += "_";
            }

            state += categories[i];
            addSeperator = true;
        }

        return state;
    },

    hasFlashPlayerVersion: function(version) {
        var fpversion = swfobject.getFlashPlayerVersion();
        return fpversion.major >= version;
    },

    getDocumentLocationHash: function() {
        return document.location.hash;
    }
}
