function Widgets() {

	this.onClick = function(object, id) {
		$('loadingCircle').style.display = 'block';
		$('disableBackground').style.display = 'block';
		this.loadWidgetProp(object, id);
	};

	this.loadWidgetProp = function(type, layoutsThemeId) {
		xajax_getWidgetThemes(type, layoutsThemeId);
	};

	this.closeWidgetProp = function(type, openAnother, layoutsThemeId) {
		$('widgetProp' + type).style.display = "none";
		if (openAnother !== undefined) {
			this.loadWidgetProp(openAnother, layoutsThemeId);
		} else {
			$('disableBackground').style.display = "none";
		}
	};
	
	this.radioChange = function(object) {
		var formName = object.parentNode.name;
		if (formName === undefined) {
			formName = object.parentNode.parentNode.name;
		}
		
		var form = document.forms[formName];

		var nextName = "";
		if (object.value == "") {
			nextName = "Picture";
		}

		if (form[object.name + nextName + "Value"] !== undefined) {
			form[object.name + nextName + "Value"].disabled = "disabled";
		}

		if (form[object.name + object.value + "Value"] !== undefined) {
			form[object.name + object.value + "Value"].disabled	= "";
		}

		if (form[object.name + nextName + "Palette"] !== undefined) {
			form[object.name + nextName + "Palette"].disabled = "disabled";
		}

		if (form[object.name + object.value + "Palette"] !== undefined) {
			form[object.name + object.value + "Palette"].disabled = "";
		}
	};

	this.selectChange = function(object) {
		var formName = object.parentNode.parentNode.name;
		var disable = "";
		if (object.value != "NotSelect") {
			disable = "disabled";
		}

		if (object.parentNode.id != "") {
			if (document.forms[formName][object.name + "NotSelect"].length !== undefined) {
				$A(document.forms[formName][object.name + "NotSelect"]).each(function(element) {
					if (element.id == object.id) {
						element.disabled = disable;
					}
				});
			} else {
				document.forms[formName][object.name + "NotSelect"].disabled = disable;
				if (document.forms[formName][object.name + "NotSelect"].nextSibling.nextSibling !== undefined) {
					document.forms[formName][object.name + "NotSelect"].nextSibling.nextSibling.disabled = disable;
				}
			}
		} else {
			var len = object.name.indexOf("Value");
			document.forms[formName][object.name.substr(0, len) + "NotSelectValue"].disabled = disable;
			document.forms[formName][object.name.substr(0, len) + "NotSelectValue"].nextSibling.nextSibling.disabled = disable;
		}
	};

	this.restorePropForm = function(form) {
		$A(form.elements).each( function(element) {
			if (element.style.borderColor == "red red red red") {
				element.setStyle({border: "solid 1px gray"});
			}
		});

		this.propFormValues = [];
	};

	this.checkWidgetPropForm = function(form) {
		var isError = false;
		this.restorePropForm(form);

		$A(form.elements).each( function(element) {
			if (element.type == "radio" && !element.name.match("createNewWidgetTheme")) {
				if (element.checked === true) {
					if (form[element.name + element.value + "Value"].type == "select-one" && 
						form[element.name + element.value + "Value"].value == "NotSelect") {

						if (form[element.name + "NotSelectValue"].value == "") {
							form[element.name + "NotSelectValue"].setStyle({border: "solid 1px red"});
							isError = true;
						}
					} else if (form[element.name + element.value + "Value"].value == "") {
						form[element.name + element.value + "Value"].setStyle({border: "solid 1px red"});
						isError = true;
					}
				}
			} else if (element.parentNode.id != "") {
					if (element.type != "select-one" && element.disabled == ""){
						if (element.value == "") {
							element.setStyle({border: "solid 1px red"});
							isError = true;
						}
					}
			} else if (element.name.match("createNewWidgetTheme") && element.checked && element.value == "yes") {
				if (form.newWidgetThemeName.value == "") {
					form.newWidgetThemeName.setStyle({border: "solid 1px red"});
					isError = true;
				}
			} else if (element.type == "text" && element.disabled == "") {
				if (element.value == "") {
					element.setStyle({border: "solid 1px red"});
					isError = true;
				}
			}
		});

		return isError;
	};

	this.submitWidgetPropForm = function(form, userId) {

		if (this.checkWidgetPropForm(form) === true) {
			alert("Uzupełnij pola zaznaczone na czerwono");
			return false;
		}
		
		var name;
		var propFormValues = [];
		if (form.newWidgetThemeName && form.newWidgetThemeName.value) {
			name = form.newWidgetThemeName.value;
		} else {
			name = 49;
		}

		$A(form.elements).each( function(element) {
			if (element.type == "radio" && element.checked === true) {
				propFormValues[element.name + element.value] = form[element.name + element.value + "Value"].value;
//				console.log(element.name + element.value + " = " + form[element.name + element.value + "Value"].value);
			} else if (element.parentNode.id != "" && !element.name.match("Palette") && element.parentNode.id.match("Font")) {
				if (element.type == "select-one" && element.value != "NotSelect") {
					propFormValues[element.parentNode.id + element.name] = element.value;
//					console.log(element.id + element.name + " = " + element.value);
				} else if (element.type != "select-one" && element.disabled == ""){
					if (element.parentNode.id != "txt") {
						propFormValues[element.parentNode.id + element.name] = element.value;
//						console.log(element.id + element.name + " = " + element.value);
					}
				}
			} else if (element.name.match("bar") || element.name.match("grid") || 
						element.name.match("color")) {
				if (!element.name.match("Palette")) {
					var tempName = element.name;
					propFormValues[tempName.substr(0, tempName.indexOf("Value"))] = element.value; 
				}
			}
		});
		
		xajax_setWidgetTheme(name, propFormValues, form.name, userId);
	};

	this.submitDescWindowForm = function(form, id, userId) {
		if (this.checkWidgetPropForm(form) === true) {
			alert("Uzupełnij pola zaznaczone na czerwono");
			return false;
		}

		var propFormValues = [];

		for (var i = form.elements.length; i--; ) {
			var element = form[i];
			if (element.type != "radio" && element.name.indexOf("Palette") == -1 && 
				element.disabled == "" && element.type != "button") {
				if (element.parentNode.id) {
					if (element.parentNode.id == "widgetThemesFormDescriptionWindow") {
						continue;
					}
					propFormValues[element.parentNode.id + element.name] = element.value;
				} else {
					var name = element.name;
					name = name.substr(0, name.indexOf("Value"));
					propFormValues[name] = element.value;
				}
			}
		}
		
		

		xajax_setDescWindowTheme(id, propFormValues);
	};

	this.checkTextTranslations = function(form) {
		var isError = false;
		this.restorePropForm(form);

		$A(form.elements).each(function(element) {
			if (element.type == "checkbox" && element.checked === true) {
				var tempName = element.name + "Text";
				if ($(tempName).value == "") {
					$(tempName).setStyle({border: "solid 1px red"});
					isError = true;
				}
			}
		});

		return isError;
	};

	this.submitTextTranslations = function(id, form, lang, isFooter) {
		if (this.checkTextTranslations(form) === true) {
			alert("Uzupełnij pola zaznaczone na czerwono");
			return false;
		}

		$('widgetPropTextTranslate').style.display = "none";
		if (isFooter === false) {
			$('disableBackground').style.display = "none";
		}

		translations = [];

		$A(form.elements).each(function(element) {
			if (element.type == "textarea") {
				if (element.disabled != "") {
					translations[element.id.substr(0, 2)] = "<no/>" + element.getValue();
				} else {
					translations[element.id.substr(0, 2)] = element.getValue();
				}
			}
		});


		xajax_setTextTranslations(id, translations, lang, isFooter);
	};

	this.showFooterChange = function(value) {
		var footerForm	= document.forms.Footer;

		if (value === true) {
			value = "";
		} else {
			value = "disabled";
		}

		for (var i = 0; i < footerForm.elements.length; ++i) {
			var element = footerForm.elements[i];
			if (element.type != "button" && element.type != "checkbox") {
				element.disabled = value;
			}
		}
	};

	this.textTranslateCheckBox = function (input) {
		if (input.checked === true) {
			$(input.name + "Text").disabled = "";
		} else {
			$(input.name + "Text").disabled = "disabled";
		}
	};

	this.themeRadioChange = function(object) {
		var disable = "";

		if (object.value == "no") {
			disable = "disabled";
		}

		var form = object.parentNode.parentNode;
		form.newWidgetThemeName.disabled = disable;
	};

	this.loadWidgetThemeValues = function(type, data) {
//		console.log(type, document.forms[type]);
		var form = document.forms[type];
		var i;
		for (i = 0; i < form.elements.length; ++i) {
			if (form[i].type == "text" && !form[i].name.match("Palette")) {
				form[i].value = "";
				if (form[i].name.match("NotSelect")) {
					form[i].disabled = "disabled";
				}
			}
		}

		var item = "";
		for (item in data) {
//			console.log(item+ " = |" + data[item] + "|")
			if (item == "firstBoot") {
				continue;
			}
			var name;
			if (item.match("bar") || item.match("grid")) {
				form[item + "Value"].value = data[item];
			} else if (item.match("Font")) {
				var id		= item.substr(0, item.indexOf("Font") + 4);
				name	= item.substr(item.indexOf("Font")+ 4);
				var temp	= form.elements;

				for (i = temp.length; i--; ) {
					if (temp[i].name && !temp[i].name.match("Palette")) {
						if (item.match(temp[i].name) && temp[i].parentNode.id == id) {
							if (temp[i].type == "select-one") {
								temp[i].value = data[item];
							} else {
								temp[i].value = this.ucfirst(data[item]);
							}
							if (name.match("Family") && name.match("NotSelect")) {
								var tempName  = name.substr(0, name.indexOf("NotSelect"));
								var selects = $A(form.getElementsBySelector("Select"));

								for (var j = selects.length; j--; ) {
									if (selects[j].id == id && selects[j].name == tempName) {
										selects[j].value = "NotSelect";
									}
								}

								temp[i].disabled = "";
							}
						}
					}
				}
			} else {
				name  = item;
				var value = "";
				if (item.match("Picture")) {
					name  = item.substr(0, item.indexOf("Picture"));
					value = "Picture";
				}

				if (name == "color1Background" || name =="color2Background" ||
					name == "contentBackground") {
						form[name + "Value"].value = data[item];
						continue;
				}

				var inputArray = form[name];
				for (var z = 0; z < inputArray.length; ++z) {
					if (inputArray[z].value == value) {
						inputArray[z].checked = true;
						if (value == "Picture") {
							form[item + "Value"].disabled = "";
							form[name + "Value"].disabled = "disabled";
							if (form[item + "Palette"] !== undefined) {
								form[item + "Palette"].disabled = "";
							}
							if (form[name + "Palette"] !== undefined) {
								form[name + "Palette"].disabled = "disabled";
							}
						} else {
							form[item + "PictureValue"].disabled = "disabled";
							form[name + "Value"].disabled = "";
							if (form[item + "PicturePalette"] !== undefined) {
								form[item + "PicturePalette"].disabled = "disabled";
							}
							if (form[name + "Palette"] !== undefined) {
								form[name + "Palette"].disabled = "";
							}
						}
						if (form[item + "Value"].type != "hidden") {
							form[item + "Value"].value = this.ucfirst(data[item]);
						}
					}
				}
			}
		}
//		console.log("aaa");
		this.loadWidgetThemeStyle(data, true, form.name);
	};

	this.loadWidgetThemeStyle = function(data, isForm, additionalName) {
//		console.log(arguments);
		var objects;
		var main;
		if (isForm === true) {	
			objects = $$(".demo" + additionalName);
			main = objects[0];
			main.style.backgroundColor = $('canvas').style.backgroundColor;
		} else if (isForm == "") {
			additionalName = additionalName.charAt(0).toLowerCase() + 
								additionalName.substr(1);
			if (additionalName == "text") {
				additionalName = "Text";
			}
//			console.log(additionalName);
			objects = $$("." + additionalName);
//			console.log(objects);
			main = $A(objects);
		}
		var auxilary = function(id, style, value) {
//			console.log(arguments);
			
			var selector = "elements[i].style.";

			if (style.match("fontDecoration")) {
				style = "textDecoration";
			}

			var evaluate = function(elements, isArray) {
//				console.log(arguments);
//				if (value.match("Grafika")) {
//					value = value.substr(0, value.indexOf("Grafika")) + "g" +
//							value.substr(value.indexOf("Grafika") + 1);
//				}

				if (id.match("human") || id.match("calendar") || style == "src") {
					selector = "elements[i].";
				}
				

				if (isArray || isForm) {
					for (var i = elements.length; i--; ) {
//						console.log(elements[i]);
//						console.log(selector + style + "='" + value + "';");
						eval(selector + style + "='" + value + "';");
					}
				} else {
//					console.log(elements);
//					console.log("elements.style." + style + "='" + value + "';");
					eval("elements.style." + style + "='" + value + "';");
				}

			};

			if (main instanceof Array) {
//				console.log(main);
//				console.log(main.length);
				for (var k = 0; k < main.length; ++k) {
					if (main[k].parentNode.className.match("demo")) {
						continue;
					}
//					console.log(main[k], "id = ", id, k);
					if (main[k].className != id) {
//						console.log(main[k].getElementsByClassName(id));
						if (id == "body") {
							evaluate(main[k].parentNode);
						} else {
							evaluate(main[k].select("." + id), true);
						}
					} else {
//						console.log(main[k]);
						evaluate(main[k], false);
					}
				}
			} else {
				evaluate(main.select("." + id));
			}
		};

		var aux2 = function (name, value) {
			name = name.substr(0, name.indexOf("Background")) + "Color";	
			value = "%23" + value.substr(1);
			var img, src, before, after;
			if (main instanceof Array) {
				for (var k = 0; k < main.length; ++k) {
					if (main[k].parentNode.className.match("demo")) {
						continue;
					}
					img  = main[k].getElementsByClassName('imgOcena');
					
					for (var i = img.length; i--; ) {
						src = img[i].src;
						
						befor = src.substr(0, src.indexOf(name) + name.length + 1);
						after = src.substr(src.indexOf(name) + name.length + 10);
	
						img[i].src = befor + value + after;
					}
				}
			} else {
				img  = main.getElementsByClassName('imgOcena');
				
				for (var e = img.length; e--; ) {
					src = img[e].src;
					
					befor = src.substr(0, src.indexOf(name) + name.length + 1);
					after = src.substr(src.indexOf(name) + name.length + 10);
				
					img[e].src = befor + value + after;
				}
			}
		};
		
		for (var name in data) {
			var value = data[name];
//			console.log(name + " = " + data[name]);
			if (name == "firstBoot") {
				continue;
			}
			
			if (name.match("bar") || name.match("grid")) {
				aux2(name, value);
			} else if (name.match("Font")) {
				var style = "f" + name.substr(name.indexOf("Font") + 1);
				name = name.substr(0, name.indexOf("Font"));

				if (style.match("NotSelect")) {
					style = style.substr(0, style.indexOf("NotSelect"));
				}
				if (style.match("Color")) {
					style = "c" + style.substr(style.indexOf("Color") + 1);
				}

				if (style.match("Size")) {
					value = value + "px";
				}
				auxilary(name, style, value);
				if (name.match("description") && Prototype.Browser.IE) {
					auxilary("ieBugLabel", style, value);
				}
			} else if (name.toLowerCase().match("background")) {
//				console.log(name);
				var temp = name;
				name = name.substr(0, name.indexOf("Background"));
				if (name == "") {
					name = additionalName.charAt(0).toLowerCase() +
							additionalName.substr(1);
				}
				if (temp.match("Picture")) {
					value = "url(http://www.noce.pl/inoce/" + value + ")";
					if (name != "top" && name != "bottom" && name != "label" && 
						name != "headerll" && name != "middlell" && name != "footerll") {
						
						auxilary(name, "backgroundColor", "");
						auxilary(name, "backgroundImage", "");
						auxilary(name + "BackgroundImage", "visibility", "visible");
						auxilary(name + "BackgroundImage", "src", value.substr(4, value.length - 5));
						
						if (name == "left" || name == "right") {
							var height = $$('.content')[0].offsetHeight - 20;
							auxilary(name + "BackgroundImage", "height", height + "px");
						}
					} else {
						auxilary(name, "backgroundColor", "");
						auxilary(name, "backgroundImage", value);
					}
				} else {
					auxilary(name + "BackgroundImage", "src", "");
					auxilary(name, "backgroundImage", "");
					auxilary(name, "backgroundColor", value);
				}
				//console.log(name + " = " + value);
			} else if(name.match("Corner")) {
				if (name.match("Picture")) {
					name = name.substr(0, name.indexOf("Picture"));
					value = "url(http://www.noce.pl/inoce/" + value + ")";
					auxilary(name, "backgroundColor", "");
					auxilary(name, "backgroundImage", value);
				} else {
					auxilary(name, "backgroundImage", "");
					auxilary(name, "backgroundColor", value);
				}
//				console.log(name + " = " + value);
			} else if (name.match("Picture")) {
//				console.log(name);
				name = name.substr(0, name.indexOf("Picture"));
				auxilary(name, "src", "http://www.noce.pl/inoce/" + value);
				//console.log(name + " = " + value);
			} else if (name.match("human") || name.match("calendar")) {
				auxilary(name, "src", "http://www.noce.pl/inoce/grafika/" + name + "Default.gif");
			}
		}
	};

	this.submitAdditionalWidgets = function(form, positionTop, positionLeft) {
		var bookmarkId = form.bookmarkId.value;
		var data = [];
		data.category = form.category[form.category.selectedIndex].value;
		if (form.person) {
			data.person = form.person[form.person.selectedIndex].value;
		} else {
			data.person = -1;
		}
		data.widgetType = form.widgetType.value;
		data.format = form.format[form.format.selectedIndex].value;
		data.items = form.item[form.item.selectedIndex].value;
		data.kolejnosc = form.kolejnosc.value;
		data.version = form.version.value;	
		data.columnCount = form.columnCount[form.columnCount.selectedIndex].value;
		
		xajax_loadWidget(bookmarkId, "additionalWidgets", positionTop, positionLeft, data);
	};
	
	this.ucfirst = function (str) {
		var f;
		if (str.indexOf("grafika") == -1 && str.indexOf("Grafika") == -1) {
			f = str.charAt(0).toUpperCase();
		} else {
			f = "g";
		}
		return f + str.substr(1);
	};
}

widgets = new Widgets();

