﻿/**
* Copyright (c) 2005 - 2009, James Auldridge
* All rights reserved.
*
* Licensed under the BSD, MIT, and GPL (your choice!) Licenses:
*  http://code.google.com/p/cookies/wiki/License
*
*/
var jaaulde = window.jaaulde || {}; jaaulde.utils = jaaulde.utils || {}; jaaulde.utils.cookies = (function() {
    var cookies = []; var defaultOptions = { hoursToLive: null, path: '/', domain: null, secure: false }; var resolveOptions = function(options) {
        var returnValue; if (typeof options !== 'object' || options === null)
        { returnValue = defaultOptions; }
        else
        { returnValue = { hoursToLive: (typeof options.hoursToLive === 'number' && options.hoursToLive !== 0 ? options.hoursToLive : defaultOptions.hoursToLive), path: (typeof options.path === 'string' && options.path !== '' ? options.path : defaultOptions.path), domain: (typeof options.domain === 'string' && options.domain !== '' ? options.domain : defaultOptions.domain), secure: (typeof options.secure === 'boolean' && options.secure ? options.secure : defaultOptions.secure) }; }
        return returnValue;
    }; var expiresGMTString = function(hoursToLive)
    { var dateObject = new Date(); dateObject.setTime(dateObject.getTime() + (hoursToLive * 60 * 60 * 1000)); return dateObject.toGMTString(); }; var assembleOptionsString = function(options) {
        options = resolveOptions(options); return ((typeof options.hoursToLive === 'number' ? '; expires=' + expiresGMTString(options.hoursToLive) : '') + '; path=' + options.path +
(typeof options.domain === 'string' ? '; domain=' + options.domain : '') +
(options.secure === true ? '; secure' : ''));
    }; var splitCookies = function() {
        cookies = {}; var pair, name, value, separated = document.cookie.split(';'); for (var i = 0; i < separated.length; i = i + 1)
        { pair = separated[i].split('='); name = pair[0].replace(/^\s*/, '').replace(/\s*$/, ''); value = decodeURIComponent(pair[1]); cookies[name] = value; }
        return cookies;
    }; var constructor = function() { }; constructor.prototype.get = function(cookieName) {
        var returnValue; splitCookies(); if (typeof cookieName === 'string')
        { returnValue = (typeof cookies[cookieName] !== 'undefined') ? cookies[cookieName] : null; }
        else if (typeof cookieName === 'object' && cookieName !== null) {
            returnValue = {}; for (var item in cookieName) {
                if (typeof cookies[cookieName[item]] !== 'undefined')
                { returnValue[cookieName[item]] = cookies[cookieName[item]]; }
                else
                { returnValue[cookieName[item]] = null; } 
            } 
        }
        else
        { returnValue = cookies; }
        return returnValue;
    }; constructor.prototype.filter = function(cookieNameRegExp) {
        var returnValue = {}; splitCookies(); if (typeof cookieNameRegExp === 'string')
        { cookieNameRegExp = new RegExp(cookieNameRegExp); }
        for (var cookieName in cookies) {
            if (cookieName.match(cookieNameRegExp))
            { returnValue[cookieName] = cookies[cookieName]; } 
        }
        return returnValue;
    }; constructor.prototype.set = function(cookieName, value, options) {
        if (typeof value === 'undefined' || value === null) {
            if (typeof options !== 'object' || options === null)
            { options = {}; }
            value = ''; options.hoursToLive = -8760;
        }
        var optionsString = assembleOptionsString(options); document.cookie = cookieName + '=' + encodeURIComponent(value) + optionsString;
    }; constructor.prototype.del = function(cookieName, options) {
        var allCookies = {}; if (typeof options !== 'object' || options === null)
        { options = {}; }
        if (typeof cookieName === 'boolean' && cookieName === true)
        { allCookies = this.get(); }
        else if (typeof cookieName === 'string')
        { allCookies[cookieName] = true; }
        for (var name in allCookies) {
            if (typeof name === 'string' && name !== '')
            { this.set(name, null, options); } 
        } 
    }; constructor.prototype.test = function() {
        var returnValue = false, testName = 'cT', testValue = 'data'; this.set(testName, testValue); if (this.get(testName) === testValue)
        { this.del(testName); returnValue = true; }
        return returnValue;
    }; constructor.prototype.setOptions = function(options) {
        if (typeof options !== 'object')
        { options = null; }
        defaultOptions = resolveOptions(options);
    }; return new constructor();
})(); (function() {
    if (window.jQuery) {
        (function($) {
            $.cookies = jaaulde.utils.cookies; var extensions = { cookify: function(options) {
                return this.each(function() {
                    var i, resolvedName = false, resolvedValue = false, name = '', value = '', nameAttrs = ['name', 'id'], nodeName, inputType; for (i in nameAttrs) {
                        if (!isNaN(i)) {
                            name = $(this).attr(nameAttrs[i]); if (typeof name === 'string' && name !== '')
                            { resolvedName = true; break; } 
                        } 
                    }
                    if (resolvedName) {
                        nodeName = this.nodeName.toLowerCase(); if (nodeName !== 'input' && nodeName !== 'textarea' && nodeName !== 'select' && nodeName !== 'img')
                        { value = $(this).html(); resolvedValue = true; }
                        else {
                            inputType = $(this).attr('type'); if (typeof inputType === 'string' && inputType !== '')
                            { inputType = inputType.toLowerCase(); }
                            if (inputType !== 'radio' && inputType !== 'checkbox')
                            { value = $(this).val(); resolvedValue = true; } 
                        }
                        if (resolvedValue) {
                            if (typeof value !== 'string' || value === '')
                            { value = null; }
                            $.cookies.set(name, value, options);
                        } 
                    } 
                });
            }, cookieFill: function() {
                return this.each(function() {
                    var i, resolvedName = false, name = '', value, nameAttrs = ['name', 'id'], iteration = 0, nodeName; for (i in nameAttrs) {
                        if (!isNaN(i)) {
                            name = $(this).attr(nameAttrs[i]); if (typeof name === 'string' && name !== '')
                            { resolvedName = true; break; } 
                        } 
                    }
                    if (resolvedName) {
                        value = $.cookies.get(name); if (value !== null) {
                            nodeName = this.nodeName.toLowerCase(); if (nodeName === 'input' || nodeName === 'textarea' || nodeName === 'select')
                            { $(this).val(value); }
                            else
                            { $(this).html(value); } 
                        } 
                    }
                    iteration = 0;
                });
            }, cookieBind: function(options) {
                return this.each(function() {
                    $(this).cookieFill().change(function()
                    { $(this).cookify(options); });
                });
            } 
            }; $.each(extensions, function(i)
            { $.fn[i] = this; });
        })(window.jQuery);
    } 
})();
