//------------------------------------------------------------------------
//------------------------------------------------------------------------
STATICS_PATH = '';

Minimizer = {
		
};

Minimizer.MINIMIZE_FILE_NAME = 'minus';
Minimizer.MAXIMIZE_FILE_NAME = 'plus';

Minimizer.PATH_TO_IMAGES = 'images/';

Minimizer.EXT = '';
//images (change src)
Minimizer.IMAGE_MAX_MIN = '_image_';
//ctrl elements 
Minimizer.ELEMENT_MAX_MIN = '_minimize_';

Minimizer.getMinimizeUrl = function() {
	return STATICS_PATH + Minimizer.PATH_TO_IMAGES + Minimizer.MINIMIZE_FILE_NAME;
}

Minimizer.getMaximizeUrl = function() {
	return STATICS_PATH + Minimizer.PATH_TO_IMAGES + Minimizer.MAXIMIZE_FILE_NAME;	
}

Minimizer.minimizeImage = function(image) {
	//define EXT for all minimize/maximize images on this page
	if(Minimizer.EXT == null || Minimizer.EXT == '') {
		Minimizer.EXT = image.src.substring(image.src.lastIndexOf('.'));
	}
	if(image.src.indexOf(Minimizer.getMinimizeUrl()) >= 0) {
		image.src = Minimizer.getMaximizeUrl() + Minimizer.EXT;
	} else {
		image.src = Minimizer.getMinimizeUrl() + Minimizer.EXT;
	}
}

Minimizer.minimize = function(el) {
	el = $(el);
	if(!el) return;
	if(Element.visible(el)) {
		Element.hide(el);
	} else {
		Element.show(el);
	}
}

Minimizer.minimizeByKey = function(key) {
	var el = Minimizer.elements[key];
	if(!el) return;
	if(el.ctrlElements.length > 0) {
		el.ctrlElements.each(function(value, index) {
			value.onclick();
		});
	} else {
		el.imageElements.each(function(value, index) {
			value.onclick();
		});
	}
}

Minimizer.createElementsAndEvents = function() {
	for(key in Minimizer.elements) {
		var el = Minimizer.elements[key];
		
		if(el && !Object.isFunction(el)) {
			el.ctrlElements.each(function(value, index) {
				value.style.cursor = 'pointer';
				value._key = key;
				value._imageElements = el.imageElements;
				value.onclick = function() {
					Minimizer.minimize(this._key);
					this._imageElements.each(function(value, index) {
						Minimizer.minimizeImage(value);
					});
				}
			});
			el.imageElements.each(function(value, index) {
				value.style.cursor = 'pointer';
				value._key = key;
				Event.observe(value, "click", function(e) {
					Minimizer.minimize(this._key);
					Minimizer.minimizeImage(value);
					e.stop();
				});
			});
		}
	}
};

Minimizer.elements = {};

Minimizer.init = function(root) {
	if(!root || !$(root)) {
		var closedElements = document.getElementsByTagName('*');
		for(var i = 0; i < closedElements.length; i++) {
			Minimizer._handleElement(closedElements[i]);
		}
	} else {
		var initByRoot = function(rootEl) {
			Minimizer._handleElement(rootEl);
			if(rootEl.hasChildNodes()) {
				for(var i = 0;i < rootEl.childNodes.length; i++) {
					initByRoot(rootEl.childNodes[i]);
				}
			}
		};
		initByRoot($(root));
	}
	Minimizer.createElementsAndEvents();
}

Minimizer._handleElement = function(closedElement) {
	var id = closedElement.id;
	if(!id) return;
	//with images MINIMIZE_SRC/MAXIMIZE_SRC
	if(id.indexOf(Minimizer.IMAGE_MAX_MIN) == 0) {
		var el = Minimizer._createElement(id, Minimizer.IMAGE_MAX_MIN);
		el.imageElements[el.imageElements.length] = $(id);
	//general using
	} else if (id.indexOf(Minimizer.ELEMENT_MAX_MIN) == 0) {
		var el = Minimizer._createElement(id, Minimizer.ELEMENT_MAX_MIN);
		el.ctrlElements[el.ctrlElements.length] = $(id);
	}
}

Minimizer._createElement = function(id, type) {
	var key = id.substring(type.length, id.length);
	var el = Minimizer.elements[key];
	if(!el) {
		el = {};
		Minimizer.elements[key] = el; 
		el.ctrlElements = [];
		el.imageElements = [];
	}
	return el;
}