// core PhpMyWebAdmin version 2.0
	// #define
	var MAIN_PMW_MAIN_JS = 1;
	// public variables
	var pubBoSave = false;
	var pubXmlHttp;
	var pubXmlHttpSave;
	var pubDivInfo;
	var pubDivBody;
	var pubDivLoad;
	var pubDivSave;
	var pubIntervalId;
	var pubBlackBck;
	var pubDivToolTip;
	var pubIE = null;
	var pubXY = new Array();;
	// ------------------------------------
	//
	// calls Ajax page creation
	//
	function pmw_callPage(pageName) {
		// validates need for saving
		if(! pmw_checkSave()) return; 
		this.pmw_callAjax("pmw_createPage","page=" + pageName,"_php_ajax/retrive_page.php",true,"Laddar in...");
	}
	//
	// checks and asks for saving information
	//
	function pmw_checkSave() {
		if(pubBoSave) {
			boOK = window.confirm("Formulär är inte sparad\nVill ni fortsätta med upplandning av ny sidan");
			if(!boOK) return false;
		}
		pubBoSave = false; 
		return true;
	}
	//
	// default Ajax caller
	//
	function pmw_callAjax(formRetrived,postValues,calledFile,boAsynch,info) {
		if(! boAsynch) boAsynch = true;
		if(info != "" && ! info) info = "Loading ...";
		if(info != "") this.pmw_showLoadingInfo(info);
		pubXmlHttp=pmw_getXmlHttpObject(eval(formRetrived));
		pubXmlHttp.open("POST", calledFile , boAsynch);
		pubXmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
		pubXmlHttp.send(postValues);
	}
	//
	// save Ajax caller
	//
	function pmw_callAjaxSave(formRetrived,postValues,calledFile,boAsynch) {
		if(! boAsynch) boAsynch = true;
		this.pmw_showLoadingInfo("Saving ...");
		pubXmlHttpSave=pmw_getXmlHttpObject(eval(formRetrived));
		pubXmlHttpSave.open("POST", calledFile , boAsynch);
		pubXmlHttpSave.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
		pubXmlHttpSave.send(postValues);
	}
	// ------------------------------------
	// 				Ajax
	// ------------------------------------
	//
	// Ajax's HttpRequest object
	//
	function pmw_getXmlHttpObject(handler) { 
		var objXmlHttp=null;
	
		if (navigator.userAgent.indexOf("Opera")>=0) {
			alert("This page doesn't work in Opera") 
			return; 
		}
		// Microsoft
		if (navigator.userAgent.indexOf("MSIE")>=0) { 
			var strName="Msxml2.XMLHTTP";
			if (navigator.appVersion.indexOf("MSIE 5.5")>=0) {
				strName="Microsoft.XMLHTTP";
			} 
			try { 
				objXmlHttp=new ActiveXObject(strName);
				objXmlHttp.onreadystatechange=handler ;
				return objXmlHttp;
			} 
			catch(e) { 
				alert("Error. Scripting for ActiveX might be disabled") ;
				return ;
			} 
		} 
		// Mozilla
		if (navigator.userAgent.indexOf("Mozilla")>=0) {
			objXmlHttp=new XMLHttpRequest();
			objXmlHttp.onload=handler;
			objXmlHttp.onerror=handler ;
			return objXmlHttp;
		}
	} 
	//
	// creates page from Ajax return values
	//
	function pmw_createPage() {
		if (pubXmlHttp.readyState==4 || pubXmlHttp.readyState=="complete") { 
			var sRes = pubXmlHttp.responseText;
			pmw_hideLoadingInfo();
			pmw_hideInfo();
			if(sRes.substr(0,2) !="OK") { // ajax returned error
				var sInfo = '<strong>FEL</strong><br />';
				sInfo += sRes;
				scrollTop();
				pmw_showInfo(sInfo);
			} else if (sRes.substr(0,5) == "OKcmd") {
				var nI = sRes.indexOf(";");
				var sCmd = sRes.substr(6,nI-6);
				var aCmd = sCmd.split(":");
				var i;
				var boLoaded = false;
				for(i=0;i<aCmd.length;i++) {
					if(aCmd[i].substr(0,5) == "inDiv") {
						var sDiv = aCmd[i].substr(6,aCmd[i].length-7);
						document.getElementById(sDiv).innerHTML = sRes.substr(nI+1);
						boLoaded = true;
					} else {
						if(aCmd[i].trim() != "") {
							var cmd = aCmd[i].replace(/`/g,"'");
							eval(cmd);
						}
					}
				}
				if(!boLoaded) {
					if(! pubDivBody) pubDivBody = document.getElementById("pmw_body");
					pubDivBody.innerHTML = "<div style='left:70px;top:10px;position:relative;float:left;'>" + sRes.substr(nI+1)+"</div>";
				}
			} else { // ajax returned valid output
				if(! pubDivBody) pubDivBody = document.getElementById("pmw_body");
				pubDivBody.innerHTML = "<div style='left:70px;top:10px;position:relative;float:left;'>" + sRes.substr(3) + "</div>";
				
			}
		} 
	}
	//
	// class Pmw_retriveDbXml, retrives XML formated data
	//
	function Pmw_retriveDbXml(formRetrived,tableName,sql,pageNo,pageSize) {
		this.tableName = tableName;
		this.sql = sql;
		this.pmwSearch = null;
		this.pageNo = 0; if(pageNo != undefined) this.pageNo = pageNo;
		this.pageSize = 0; if(pageSize != undefined) this.pageSize = pageSize;
		this.limit = ""; 
		this.retriveXml = function(doNotShowLoadingInfo) {
			if(! this.tableName) throw "Pmw_retriveDbXml.retriveXml() tableName is not defined";
			if(this.pageNo > 0 && this.pageSize >0) this.limit = ((this.pageNo-1) * this.pageSize) + "," + (this.pageSize);
			var postValues = "tableName=" + this.tableName + "&limit=" + this.limit;
			postValues += "&sql=" + Base64.encode(sql);
			if(this.pmwSearch) postValues +="&where=" + Base64.encode(this.pmwSearch.createWhereQuery());
			var loadingInfo = "Loading ...";
			if(doNotShowLoadingInfo) loadingInfo = "";
			pmw_callAjax(formRetrived,postValues,"_php_ajax/retrive_db_xml.php",true,loadingInfo) 
		}
		this.retriveRowXml = function(row) {
			if(! this.tableName) throw "Pmw_retriveDbXml.retriveXml() tableName is not defined";
			if( ! row) return;
		}
	}
	//
	// class Pmw_search, encapsulates all search paremeters for any SQL query or table
	//
	function Pmw_search(searchFields) {
		this.searchFields = searchFields;	
		this.value = "";
		this.createWhereQuery = function(value) {
			if(value) this.value = value;
			if(! this.value) return "";
			var i;
			var sWhere = "(";
			for(i=0;i<this.searchFields.length;i++) {
				if(i > 0) sWhere += " OR ";
				sWhere += "(" + this.searchFields[i] + " LIKE '%" + this.value + "%') "; 
			}
			sWhere += ")";
			return sWhere;
		}
	}
	// ------------------------------------
	
	// ------------------------------------
	// 				UI
	// ------------------------------------
	//
	// shows Loading...
	//
	function pmw_showLoadingInfo(info) {
		if(! pubDivToolTip) return;
		this.pmw_hideLoadingInfo();
		//pubDivLoad.style.display = "block";
		//pubDivLoad.innerHTML = info;
		if(pubIE == null) pubIE = document.all?true:false;
		if(pubIE) {
			pmw_showToolTipMoveMouse(null);
		} else {
			pubDivToolTip.style.left = (pubXY[0]+15) + "px";
			pubDivToolTip.style.top = (pubXY[1]+20) + "px";
		}
		pubDivToolTip.style.visibility = "visible";
		pubDivToolTip.innerHTML = info;
		document.onmousemove = pmw_showToolTipMoveMouse;
	}
	function pmw_showToolTipMoveMouse(e) {
		pmw_getMouseXY(e);
		pubDivToolTip.style.left = (pubXY[0]+15) + "px";
		pubDivToolTip.style.top = (pubXY[1]+20) + "px";
	}

	//
	// hides pubDivLoad
	//
	function pmw_hideLoadingInfo() {
		if(! pubDivToolTip) pubDivToolTip = document.getElementById("tool_tip");
		if(! pubDivToolTip) return;
		//if(document.onmousemove == null) return;
		if(pubIE) {
			document.onmousemove = null;
		} else {
			document.onmousemove = pmw_getMouseXY;
		}
		pubDivToolTip.style.visibility = "hidden";
	}
	//
	// shows info including errors
	//
	function pmw_showInfo(info) {
		if(! pubDivInfo) return;
		pubDivInfo.style.display = "block";
		pubDivInfo.innerHTML = info;
	}
	//
	// hides pubDivLoad
	//
	function pmw_hideInfo() {
		if(! pubDivInfo) pubDivInfo = document.getElementById("pmw_info");
		if(! pubDivInfo) return;
		pubDivInfo.style.display = "none";
	}
	//
	// shows save info
	//
	function pmw_showSaved() {
		if(!pubDivSave) pubDivSave = document.getElementById("pmw_savedInfo");
		if(!pubBlackBck) pubBlackBck = document.getElementById("pmw_blackBck");
		var oScroll = tools_getScrollXY();
		var oSize = tools_getWindowSize();
		pubDivSave.style.display = "block";
		pubBlackBck.style.display = "block";
		pubDivSave.style.top = String((oSize[1]/2-60) + oScroll[1]) + "px";
		pubDivSave.style.left = String((oSize[0]/2-30) + oScroll[0]) + "px";
		pubBlackBck.style.width = oSize[0] + "px";
		pubBlackBck.style.height = oSize[1] + "px";
		pubBlackBck.style.top = oScroll[1] + "px";
		pubBlackBck.style.left = oScroll[0] + "px";
		clearInterval(pubIntervalId);
		pubIntervalId = setInterval(pmw_hideSaved,1300);
	}
	//
	//hides save info
	//
	function pmw_hideSaved() {
		if(!pubDivSave) pubDivSave = document.getElementById("pmw_savedInfo");
		if(!pubBlackBck) pubBlackBck = document.getElementById("pmw_blackBck");
		pubDivSave.style.display = "none";
		pubBlackBck.style.display = "none";
		clearInterval(pubIntervalId);
	}
	//
	// clears div's content
	//
	function pmw_clearDiv(divName) {
		var aS = divName.split(";");
		var i;
		for(i=0;i<aS.length;i++) {
			document.getElementById(aS[i]).innerHTML = "";
		}
	}
	function pmw_createFormCopy(id,table,pageName) {
		if(! pmw_checkSave()) return; 
		this.pmw_callAjax("pmw_createPage","createCopy=1&id=" + id + "&dbTable=" + table + "&page=" + pageName,"_php_ajax/retrive_page.php",true,"Loading ...");
		
	}
	// ------------------------------------
	// 				Form
	// ------------------------------------
	//
	// checks and submits form
	//
	function pmw_checkAndSubmit(frmName,divId,additionalValues) {
		if(! divId) {
			//throw "pmw_checkAndSumbit - divId is not defined";
			//return;
		}
		if(! frmName) {
			throw "pmw_checkAndSumbit - form name is not defined";
			return;
		}
		if(! this.pmw_validateControls(frmName)) return;
		// creates values and sends request
		var values = this.pmw_createValuesFromForm(frmName);
		if(additionalValues) values += "&" + additionalValues;
		this.pmw_callAjaxSave("pmw_formSavedRetrived",values,"../prg/_update_form.php",true);
	}
	//
	//	
	//
	function pmw_formSavedRetrived() {
		if (pubXmlHttpSave.readyState==4 || pubXmlHttpSave.readyState=="complete") { 
			var sRes = pubXmlHttpSave.responseText;
			pmw_hideLoadingInfo();
			pmw_hideInfo();
			var sInfo = "";
			if(sRes.substr(0,2) =="OK") { // ajax returned OK
				//sInfo = '<div class="pmw_podatakUspesnoSnimljen">Podatak uspešno snimljen</div>';
				var objId = document.getElementById("id");
				var nID = sRes.split(";")[2];
				if(objId && nID > 0) {
					objId.value = nID;
				} else {
					pubDivBody.innerHTML = "";	
				}
				pmw_showSaved();
				if(pubDataTable) pubDataTable.dataTableCreator.dataSaved();
				pubBoSave = false;
			} else if(sRes.substr(0,5) == "ERROR") { // ERROR returned
				sInfo = '<strong>FEL</strong><br />';
				var aR = sRes.split(";");
				sInfo += aR[1] + "</div>";
				scrollTop();
				pmw_showInfo(sInfo);
			} else { // unknown return
				sInfo = "nedefinisana poruka<br>" + sRes;
				scrollTop();
				pmw_showInfo(sInfo);
			}
		} 
		
	}
	function pmw_deleteData(id,tableName) {
		pmw_callAjax(pmw_dataDeleted,"id=" + id + "&tableName=" + tableName,"_php_ajax/delete_db.php",true,"Deleting data ...");	
	}
	function pmw_dataDeleted() {
		if (pubXmlHttp.readyState==4 || pubXmlHttp.readyState=="complete") { 
			pmw_hideLoadingInfo();
			pmw_hideInfo();
			var sRes = pubXmlHttp.responseText;
			if(sRes.substr(0,2) =="OK") { // ajax returned OK
				sInfo = '<div class="pmw_podatakUspesnoSnimljen">Podatak uspešno ORBISAN</div>';
				pubDataTable.dataTableCreator.refreshTable();
			} else {
				sInfo = '<strong>FEL</strong><br />';
				sInfo += sRes;
			}
			pmw_showInfo(sInfo);
		}
	}
	//
	// parses form and creates POST string variable
	//
	function pmw_createValuesFromForm(frmName) {
		var frmOb = document.forms[frmName];
		var num_rec = frmOb.length;
		var sRet = "ajax=1&frmName=" + frmName;
		for(i=0; i< num_rec;i++) {
			my_control = frmOb.elements[i];
			if(my_control.name.substr(0,9) == "check_box") {
				if(! my_control.checked) my_control.value = "";
			}
			sRet += "&" + my_control.name + "=" + my_control.value.trim().replace(/&/g,"[amp]").replace(/\n/g,"<br />").replace(/\+/g,"[pp]");
		}
		return sRet;
	}
	//
	// called when any of the controls
	// have been changed
	//
	function pmw_valueChanged() {
		pubBoSave = true;
		try {
			document.getElementById("buttSave").disabled = false;
		} catch (ob) {}
	}
	//
	// validate Div's controls
	//
	function pmw_validateControls(frmName) {
		var frmOb = document.forms[frmName];
		var num_rec = frmOb.length;
		var sError = ""; 
		var first_control;
		var first_error = "";
		// returns control's bckColor to
		// previous default color
		for(i=0; i< num_rec;i++) {
			my_control = frmOb.elements[i];
			my_control.style.backgroundColor = "";
		}
		no_err = 1;
		// validates req input
		for(ii=0; ii< num_rec;ii++) {
			my_control = frmOb.elements[ii];
			n_lastIndex = my_control.name.lastIndexOf("__");
			if (n_lastIndex > -1) {
			 if( my_control.name.substr(n_lastIndex+2,3) == "req") {
				if(pmw_isEmpty(my_control)) {
			 		my_control.style.backgroundColor = "#FFFFE1";
					if(sError == "") {
						first_control = my_control;
						first_error = "empty_field";
					}
					sError = sError + "- " + pmw_returnFieldName(my_control.name) + "\n";
					no_err++;
				}
			 }
			}
			if(no_err > 5) break;
		 }
		if(sError != "") {
			pmw_stopSubmiting(sError,first_control,first_error);
			return false;
		}
		
		// validates req input
		for(ii=0; ii< num_rec;ii++) {
			my_control = frmOb.elements[ii];
			n_lastIndex = my_control.name.lastIndexOf("__");
			if (n_lastIndex > -1) {
				switch(pmw_returnFieldType(my_control.name)) {
					case "emailfield":
						if(my_control.value.trim() != "" && pmw_isBadEmail(my_control)) {
							my_control.style.backgroundColor = "#FFFFE1";
							if(sError == "") {
								first_control = my_control;
								first_error = "bad_email";
							}
							sError = sError + "- " + pmw_returnFieldName(my_control.name) + "\n";
							no_err=6;
						}
					 break;
					case "numeric_text_box":
						if(my_control.value.trim() != "" && pmw_isBadNumericTextBox(my_control)) {
							my_control.style.backgroundColor = "#FFFFE1";
							if(sError == "") {
								first_control = my_control;
								first_error = "bad_numeric_field";
							}
							sError = sError + "- " + pmw_returnFieldName(my_control.name) + "\n";
							no_err=6;
						}
					break;
				}
			}
			if(no_err > 5) break;
		 }
		if(sError != "") {
			pmw_stopSubmiting(sError,first_control,first_error);
			return false;
		}
		return true;
	}
	//
	// clears all controls in the given form
	//
	function pmw_clearForm(frmName) {
		var frmOb = document.forms[frmName];
		// validates req input
		var i;
		var sFieldType;
		var dToday = new Date();
		for(i=0; i< frmOb.length;i++) {
			my_control = frmOb.elements[i];
			sFieldType = pmw_returnFieldType(my_control.name);
			switch(sFieldType) {
				case undefined:
					break;
				case "picture_box":
					// ocistri sliku
					var sHi="pic_" + pmw_returnFieldDbName(my_control.name);
					document.getElementById(sHi).value = "";
					var objIFrame = document.getElementById(pmw_returnFieldDbName(my_control.name));
					objIFrame.src = objIFrame.src;
					break;
				case "dmy_date_day":
					var nDay = (dToday.getDate());
					var k;
					for(k=0;k<my_control.options.length;k++) {
						if(my_control.options[k].value == nDay) {
							my_control.selectedIndex = k;
							break;
						}
					}
					break;
					break;
				case "dmy_date_month":
					var nMonth = (dToday.getMonth()+1);
					var k;
					for(k=0;k<my_control.options.length;k++) {
						if(my_control.options[k].value == nMonth) {
							my_control.selectedIndex = k;
							break;
						}
					}
					break;
				case "dmy_date_year":
					var nYear = (dToday.getYear());
					var k;
					for(k=0;k<my_control.options.length;k++) {
						if(my_control.options[k].value == nYear) {
							my_control.selectedIndex = k;
							break;
						}
					}
					break;
					break;
				default:
					my_control.value = "";
					break;
			}
		}

	}
	//
	// validates if control is empty
	// depends on field type
	//
	function pmw_isEmpty(my_control) {
		var sFieldType = pmw_returnFieldType(my_control.name);
		switch(sFieldType){
			case "httpfield":
				if(my_control.value.trim() == "" || my_control.value.trim() == "http://") return 1;
				break;
			case "menubox":
				if(my_control.options[my_control.selectedIndex].value.trim() == "") return 1;
				break;
			default:
				if(my_control.value.trim() == "") return 1;
		}
		return 0;
	}
	//
	// validates email field
	//
	function pmw_isBadEmail(my_control) {
		boRet = 0;
		if(my_control.value.indexOf("@") < 0) boRet += 1;
		if(my_control.value.indexOf(".") < 0) boRet += 1;
			return boRet;
	}
	//
	// validates numeric text box field
	//
	function pmw_isBadNumericTextBox(my_control) {
		nLength = my_control.value.length;
		var ii, c_value, n_value;
		for(ii = 0; ii < nLength ; ii++) {
			c_value = my_control.value.substr(ii,1);
			n_value = 0 + c_value;
			if( ! (c_value == "0" || n_value>0 || c_value == " " || c_value == "/" || c_value == "\\" || c_value == ".")) {
				return 1;
			}
		}
		return 0;
	}
	//
	// returns fieldType from control's name
	//
	function pmw_returnFieldType(name) {
		my_name =  pmw_returnSomeFormFieldName(name,0);
		return my_name;
	}
	//
	// returns fieldName from control's name
	//
	function pmw_returnFieldName(name) {
		my_name =  pmw_returnSomeFormFieldName(name,1);
		my_name = my_name.replace(/_/g," ");
		return my_name;
	}
	//
	// returns db column name from control's name
	//
	function pmw_returnFieldDbName(name) {
		my_name =  pmw_returnSomeFormFieldName(name,2);
		return my_name;
	}
	//
	// return field command from control's name
	//
	function pmw_returnFieldCommand(name) {
		my_name =  pmw_returnSomeFormFieldName(name,3);
		return my_name;
	}

	//
	// returns from control's name type of the
	// control depending on n_type parameter
	// n_type ::	
	//		0 - FieldType
	//		1 - FieldName
	//		2 - DbColumnName
	//		3 - FieldCommand
	//
	function pmw_returnSomeFormFieldName(name, n_type) {
		var nFirstIndex = 0; 
		var nSecondIndex = -2;
		sRet = ""; 
		for(i=0; i<=n_type; i++) {
			nFirstIndex = nSecondIndex;
			nSecondIndex = name.indexOf("__",nFirstIndex+2);
			if(nSecondIndex === -1 && nFirstIndex <= 0) {
				return;
				break;
			}
		}
		if(nSecondIndex > -1) {
			sRet = name.substr(nFirstIndex+2,nSecondIndex-nFirstIndex-2);
		} else {
			sRet = name.substr(nFirstIndex+2);
		}
			re = / /g;             
			sRet = sRet.replace(re, "_");    
			return sRet;
	}
	//
	// changes bckColor for control
	//
	function pmw_showErrorField(controlId) {
		try {
			document.getElementById(controlId).style.backgroundColor = "#FFFFE1";
		} catch(e) {}
	}
	//
	// sets focus to the control
	//
	function pmw_setFocus(controlId) {
		try {
			document.getElementById(controlId).focus();
		} catch(e) {}
	}
	//
	// alerts about error
	//
	function pmw_stopSubmiting(sError,my_control, s_err_type) {
		switch(s_err_type) {
			case "empty_field":
			 alert("FEL ! obligatorisk fält" + "\n===============\n" + sError +"===============\n" + "fält markerade med  * (stjärna) är obligatoriska för ifyllnad");
			 break;
			case "bad_email":
			 alert("FEL ! epost fält är inte rätt ifyllt" + "\n===============\n" + sError +"===============\n");
			 break;
			case "bad_numeric_field":
			 alert("FEL ! fält tar emot endast numeriska värde" + "\n===============\n" + sError +"===============\n" + "");
			 break;
		}
			 my_control.style.backgroundColor = "#FFFFE1";
			 try {
			 	my_control.focus();
			 } catch(obErr) {}
	}
	// ------------------------------------
	// 				Tools
	// ------------------------------------
	String.prototype.trim = function() {
	return this.replace(/^\s+|\s+$/g,"");
	}
	String.prototype.ltrim = function() {
		return this.replace(/^\s+/,"");
	}
	String.prototype.rtrim = function() {
		return this.replace(/\s+$/,"");
	}
	//
	// debug
	//
	function pmw_debug(sText,append) {
		ob = document.getElementById("debug");
		ob.style.display = "block";
		if(append) {
			ob.innerHTML += "<hr>" + sText;
		} else {
			ob.innerHTML = sText;
		}
	}
	//
	// go to URL
	//
	function pmw_url(url) {
		window.location.href = url;	
	}

	// mouse move;
	function pmw_getMouseXY(e) {
		try {
		if (pubIE) { 
			tempX = event.clientX + document.body.scrollLeft;
			tempY = event.clientY + document.body.scrollTop;
		} else {  
			tempX = e.pageX;
			tempY = e.pageY;
		}  
		// catch possible negative values in NS4
		if (tempX < 0) tempX = 0;
		if (tempY < 0) tempY = 0;
		pubXY[0] = tempX;
		pubXY[1] = tempY;
		return [tempX,tempY];
		} catch(ob) {}
	}
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	