function addSelektorStyles() {
	var elements = $$('tr');
	elements.each(function(element) {
		var element_classes = $w(element.className);
		element_classes.each(function(tmp_class) {
			if (tmp_class.startsWith('pad-')) {
				tmp_class_parts = tmp_class.split('-');
				var tmp_styles = new Hash();
				if (tmp_class_parts.size() == 3) {
					if (tmp_class_parts[1] == 'h') {
						tmp_styles.set('paddingRight', tmp_class_parts[2] + 'px');
						tmp_styles.set('paddingLeft', tmp_class_parts[2] + 'px');
					} else if (tmp_class_parts[1] == 'v') {
						tmp_styles.set('paddingBottom', tmp_class_parts[2] + 'px');
						tmp_styles.set('paddingTop', tmp_class_parts[2] + 'px');
					} else if (tmp_class_parts[1] == 't') {
						tmp_styles.set('paddingTop', tmp_class_parts[2] + 'px');
					} else if (tmp_class_parts[1] == 'b') {
						tmp_styles.set('paddingBottom', tmp_class_parts[2] + 'px');
					} else if (tmp_class_parts[1] == 'l') {
						tmp_styles.set('paddingLeft', tmp_class_parts[2] + 'px');
					} else if (tmp_class_parts[1] == 'r') {
						tmp_styles.set('paddingRight', tmp_class_parts[2] + 'px');
					}
				} else if (tmp_class_parts.size() == 2) {
					tmp_styles.set('padding', tmp_class_parts[1] + 'px');
				}
				if (tmp_styles.size() > 0) {
					var tmp_cells = element.select('td');
					tmp_cells.each(function(tmp_cell) {
						if (tmp_cell.parentNode == element) {
							tmp_cell.setStyle(tmp_styles.toObject());
						}
					});
				}
			}
		});
	});
}

function addStyleFunctions() {
	var flyover_elements = $$('.flyover');
	flyover_elements.each(function(flyover_element) {
		Event.observe(flyover_element, 'mouseover', function (event) {
			highlightElement(this, 'flyover-highlighted');
		});
		Event.observe(flyover_element, 'mouseout', function (event) {
			dehighlightElement(this, 'flyover-highlighted');
		});
	});
}

function centerElementsVertical() {
	var elements = $$('.center-vertical');
	elements.each(function(child_element) {
		var parent_element = $(child_element.parentNode);
		var element_height = child_element.getHeight();
		var parent_height = parent_element.getHeight();

		child_element.style.position = 'relative';
		child_element.style.top = Math.floor((parent_height/2)-(element_height/2)) + 'px';
	});
}

function centerElementsVerticalAbsolute() {
	var elements = $$('.center-vertical-absolute');
	elements.each(function(element) {
		element.style.position = 'absolute';

		element.style.top = '50%';
		element.style.left = '50%';

		element.style.marginLeft = '-' + Math.floor(element.getWidth()/2) + 'px';
		element.style.marginTop = '-' + Math.floor(element.getHeight()/2) + 'px';
	});
}

function centerElementsVerticalViewport() {
	var elements = $$('.center-vertical-viewport');
	elements.each(function(element) {
		element.style.position = 'absolute';

		element.style.top = Math.floor(document.viewport.getHeight()/2) + 'px';
		element.style.left = Math.floor(document.viewport.getWidth()/2) + 'px';

		element.style.marginLeft = '-' + Math.floor(element.getWidth()/2) + 'px';
		element.style.marginTop = '-' + Math.floor(element.getHeight()/2) + 'px';
	});

	var elements = $$('.center-vertical-only');
	elements.each(function(element) {
		element.style.position = 'absolute';

		element.style.top = Math.floor(document.viewport.getHeight()/2) + 'px';
		//element.style.left = Math.floor(document.viewport.getWidth()/2) + 'px';

		//element.style.marginLeft = '-' + Math.floor(element.getWidth()/2) + 'px';
		element.style.marginTop = '-' + Math.floor(element.getHeight()/2) + 'px';
	});
}

function centerElementsVerticalViewportScroll() {
	var elements = jQuery('.center-vertical-viewport-scroll');
	elements.each(function(item) {
		centerElementVerticalViewportScroll(elements[item]);
	});
}

function centerElementVerticalViewportScroll(element) {
	var element = jQuery(element);

	//alert(jQuery(window).height()+' / '+jQuery(window).width()+' / '+jQuery(window).scrollTop());
	var cssObj = {
		'position': 'absolute',
		//'top': Math.floor(jQuery(window).height()/2) + jQuery(window).scrollTop() + 'px',
		//'left': Math.floor(jQuery(window).width()/2) + 'px',
		'top': (50 + jQuery(window).scrollTop()) + 'px',
		'left': '160px',
		'margin-left': '-' + Math.floor(element.width()/2) + 'px',
		'margin-top': '-' + Math.floor(element.height()/2) + 'px'
	}

	element.css(cssObj);
}

function elementIsVisibleOnPage(element) {
	element = $(element);

	var visible = true;

	if (element != null) {
		var parents = element.ancestors();
		parents.each(function(item) {
			if (item.visible() == false) {
				return false;
			}
		});
	}

	return visible;
}

function equalizeElements(same_height_class, discard_elements) {
	if (discard_elements == null) {
		discard_elements = new Array();
	}

	var elements = $$('.' + same_height_class);
	var same_heights_hash = new Hash();
	elements.each(function(element) {
		if (discard_elements.indexOf(element) == -1) {
			var element_classes = $w(element.className);
			element_classes.each(function(tmp_class) {
				element.style.height = 'auto';
				if (tmp_class.substr(0,20) == 'same-height-element-') {
					var same_heights_array = same_heights_hash.get(tmp_class);
					if (same_heights_array == null) {
						same_heights_array = new Array();
					}
					same_heights_array.push(element);
					same_heights_hash.set(tmp_class, same_heights_array);
				}
			});
		}
	});

	same_heights_hash.each(function(pair) {
		var heights = new Array();
		pair.value.each(function(element) {
			if (element.visible()) {
				heights.push(element.getHeight());
			}
		});

		var max_height = heights.max();
		pair.value.each(function(element) {
			if (discard_elements.indexOf(element) == -1) {
				var new_height = Math.max(0, max_height - getHeightDirt(element));
				debug('new height: ' + element.inspect() + ' ' + new_height);
				if (new_height > 0) {
					element.style.height = new_height + 'px';
				}
			}
		});
	});
}

function stretchElements() {
	var elements = $$('.stretch-height');
	elements.each(function(item) {
		item.style.height = $(item.parentNode).getHeight() + 'px';
	});
}
