	var sessionid='';
	var categoryArray=new Array();
	var itemArray=new Array();
	var clearpassword='';
	var glasslayer=getElement("glasslayer");
	var divaddcategory=getElement("divaddcategory");
	var diveditcategory=getElement("diveditcategory");
	var divadditem=getElement("divadditem");
	var input_new_category=getElement("new_category_name");
	var input_password=getElement("password");
	var selectbox=getElement("category_select");
	var itemselectbox=getElement("item_select");	
	var last_inserted_category_text;
	var last_item=new Array();
	var tabArray=new Array("divlogin","mainpage","homepage","infopage","bulkdownloadpage");
	function showGlassLayer(){
		selectbox.disabled=true;
		itemselectbox.disabled=true;
		glasslayer.style.visibility='visible';
	}
	function hideGlassLayer(){
		selectbox.disabled=false;
		itemselectbox.disabled=false;
		glasslayer.style.visibility='hidden';
	}

	function init(){
		glasslayer=getElement("glasslayer");
		divaddcategory=getElement("divaddcategory");
		divadditem=getElement("divadditem");
		input_new_category=getElement("new_category_name");
		input_password=getElement("password");
		selectbox=getElement("category_select");
		itemselectbox=getElement("item_select");	
		itemselectbox.options.length=0;
		logoff();
	}
	function closeDiv(divname){
		getElement(divname).style.visibility='hidden';
		hideGlassLayer();

	}
	function openLoginDiv(resetValues){
		if(resetValues){
			getElement("password").value='';
		}
		getElement("divlogin_menu_item").style.visibility='visible';
		getElement("divlogin").style.visibility='visible';
		getElement("mainpage_menu_item").style.visibility='hidden';
		getElement("bulkdownloadpage_menu_item").style.visibility='hidden';
	}
	function openRegisterDiv(){
		showGlassLayer();
		getElement("divregister").style.visibility='visible';
	}
	
	function openAddCategoryDiv(){
		input_new_category.value="";
		showGlassLayer();
		divaddcategory.style.visibility='visible';
		
	}
	function openEditCategoryDiv(){
		showGlassLayer();
		diveditcategory.style.visibility='visible';
		
	}
	function openAddItemDiv(){
		if(getSelectedCategory()=='--'){
			alert("You need to select a category first");
		} else{
			resetItemInputData();
			showGlassLayer();
			divadditem.style.visibility='visible';
		}
	}
	function registerUser(){
		var user=getElement("reg_user").value;
		var password =getElement("reg_password").value;
		if(user=='' || password==''){
			alert("User and Password cannot be empty");
			return;
		}
		xmlhttpPost('/register',"user=" + user +"&password=" + sha1Hash(password), "register");
	}
	function login(){
		var user=getElement("user").value;
		clearpassword =getElement("password").value;
		xmlhttpPost('/login',"user=" + user +"&password=" + sha1Hash(clearpassword), "login");
	}
	function logoff(){
		xmlhttpPost('services.php',"method=logoff" , "logoff");
	}
	function addCategory(){
		if(input_new_category.value==''){
			alert("The category name cannot be empty.");
			return;
		}
		last_inserted_category_text=input_new_category.value;
		var enc_name=encX(input_new_category.value);
		xmlhttpPost('addcategory',"name=" + enc_name + "&sessid=" + sessionid, "add_category");
	}
	function dropCategory(){
		if(selectbox.selectedIndex==0) return;
		var category_id=selectbox.options[selectbox.selectedIndex].value;
		
		if(category_id!='--' && confirm("Delete category and related items?"))
			xmlhttpPost('dropcategory',"category_id=" + category_id + "&sessid=" + sessionid, "drop_category");
	}
	function dropItem(){
		if(itemselectbox.selectedIndex<0 ) return;
		var category_id=selectbox.options[selectbox.selectedIndex].value;
		var item_id=itemselectbox.options[itemselectbox.selectedIndex].value;
		if(confirm("Delete selected item?"))
			xmlhttpPost('dropitem',"category_id=" + category_id + "&item_id=" + item_id + "&sessid=" + sessionid, "drop_item");
	}
	
	function saveItem(){
		if(getElement('item_name').value==''){
			alert("You need to input at least the name of the item");
			return;
		}
		var category_id=selectbox.options[selectbox.selectedIndex].value;
		var enc_name=encX(getElement('item_name').value);
		var enc_value=encX(getElement('item_value').value);
		var enc_note=encX(getElement('item_note').value);
		last_item['item_name']=getElement('item_name').value;
		last_item['item_value']=getElement('item_value').value;
		last_item['item_note']=getElement('item_note').value;
		last_item['category_id']=category_id;
		xmlhttpPost('additem',"category_id=" + category_id + "&name=" + enc_name + "&value=" +enc_value + "&note="+enc_note + "&sessid=" + sessionid, "add_item");
	}
	function getCategoryList(){
		xmlhttpPost('getcategorylist',"sessid=" + sessionid, "get_category_list");
	}
	function getCategoryItems(force){
		var category_id=selectbox.options[selectbox.selectedIndex].value;
		if(category_id=='--'){
			itemselectbox.options.length=0;
			return;
		}
		if(!(isArray(itemArray[category_id]))  || force)
			xmlhttpPost('getcategoryitems',"category_id=" +category_id + "&sessid=" + sessionid, "get_category_items");
		else
			showItemList();
	}
	function getBulkDownload(){
		xmlhttpPost('bulkdownload',"sessid=" + sessionid, "bulk_download");
	}
	
		
	function xmlhttpPost_onReturn(str,callId){
		if(str=='NoAuth' && callId!='logoff'){
			alert("You need to login first.")
			closeDiv("divadditem");
			closeDiv("divaddcategory");
			openLoginDiv(true);
			changeTab("divlogin");
			return;
		}
		switch(callId){
			case 'login':
				if(str.substr(0,2)=='ok'){
					spl=str.split('-');
					sessionid=spl[1];
					getElement("divlogin").style.visibility='hidden';
					getElement("divlogin_menu_item").style.visibility='hidden';
					getElement("mainpage_menu_item").style.visibility='visible';
					getElement("bulkdownloadpage_menu_item").style.visibility='visible';
					getCategoryList();
					changeTab('mainpage');
					
				} else {
					alert ("Login failed !!");
				}
				break;
			case 'register':
				if(str=='ok'){
					getElement("user").value = getElement("reg_user").value;
					getElement("password").value = getElement("reg_password").value;
					closeDiv("divregister");
					login();
				} else{
					splitted=str.split("-");
					if(splitted[1]=='exists'){
						alert("The chosen name is already in use. Please choose a different one.");
					} else{
						alert("Error while trying to register user.");
					}	
				}
				break;
				
			case 'add_category':
				splitted=str.split("-");
				if(splitted[0]!='ok'){
					alert("Category not added for unknown reason.");
				} else{
					categoryArray[splitted[1]]=last_inserted_category_text;
					num_options=selectbox.options.length;
					selectbox.options[num_options] = new Option('',splitted[1],false,false);
					selectbox.options[num_options].innerHTML = last_inserted_category_text;
					input_new_category.value="";
					closeDiv("divaddcategory");
				}
				break;
			case 'drop_category':
				splitted=str.split("-");
				if(splitted[0]!='ok'){
					alert("Category not deleted for unknown reason.");
				} else{
					getCategoryList();
				}
				break;
			case 'drop_item':
				splitted=str.split("-");
				if(splitted[0]!='ok'){
					alert("Item not deleted for unknown reason.");
				} else{
					getCategoryItems(true);
				}
				break;				
				
			case 'get_category_list':
				var jsonobj = eval('(' + str + ')');
				categoryArray=new Array();
				itemArray=new Array();
				selectbox.options.length=1;
				for(var id in jsonobj){
					var value = decX(jsonobj[id]);
					categoryArray[id] = value;
					num_options=selectbox.options.length;
					selectbox.options[num_options] = new Option('',id,false,false);
					selectbox.options[num_options].innerHTML = value;
				}
				showCategoryList();
				showItemList();
				break;
			case 'get_category_items':
				var jsonobj = eval('(' + str + ')');
				itemselectbox.options.length=0;
				var category_id=selectbox.options[selectbox.selectedIndex].value;
				itemArray[category_id]=new Array();
				for(var id in jsonobj){
					itemArray[category_id][jsonobj[id]['id']]=new Array();
					itemArray[category_id][jsonobj[id]['id']]['item_name'] = decX(jsonobj[id]['name']);
					itemArray[category_id][jsonobj[id]['id']]['item_value'] = decX(jsonobj[id]['value']);
					itemArray[category_id][jsonobj[id]['id']]['item_note'] = (jsonobj[id]['note'] != null) ? decX(jsonobj[id]['note']) : "";
				}
				showItemList();
				break;
			case 'add_category':
				splitted=str.split("-");
				if(splitted[0]!='ok'){
					alert("Item not added for unknown reason.");
				} else{
					num_options=selectbox.options.length;
					selectbox.options[num_options] = new Option('',splitted[1],false,false);
					selectbox.options[num_options].innerHTML = last_inserted_category_text;
					input_new_category.value="";
				}
				closeDiv('divaddcategory');
				
				break;
			case 'add_item':
				splitted=str.split("-");
				if(splitted[0]!='ok'){
					alert("Item not added for unknown reason.");
				} else{
					if(! isArray(itemArray[last_item['category_id']]))
						itemArray[last_item['category_id']]=new Array();
					itemArray[last_item['category_id']][splitted[1]]=new Array();
					itemArray[last_item['category_id']][splitted[1]]['item_name'] = last_item['item_name'];
					itemArray[last_item['category_id']][splitted[1]]['item_value'] = last_item['item_value'];
					itemArray[last_item['category_id']][splitted[1]]['item_note'] = last_item['item_note'];
					num_options=itemselectbox.options.length;
					itemselectbox.options[num_options] = new Option('',splitted[1],false,false);
					itemselectbox.options[num_options].innerHTML = last_item['item_name'];
					itemselectbox.options[num_options].selected=true;
					showItemData();
				}
				closeDiv("divadditem");
				break;
			case 'bulk_download':
				var res="";
				var jsonobj = eval('(' + str + ')');
				res +="<font color='#f0c432'>&lt;categories></font>\n";
				for(var id in jsonobj){
					var catarray=jsonobj[id];
					res +="  <font color='#f0c432'>&lt;category></font>\n";
					res +="    <font color='#f0c432'>&lt;name></font>" + decX(catarray['category_name']) +"<font color='#f0c432'>&lt;/name></font>\n";
					res +="    <font color='#f0c432'>&lt;items></font>\n";
					for(var itemsid in catarray['items']){
						res +="      <font color='#f0c432'>&lt;item></font>\n";
						res +="        <font color='#f0c432'>&lt;name></font>"  + decX(catarray['items'][itemsid]['item_name'])  + "<font color='#f0c432'>&lt;/name></font>\n";
						res +="        <font color='#f0c432'>&lt;value></font>" + decX(catarray['items'][itemsid]['item_value']) + "<font color='#f0c432'>&lt;/value></font>\n";
						res +="        <font color='#f0c432'>&lt;note></font>"  + decX(catarray['items'][itemsid]['item_note'])  + "<font color='#f0c432'>&lt;/note></font>\n";
						res +="      <font color='#f0c432'>&lt;/item></font>\n";
					}
					res +="    <font color='#f0c432'>&lt;/items></font>\n";
					res +="  <font color='#f0c432'>&lt;/category></font>\n";
				}					
				res +="<font color='#f0c432'></categories></font>\n";					
				//document.getElementById('bulkdownload_textarea').innerHTML="<pre>" + res.replace(/</g,"&lt;") + "</pre>";
				document.getElementById('bulkdownload_textarea').innerHTML="<pre>" + res + "</pre>";
				
			case 'get_session_data':
				//alert(str);
				break;
		}
	}
	
	
	
	
	
	function encrypt(plaintext){
		return AESEncryptCtr(plaintext, clearpassword, 128);
	}
	function decrypt(encryptedtext){
		return AESDecryptCtr(encryptedtext, clearpassword, 128);
	}
	
	
	function changeTab(name){
		for(var tabindex=0; tabindex < tabArray.length; tabindex++){
			getElement(tabArray[tabindex]).style.visibility='hidden';
			getElement(tabArray[tabindex] + "_menu_item").style.color='cyan';
			
			
		}
		getElement(name + "_menu_item").style.color='#fff';
		getElement(name + "_menu_item").style.fontWeight='bold';
		
		getElement(name).style.visibility='visible';
	
	}
	function showCategoryList(){
		selectbox.options.length=0;
		for(var id in categoryArray){
			num_options=selectbox.options.length;
			selectbox.options[num_options] = new Option('',id,false,false);
			selectbox.options[num_options].innerHTML = categoryArray[id];
		}
	}
	function showItemList(){
		resetItemData();
		itemselectbox.options.length=0;
		var category_id=selectbox.options[selectbox.selectedIndex].value;
		for(var id in itemArray[category_id]){
			num_options=itemselectbox.options.length;
			itemselectbox.options[num_options] = new Option('',id,false,false);
			itemselectbox.options[num_options].innerHTML = itemArray[category_id][id]['item_name'];
		}
	
	
	}
	function showItemData(){
		var index = itemselectbox.options[itemselectbox.selectedIndex].value;
		var item  = itemArray[selectbox.options[selectbox.selectedIndex].value][index];
		getElement('span_item_name').innerHTML=item['item_name'];
		getElement('span_item_value').innerHTML=item['item_value'];
		getElement('span_item_note').innerHTML=item['item_note'].replace(/\n/g, "<br />");;
	}
	function resetItemData(){
		getElement('span_item_name').innerHTML='';
		getElement('span_item_value').innerHTML='';
		getElement('span_item_note').innerHTML='';
	}
	function resetItemInputData(){
		getElement('item_name').value='';
		getElement('item_value').value='';
		getElement('item_note').value='';
	}	
	function getSelectedCategory(){
		return selectbox.options[selectbox.selectedIndex].value;
	}
	function getElement(name){
		return document.getElementById(name);
	}
	function decX(value){
		return decrypt(decodeHex(value));
	}
	function encX(value){
		return encodeHex(encrypt(value));
	}
	
	function isArray(obj) {
		try{	
		   if (obj.constructor.toString().indexOf("Array") == -1)
		      return false;
		   else
		      return true;
		} catch(ex){
			return false;
		}
	}	
	
	
	
