﻿/**
* Written by TOL
* Date: 12.04.2011
*
* @author TOL
* @version 1.0.1
*
**/


var ControlSettingsSaver = (function ($) {

  return {

    loadStorageFromCookie: function (cookieName0) {
      var storage0 = jQuery.parseJSON(ControlSettingsSaver.getCookie(cookieName0));
      return storage0;
    },

    saveStorageToCookie: function (cookieName0, storage0, exp0 /*in seconds*/, domain0) {
      var cookieParams;

      var exp;
      if (typeof exp0 != 'undefined') exp = exp0;
      else exp = 30 * (60 * 60 * 24);

      var is_chrome = /chrome/.test(navigator.userAgent.toLowerCase());

      if ($j.browser.msie) {
        cookieParams = { expires: exp };
      } else if (is_chrome) {
        cookieParams = { expires: exp };
      } else {
        cookieParams = { expires: exp, path: '/' };
        if (typeof domain0 != 'undefined') {
          $j.extend(cookieParams, { domain: domain0 });
        }
      }
      ControlSettingsSaver.setCookie(cookieName0, $j.toJSON(storage0), cookieParams);
    },

    getElementKey: function (el) {
      var key = '';
      if (typeof $j(el).attr('id') !== 'undefined' && $j(el).attr('id') != '') {
        key = $j(el).attr('id');
      } else {
        key = $j(el).attr('name');
      }
      return key;
    },

    saveControlSettingsToStorage: function ($areas0, keysToIgnore, storage0) {
      if (storage0 == null) storage0 = {};
      $areas0.find('input:text, input[type="hidden"], select').not('input[type="checkbox"]').each(function (ind, el) {
        var key = ControlSettingsSaver.getElementKey(this);
        if (jQuery.inArray(key, keysToIgnore) == -1) storage0[key] = $j(this).val();
      });
      $areas0.find('input[type="checkbox"]').each(function (ind, el) {
        var key = ControlSettingsSaver.getElementKey(this);
        if (jQuery.inArray(key, keysToIgnore) == -1) {
          if ($j(this).is(':checked')) {
            if (typeof storage0[key] == 'undefined') storage0[key] = [];
            storage0[key].push($j(this).val());
          } else {
            /* do nothing */
          };
        }
      });
      return storage0;
    },

    loadControlSettingsFromStorage: function ($areas0, keysToIgnore, storage0) {
      if (storage0 == null) storage0 = {};
      $areas0.find('input:text, input[type="hidden"], select').not('input[type="checkbox"]').each(function (ind, el) {
        var key = ControlSettingsSaver.getElementKey(el);
        if (jQuery.inArray(key, keysToIgnore) == -1 && typeof storage0[key] !== 'undefined') { $j(el).val(storage0[key]); }
      });
      $areas0.find('input[type="checkbox"]').each(function (ind, el) {
        var key = ControlSettingsSaver.getElementKey(el);
        if (jQuery.inArray(key, keysToIgnore) == -1 && typeof storage0[key] !== 'undefined') {
          if (jQuery.inArray($j(el).val(), storage0[key]) != -1) $j(el).attr('checked', true);
          else $j(el).attr('checked', false);
        }
      });
      return storage0;
    },

    /* work with cookies */
    // retrieve cookie if exists or undefined
    getCookie: function (name) {
      var matches = document.cookie.match(new RegExp(
	              "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"
	            ))
      return matches ? decodeURIComponent(matches[1]) : undefined
    },

    // set cookie
    setCookie: function (name, value, props) {
      props = props || {}
      var exp = props.expires
      if (typeof exp == "number" && exp) {
        var d = new Date()
        d.setTime(d.getTime() + exp * 1000)
        exp = props.expires = d
      }
      if (exp && exp.toUTCString) { props.expires = exp.toUTCString() }

      value = encodeURIComponent(value)
      var updatedCookie = name + "=" + value
      for (var propName in props) {
        updatedCookie += "; " + propName
        var propValue = props[propName]
        if (propValue !== true) { updatedCookie += "=" + propValue }
      }
      document.cookie = updatedCookie

    },

    // delete cookie
    deleteCookie: function (name) {
      ControlSettingsSaver.setCookie(name, null, { expires: -1 })
    }
    /* * */


  }

})(jQuery);


