function ucwords(str) {
	return (str+'').replace(/^(.)|\s(.)/g, function($1) { return $1.toUpperCase(); } );
}

function htmlspecialchars_decode(str) {
	str = str.replace(/(&gt;)/gi, '>');
	str = str.replace(/(&lt;)/gi, '<');
	str = str.replace(/(&#039;)/gi, '\'');
	str = str.replace(/(&quot;)/gi, '"');
	str = str.replace(/(&amp;)/gi, '&');
	
	return str;
}

function HumanReadableValue($value, $type, $default) {
	if ($value == null) { $value = $default; }
	switch ($type) {
		case "alignment":
			return ucwords($value);
		case "boolean":
			if (($value == "true") || ($value == 1)) {
				return "Yes";
			} else {
				return "No";
			}
		case "color":
			if ($value != '') {
				return "<div style=\"border: 1px solid #AAAAAA; width: 32px; height: 10px; background-color: #"+$value.toUpperCase()+";\"></div>";
			} else {
				return "<div style=\"border: 1px solid #AAAAAA; width: 32px; height: 10px; background-image: url('images/icon_valueTransparent.gif');\"></div>";
			}
		case "pixels":
			return $value+" pixels";
		case "position":
			return ucwords($value);
		case "repeat":
			switch ($value) {
				case "repeat-x": return "Repeat Horizontally";
				case "repeat-y": return "Repeat Vertically";
				case "repeat": return "Repeat Both";
				default: return "No Repeat";
			}
			return "No Repeat";
		default:
			return $value;
	}
}

function HumanReadableSelectValue($select) {
	result = null;
	options = $select.getElementsByTagName('option');
	for (i=0; i < options.length; i++) {
		if (options[i].getAttribute('value') == $select.value) {
			result = options[i].innerHTML;
		}
	}
	
	if (result != null) { 
		return result;
	} else {
		return $select.value;
	}
}

function ShowModalPopupPage(index) {
	i = 0;
	found = true;
	while (found) {
		tabpage = document.getElementById('ModalPopupPage'+i);
		tab = document.getElementById('ModalPopupTab'+i);
		if (tabpage != null) {
			if (i == index) {
				tabpage.style.display = '';
				if (ModalPopup.editorName != null) {
					Editor.init(document.getElementById(ModalPopup.editorName));
				}
			} else {
				tabpage.style.display = 'none';
			}
			if (tab != null) {
				if (i == index) {
					tab.className = 'selected';
					tab.setAttribute('class','selected');
				} else {
					tab.className = '';
					tab.setAttribute('class','');
				}
			}
			i++;
		} else { found = false; }
	}
}

function EditPopupListItem(index) {
	listItem = document.getElementById('ModalPopupListItem'+index);
	if (listItem != null) {
		i = 0;
		while (document.getElementById('ModalPopupListItem'+i) != null) {
			document.getElementById('ModalPopupListItemBtnEdit'+i).style.display = 'none';
			document.getElementById('ModalPopupListItemBtnReset'+i).style.display = 'none';
			i++;
		}
		document.getElementById('ModalPopupListItemCaption'+index).style.display = 'none';
		document.getElementById('ModalPopupListItemBtnApply'+index).style.display = '';
		document.getElementById('ModalPopupListItemBtnCancel'+index).style.display = '';
		document.getElementById('ModalPopupListItemEditor'+index).style.display = '';
		if (listItem.className == 'listItemHighlighted') {
			document.getElementById('ModalPopupListItemInput'+index).value = document.getElementById('ModalPopupListItemValue'+index).value;
		} else {
			document.getElementById('ModalPopupListItemInput'+index).value = document.getElementById('ModalPopupListItemDefault'+index).value;
		}
		ModalPopup.popupButtonCancel.style.display = "none";
		ModalPopup.popupButtonSubmit.style.display = "none";
	}
}

function CancelPopupListItem(index) {
	listItem = document.getElementById('ModalPopupListItem'+index);
	if (listItem != null) {
		i = 0;
		tempListItem = document.getElementById('ModalPopupListItem'+i)
		while (tempListItem != null) {
			document.getElementById('ModalPopupListItemBtnEdit'+i).style.display = '';
			if (tempListItem.className == 'listItemHighlighted') {
				document.getElementById('ModalPopupListItemBtnReset'+i).style.display = '';
			}
			i++;
			tempListItem = document.getElementById('ModalPopupListItem'+i)
		}
		document.getElementById('ModalPopupListItemCaption'+index).style.display = '';
		document.getElementById('ModalPopupListItemBtnApply'+index).style.display = 'none';
		document.getElementById('ModalPopupListItemBtnCancel'+index).style.display = 'none';
		document.getElementById('ModalPopupListItemEditor'+index).style.display = 'none';
		ModalPopup.popupButtonCancel.style.display = "";
		ModalPopup.popupButtonSubmit.style.display = "";
	}
}

function ApplyPopupListItem(index) {
	listItem = document.getElementById('ModalPopupListItem'+index);
	if (listItem != null) {
		listItem.setAttribute('class','listItemHighlighted');
		listItem.className = 'listItemHighlighted';
		if (document.getElementById('ModalPopupListItemInput'+index).tagName.toLowerCase() == "select") {
			document.getElementById('ModalPopupListItemCaption'+index).innerHTML = HumanReadableSelectValue(document.getElementById('ModalPopupListItemInput'+index));
		} else {
			document.getElementById('ModalPopupListItemCaption'+index).innerHTML = HumanReadableValue(document.getElementById('ModalPopupListItemInput'+index).value, document.getElementById('ModalPopupListItemType'+index).value, document.getElementById('ModalPopupListItemDefault'+index).value);
		}
		document.getElementById('ModalPopupListItemValue'+index).value = document.getElementById('ModalPopupListItemInput'+index).value;
		CancelPopupListItem(index);
	}
}

function ResetPopupListItem(index) {
	listItem = document.getElementById('ModalPopupListItem'+index);
	if (listItem != null) {
		listItem.setAttribute('class','listItem');
		listItem.className = 'listItem';
		document.getElementById('ModalPopupListItemCaption'+index).innerHTML = HumanReadableValue(null, document.getElementById('ModalPopupListItemType'+index).value, document.getElementById('ModalPopupListItemDefault'+index).value);
		document.getElementById('ModalPopupListItemValue'+index).value = '';
		document.getElementById('ModalPopupListItemBtnReset'+index).style.display = 'none';
	}
}

function DuplicatePopupListItem(index) {
	listItem = document.getElementById('ModalPopupListItem'+index);
	if (listItem != null) {
		alert(listItem.tagName);
	}
}