/**
 * Funkcje związane z zakładkami w trybie 'graphic' i 'designer' na inoce.pl
 * @author Adrian Wądrzyk
 * @link phobosx@interia.pl
 * @version 1.0
 * @since 2009-04-06
 */
function Bookmarks() {
	/**
	 * Zmienna do zliczania ilości otwartych formularzy do zmiany własciwości zakładki
	 * (potrzebne przy zamykaniu formularza aby wiedzieć kiedy zamknąć również szare tło) 
	 */
	this.bookmarkPropFormCounter = 0;

	/**
	 * Wyświetla formularz do dodawania nowej zakładki
	 */
	this.addNewBookmark = function() {
		$('newBookmark').style.display = "block";
		$('disableBackground').style.display = "block";	
	};
	
	/**
	 * Wyświetla komunikat potwierdzający czy dana zakładka ma zostac usunietą
	 * @param object zakładka która ma zostać usunięta
	 * @param doc_id identyfikator ukladu do którego nalezy zakładka
	 */
	this.deleteBookmark = function(id) {
		if (confirm("Czy napewno usunąć zakładke ?") === true) {	
			xajax_deleteBookmark(id);
		}
	};
	
	this.submitChangeBookmarkName = function (form) {
		if (this.checkPropForm(form) === true) {
			alert("Uzupełnij brakujące pola");
			return;
		}
		
		var names = [];
		var servedLangs = [];
		
		$A(form.elements).each( function (element){
			if (element.type == "text") {
				names[element.name] = element.value;
			} else if (element.type == "checkbox" && 
						element.disabled == "" && 
						element.checked) {
				servedLangs.push(element.name);
			}
		});
		
		xajax_changeBookmarkName(form.id.value, names, form.bookmarkLayoutId.value, servedLangs);
	};
	
	/**
	 * Wyświetla formularz do zmiany własciwości zakładki (nazwy, kolorów lini, czcionki)
	 * uprzednio ustawiając wszystkie pola na wartości wcześniej zapisane w bazie
	 * @param data tablica z własciwościami zakładki zapisanymi w bazie danych
	 */
	this.bookmarkProp = function(data, typeForm) {	
		var formName = "";	
		
		for (var item in data) {
//			console.log(item + " = |" + data[item] + "|");
			if (item.match("inactive")) {
				formName = "Inactive";
			} else if (item.match("active")){
				formName = "Active";
			} else {
				continue;
			}
			this.restorePropForm(document.forms[formName]);
			var temp;
			if (!item.match("Font")) {
				if (item.match("BookmarkBackground")) {
					var tempFormName = "ActiveBookmarkBackground";
					if (item.match("Color")) {
						temp = item.substr(0, item.indexOf("Color"));
						document.forms[tempFormName][temp + "Value"].value = this.ucfirst(data[item]);
					} else if (data[item] != ""){
						temp = item.substr(0, item.indexOf("Image"));
						document.forms[tempFormName][temp + "Value"].value = "";
						document.forms[tempFormName][temp + "Value"].disabled = "disabled";
						document.forms[tempFormName][temp + "Palette"].disabled = "disabled";
						document.forms[tempFormName][temp + "PictureValue"].disabled = "";
						document.forms[tempFormName][temp + "PictureValue"].value = this.ucfirst(data[item]);
						document.forms[tempFormName][temp + "PicturePalette"].disabled = "";
						document.forms[tempFormName][temp][1].checked = true;
					}
				} else if (!item.match("Line")) {
					if (item.match("Color")) {
						temp = item.substr(0, item.indexOf("Color"));
						document.forms[formName][temp + "Value"].value = this.ucfirst(data[item]);
					} else if (data[item] != ""){
						temp = item.substr(0, item.indexOf("Image"));
						document.forms[formName][temp + "Value"].value = "";
						document.forms[formName][temp + "Value"].disabled = "disabled";
						document.forms[formName][temp + "Palette"].disabled = "disabled";
						document.forms[formName][temp + "PictureValue"].disabled = "";
						document.forms[formName][temp + "PictureValue"].value = this.ucfirst(data[item]);
						document.forms[formName][temp + "PicturePalette"].disabled = "";
						document.forms[formName][temp][1].checked = true;
					}
				} else {
					if (item.match("NotSelect")) {
						item = item.substr(0, item.indexOf("NotSelect"));
						data[item] = data[item + "NotSelect"];
					}
					if (item.match("LineStyle")) {
						document.forms[formName][item].value = data[item];
					} else {
						document.forms[formName][item].value = this.ucfirst(data[item]);
					}
				}
			} else {
//				console.log(item + " = " + data[item]);
				if (item.match("NotSelect") && item.match("Color")) {
					item = item.substr(0, item.indexOf("NotSelect"));
					data[item] = data[item + "NotSelect"];
				}
				var tempId = item.substr(0, item.indexOf("Font") + 4);
				var tempName = item.substr(item.indexOf("Font") + 4);
				jQuery("#" + tempId).children().each(function() {
					if (this.name == tempName) {
						jQuery(this).val(data[item]);
					}
				});
			}
		}
		
		$('loadingCircle').style.display = 'none';
		$('bookmarkProp' + typeForm).style.display = "block";
	};	
	
	this.setBookmarkNames = function (data, mode, bookmarkSelected) {
		var counter = data.length - 1;
		var bookmarksList = $('bookmarksMenuList').getElementsByTagName("li");
		for (var i = bookmarksList.length; i--; ) {
			if (bookmarksList[i].id.length) {
				if (i == 1) {
					bookmarksList[i].style.marginLeft = "5px";
				}
				
				bookmarksList[i].getElementsByTagName("em")[0].innerHTML = "Brak Języka";
				
				if (mode == "" && data[counter].length === 0) {
					while(data[counter].length === 0) {
						counter--;
					}
				}
				
				if (data[counter].length > 0) {
					var name = data[counter];
//					if (name.length > 19
//							&& bookmarksList[i].id != "id_" + bookmarkSelected) {
//						name = name.substr(0, 8) + "..." + name.substr(-9);
//					}
					bookmarksList[i].getElementsByTagName("em")[0].innerHTML = name;
					bookmarksList[i].getElementsByTagName("em")[0].title = data[counter];
				}
				
				counter--;
			}
		}
	};
	
	/**
	 * Odpowiada za zmiene wartości w polu typu select w forularzu do zmiany własciwości zakładek
	 * (wiąże się z tym aktywacja lub deaktywacja pewnych pól tekstowych) 
	 * @param object pole formularza typu select, które wywołało funkcje
	 */
	this.selectChange = function(object) {
		var disable = "";
		if (object.value != "NotSelect") {
			disable = "disabled";
		}
		
		$A(document.getElementsByName(object.name + "NotSelect")).each(function(element) {
			if (element.id == object.id) {
				element.disabled = disable;			
			}
		});
	};
	
	/**
	 * Przywraca standartowe ustawienia formularza do zmiany własciwości zakładek
	 * @param form formularz do zmiany własciwości zakładek
	 */
	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 = [];
	};
	
	/**
	 * Sprawdza poprawności formularza do zmiany własciwości zakładek
	 * (głownie polega to na sprawdzeniu czy dane pole nie jest puste, a powinno być wypełnione
	 * i odznaczeniu takiego pola czerwonym obramowaniem ab uzytkownik wiedział które pole ma jescze wypelnić)
	 * @param form formularz do zmiany własciwości zakładek 
	 */
	this.checkPropForm = function(form) {
		var isError = false;	
		this.restorePropForm(form);
		
		$A(form.elements).each( function(element) {
			if (element.type != "hidden" && element.type != "radio") {
				if (element.type != "select-one" && element.disabled == ""){
					if (element.value == "") {
						element.setStyle({border: "solid 1px red"});
						isError = true;
					}
				}
			}
		});
		
		return isError;
	};
	
	this.servedLangsChange = function(object) {
		var layoutId = object.parentNode.parentNode.bookmarkLayoutId.value;
		object.next().next().disabled = !object.checked;
	};
	
	/**
	 * Ustawia odpowiednie pola tablicy propFormValue na dane z formularza zmiany zakładek,
	 * a nastepnie wywołuje metode xajax zapisująca wszystkie własciwości
	 * @param form formularz do zmiany własciwości
	 * @param doc_id identyfikator układu potrzebny do pozniejszego przeładowania (odświeżenia) strony
	 */
	this.submitPropForm = function(id, form, type, userId) {
		if (this.checkPropForm(form) === true) {
			alert("Uzupełnij pola zaznaczone na czerwono");
			return false;
		}

		var propFormValues = [];
		
		$('bookmarkProp' + type).style.display='none'; 
		this.bookmarkPropFormCounter--;
		
		$A(form.elements).each( function(element) {	
			if (element.type != "hidden" && element.type != "button" && element.type != "radio") {
				if (!element.name.match("Palette") && element.disabled == "") {
					if (element.parentNode.id != "") {
						propFormValues[element.parentNode.id + element.name] = element.value;
					} else {
						var temp;
						if (element.name == "inactiveBookmarkValue" || element.name == "activeBookmarkValue") {
							temp = element.name;
							temp = temp.substr(0, temp.indexOf("Value")) + "Color";
							propFormValues[temp] = element.value;
						} else if (element.name == "inactiveBookmarkPictureValue" || 
									element.name == "activeBookmarkPictureValue") {
							temp = element.name;
							temp = temp.substr(0, temp.indexOf("Picture")) + "Image";
							propFormValues[temp] = element.value;
						} else if (element.name == "activeBookmarkBackgroundValue") {
							temp = element.name;
							temp = temp.substr(0, temp.indexOf("Value")) + "Color";
							propFormValues[temp] = element.value;
						} else if (element.name == "activeBookmarkBackgroundPictureValue") {
							temp = element.name;
							temp = temp.substr(0, temp.indexOf("Picture")) + "Image";
							propFormValues[temp] = element.value;
						} else {
							propFormValues[element.name] = element.value;
						}
					}
				}
			}
		});
		
		if (this.bookmarkPropFormCounter === 0) {
			$('disableBackground').style.display = 'none';
			xajax_saveBookmarkProp(id , propFormValues, true, userId);
		} else {
			xajax_saveBookmarkProp(id , propFormValues, false, userId);
		}
		
	};
	
	/**
	 * Wywołuje metodę xajax tworzącą nową zakładke w bazie,
	 * (metoda ta odświeża pózniej aktualnie oglądany układ aby zmiany były automatycznie widoczne)
	 */
	this.submitNewBookmarkForm = function(form) {	
		if (this.checkPropForm(form) === true) {
			alert("Uzupełnij brakujące pola");
			return;
		}
		
		var names = [];
		
		$A(form.elements).each( function (element){
			if (element.type == "text" && element.disabled == "") {
				names[element.name] = element.value;
			}
		});
		
		xajax_createNewBookmark(form.bookmarkId.value, form.newBookmarkLayoutId.value, names);
	};
	
	/**
	 * Ładuje własciwości danej zakładki z bazy danych
	 * @param type zakładka której własciwości mają być pobrane
	 * @param close closeOtherForm zmienna bool-owska określająca czy zamknąć inne formularze 
	 */
	this.loadBookmarkProp = function(id, type, closeOtherForm) {
		if (this.bookmarkPropFormCounter === 0) {
			xajax_loadBookmarkProp(id, type);
			$('loadingCircle').style.display = 'block';
			$('disableBackground').style.display = "block";
		} else {
			$('bookmarkProp' + type).style.display = "block";
		}
		
		
		if (this.bookmarkPropFormCounter === 2 && closeOtherForm === true) {
			$('bookmarkProp' + type).style.display = "none";
			this.bookmarkPropFormCounter--;
		} else {
			this.bookmarkPropFormCounter++;
		}
	};
	
	/**
	 * Zamyka formularz do zmiany własciwości danej zakładki
	 * @prama type rodzaj zakładki (aktywna, nieaktywna)
	 */
	this.closeBookmarkProp = function(type) {
		$('bookmarkProp' + type).style.display = 'none';
		this.bookmarkPropFormCounter--;
		if (this.bookmarkPropFormCounter === 0) {
			$('disableBackground').style.display = 'none';
		}
	};
	
	/**
	 * Funkcja ustawia pierwszys znak wyrazu na duża litere
	 * (działa podobnie jak funkcja php 'ucfirst')
	 */
	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);
	};
 }

bookmarks = new Bookmarks();
