/**
 * Close a layer and save that is has been dismissed
 */
function dismissLayer(layer_idx, expire) {
	return closeLayer(layer_idx) && saveDismissedLayer(layer_idx, expire);
}

/**
 * Open the layer if foresee is loaded but not active
 */
function openLayer(layer_idx) {
	//if foresee layer is active then don't allow layer open
	if (isForeseeLoaded()) {
		if (isForeseeActive()) {
			return false;
		} else {
			return openLayerNow(layer_idx);
		}
	} else {
		setTimeout(function() {
				openLayer(layer_idx);
			}, 500);	//wait and then check again
	}
}

/**
 * Open the layer without checks
 */
function openLayerNow(layer_idx, success_callback, failure_callback) {
	//open the layer normally
	var layer = document.getElementById('layer-' + layer_idx);
	if (!layer) {
		layer = window.parent.document.getElementById('layer-' + layer_idx);
	}
	var layer_content = document.getElementById('layer-' + layer_idx + '-content');
	if (!layer_content) {
		layer_content = window.parent.document.getElementById('layer-' + layer_idx + '-content');
	}
	var layer_window = document.getElementById('layer-' + layer_idx + '-loader-contents');
	if (!layer_window) {
		layer_window = window.parent.document.getElementById('layer-' + layer_idx + '-loader-contents');
	}
	if (layer && layer.style
			&& layer_content && layer_content.innerHTML) {
		new Ajax.Request(layer_content.innerHTML, {
				method: 'get',
				onSuccess: function (transport) {
						layer_content.innerHTML = transport.responseText;
						if (layer_window) {
							var destination = parseInt(layer_window.style.left);
							var start = -1 * parseInt(layer_page_width);
							if (destination) {
								showLayer(layer_window, start, destination, false);
							}
						}
						if (success_callback) {
							success_callback(transport);
						}
						layer.style.display = 'block';
					},
				onFailure: function (transport) {
						layer.style.display = 'none';
						if (failure_callback) {
							failure_callback(transport);
						}
					}
			});
		return true;
	} else {
		return false;
	}
}

function showLayer(layer, current, destination, slide) {
	if (slide) {
		return slideLayer(layer, current, destination);
	} else if (layer && (current != destination)) {
		layer.style.left = '' + destination + 'px';
	}
}

function slideLayer(layer, current, destination) {
	var speed = 15;
	var interval = 30;
	if (layer && (current < destination)) {
		layer.style.left = '' + current + 'px';
		setTimeout(function() {
				slideLayer(layer, current + speed, destination);
			}, interval);
	}
}

/**
 * Close the layer
 */
function closeLayer(layer_idx) {
	var layer = document.getElementById('layer-' + layer_idx);
	if (!layer) {
		layer = window.parent.document.getElementById('layer-' + layer_idx);
	}
	if (layer && layer.style) {
		layer.style.display = 'none';
		return true;
	} else {
		return false;
	}
}

/**
 * Save a cookie remembering that this layer was dismissed
 */
function saveDismissedLayer(layer_idx, expire) {
	var expire_date = new Date();
	expire_date.setTime(expire * 1000);
	var layers = getDismissedLayers();
	if (!layers || !layers.push) {
		layers = [];	//make sure it is an array
	}
	if (layers.indexOf(layer_idx) == -1) {
		layers.push(layer_idx);
	}
	return setCookieValue('layer_loader', layers.join(','), expire_date);
}

/**
 * Get dismissed layers
 */
function getDismissedLayers() {
	var layers = [];
	var cookie_value = getCookieValue('layer_loader');
	if (cookie_value) {
		cookie_value = "" + cookie_value;
		layers = cookie_value.split(/,/);
	}
	return layers;
}


