﻿(function ($) {
    jQuery.rcn = function (options) {
        if (options) {
            jQuery.rcn.settings = $.extend({}, $.rcn.defaults, options);
            jQuery.rcn.settings.triggers['login'] = true;
        }
    };

    jQuery.rcn.settings = [];
    jQuery.rcn.events = {
        loggedIn: 'loggedin',
        loggedOut: 'loggedout',
        shoppingcartChanged: 'shoppingcartchanged',
        contentLoaded: 'contentLoaded',
        FBsessionChange: 'FBsessionChange',
        customerRegistered: 'customerRegistered',        
        registerPageOpened: 'registerPageOpened',
        showProductLayer: 'showProductLayer',
        productAddedToWishlist: 'productAddedToWishlist'
    };

    jQuery.rcn.sourceOfRegisterPage = {
        Header: 'Register Page opened – from Header',
        LoginLayer: 'Register Page opened – from Login Layer',
        Checkout: 'Register Page opened – from Checkout',
        ProductDetail: 'Register Page opened – from PDP'
    }

    function getCacheKey() {
        return new Date().getTime();
    }

    jQuery.rcn.addToBasketSource = {
        PRODUCTLAYER: "Product Layer",
        PRODUCTDETAILPAGE: "Product Detail Page",
        ORDERDIRECT: "Order Direct",
        WISHLIST: "Wish List",
        MYOFFER: "My Offer"
    }

    $.extend($.rcn, {
        defaults: {
            cacheKey: getCacheKey(),
            sitename: 'Sitename not set',
            title: 'Title not set',
            bml: 0,
            url: {},
            selectors: {},
            isLoggedIn: false,
            triggers: new Array(),
            monthLocale: new Array()
        },
        resetCache: function () {
            $.rcn.settings.cacheKey = getCacheKey();
        },
        bind: function (eventName, func) {
            $('body').bind(eventName, func);
        },
        trigger: function (eventName, args) {
            $('body').trigger(eventName, args);
        },
        unbind: function (eventName) {
            $('body').unbind(eventName);
        },
        formatString: function (str) {
            for (i = 1; i < arguments.length; i++) {
                str = str.replace('{' + (i - 1) + '}', arguments[i]);
            }
            return str;
        },
        getQueryParameter: function (name) {
            name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
            var regexS = "[\\?&]" + name + "=([^&#]*)";
            var regex = new RegExp(regexS);
            var results = regex.exec(window.location.href);
            if (results == null)
                return "";
            else
                return results[1];
        },
        utf8Decode: function (utftext) {
            var string = "";
            var i = 0;
            var c = c1 = c2 = 0;

            while (i < utftext.length) {

                c = utftext.charCodeAt(i);

                if (c < 128) {
                    string += String.fromCharCode(c);
                    i++;
                }
                else if ((c > 191) && (c < 224)) {
                    c2 = utftext.charCodeAt(i + 1);
                    string += String.fromCharCode(((c & 31) << 6) | (c2 & 63));
                    i += 2;
                }
                else {
                    c2 = utftext.charCodeAt(i + 1);
                    c3 = utftext.charCodeAt(i + 2);
                    string += String.fromCharCode(((c & 15) << 12) | ((c2 & 63) << 6) | (c3 & 63));
                    i += 3;
                }
            }
            return string;
        },
        getDateFromDateTime: function (dateTime) {
            return new Date(parseInt(dateTime.replace('/Date(', '').replace(')/', '')));
        },
        loadRssFeed: function (settings) {
            if (!settings.url)
                return;

            var api = "//ajax.googleapis.com/ajax/services/feed/load?v=1.0&callback=?&q=" + settings.url;

            if (settings.count)
                api += "&num=" + settings.count;

            $.getJSON(api, function (data) {
                if (data.responseStatus == 200) {
                    settings.onSuccess(data.responseData.feed);
                } else {
                    if (settings.onError)
                        settings.onError(data);
                };
            });
        }
    });
})(jQuery);

