				
				/* toggle between edit and show mode of a row */
				function edit(row_number, ids) {
					for (idx in ids) {
						id = ids[idx];
						var val = document.getElementById('value-' + id + '-' + row_number);
						var edt = document.getElementById('edit-' + id + '-' + row_number);
						val.style.display = ($style('value-' + id + '-' + row_number, 'display') == 'block') ? 'none' : 'block';
						edt.style.display = ($style('edit-' + id + '-' + row_number, 'display') == 'block') ? 'none' : 'block';
					}
					var save = document.getElementById('save-' + row_number);
					var edit = document.getElementById('edit-' + row_number);
					save.style.display = 'block';
					edit.style.display = 'none';
				}
	
				/* saves a row */
				function save(row_number, ids, camp) {
				
					params = "update=" + camp + "&id=" + row_number;
					for (idx in ids) {
						id = ids[idx];
						var val = document.getElementById('value-' + id + '-' + row_number);
						var edt = document.getElementById('edit-' + id + '-' + row_number);
						val.style.display = ($style('value-' + id + '-' + row_number, 'display') == 'block') ? 'none' : 'block';
						edt.style.display = ($style('edit-' + id + '-' + row_number, 'display') == 'block') ? 'none' : 'block';
						params += "&" + id + "=" + edt.value;
						val.innerHTML = edt.value;
					}
					
					var ajax = getAJAX();
					var url = "/";
					ajax.onreadystatechange = function(ids) {
						if (ajax.readyState == 4 && (ajax.status == 200 || window.location.href.indexOf("http") == -1)) {
							/*
							var response = eval('(' + ajax.responseText + ')');
							alert(response);
							*/
							for (idx in ids) {
								id = ids[idx];
								var val = document.getElementById('value-' + id + '-' + row_number);
								var edt = document.getElementById('edit-' + id + '-' + row_number);
								/*
								val.style.display = (\$style('value-' + id + '-' + row_number, 'display') == 'block') ? 'none' : 'block';
								edt.style.display = (\$style('edit-' + id + '-' + row_number, 'display') == 'block') ? 'none' : 'block';
								*/
								val.innerHTML = edt.value;
								if (val.src) {
									val.href = edt.value;
								}
							}
						}
					}
					ajax.open('POST', url, true);
					ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
					ajax.setRequestHeader("Content-length", params.length);
					ajax.setRequestHeader("Connection", "close");
					ajax.send(params);
					
					var save = document.getElementById('save-' + row_number);
					var edit = document.getElementById('edit-' + row_number);
					save.style.display = 'none';
					edit.style.display = 'block';
					
					return false;
				}
				
				/* get the css property value of element with given id */
				function $style(ElementId, CssProperty) {
					function $(stringId) {
						return document.getElementById(stringId);
					}
					if($(ElementId).currentStyle) {
						var convertToCamelCase = CssProperty.replace(/\-(.)/g, function(m, l){return l.toUpperCase();});
						return $(ElementId).currentStyle[convertToCamelCase];
					} else if (window.getComputedStyle) {
						var elementStyle = window.getComputedStyle($(ElementId), "");
						return elementStyle.getPropertyValue(CssProperty);
					}
				}			
				
				/* get ajax object */
				function getAJAX() {
					var page_request = false;
					if (window.XMLHttpRequest){
						page_request = new XMLHttpRequest();
						return page_request;
					}
					else if (window.ActiveXObject){
						try {
							page_request = new ActiveXObject("Msxml2.XMLHTTP");
							return page_request;
						}catch (e){
							try{
								page_request = new ActiveXObject("Microsoft.XMLHTTP");
								return page_request;
							}catch (e){
								return false;
							}
						}
					}else{
						return false;
					}
				}

				/* delete a row */
				function del(camp, row_number) {
					var ok = confirm('Really delete link?');
					if (ok) {
						var el = document.getElementById('row-' + row_number);
						el.parentNode.removeChild(el);
						
						params = "del=" + camp + "&id=" + row_number;
						var ajax = getAJAX();
						var url = "/";
						ajax.open('POST', url, true);
						ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
						ajax.setRequestHeader("Content-length", params.length);
						ajax.setRequestHeader("Connection", "close");
						ajax.send(params);
						
						return true;
					} else {
						return false;
					}
				}