var Cookie = {
  set: function(name, value, daysToExpire) {
    var expire = '';
    if (daysToExpire != undefined) {
      var d = new Date();
      d.setTime(d.getTime() + (86400000 * parseFloat(daysToExpire)));
      expire = '; expires=' + d.toGMTString();
    }
    return (document.cookie = escape(name) + '=' + escape(value || '') + expire);
  },
  get: function(name) {
    var cookie = document.cookie.match(new RegExp('(^|;)\\s*' + escape(name) + '=([^;\\s]*)'));
    return (cookie ? unescape(cookie[2]) : null);
  },
  erase: function(name) {
    var cookie = Cookie.get(name) || true;
    Cookie.set(name, '', -1);
    return cookie;
  },
  accept: function() {
    if (typeof navigator.cookieEnabled == 'boolean') {
      return navigator.cookieEnabled;
    }
    Cookie.set('_test', '1');
    return (Cookie.erase('_test') === '1');
  }
};

// toggles section header and sets cookie accordingly
function toggleProduct(element){
	new Effect.toggle(element, 'blind');
	if (element.style.display) {
		Cookie.set(element.id, '1');
		element.parentNode.className += ' ' + ToggleDivHelper.expandedDivClass;
	} else {
		Cookie.erase(element.id);
		element.parentNode.className = element.parentNode.className.replace(' ' + ToggleDivHelper.expandedDivClass, '');
	}
	return false;
}

//observes window load and toggles sections when page is loaded
Event.observe(window, 'load', function() {loadToggleInformation();})

//loops through product divs, checks to see if a cookie exists for that section, and displays the section if the cookie exists
function loadToggleInformation() {
	//shows all divs based on cookie information
	availableToggleDivs = ToggleDivHelper.productDivs();
	for (var div = 0; div < availableToggleDivs.length; div++) {
		element = availableToggleDivs[div];
		if (Cookie.get(element.id)) {
			element.parentNode.className += ' ' + ToggleDivHelper.expandedDivClass;
			new Effect.BlindDown(element.id); //blinds down nicely once page is loaded
		}
	}
	//adds click event handler for headers
	eventDivs = ToggleDivHelper.eventDivs();
	for (var div = 0; div < eventDivs.length; div++) {
		Event.observe(eventDivs[div], 'click', function() {
			var this_instance = this;
			var _this = '';
			while (this_instance) {
				if (this_instance.className && this_instance.className.match('CollapsiblePanel')) {
					_this = this_instance.childNodes[0];
					break;
				} else { this_instance = this_instance.parentNode; }
			}
			element = $(ToggleDivHelper.productWrapperPrefix + _this.id.match(/\d+/));
			toggleProduct(element);
		});	
	}	
}

//helper to select applicable divs; reduces loop to divs nested in the products wrapper div (currently called category_drawer)
var ToggleDivHelper = {
	productsWrapperID: 'thumbnail_browse',
	productWrapperPrefix: 'category_',
	eventDivClass: 'category-drawer',
	expandedDivClass: 'CollapsiblePanelOpen',
	eventDivs: function () {
		localEventDivs = []
		divs = $(ToggleDivHelper.productsWrapperID).getElementsByTagName('div');
		for (var div = 0; div < divs.length; div++) {
			if (divs[div].className.match(ToggleDivHelper.eventDivClass + '$')) { localEventDivs.push(divs[div]); }
		}
		return localEventDivs;
	},
	productDivs: function () {
		localProductDivs = []
		divs = $(ToggleDivHelper.productsWrapperID).getElementsByTagName('div');
		for (var div = 0; div < divs.length; div++) {
			if (divs[div].id.match(ToggleDivHelper.productWrapperPrefix)) {
				localProductDivs.push(divs[div]);
			}
		}
		return localProductDivs;
	}	
}