var debug=0;
var sbfetched=false;
var newsCount=undefined;
var storage={};
storage.save_object=function(name,obj){
	//c("saving object '"+name+"'");
	storage.save_string(name,JSON.stringify(obj));
}
storage.save_string=function(name,value){
	var el=document.getElementById(name);
	el.value=value;
	if(name == 'state' && logged) {
		var xmlhttp_s=new XMLHttpRequest();
		xmlhttp_s.open('POST', "/data.php"+"?s=savestate&sid="+Math.random(), true);
		xmlhttp_s.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
		xmlhttp_s.send('state='+encodeURIComponent(value)+"&sid="+Math.random());
/*
		xmlhttp_s.onreadystatechange=function(){
			if(xmlhttp_s.readyState == 4) {
				alert('saved state'+xmlhttp_s.readyState+'<br>'+xmlhttp_s.responseText);
			}
		}
*/
	}
}
storage.load_object=function(name){
	var el=document.getElementById(name);
	var obj;
	if(el&&el.value){
		try {
			obj=eval("("+el.value+")");
		} catch(error) {
			alert("buggy content received\n" + el.value);
		}
	} else {
		obj=null;
	}
	return obj;
}
storage.exists=function(name){
	return document.getElementById(name);
}

var xform={};
xform.register=function(){
	var form_elements=[
						{'cols':2,'type':'text','field':'Username','name':'username','value':'','error':'','comment':'At least 4 characters long.'},
						{'cols':2,'type':'text','field':'E-mail','name':'email','value':'','error':'','width':'150px','comment':'Needed to send you a new password if you loose it.'},
						{'cols':2,'type':'password','field':'Password','name':'password','value':'','error':'','comment':'At least 6 characters long.'},
						{'cols':2,'type':'password','field':'Re-type Password','name':'confirm','value':'','error':'', 'comment':'Confirm password.'},
						{'cols':1,'type':'checkbox','field': 'Show Adult feeds','name':'allowX','value':'','checked':true,'width':'','error':''},
						{'cols':1,'type':'captcha','field':'Enter Code','name':'code','value':'','error':'', 'comment':''}
						];
	var prefix = document.createElement('span');
	prefix.innerHTML='Get your free account. In a few seconds you can start to subscribe your own feeds, bookmark news items and  keep a record of your read news.';

	xform.register_submit=function() {
		xform.submit('register',
			function(response){//onSuccess
				var comment = document.createElement('span');
				comment.innerHTML='<p>Your account has been created successfully. You can <a href="#" onclick="xform.login();">login</a> now.</p>';
				xform.draw('Welcome',undefined, [], 'welcome', undefined, 'Close', undefined,undefined, comment);
			},
			function(response){//onErrors
				var errors = eval(response);
				for(i in form_elements) {
					for(j in errors) {
						if(form_elements[i].name == errors[j].name) {
							if(form_elements[i].name == 'allowX') {
								form_elements[i].checked = errors[j].value ? true : false;
							} else {
								form_elements[i].value = errors[j].value;
							}
							form_elements[i].value = errors[j].value;
							form_elements[i].error = errors[j].error;
						}
					}
				}
				prefix.innerHTML = 'Please correct errors in submitted data';
				xform.draw('Register', undefined, form_elements, 'register', 'Register', 'Cancel', xform.register_submit, 0, prefix);
			}
		)
	}

	xform.draw('Register', undefined, form_elements, 'register', 'Register', 'Cancel', xform.register_submit, 0, prefix)
}

xform.subscribe=function(feedurl){
	var form_elements=[
						{'cols':1,'type':'text','field':'Feed URL','name':'subscribe-feed','value':feedurl,'width':'325px','error':''}
						];

	var comment=document.createElement('span');
	//comment.innerHTML='<a href="#" onclick="xform.lost_password();">Lost your information?</a>';
	var over_buttons=document.createElement('span');
	//over_buttons.innerHTML='If you do not have an account yet, please take a few seconds to <a href="#" onclick="xform.register();">create one</a><br />';
	xform.feeds_submit=function(){
		xform.submit('subscribe2',
			function(response) {
				var prefix = document.createElement('span');
				prefix.innerHTML='<p>Subscription successful</p>';
				xform.draw('Subscribing Feed(s)', undefined, [], 'thanks', 'Close', undefined, function(){location.href='http://www.rss4adult.com';}, false, prefix);
				sbfetched=false;
				feeds_list.fetch_and_draw(response, true);
			},
			function(response){//onErrors
				var prefix = document.createElement('span');
				if(response == '[logged:0]') {
					//set cookie "intent"
					xform.login('First you have to login (or register) before you can subscribe' + (xGetCookie("subscribe") ? ' to '+xGetCookie('subscribe') : ''));
				} else {
					var errors = eval(response);
					prefix.innerHTML='<p>Feeds submittion failed.</p>';
					for(i in form_elements) {
						for(j in errors) {
							if(form_elements[i].name == errors[j].name) {
								form_elements[i].value = errors[j].value;
								form_elements[i].error = errors[j].error;
							} else if(errors[j].name == 'feed_id') {
								feeds_list.fetch_and_draw(errors[j].value, true);
								prefix.innerHTML='<p>This feed is already in Your Feeds list</p>';
							}
						}
					}
					xform.draw('Subscribing Feed(s)', undefined, [], 'thanks', undefined, 'Close', undefined, false, prefix);
				}
			}
		);
	}
	xform.subscribe_submit=function(){
		xform.submit('subscribe',
			function(response){//onSuccess
				var channels = eval(response);
				var cform_elements=[];
				for(var i in channels) {
					cform_elements.push({'cols':1,'type':'checkbox','field': channels[i].title+' ('+channels[i].url+')'+(channels[i].descr != undefined && channels[i].descr ? '<br /> ' + channels[i].descr : ''),'name':'feeds[]','value':channels[i].url,'checked':true,'width':'','error':''});
				}
				xform.draw('Subscribing Feed(s)', comment, cform_elements, 'subscribe2', 'Subscribe selected', 'Cancel', xform.feeds_submit,0,undefined,over_buttons);
			},
			function(response){//onErrors
				//c("!!!"+response);
				if(response == '[logged:0]') {
					xform.login('First you have to login (or register) before you can subscribe' + (xGetCookie("subscribe") ? ' to '+xGetCookie('subscribe') : ''));
				} else {
					var errors = eval(response);
					for(i in form_elements) {
						for(j in errors) {
							if(form_elements[i].name == errors[j].name) {
								form_elements[i].value = errors[j].value;
								form_elements[i].error = errors[j].error;
							}
						}
					}
					var comment = document.createElement('span');
					comment.innerHTML='Please, correct errors in submitted data';
					xform.draw('Subscribing Feed(s)', undefined, form_elements, 'subscribe', 'Submit', 'Cancel', xform.subscribe_submit,0,comment);
				}
			}
		)
	}
	xform.draw('Subscribing Feed(s)', comment, form_elements, 'subscribe', 'Submit', 'Cancel', xform.subscribe_submit,0,undefined,over_buttons);
	xDeleteCookie('subscribe');
	xform.subscribe_submit();
}

xform.login=function(message){

	var form_elements=[
						{'cols':2,'type':'text','field':'Username','name':'username','value':'','error':''},
						{'cols':2,'type':'password','field':'Password','name':'password','value':'','error':''}
						];

	var comment=document.createElement('span');
	comment.innerHTML='<a href="#" onclick="xform.lost_password();">Lost your information?</a>';
	var over_buttons=document.createElement('span');
	over_buttons.innerHTML='If you do not have an account yet, please take a few seconds to <a href="#" onclick="xform.register();">create one</a><br />';
	var message_comment = undefined;
	if(message) {
		var message_comment=document.createElement('span');
		message_comment.innerHTML=message;
	}
	xform.login_submit=function(){
		xform.submit('login',
			function(response){//onSuccess
				var user = eval(response);
				newsCount=undefined;
				//rewrite login namef</a>';
				var regbutton = document.getElementById('hat_register');
				logged=true;
				var issue = document.getElementById('issue');
				issue.innerHTML='Welcome ' + user[0].username + '! | <a href="javascript://" onclick="xform.logoff();">Log off</a>';
				regbutton.value = 'Settings';
				regbutton.onclick = xform.prefs;
				xSetCookie('uin',user[0].uid);
				storage.save_string("state", decodeURIComponent(user[0].state));
				//'{"feed_id":0,"news_id":0,"sbWidth":260,"nlHeight":160,"flistShowRead":0,"nlistShowRead":0,"showOrig":0}'
				//storage.save_string("state", '{"feed_id":0,"news_id":0,"sbWidth":228,"nlHeight":160,"flistShowRead":0,"nlistShowRead":0,"showOrig":0}');
				state=storage.load_object("state");

				if(state.allowX == 1) {
					state.uberCatshow = [1,0,1];
					state.uberCat=0;
				} else {
					state.uberCatshow = [0,0,1];
					state.uberCat=2;
				}
				state.soundOn=1;
				state.cat_id=1;//all
				state.cat_array_index=0;
				state.curCatFeedsCount=0;
				state.feedUnreadCount = [0,0,0];

				state.feed_id=state.feed_array_index=-1;

				gui.div_clear("newslist");
				gui.div_clear("newscontent");

				news_list.draw_header();
				feeds_list.reload_sidebar();
				xform.cancel_button_onclick();
				if(xGetCookie('subscribe')) {
					xform.subscribe(xGetCookie('subscribe'));
				}
				//window.onload();
				//reload most of the controls
				//gui.resize();

			},
			function(response){//onErrors
				//c("!!!"+response);
				var errors = eval(response);
				for(i in form_elements) {
					for(j in errors) {
						if(form_elements[i].name == errors[j].name) {
							form_elements[i].value = errors[j].value;
							form_elements[i].error = errors[j].error;
						}
					}
				}
				var comment = document.createElement('span');
				comment.innerHTML='Please, correct errors in submitted data';
				xform.draw('Login', undefined, form_elements, 'login', 'Login', 'Cancel', xform.login_submit,0,comment);
			}
		)
	}
	xform.draw('Login', comment, form_elements, 'login', 'Login', 'Cancel', xform.login_submit,0, message_comment, over_buttons);
}
xform.logoff=function(){
		newsCount=undefined;
		var issue = document.getElementById('issue');
		issue.innerHTML='Welcome Guest! | <a href="javascript://" onclick="xform.login();">Login</a>';
		var regbutton = document.getElementById('hat_register');
		regbutton.value = 'Register';
		regbutton.onclick = xform.register;
		xform.cancel_button_onclick();
		xDeleteCookie("uin");
		xDeleteCookie("allowX");
		logged=sbfetched=false;
		storage.save_object("state",state);
		window.onload(true);
		state.uberCatshow[0] = [1,0,0];
		state.uberCat=0;
		state.cat_id=1;
		state.cat_array_index=0;
		gui.div_clear("newslist");
		gui.div_clear("newscontent");
		state.feed_id=state.feed_array_index=-1;
		news_list.draw_header();
		news_list.fetch_and_draw();
		article_view.draw_original(true);
		//hide_news(true);
		gui.resize();
}
xform.prefs=function() {
	var form_elements=[
						{'cols':2,'type':'text','field':'Username','name':'username','value':'','error':''},
						{'cols':2,'type':'text','field':'E-mail','name':'email','value':'','error':''},
						{'cols':1,'type':'password','field':'Old Password','name':'opassword','value':'','error':''},
						{'cols':2,'type':'password','field':'New password','name':'password','value':'','error':''},
						{'cols':2,'type':'password','field':'Confirm','name':'confirm','value':'','error':''},
						{'cols':1,'type':'checkbox','field': 'Show Adult feeds','name':'allowX','value':'','checked':(state.allowX ? true : false),'width':'','error':''}
						];
	xform.prefs_submit=function(){
		xform.submit('prefs',
			function(response){//onSuccess
				state.allowX = response == 'allowX:1' ? 1 : 0;
				var comment = document.createElement('span');
				comment.innerHTML='<p>Settings have been changed.</p>';
				xform.draw('Settings',undefined, [], 'welcome', undefined, 'Close', undefined, undefined, comment);
				if(state.allowX) {
					state.uberCatshow = [1,0,1];
					state.uberCat=0;
				} else {
					state.uberCatshow = [0,0,1];
					state.uberCat=2;
				}
				state.cat_id=1;
				feeds_list.draw();
			},
			function(response){//onErrors
				var errors = eval(response);
				for(i in form_elements) {
					for(j in errors) {
						if(form_elements[i].name == errors[j].name) {
							if(form_elements[i].name == 'allowX') {
								form_elements[i].checked = errors[j].value ? true : false;
							} else {
								form_elements[i].value = errors[j].value;
							}
							form_elements[i].value = errors[j].value;
							form_elements[i].error = errors[j].error;
						}
					}
				}
				var comment = document.createElement('span');
				comment.innerHTML='Please correct errors, in submitted data';
				xform.draw('Settings',undefined, form_elements, 'prefs', 'Save', 'Cancel', xform.prefs_submit, undefined, comment);
			}
		)
	}
	xform.prefs_load=function(){
		xform.submit('prefsl',
			function(response){//onOK
				var errors = eval(response);
				for(i in form_elements) {
					for(j in errors) {
						if(form_elements[i].name == errors[j].name) {
							if(form_elements[i].name == 'allowX') {
								form_elements[i].checked = errors[j].value ? true : false;
							} else {
								form_elements[i].value = errors[j].value;
							}
							form_elements[i].error = errors[j].error;
						}
					}
				}
				//var comment = document.createElement('span');
				//comment.innerHTML='Please correct errors, in submitted data';
				xform.draw('Settings',undefined, form_elements, 'prefs', 'Save', 'Cancel', xform.prefs_submit, undefined);
			},
			function(){//onFailure
				var comment = document.createElement('span');
				comment.innerHTML='<p>Failed to load settings.</p>';
				xform.draw('Settings',undefined, [], 'welcome', undefined, 'Close', undefined, undefined, comment);
			}
		)
	}
	xform.draw('Settings', undefined, form_elements, 'prefs', 'Save', 'Cancel', xform.prefs_load);
	xform.prefs_load();
}
xform.feedback=function(){
	if(logged) {
		var form_elements=[
						{'cols':1,'type':'text','field':'Subject','name':'subj','value':'','error':'','width':'325px'},
						{'cols':1,'type':'textarea','field':'Message','name':'msg','value':'','error':'','width':'325px'}
						];
	} else {
		var form_elements=[
						{'cols':2,'type':'text','field':'Username (optional)','name':'username','value':'','error':''},
						{'cols':2,'type':'text','field':'E-mail','name':'email','value':'','error':'','width':'180px'},
						{'cols':1,'type':'text','field':'Subject','name':'subj','value':'','error':'','width':'325px'},
						{'cols':1,'type':'textarea','field':'Message','name':'msg','value':'','error':'','width':'325px'}
						];
	}
	var prefix = document.createElement('span');
	prefix.innerHTML='We like to hear from you. Please type in your message below.';
	xform.feedback_submit=function(){
		var prefix = document.createElement('span');
		prefix.innerHTML='We like to hear from you. Please type in your message below.';
		xform.submit('feedback',
			function(response){//onSuccess
				var prefix = document.createElement('span');
				prefix.innerHTML='<p>Your message has been sent successfully!</p>';
				xform.draw('Contact Form', undefined, [], 'thanks', undefined, 'Close', undefined, false, prefix);
			},
			function(response){//onErrors
				//c("!!!"+response);
				var errors = eval(response);
				for(i in form_elements) {
					for(j in errors) {
						if(form_elements[i].name == errors[j].name) {
							form_elements[i].value = errors[j].value;
							form_elements[i].error = errors[j].error;
						}
					}
				}
				var comment = document.createElement('span');
				comment.innerHTML='Please correct errors in submitted data';
				xform.draw('Contact Form', comment, form_elements, 'feedback', 'Send message', 'Cancel', xform.feedback_submit,false,prefix);
			}
		)
	}
	xform.draw('Contact Form', undefined, form_elements, 'feedback', 'Send message', 'Cancel', xform.feedback_submit, false, prefix);
}

xform.lost_password=function(){
	var form_elements=[
						{'cols':1,'type':'text','field':'E-mail','name':'email','value':'','error':'','width':'150px'}
						];
	var prefix = document.createElement('span');
	prefix.innerHTML='Please type in the email address you used during your registration';
	xform.lost_submit=function() {
		var prefix = document.createElement('span');
		prefix.innerHTML='Please type in the email address you used during your registration';
		xform.submit('lost',
			function(response) {//onSuccess
				var prefix = document.createElement('span');
				prefix.innerHTML='<p>Login information sent. Check your email box!</p>';
				xform.draw('Password reminder', undefined, [], 'reminded', undefined, 'Close', undefined, false, prefix);
			},
			function(response){//onErrors
				//c("!!!"+response);
				var errors = eval(response);
				for(i in form_elements) {
					for(j in errors) {
						if(form_elements[i].name == errors[j].name) {
							form_elements[i].value = errors[j].value;
							form_elements[i].error = errors[j].error;
						}
					}
				}
				var comment = document.createElement('span');
				comment.innerHTML='Please correct errors, in submitted data';
				xform.draw('Password reminder', comment, form_elements, 'lost', 'Submit', 'Cancel', xform.lost_submit, false, prefix);
			}
		)
	}
	xform.draw('Password reminder', undefined, form_elements, 'lost', 'Submit', 'Cancel', xform.lost_submit, false, prefix);
}

xform.addfeed=function(){
	var form_elements=[
						{'cols':1,'type':'text','field':'Feed URL','name':'url','value':'http://','error':'','width':'230px'}
						];
//						{'cols':2,'type':'text','field':'Feed category','name':'category','value':'','error':''}
	xform.addfeed_submit=function(){
		xform.submit('addfeed',
			function(response) {//onSuccess
				var comment = document.createElement('span');
				comment.innerHTML='<p>New feed has been added.</p>';
				xform.draw('Add feed',undefined, [], 'added', undefined, 'Close', undefined, undefined, comment);
				sbfetched=false;
				feeds_list.fetch_and_draw(response, true);
			},
			function(response){//onErrors
				//alert("!!!"+response);
				var errors = eval(response);
				for(i in form_elements) {
					for(j in errors) {
						if(form_elements[i].name == errors[j].name) {
							form_elements[i].value = errors[j].value;
							form_elements[i].error = errors[j].error;
						} else if(errors[j].name == 'feed_id') {
							
							feeds_list.fetch_and_draw(errors[j].value, true);
						}
					}
				}
				var comment = document.createElement('span');
				comment.innerHTML='Please correct errors in submitted data';
				xform.draw('Add feed', undefined, form_elements, 'addfeed', 'Add feed', 'Cancel', xform.addfeed_submit, undefined, comment);
			}
		)
	}
	xform.draw('Add feed', undefined, form_elements, 'addfeed', 'Submit', 'Cancel',xform.addfeed_submit);
}

xform.editfeed=function(){
	var form_elements, submit_title;

	if(curFeeds[state.feed_array_index].adult) {
		form_elements=[
						{'cols':1,'type':'link','field':'Feed URL','name':'url','value':'','error':''},
						{'cols':1,'type':'link','field':'Feed homepage','name':'homepage','value':'','error':''},
						{'cols':1,'type':'lable','field':'Feed name','name':'name','value':curFeeds[state.feed_array_index].name,'error':''},
						{'cols':1,'type':'hidden','field':'','name':'feed_id','value':state.feed_id,'error':''}
						];
		submit_title = undefined;
	} else {
		form_elements=[
						{'cols':1,'type':'link','field':'Feed URL','name':'url','value':'','error':''},
						{'cols':1,'type':'link','field':'Feed homepage','name':'homepage','value':'','error':''},
						{'cols':1,'type':'text','field':'Feed name','name':'name','value':curFeeds[state.feed_array_index].name,'error':''},
						{'cols':1,'type':'hidden','field':'','name':'feed_id','value':state.feed_id,'error':''},
						{'cols':1,'type':'text','field':'Categories(up to three separated with space)','name':'cats','value':'','error':''}
						];
		submit_title='Submit';
	}
	xform.editfeed_submit=function(){
		xform.submit('editfeed',
			function(response) {//onSuccess
				var comment = document.createElement('span');
				comment.innerHTML='<p>Changes saved.</p>';
				xform.draw('Edit feed', undefined, [], 'added', undefined, 'Close', undefined, undefined, comment);
				sbfetched=false;
				feeds_list.fetch_and_draw();
			},
			function(response){//onErrors
				//c("!!!"+response);
				var errors = eval(response);
				for(i in form_elements) {
					for(j in errors) {
						if(form_elements[i].name == errors[j].name) {
							form_elements[i].value = errors[j].value;
							form_elements[i].error = errors[j].error;
						}
					}
				}
				var comment = document.createElement('span');
				comment.innerHTML='Please correct errors, in submitted data';
				xform.draw('Edit feed', undefined, form_elements, 'editfeed', 'Submit', 'Cancel', xform.editfeed_submit, undefined, undefined, comment);
			}
		)
	}
	xform.editfeed_load=function(){
		xform.submit('editfeedl',
			function(response){//onOK
				var errors = eval(response);
				for(i in form_elements) {
					for(j in errors) {
						if(form_elements[i].name == errors[j].name) {
							form_elements[i].value = errors[j].value;
							form_elements[i].error = errors[j].error;
						}
					}
				}
				xform.draw('Edit feed', undefined, form_elements, 'editfeed', submit_title, 'Cancel', xform.editfeed_submit);
			},
			function(){//onFailure
				var comment = document.createElement('span');
				comment.innerHTML='<p>Failed to load settings.</p>';
				xform.draw('Edit feed', comment, [], 'welcome', undefined, 'Close', undefined);
			}
		)
	}

	xform.draw('Edit feed', undefined, form_elements, 'editfeed', 'Submit', 'Cancel', xform.editfeed_submit, 1);
	xform.editfeed_load();
}
xform.draw=function(form_title, form_comment, form_elements, form_action, submitname, cancelname, onsubmit_callback, invisible, form_prefix, comment_over_buttons) {
	var title=document.createElement('div');
	title.className='title';
	title.innerHTML=form_title;

	var fcontainer=document.getElementById('formcontainer');

	//fcontainer.style.backgroundColor=(form_action == 'messages' ? '#ffde9b' : '');
	fcontainer.innerHTML='';
	fcontainer.appendChild(title);
	if(!invisible) {
		//xShow(fcontainer);
		xDisplay(fcontainer.id,'block');
	}

	var form_wrap=document.createElement('div');
	if(form_prefix) {
		form_prefix.style.display = 'block';
		form_prefix.style.paddingBottom = '6px';
		form_wrap.appendChild(form_prefix);
	}
	form_wrap.appendChild(xform.prepare_form(form_elements, form_action, submitname, cancelname, onsubmit_callback,comment_over_buttons, form_comment));

	fcontainer.appendChild(form_wrap);
	gui.resize();
}
xform.submit=function(subj, success_call, failure_call) {
	var xmlhttp=new XMLHttpRequest();
	xmlhttp.open('POST', "/data.php"+"?s="+subj+"&sid="+Math.random(), true);
	xmlhttp.onreadystatechange=function(){
		if(xmlhttp.readyState==4){
			if (xmlhttp.status == 200) {
				if(xmlhttp.responseText.length) {
					if(debug) {alert(xmlhttp.responseText)};
					var resultset;
					try {
						resultset = eval(xmlhttp.responseText);
					} catch(error) {
						alert("buggy content received\n" + xmlhttp.responseText);
					}
					if(resultset[0] == 'OK') {
						success_call(resultset[1]);
					} else {
						failure_call(resultset[1]);
					}
				}
			} else {
				alert('Failed to fulfill request, please, try again later.');
			}
		}
	}
	if(document.getElementById('processing')) {
		gui.div_loading("processing");
	}
	xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
	xmlhttp.send(xform.set_form('forma')+"&uid="+(xGetCookie("uid")||1));
}
xform.prepare_form=function(felements, action, fsubmitname, cancelname, fonsubmit, comment_over_buttons, form_comment) {
	var tgt_form=document.createElement('form');
	tgt_form.name='forma';
	tgt_form.style.margin=0;
	var form_table=document.createElement('table');
	form_table.style.padding=form_table.style.margin=form_table.cellPadding=form_table.cellSpacing=0;
	var table_body=document.createElement('tbody');
	var i=0;

	while(i < felements.length) {
		var row=document.createElement('tr');
		var input_row=document.createElement('tr');
		var x = felements[i].cols;
		for(var j=0; j < x; j++) {
			var cell=document.createElement('td');
			if(felements[i].cols == 1) {
				cell.setAttribute('colspan','2');
				if(xIE4Up) {
					cell.colSpan='2';
				}
			}
			if(felements[i].type != 'ilable') {
				if(felements[i].type != 'checkbox') {
					cell.innerHTML=felements[i].field+':';
				}
				if(action == 'editfeed' && i) {
					cell.style.paddingTop= '4px';
				}
			} else {
				cell.innerHTML=felements[i].field;
				cell.style.fontWeight='bold';
				if(i) {
					cell.style.paddingTop= '6px';
				}
			}
			row.appendChild(cell);

			var input_cell=document.createElement('td');
			//if(action == 'editfeed' && i+1 == felements.length) {
			//		input_cell.style.paddingBottom= '4px';
			//}

			if(felements[i].cols == 1) {
				input_cell.setAttribute('colspan','2');
				if(xIE4Up) {
					input_cell.colSpan='2';
				}
			}

			var input;
			if(felements[i].type == 'textarea') {
				input=document.createElement('textarea');
				input.style.height='150px';
			} else if(felements[i].type == 'link') {
				if(felements[i].value != undefined && felements[i].value != '')  {
					input=document.createElement('a');
					input.setAttribute('href',felements[i].value);
					input.setAttribute('target','_blank');
					input.innerHTML=felements[i].value;
				} else {
					input=document.createElement('strong');
					input.innerHTML=(felements[i].value ? felements[i].value : 'n/a');
				}
			} else if(felements[i].type == 'lable' || felements[i].type == 'ilable') {
				input=document.createElement(felements[i].type == 'lable' ? 'strong':'span');
				input.innerHTML=(felements[i].value ? felements[i].value : 'n/a');
			} else if(felements[i].type == 'captcha') {
				//<img src="/image.php" style="float: left; margin-bottom: 1px; margin-right: 4px;" height="20" width="75">
				cimg=document.createElement('img');
				cimg.setAttribute('src','/image.php?s='+Math.random());
				cimg.setAttribute('width','75');
				cimg.setAttribute('height','20');
				cimg.style.marginRight='4px';
				input_cell.appendChild(cimg);
				input=document.createElement('input');
				input.setAttribute('type','text');
				input.style.width='75px';
				input.style.marginTop='4px';
			} else {
				input=document.createElement('input');
				input.setAttribute('type',felements[i].type);
				if(felements[i].type == 'hidden' && felements[i].cols == 1) {
					cell.style.display=input.style.display='none';
				}
			}

			input.setAttribute('name', felements[i].name);
			input.value=felements[i].value;
			input_cell.appendChild(input);
			if(felements[i].type=='checkbox') {
					input.defaultChecked=felements[i].checked ? true : false;
					if(i) {
						input_cell.style.paddingTop='4px';
					}
					input.style.margin='0px 4px';
					input.style.border= '0';
					if(xIE4Up) {
						input.style.styleFloat='left';
					} else {
						input.style.cssFloat='left';
					}
					var fieldSpan=document.createElement('span');
					fieldSpan.innerHTML=felements[i].field;
					input_cell.appendChild(fieldSpan);
			}
			if(felements[i].comment) {
				var sup=document.createElement('sup');
				sup.innerHTML=felements[i].comment;
				input_cell.appendChild(sup);
			}

			if(felements[i].error) {
				var span=document.createElement('span');
				input.setAttribute('style','border-color:red;');
				input.style.borderColor="#ff0000"
				span.setAttribute('style','color:red;');
				span.innerHTML=felements[i].error;
				span.style.color="#ff0000";
				cell.appendChild(document.createElement('br'));
				cell.appendChild(span);
			}
			if(felements[i].width) {
				input.style.width = felements[i].width;
			}
			input_row.appendChild(input_cell);
			i++;
		}
		table_body.appendChild(row);
		table_body.appendChild(input_row);
	}
	//create submit and cancel buttons
	if(fsubmitname != undefined || cancelname !=undefined) {
		var row=document.createElement('tr');
		var tbl_cell=document.createElement('td');
		var cell=document.createElement('div');
		tbl_cell.setAttribute('colspan','2');
		if(xIE4Up) {
			tbl_cell.colSpan='2';
		}
		cell.style.padding='0';
		cell.style.paddingTop=(action != 'messages' ? '4px' : '8px');

		if(comment_over_buttons != undefined) {
			tbl_cell.style.paddingTop='4px';
			comment_over_buttons.style.display = 'block';
			comment_over_buttons.style.padding = '4px 0';
			tbl_cell.appendChild(comment_over_buttons);
		}

		if(fsubmitname != undefined) {
			var submit_button=document.createElement('input');
			submit_button.setAttribute('type','button');
			submit_button.className='purp';
			submit_button.name='xsubmit';
			submit_button.value=fsubmitname;
//			alert(fonsubmit);
			submit_button.onclick=fonsubmit;
			cell.appendChild(submit_button);
			cell.appendChild(document.createTextNode(' '));
		}
		if(cancelname != undefined) {
			var cancel_button=document.createElement('input');
			cancel_button.setAttribute('type','button');
			cancel_button.className='w';
			cancel_button.value=cancelname;
			cancel_button.onclick=xform.cancel_button_onclick;
			cell.appendChild(cancel_button);
		}
		//s hidden
		if(action != undefined) {
			var action_input=document.createElement('input');
			action_input.setAttribute('type','hidden');
			action_input.setAttribute('name','s');
			action_input.setAttribute('value', action);
			cell.appendChild(action_input);
		}
		if(action != 'messages') {
			processing=document.createElement('span');
			processing.id="processing";
			cell.appendChild(processing);
		}
		tbl_cell.appendChild(cell);
		if(form_comment) {
			cell.style.paddingBottom='4px';
			//cell.appendChild(document.createElement('br'));
			tbl_cell.appendChild(form_comment);
		}
		row.appendChild(tbl_cell);
	}
	table_body.appendChild(row);
	form_table.appendChild(table_body);
	tgt_form.appendChild(form_table);
	return tgt_form;
}
xform.cancel_button_onclick=function() {
	el = document.getElementById("formcontainer");
	el.innerHTML='';
	//xHide(el);
	xDisplay(el.id,'none');
	gui.resize();
}
xform.set_form=function(formName) {
		var sFormData = '';
		var oForm = document.forms[1];//formName Does not work in IE
		//alert(document.forms[1]);
		var oElement, elName, elValue;
		// iterate over the form elements collection to construct the
		// label-value pairs.
		for (var i=0; i<oForm.elements.length; i++){
			oElement = oForm.elements[i];
			elName = oForm.elements[i].name;
			elValue = oForm.elements[i].value;
			switch (oElement.type)
			{
				case 'select-multiple':
					for(var j=0; j<oElement.options.length; j++){
						if(oElement.options[j].selected){
							sFormData += encodeURIComponent(elName) + '=' + encodeURIComponent(oElement.options[j].value) + '&';
						}
					}
					break;
				case 'radio':
				case 'checkbox':
					if(oElement.checked){
						sFormData += encodeURIComponent(elName) + '=' + encodeURIComponent(elValue) + '&';
					}
					break;
				case 'file':
				// stub case as XMLHttpRequest will only send the file path as a string.
					break;
				case undefined:
				// stub case for fieldset element which returns undefined.
					break;
				default:
					sFormData += encodeURIComponent(elName) + '=' + encodeURIComponent(elValue) + '&';
					break;
			}
		}
		sFormData = sFormData.substr(0, sFormData.length - 1);
		return sFormData;
//		this._isFormPost = true;
//		this.initHeader('Content-Type','application/x-www-form-urlencoded');
}

/* - Hat - */
var hat={}
hat.register_buttons=function() {
	//already has action
	//var el = document.getElementById("hat_register");
	//el.onclick=hat.hat_register_onclick;

	el = document.getElementById("hat_feedback");
	el.onclick=hat.hat_feedback_onclick;

	el = document.getElementById("hat_bookmark");
	el.onclick=hat.hat_bookmark_onclick

	el = document.getElementById("hat_help");
	el.onclick=hat.hat_help_onclick;
}

hat.hat_register_onclick=function() {
	xform.register();
}
hat.hat_feedback_onclick=function() {
	xform.feedback();
}
hat.hat_bookmark_onclick=function() {
	var title = 'RSS4ADULT - Online RSS Reader';
	var url = document.location;
	if(window.opera)
	{
			alert('Please, click Ctrl+T to bookmark this page.');
	}
	else if(window.external)  // IE Favorite
	{
		window.external.AddFavorite(url, title);
	}
	else if (window.sidebar)  // Mozilla Firefox Bookmark
	{
		window.sidebar.addPanel(title, url,"");
	}
}
hat.hat_help_onclick=function() {
	gui.div_clear("newslist");
	gui.div_clear("newscontent");
	xHide(document.getElementById("nc_caption"));
	var div=document.getElementById("newscontent");
	purge(div);
	div.innerHTML="&nbsp;";
	article_view.draw_original();
	state.feed_id=state.feed_array_index=-1;
	news_list.draw_header();
}

/* - Feeds list - */
var feeds_list={};
feeds_list.find_feed=function(feed_id, skip_uberCat_id) {
	for(var i in curFeeds){
		//ccc('Seek:'+feed_id+' i:'+i+curFeeds[i].name+' UC:'+adult2UC(curFeeds[i].adult) + ' feed_id:'+curFeeds[i].feed_id + ' cf=tf '+(curFeeds[i].feed_id == feed_id));
		if(curFeeds[i].feed_id == feed_id && (skip_uberCat_id == undefined || adult2UC(curFeeds[i].adult) == 2)) {
			return i;
		}
	}
}
feeds_list.reload_sidebar=function() {
	feeds_list.fetch_and_draw();
	feeds_list.fetch_and_draw_header();
}
feeds_list.fetch_and_draw=function(update_feed_id, update_feed_skip_adult) {
	if(state.publisher_id>0){
		cur_feeds=storage.load_object("curFeeds");
		feeds_list.draw();
	}else{
		gui.div_loading("feedslist");
	}
	var xmlhttp=new XMLHttpRequest();
	xmlhttp.open("GET","/data.php"+"?"+"s=feeds"+"&sid="+Math.random(),true);
	xmlhttp.onreadystatechange=function(){
		if(xmlhttp.readyState==4){
			var thisNewsCount=0;
			storage.save_string("curFeeds",xmlhttp.responseText);
			curFeeds=storage.load_object("curFeeds");
			curUnreadFeeds=new Object();
			var imgSpool = document.getElementById('imgSpool');
			for(var i in curFeeds){
				if(curFeeds[i].unread){
					if(i != 0) {
						thisNewsCount += curFeeds[i].unread;
					}
					curUnreadFeeds[curFeeds[i].id]=curFeeds[i].unread;
				}
				
				if(curFeeds[i].icon && curFeeds[i].feed_id && !preload.imgs[curFeeds[i].feed_id]) {
					preload.imgs[curFeeds[i].feed_id] = new Image();
					var imageEl = document.createElement('img');
					imageEl.src = images_path+"icons/"+curFeeds[i].icon;
					imgSpool.appendChild(imageEl);
					//ccc("preload.imgs["+curFeeds[i].feed_id+"].src = '"+images_path+"icons/"+curFeeds[i].icon+"';");
					setTimeout("preload.imgs["+curFeeds[i].feed_id+"].src = '"+images_path+"icons/"+curFeeds[i].icon+"';",5);
				}
			}
//			feeds_list.fetch_and_draw_header();
			if(update_feed_id) {
				var update_feed_idx = feeds_list.find_feed(update_feed_id, update_feed_skip_adult);
				if(update_feed_idx) {
					state.feed_array_index = update_feed_idx;
					state.feed_id = curFeeds[update_feed_idx].feed_id;
					if(update_feed_skip_adult) {
						state.uberCatshow = [0,0,1];
						state.uberCat=2;
					}
				}
			}
			feeds_list.draw();
			setTimeout('storage.save_object("curUnreadFeeds", curUnreadFeeds);',100);
			if(thisNewsCount > newsCount) {
				news_list.fetch_and_draw();
				if(FlashSound.supportedBrowser && newsCount != undefined && xGetCookie('sound') > 0) {
					swfobj.TGotoAndPlay('/cosmos', 'start');
				}
			}
			newsCount = thisNewsCount;
		}
	}
	xmlhttp.send(null);
}
feeds_list.draw=function() {
	//c("feeds_list.draw");
	var div=document.getElementById("feedslist");
	div.innerHTML="";
	var cnt=0;
	var ul=document.createElement("ul");
	state.curCatFeedsCount=0;
	state.feedUnreadCount = [0,0,0];
	for(var i in curFeeds) {
		if(curFeeds[i].feed_id !=0) {
			state.feedUnreadCount[adult2UC(curFeeds[i].adult)] += curFeeds[i].unread;
		}
		var id=curFeeds[i].feed_id;
		
		if(curFeeds[i].cats) {
			var cats=String(curFeeds[i].cats);
			curFeeds[i].cats = cats.split(',');
		}
//		ccc(curFeeds[i].feed_id + 'ooo' + state.uberCat + ' ' + curFeeds[i].adult + ' ucs' + state.uberCatshow[state.uberCat]);
		//(curFeeds[i].feed_id == 0 && logged && state.uberCatshow[state.uberCat]) ||
		if(
		   (curFeeds[i].feed_id == 0 && logged) ||
		   (state.flistShowRead || curFeeds[i].unread) &&
		   (
				(
				 	(state.uberCat == adult2UC(curFeeds[i].adult)) && state.uberCatshow[state.uberCat]
				)
				&&
					(adult2UC(curFeeds[i].adult) == 0 || adult2UC(curFeeds[i].adult) == 2 || !curFeeds[i].s)
				&& 
				(
					(!state.cat_id && !curFeeds[i].cats && !curFeeds[i].aff_cat) ||
			 		inArray(state.cat_id, curFeeds[i].cats) ||
			 		(curFeeds[i].aff_cat && state.cat_id == curFeeds[i].aff_cat) ||
			 		state.cat_id == 1
				)
			)
		) {
			ul.appendChild(feeds_list.item(i, id, curFeeds[i]));
			++cnt;
		}
	}

//	ccc(' # ' +adult2UC(1)+'- ' + state.feedUnreadCount[0]+ '-' + state.feedUnreadCount[1] + '-' + state.feedUnreadCount[2] +' ');

	if(!cnt){
			ul.innerHTML="<li>- no unread feeds -</li>";
	}
	if (logged && cnt==1 && state.cat_id == 1 && state.uberCat==2) {
		ul.innerHTML='<li><a href="javascript://" onclick="xform.addfeed();">Add a feed</a></li>';
	}
	state.curCatFeedsCount=cnt - (logged ? 1:0);
	if(sbfetched) {
		feeds_list.draw_header();
	} else {
		feeds_list.fetch_and_draw_header();
	}
	div.appendChild(ul);
}
feeds_list.item=function(array_index,id,o) {
	var el=document.createElement("li");
	el.id="f"+id;
	el.feed_array_index=array_index;
	el.feed_id=id;
	feeds_list.draw_item_content(el,o);
	el.onclick=feeds_list.item_onclick;
	return(el);
}

feeds_list.draw_item_content=function(li, o) {
	if(o.feed_id == state.feed_id){
		li.className='cur';
	} else {
			li.className=undefined;
	}
	if(o.feed_id == 0) {
		o.name = '<strong>'+o.name+'</strong>';
	}
	li.innerHTML='<a href="javascript://">'
		+'<img src="images/icons/'
		+(o.icon ? o.icon : 'default_ico.gif')
		+'" width="16" height="16" alt="" />'
		+ o.name
		+(o.unread ? ' ('+ o.unread+')' : '')
		+'</a>';

}
feeds_list.item_onclick=function() {
	var el;
	var previous_feed_id=state.feed_id;
	var previous_feed_array_index=state.feed_array_index;
	state.feed_array_index=this.feed_array_index;
	state.feed_id=curFeeds[state.feed_array_index].feed_id;
	if(adult2UC(curFeeds[state.feed_array_index].adult) == '0') {
		check_adult();
	}
	storage.save_object("state",state);
	el=xGetElementById("f"+previous_feed_id);
	if(el){
		feeds_list.draw_item_content(el,curFeeds[previous_feed_array_index]);
	}
	//alert(curFeeds[state.feed_array_index].feed_id + '--');
	feeds_list.draw_item_content(xGetElementById("f"+state.feed_id), curFeeds[state.feed_array_index]);
	gui.div_clear("newslist");
	gui.div_clear("newscontent");
//	gui.div_clear("nl_caption");
	state.news_id=0;
	news_list.fetch_and_draw();
//	news_list.draw_header();
}
feeds_list.fetch_and_draw_header=function($myfavorites) {
	sbfetched = true;
	//c("feeds_list.fetch_draw_header");
	var xmlhttp=new XMLHttpRequest();
	xmlhttp.open("GET","/data.php"+"?"+"s=cats"+"&uid="+(xGetCookie("uid")||1)+"&sid="+Math.random(),true);
	xmlhttp.onreadystatechange=function(){
		if(xmlhttp.readyState==4){
		//	alert(xmlhttp.responseText);
			storage.save_string("curCats",xmlhttp.responseText);
			curCats=storage.load_object("curCats");
			
			for(var k in curCats[state.uberCat]) {
				if(curCats[state.uberCat][k].cat_id == state.cat_id) {
					state.cat_array_index=k;
					break;
				}
			}
			feeds_list.draw_header();
			setTimeout('storage.save_object("curUnreadFeeds", curUnreadFeeds);',100);
		}
	}
	xmlhttp.send(null);
}
feeds_list.switch_uc=function(user) {
	state.uberCat = user;
	state.cat_id = -1;
	feeds_list.draw_header();
}
feeds_list.hide_uc=function(user) {
	if(user == 0 && !state.uberCatshow[user]) {
		state.uberCatshow[user] = Math.abs(state.uberCatshow[user] -  1);
	} else {
		state.uberCatshow[user] = Math.abs(state.uberCatshow[user] -  1);	
	}
/*	if() {
	state.cat_id = 1;
	}*/
	feeds_list.draw();
	//feeds_list.draw_header();
}
feeds_list.draw_header=function() {
	//c("feeds_list.draw_header");
	var div=document.getElementById("categories");
	gui.div_clear("categories");
	div.innerHTML='';
	for(i in curCats) {
		var summary=document.createElement("div");
		summary.className="summary";
		var paddiv=document.createElement("div");
		paddiv.className="pad";
		paddiv.innerHTML='<img src="'
			+ (i != 0 ? (i == 1 ? '/images/icons/default_ico.gif' : '/images/star.gif') :'/images/heart.png')
			+ '" style="margin-top:2px;" />'
			+'<span class="showhide" onclick="feeds_list.hide_uc('+i+');">'+(state.uberCatshow[i] ? 'hide' : 'show')+'</span>'
			+'<span class="title" onclick="feeds_list.switch_uc(' + i + ');">'
			+ (i != 0 ? (i == 1 ? 'General feeds' : 'Your feeds') : 'Adult feeds')
			+'</span><br />';
		if(state.uberCatshow[i]) {
		for(var j in curCats[i]){
			if(curCats[i][j] != undefined && curCats[i][j].cat_id != undefined) {
				paddiv.appendChild(feeds_list.header_item(i, j, curCats[i][j]));
				paddiv.appendChild(document.createTextNode(' '));
			}
		}
		}		
		summary.appendChild(paddiv);
		div.appendChild(summary);
	}
	gui.resize();
}

feeds_list.header_item=function(uber_index, array_index, o) {
	var el=document.createElement("span");
	//ccc(uber_index+' idx:' +array_index + 'obj:' +o)
	el.cat_id=o.cat_id;
	
	el.id=CU2catName(uber_index)+el.cat_id;
	el.cat_array_index=array_index;
	el.uber_index=uber_index;
	feeds_list.draw_header_item(el,o);
	el.onclick=feeds_list.header_item_onclick;
	return(el);
}
feeds_list.draw_header_item=function(span, o) {
	//var fUCindex = (span.uber_index != 0 ? (span.uber_index == 1 ? 2 : 0) : 1);
	if(o.cat_id == state.cat_id) {
		if(o.cat_id == 0 || o.cat_id == 1) {
			if(span.uber_index == state.uberCat) {
				span.className='cur';
			}
		} else {
			span.className='cur';
		}
	}
	if(1 || logged) {
		//ccc('***'+state.feedUnreadCount[fUCindex]+' '+(fUCindex));
	}
	span.innerHTML='<a href="javascript://">'+o.name+'</a>('+(o.cat_id == 1 ? state.feedUnreadCount[span.uber_index] : o.unread_news)+')';
}
feeds_list.header_item_onclick=function() {
	var el;
	var previous_cat_id=state.cat_id;
	var previous_cat_array_index=state.cat_array_index;
	var previous_uber_index=state.uberCat;
	state.cat_array_index=this.cat_array_index;
	state.uberCat=this.uber_index;
	state.cat_id=curCats[state.uberCat][state.cat_array_index].cat_id;
	storage.save_object("state",state);
	el=xGetElementById(CU2catName(previous_uber_index)+previous_cat_id);

/*	ccc(previous_uber_index + ' header_item_onclick ' + previous_cat_array_index);
/*	ccc(previous_uber_index + ' ibo ' + previous_cat_array_index);

	ccc('!!!'
			+'('+previous_uber_index+'x'+previous_cat_array_index+')'+curCats[previous_uber_index][previous_cat_array_index]
			+'---'
			+'('+state.uberCat+'x'+state.cat_array_index+')'+curFeeds[state.uberCat][state.cat_array_index]);
*/
	if(el){
		feeds_list.draw_header_item(el, curCats[previous_uber_index][previous_cat_array_index]);
	}
	//feeds_list.draw_item_content(xGetElementById("f"+state.feed_id), curFeeds[state.feed_array_index]);
	feeds_list.draw_header_item(xGetElementById(CU2catName(state.uberCat)+state.cat_id), curCats[state.uberCat][state.cat_array_index]);
	gui.div_clear("feedslist");
	gui.div_clear("newslist");
	gui.div_clear("newscontent");
	state.feed_id=state.feed_array_index=-1;
	feeds_list.draw();
	news_list.fetch_and_draw();
}

feeds_list.register_buttons=function() {
	var el = document.getElementById("sb_add_feed");
	el.onclick=feeds_list.add_feed_onclick;

	el = document.getElementById("sb_hide_read");
	el.src = images_path+(state.flistShowRead ? 'sb_hide_read.png' : 'sb_show_read.png');
	el.onclick=feeds_list.hide_read_onclick;

	el = document.getElementById("sb_export_feed");
	el.onclick=feeds_list.sb_export_feed;

	el = document.getElementById("sb_sound");
	el.src = images_path+(state.soundOn ? 'sb_sound_on.png' : 'sb_sound_off.png');
	el.onclick=feeds_list.sb_sound_onclick;
}

feeds_list.add_feed_onclick=function() {
	if(logged) {
		xform.addfeed();
	} else {
		reg_please();
	}
}
feeds_list.hide_read_onclick=function() {
	if(logged) {
		state.flistShowRead = Math.abs(state.flistShowRead-1);
		feeds_list.draw();
		this.src=images_path+(state.flistShowRead ? 'sb_hide_read.png' : 'sb_show_read.png');
	} else {
		reg_please();
	}
}
feeds_list.sb_export_feed=function() {
	//alert('export feed');
}
feeds_list.sb_sound_onclick=function() {
	var set = Math.abs(xGetCookie('sound')-1);
	if(!FlashSound.supportedBrowser) {
		set = 0;
		alert('Sorry this feature is not supported by your browser');
	}
	var el = document.getElementById("sb_sound");
	el.src = images_path+(set ? 'sb_sound_on.png' : 'sb_sound_off.png');
	if(set) {
		swfobj.TGotoAndPlay('/cosmos', 'start');
	}
	xSetCookie('sound',set);
}
feeds_list.sb_sound_check=function() {
	if(!FlashSound.supportedBrowser) {
		xSetCookie('sound',0);
	}
	var el = document.getElementById("sb_sound");
	el.src = images_path+(xGetCookie('sound') > 0 ? 'sb_sound_on.png' : 'sb_sound_off.png');
}
/* - Messages - */
messages = {};
messages.fetch_and_draw=function(){
	var xmlhttp=new XMLHttpRequest();
	xmlhttp.open("GET","/data.php"+"?"+"s=msgs"+"&uid="+(xGetCookie("uid")||1)+"&sid="+Math.random(),true);
	xmlhttp.onreadystatechange=function(){
		if(xmlhttp.readyState==4){
			var cnt=0;
			var curMsgs=eval(xmlhttp.responseText);
/*			var msgsContainer=document.createElement('div');

			for(var i in curMsgs){
				var msgRow = document.createElement('p');
				msgRow.style.paddingBottom='10px';
				msgRow.innerHTML='<strong>' + curMsgs[i].date + ' ' + curMsgs[i].subj + '</strong><br />'+curMsgs[i].body;
				msgsContainer.appendChild(msgRow);
				cnt++;
			}
*/
			var msgsContainer=[];
			for(var i in curMsgs){
				var msgRow = {'cols':1,'type':'ilable','field':curMsgs[i].date + ' ' + curMsgs[i].subj,'name':'name','value':curMsgs[i].body,'error':''}
				//msgRow.style.paddingBottom='10px';
				//msgRow.innerHTML='<strong>' + curMsgs[i].date + ' ' + curMsgs[i].subj + '</strong><br />'+curMsgs[i].body;
				//msgsContainer.appendChild(msgRow);
				msgsContainer.push(msgRow)
				cnt++;
			}

//{'cols':1,'type':'lable','field':'Feed name','name':'name','value':curFeeds[state.feed_array_index].name,'error':''},
			if(cnt) {
				xform.draw('Rss4adult.com news', undefined, msgsContainer, 'messages', undefined, 'Hide News', undefined, false);
			}
		}
	}
	xmlhttp.send(null);
}
/* - News list - */
var news_list= {};
news_list.fetch_and_draw=function(){
	if(state.feed_id>0){
		cur_feeds=storage.load_object("curNews");
		news_list.draw();
	}else{
		gui.div_loading("newslist");
	}
	var xmlhttp=new XMLHttpRequest();
	//ccc("/data.php"+"?"+"s=news"+"&fid="+state.feed_id+"&uid="+(xGetCookie("uid")||1)+"&sid="+Math.random());
	xmlhttp.open("GET","/data.php"+"?"+"s=news"+"&fid="+state.feed_id+"&uid="+(xGetCookie("uid")||1)+"&sid="+Math.random(),true);
	xmlhttp.onreadystatechange=function(){
		if(xmlhttp.readyState==4){
			storage.save_string("curNews",xmlhttp.responseText);
			curNews=storage.load_object("curNews");
			curUnreadNews=new Object();
			markedNews=new Object();
			for(var i in curNews){
				if(curNews[i].marked){
					markedNews[curNews[i].id]=curNews[i].unread;
				}
			}
			news_list.draw();
			news_list.draw_header();
//			setTimeout('storage.save_object("curUnreadNews", curUnreadNews);',100);
		}
	}
	xmlhttp.send(null);
}

news_list.draw_header=function() {
	var div=document.getElementById("nl_caption_feed");
	var o;
	if(state.feed_array_index >= 0) {
		o = curFeeds[state.feed_array_index];
	}
	if(o) {
		div.innerHTML = '<img class="ico" src="/images/icons/'+(o.icon ? o.icon : 'default_ico.gif')+'" width="16" height="16" alt="" /><strong>'
		+ o.name + '</strong> ' + (o.unread ? 'unread (' + o.unread + ')' : '');
	} else {
		div.innerHTML = '<img class="ico" src="/images/spacer.gif" width="16" height="16" alt="" />&nbsp;';
	}
}
news_list.draw=function(){
	var div=document.getElementById("newslist");
	div.innerHTML="";
	var cnt=0;
	var ul=document.createElement("ul");
	state.curNewsCount=0;
	//c("news_list.draw"+curNews[0].news_id);
	if(curNews[0] && curNews[0].news_id) {
		for(var i in curNews){
			var id=curNews[i].news_id;
			var tags_fit=0;
			if((curNews[i].unread || state.nlistShowRead) || curNews[i].marked){
				ul.appendChild(news_list.item(i,id,curNews[i]));
				++cnt;
			}
		}
	}
	if(!cnt){
		if(state.feed_id == -1 && state.curCatFeedsCount >= 0) {
			ul.innerHTML="<li>&nbsp; Select a feed at left </li>";
		} else {
			ul.innerHTML="<li>&nbsp; No news to display </li>";
		}
	}
	state.curNewsCount = cnt;
	div.appendChild(ul);
	if(state.feed_id > 0) {
		article_view.draw();
	}
}
news_list.item=function(array_index,id,o){
	var el=document.createElement("li");
	el.id="n"+id;
	el.news_array_index=array_index;
	el.news_id=id;
	news_list.draw_item_content(el,o);
	el.onclick=news_list.item_onclick;
	return(el);
}

news_list.draw_item_content=function(li, o){
	if(o.news_id == state.news_id){
		li.className='cur';
	} else {
		li.className=undefined;
	}
	li.innerHTML='<a href="javascript://" '
		+ (o.unread || o.marked ? 'class="' + (o.marked ? 'marked"><img src="/images/nl_remove.gif" width="74" hight="15" alt="remove" onclick="bookmark_news(' + o.news_id  + ',0);" />' : 'unread">') : '>')
		+ o.date
		+ '<span>'
		+ o.title
		+ '</span></a>';

}
news_list.item_onclick=function() {
	var el;
	var previous_news_id=state.news_id;
	var previous_news_array_index=state.news_array_index;
	state.news_array_index=this.news_array_index;
	state.news_id=curNews[state.news_array_index].news_id;
	storage.save_object("state",state);
	el=xGetElementById("n"+previous_news_id);
	if(el){
		news_list.draw_item_content(el, curNews[previous_news_array_index]);
	}
	news_list.draw_item_content(xGetElementById("n"+state.news_id), curNews[state.news_array_index]);
	gui.div_top("newscontent");
	article_view.fetch_and_draw();
}

news_list.register_buttons=function() {
	var el = document.getElementById("nl_hide_read");
	el.src=images_path+(state.nlistShowRead ? 'nl_hide_read.gif' : 'nl_show_read.gif');
	el.onclick=news_list.hide_read_onclick;

	el = document.getElementById("nl_mark_unread");
	el.onclick=news_list.mark_unread_onclick;

	el = document.getElementById("nl_mark_read");
	el.onclick=news_list.mark_read_onclick;

	el = document.getElementById("nl_feed_props");
	el.onclick=news_list.feed_props_onclick;

	el = document.getElementById("nl_del_feed");
	el.onclick=news_list.del_feed_onclick;
}

news_list.hide_read_onclick=function() {
	if(logged) {
		state.nlistShowRead = Math.abs(state.nlistShowRead-1);
		news_list.draw();
		var el = document.getElementById("nl_hide_read");
		el.src=images_path+(state.nlistShowRead ? 'nl_hide_read.gif' : 'nl_show_read.gif');
		el.setAttribute('title',(state.nlistShowRead ? 'Hide read' : 'Show read'));
	} else {
		reg_please();
	}
}

news_list.mark_unread_onclick=function() {
	if(logged) {
		var changedCounter = 0;
		for(var i in curNews){
			if(curNews[i].unread != 1) {
				curNews[i].unread=1;
				changedCounter++;
			}
		}
		var xmlhttp2=new XMLHttpRequest();
		xmlhttp2.open("GET","/data.php"+"?s=mark_allunread"+"&fid="+state.feed_id+"&sid="+Math.random(),true);
		xmlhttp2.onreadystatechange=function(){};
		xmlhttp2.send(null);
		curFeeds[state.feed_array_index].unread = curNews.length;

				if(curFeeds[state.feed_array_index].cats) {
				for(var k in curFeeds[state.feed_array_index].cats) {
						//alert(curFeeds[state.feed_array_index].cats[0]);
						for(var l in curCats[state.uberCat]) {
							if(curCats[state.uberCat][l].cat_id == curFeeds[state.feed_array_index].cats[k]) {
								curCats[state.uberCat][l].unread_news += changedCounter;
							}
						}
					}
				} else {
					curCats[state.uberCat][1].unread_news += changedCounter;//  category 'untagged'
				}
				state.feedUnreadCount[state.uberCat] += changedCounter;//  category 'all'
 				newsCount += changedCounter;//sound
		//curCats[state.uberCat][(state.cat_array_index ? state.cat_array_index : 0)].unread_news = curFeeds[state.feed_array_index].unread;
		feeds_list.draw_header((state.cat_array_index ? state.cat_array_index : 0), xGetElementById("c"+state.cat_id));
		feeds_list.draw_item_content(xGetElementById("f"+state.feed_id), curFeeds[state.feed_array_index]);
		news_list.draw_header();
		news_list.draw();
	} else {
		reg_please();
	}
}

news_list.mark_read_onclick=function() {
	if(logged) {
		var changedCounter = 0;
		for(var i in curNews){
			if(curNews[i].unread != 0) {
				curNews[i].unread=0;
				changedCounter++;
			}
		}
		var xmlhttp2=new XMLHttpRequest();
		xmlhttp2.open("GET","/data.php"+"?s=mark_allread"+"&fid="+state.feed_id+"&sid="+Math.random(),true);
		xmlhttp2.onreadystatechange=function(){};
		xmlhttp2.send(null);

		curFeeds[state.feed_array_index].unread = 0;

				if(curFeeds[state.feed_array_index].cats) {
					for(var k in curFeeds[state.feed_array_index].cats) {
						//alert(curFeeds[state.feed_array_index].cats[0]);
						for(var l in curCats[state.uberCat]) {
							if(curCats[state.uberCat][l].cat_id == curFeeds[state.feed_array_index].cats[k]) {
								curCats[state.uberCat][l].unread_news -= changedCounter;
							}
						}
					}
				} else {
					curCats[state.uberCat][1].unread_news -= changedCounter;//  category 'untagged'
				}
				state.feedUnreadCount[state.uberCat] -= changedCounter;//  category 'all'
				newsCount -= changedCounter;//sound
//		curCats[state.uberCat][(state.cat_array_index ? state.cat_array_index : 0)].unread_news = curFeeds[state.feed_array_index].unread;
		feeds_list.draw_header((state.cat_array_index ? state.cat_array_index : 0), xGetElementById("c"+state.cat_id));
		feeds_list.draw_item_content(xGetElementById("f"+state.feed_id), curFeeds[state.feed_array_index]);
		news_list.draw_header();
		news_list.draw();
	} else {
		reg_please();
	}
}

news_list.feed_props_onclick=function() {
	if(logged) {
		if(curFeeds[state.feed_array_index] && state.feed_id) {
			if(curFeeds[state.feed_array_index].adult) {
				alert('Feed can not be edited');
			}
			xform.editfeed();
		} else if(state.feed_id != 0) {
			alert('Please, select Feed channel you wish to edit');
		}
	} else {
		reg_please();
	}
}

news_list.del_feed_onclick=function() {
	if(logged) {
		if(state.feed_id && !curFeeds[state.feed_array_index].adult) {
			if(confirm("Are you sure ?")) {
				var form_elements=[
					{'cols':1,'type':'hidden','field':'','name':'feed_id','value':state.feed_id,'error':''}
				];
				xform.delfeed_submit=function(){
					xform.submit('delfeed',
						function(response){//onSuccess really delete
							changedCounter = (curFeeds[state.feed_array_index].unread ? curFeeds[state.feed_array_index].unread : 0);
							if(changedCounter && curFeeds[state.feed_array_index].cats) {
								for(var k in curFeeds[state.feed_array_index].cats) {
									//alert(curFeeds[state.feed_array_index].cats[0]);
									for(var l in curCats[state.uberCat]) {
										if(curCats[state.uberCat][l].cat_id == curFeeds[state.feed_array_index].cats[k]) {
											curCats[state.uberCat][l].unread_news -= changedCounter;
										}
									}
								}
							} else {
								curCats[state.uberCat][1].unread_news -= changedCounter;//  category 'untagged'
							}
							state.feedUnreadCount[state.uberCat] -= changedCounter;//  category 'all'
							delete(curFeeds[state.feed_array_index]);
							state.feed_array_index=-1;
							gui.div_clear("newslist");
							gui.div_clear("newscontent");
							feeds_list.draw();
							news_list.draw_header();
							var user = eval(response);
							xform.cancel_button_onclick();
							//window.onload();
							//reload most of the controls
							//gui.resize();
						},
						function(response){//onErrors
							//c("!!!"+response);
						}
					)
				}
				xform.draw('', undefined, form_elements, 'delfeed', 'Submit', '', xform.delfeed_submit, 1);
				xform.delfeed_submit();
			}
		} else if(curFeeds[state.feed_array_index].adult) {
			alert('Feed can not be deleted');
		} else {
			alert('Feed is not selected');
		}
	} else {
		reg_please();
	}
}

/* - Article view - */
var article_view={};
article_view.fetch_and_draw=function(){

	var div=document.getElementById("newscontent");
	gui.div_loading("newscontent");
	if(state.news_id == 0){
			gui.div_clear("newslist");
			gui.div_clear("newscontent");
			xHide(document.getElementById("nc_caption"));
			var ncdiv=document.getElementById("newscontent");
			purge(ncdiv);
			ncdiv.innerHTML="&nbsp;";
			article_view.draw_original('orig');
	}else{
		if(state.showOrig){
			var div=document.getElementById("nc_caption");
			purge(div);
			div.innerHTML="<small>&nbsp;</small>";
			article_view.draw();
		}
		var xmlhttp=new XMLHttpRequest();
		xmlhttp.open("GET","/data.php"+"?s=art"+"&news_id="+state.news_id,true);
		xmlhttp.onreadystatechange=function() {
			if(xmlhttp.readyState==4){
				storage.save_string("curArticle",xmlhttp.responseText);
				curArticle=storage.load_object("curArticle");
				if(!state.show_original_article){
					article_view.draw();
				}
				article_view.draw_header();
				if(logged) {
					mark_news(state.news_id, 0);
				} else {
					log_news_read(state.news_id, state.feed_id);
				}
			}
		}
		xmlhttp.send(null);
	}
}
article_view.draw=function(){

	var div=document.getElementById("newscontent");
	if(state.news_id==0){
		purge(div);
		if(state.curNewsCount) {
			div.innerHTML="&nbsp; Select a news item at top";
		} else {
			div.innerHTML="&nbsp;";
		}
	}else{
		if(state.showOrig || typeof(curArticle) == 'undefined'  || !curArticle){
	//		article_view.draw_original();
		}else{
			div.innerHTML='<div><div id="newsheader"><h1>'+curArticle[0].title+'</h1>'+curArticle[0].date+'</div>'
				+'<div id="newsbody">'
				+curArticle[0].descr+'<a class="full" href="'
				+curArticle[0].link+'" target="blank"><img src="/images/view_full.gif" height="25" width="131" alt="View Full Page" /></a>'
				+'</div></div>';
		}
	}
}
article_view.draw_original=function(subj){
	subj = (subj ? 'orig':'help')
	var div=document.getElementById("newscontent");
	gui.div_loading("newscontent");
	var xmlhttp=new XMLHttpRequest();
	xmlhttp.open("GET","/data.php"+"?"+"s="+subj+"&uid="+(xGetCookie("uid")||1)+"&sid="+Math.random(),true);
	xmlhttp.onreadystatechange=function(){
		if(xmlhttp.readyState==4){
			div.innerHTML=xmlhttp.responseText;
		}
	}
	xmlhttp.send(null);
}
article_view.draw_header=function(){
	var div=document.getElementById("nc_caption");
	xShow(div);
}
article_view.register_buttons=function() {
	var el = document.getElementById("nc_mark_news");
	el.onclick=article_view.mark_news_onclick;

	el = document.getElementById("nc_keep_unread");
	el.onclick=article_view.keep_unread_onclick;
}
article_view.mark_news_onclick=function() {
	if(state.news_id) {
		bookmark_news(state.news_id,1);
	}
	else {
		alert('Article is not selected')
	}
}
article_view.keep_unread_onclick=function() {
	if(state.news_id) {
		mark_news(state.news_id,1);
	}
	else {
		alert('Article is not selected')
	}
}
/* - Misc - */
adult2UC=function(adult_id) {
	if(adult_id == undefined || !adult_id) {
		return 2;
	} else if(adult_id == 1) {
		return 0;
	} else {
		return 1;
	}
}

CU2catName=function(cu) {
	return cu==0 ? "c" : (cu==1 ? 'cg' : 'cu') ;
}
mark_news=function(nid, set) {
	if(logged) {
		el = document.getElementById("n" + nid);
		for(var i in curNews){
			if(nid == curNews[i].news_id) {
				if(curNews[i].unread != set) {
					var tgt_feed_array_index = state.feed_array_index;
					var tgt_uber_cat = state.uberCat;
					if(curNews[i].feed_id != undefined) {//'bookmarked'
						for(var l in curFeeds) {
							if(curNews[i].feed_id == curFeeds[l].feed_id) {
								tgt_feed_array_index = l;
								tgt_uber_cat = adult2UC(curFeeds[l].adult);
								break;
							}
						}
					}
					var tgt_feed_rel = curFeeds[tgt_feed_array_index].rel ? curFeeds[tgt_feed_array_index].rel : 0;

					curFeeds[tgt_feed_array_index].unread = curFeeds[tgt_feed_array_index].unread + (set ? 1 : -1);
					if(tgt_feed_array_index !=0 && curNews[i].marked==1) {
						feeds_list.draw_item_content(xGetElementById("f0"), curFeeds[0]);
					}

					if(curFeeds[tgt_feed_array_index].cats || curFeeds[tgt_feed_array_index].aff_cat) {
						if(curFeeds[tgt_feed_array_index].aff_cat) {
							curFeeds[tgt_feed_array_index].cats = [curFeeds[tgt_feed_array_index].aff_cat];
						}
						for(var k in curFeeds[tgt_feed_array_index].cats) {
							for(var l in curCats[tgt_uber_cat]) {
								if(curCats[tgt_uber_cat][l].cat_id == curFeeds[tgt_feed_array_index].cats[k]) {
									curCats[tgt_uber_cat][l].unread_news += (set ? 1 : -1);
								}
							}
						}
					} else {
						curCats[state.uberCat][1].unread_news += (set ? 1 : -1);//  category 'untagged'
					}
					//related
					//ccc(state.feedUnreadCount[0]+ '-' + state.feedUnreadCount[1] + '-' + state.feedUnreadCount[2] +' before[' + tgt_uber_cat + ']' + state.feedUnreadCount[tgt_uber_cat]);
					state.feedUnreadCount[tgt_uber_cat] += (set ? 1 : -1);//  category 'all'
					//ccc(state.feedUnreadCount[0]+ '-' + state.feedUnreadCount[1] + '-' + state.feedUnreadCount[2] +'after[' + tgt_uber_cat + ']' + state.feedUnreadCount[tgt_uber_cat]);
					if(tgt_feed_rel) {
						curFeeds[tgt_feed_rel].unread = curFeeds[tgt_feed_rel].unread + (set ? 1 : -1);
						//rel ubercat
						var rel_uber_cat = adult2UC(curFeeds[tgt_feed_rel].adult);
						if(curFeeds[tgt_feed_rel].cats || curFeeds[tgt_feed_rel].aff_cat) {
							if(curFeeds[tgt_feed_rel].aff_cat) {
								curFeeds[tgt_feed_rel].cats = [curFeeds[tgt_feed_rel].aff_cat];
							}
							for(var k in curFeeds[tgt_feed_rel].cats) {
								for(var l in curCats[rel_uber_cat]) {
									if(curCats[rel_uber_cat][l].cat_id == curFeeds[tgt_feed_rel].cats[k]) {
										curCats[rel_uber_cat][l].unread_news += (set ? 1 : -1);
									}
								}
							}
						} else {
							curCats[rel_uber_cat][1].unread_news += (set ? 1 : -1);//  category 'untagged'
						}
						state.feedUnreadCount[rel_uber_cat] += (set ? 1 : -1);
					}
					newsCount += (set ? 1 : -1);
					feeds_list.draw_header((state.cat_array_index ? state.cat_array_index : 0), xGetElementById(CU2catName(tgt_uber_cat)+state.cat_id));
					if(curNews[i].feed_id == undefined) {
						feeds_list.draw_item_content(xGetElementById("f"+state.feed_id), curFeeds[tgt_feed_array_index]);
					}
					news_list.draw_header();
					curNews[i].unread=set;
					var xmlhttp2=new XMLHttpRequest();
					xmlhttp2.open("GET","/data.php"+"?s=mark_read"+"&news_id="+curNews[i].news_id+"&set="+set+"&sid="+Math.random(),true);
					xmlhttp2.onreadystatechange=function(){};
					xmlhttp2.send(null);
				}
				news_list.draw_item_content(el, curNews[i]);
				break;
			}
		}
	} else {
		reg_please();
	}
}

log_news_read=function(nid,fid) {
	var xmlhttp2=new XMLHttpRequest();
	xmlhttp2.open("GET","/data.php"+"?s=mark_read"+"&news_id="+nid+"&set=1&fid="+fid+"&sid="+Math.random(),true);
	xmlhttp2.onreadystatechange=function(){};
	xmlhttp2.send(null);
}

bookmark_news=function(nid, set) {
	if(logged) {
		el = document.getElementById("n" + nid);
		for(var i in curNews){
			if(nid==curNews[i].news_id) {
				if(curNews[i].marked!=set) {
					curNews[i].marked=set;
					if(curFeeds[0].unread >= 0) {
						curFeeds[0].unread = curFeeds[0].unread + (set ? 1 : -1);
						feeds_list.draw_item_content(xGetElementById("f0"), curFeeds[0]);
					}
					if(set == 0 && state.feed_id == 0) {
						el.parentNode.removeChild(el);
					} else {
						news_list.draw_item_content(el, curNews[i]);
					}
					news_list.draw_header();
					var xmlhttp2=new XMLHttpRequest();
					xmlhttp2.open("GET","/data.php"+"?s=bmark"+"&news_id="+curNews[i].news_id+"&set="+set+"&sid="+Math.random(),true);
					xmlhttp2.onreadystatechange=function(){};
					xmlhttp2.send(null);
				}
			}
		}
	} else {
		reg_please();
	}
}
check_adult=function() {
	ccc(logged + ' && ' + state.allowX );
	if(!logged && xGetCookie('allowX') != '1' || logged && state.allowX != 1) {
		if(confirm('Display adult feeds ? (contains sexual material and nudity. you must be 21 years old or over)')) {
			if(logged) {
				state.allowX = 1;
			} else {
				var date = new Date();
				date.setTime(date.getTime()+(1000*24*3600*1000));
				xSetCookie('allowX','1');
			}
		} else {
			
			state.uberCatshow[0] = 0;
			if(!logged) {
				state.uberCatshow[1] = 1;
				state.uberCat=1;
			}else {
				state.uberCatshow[1] = 0;
				state.uberCatshow[2] = 1;
				state.uberCat=2;
			}
			state.cat_id=1;
			feeds_list.draw();
		}
	}
}
reg_please=function() {
	if(confirm('This feature is accessable only for registered users. Do you want to register?')) {
		hat.hat_register_onclick();
	}
}
xrefresh=function(initflag) {
	if(!initflag) {
		sbfetched=false;
		feeds_list.fetch_and_draw();
	}
	setTimeout('xrefresh();', readerRefreshRate);
}
hide_news=function(set) {
	if(xGetCookie('hidenews',1)) {
		set = false;
	} else if(!set){
		xSetCookie('hidenews',1);
	}
	el = document.getElementById("blog");
	if(el) {
		xDisplay(el.id,(set ? 'block' : 'none'));
	}
}

