	String.prototype.trim = function()
	{ 
	   var string = this;
	   
	   //Remove leading spaces
	   while(string.charAt(0) == " ")
		  string = string.substring(1, string.length);
	
	   //Remove trailing spaces
	   while(string.charAt(string.length-1) == " ")
		  string = string.substring(string, string.length-1);
	   return string;
	}

	//var rExp = /(http:\/\/.*)\/?/;
	var srvName = "http://"+window.location.hostname;

	var activeCat=null;
	var categories=Array();

function evalScripts(data)
{
	var scripts=new Array();
	var r=/<script[^>]*>(.*?)<\/script>/;
	while(r.test(data))
	{
		scripts.push(r.exec(data)[1]);
		data=data.replace(r,'');
	}
	return {html:data, js:scripts};
}

function Message(mess)
{
	var el=document.getElementById('messagesArea');
	if (el)
		el.innerHTML=mess;
}

function placeForm(form)
{
	var el=document.getElementById('settings_area');
	if (el)
		el.innerHTML=form;
}

function borderCat(arg)
{
		if (activeCat!=arg)
		{
			arg.className="active";
			activeCat.className="inactive";
			activeCat=arg;
		}
		//alert(activeCat.id);
}

function selectFeed(feed)
{
	if (activeFeed!=feed)
	{
		activeFeed.style.border='none';
		feed.style.border='1px solid #303030';
		activeFeed=feed;			
	}
}

function selectFeed1(feed)
{
	if (activeFeed!=feed)
	{
		feed.className='active';
		activeFeed.className='inactive';
		activeFeed=feed;
	}
}

function loadFeedsTab1()
{
	var cb={
		success:function(o)	{
			var resp=evalScripts(o.responseText);
			placeForm(resp.html);
			for (ind in resp.js) eval(resp.js[ind]);
			var inp = document.getElementById('settings_bd').getElementsByTagName('input')[0];
			if (addContent && inp){
				inp.value = addContentURL;
			}
			addContent = false;
		},
		failure:function(){
			Message('Failed to load form');
		}
	};
	
	YAHOO.util.Connect.asyncRequest('POST', srvName+'/rssreader/usr/extensions/add_feeds.inc.php', cb, 'foo');
	Message("Please wait");
}

function loadFeedsTab2()
{
	if (activeCat)
	{
		var id=activeCat.id;
		var rexp=/cat([0-9]*)/;
		id=rexp.exec(id)[1];
	}
	else
	{
		Message('Select category or create one');
		return;
	}
	
	var url=document.getElementById('source').value;
	var tags = document.getElementById('contentTags').value;
	
	var regExp=/http:\/\/.*\/.*/;
	if (!regExp.test(url))
	{
		Message('format: http://server/path');	
		return;
	}
	
	var cb={
		success:function(o)	{
			var resp=evalScripts(o.responseText);
			placeForm(resp.html);
			for (ind in resp.js) eval(resp.js[ind]);
		},
		failure:function(){
			Message('Failed to load form');
		}
	};
	
	YAHOO.util.Connect.asyncRequest('POST', srvName+'/rssreader/usr/extensions/add_feeds.inc.php', cb, 'do=addFeedsStep2&id='+id+'&url='+url+'&tags='+tags);
	Message("Please wait");
}

function loadColorsTab1()
{
	// get category select pane	
var cb={
		success:function(o)	{
			var resp=evalScripts(o.responseText);
			placeForm(resp.html);
			for (ind in resp.js) eval(resp.js[ind]);
		},
		failure:function(){
			Message('Failed to load form');
		}
	};
	
	YAHOO.util.Connect.asyncRequest('POST', srvName+'/rssreader/usr/extensions/add_feeds.inc.php', cb, 'do=colorsForm1');
	Message("Please wait");	
}
function loadCrCatTab1()
{
	// get category select pane	
	var cb={
		success:function(o)	{
			var resp=evalScripts(o.responseText);
			placeForm(resp.html);
			for (ind in resp.js) eval(resp.js[ind]);
		},
		failure:function(){
			Message('Failed to load form');
		}
	};
	
	YAHOO.util.Connect.asyncRequest('POST', srvName+'/rssreader/usr/extensions/add_feeds.inc.php', cb, 'do=createCat');
	Message("Please wait");	
}

function submitCrCat()
{
	var el=document.getElementById('newCatName');
	var cat = el.value;
	
	if (cat.length==0)
	{
		Message('Please type category name');	
		return;
	}
	
	for (v in categories)
	{
		if (categories[v]==cat)
		{
			Message('This category already exists');	
			return;
		}
	}
	// callback function
	var cb={
		success:function(o)	{
			var resp=evalScripts(o.responseText);
			placeForm(resp.html);
			for (ind in resp.js) eval(resp.js[ind]);
		},
		failure:function(){
			Message('Failed to load form');
		}
	};
	
	YAHOO.util.Connect.asyncRequest('POST', srvName+'/rssreader/usr/extensions/add_feeds.inc.php', cb, 'do=makeCat&catName='+cat);
	Message("Please wait");		
}

function loadColorsTab2()
{
	// check if dir is chosen
	if (activeCat)
	{
		var id=activeCat.id;
		var rexp=/cat([0-9]*)/;
		id=rexp.exec(id)[1];
	}
	else
	{
		Message('Select category or create one');
		return;
	}
	
	var cb={
		success:function(o)	{
			var resp=evalScripts(o.responseText);
			placeForm(resp.html);
			for (ind in resp.js) {
				eval(resp.js[ind]);
				
			}
		},
		failure:function(){
			Message('Failed to load form');
		}
	};
	
	YAHOO.util.Connect.asyncRequest('POST', srvName+'/rssreader/usr/extensions/add_feeds.inc.php', cb, 'do=colorsForm2&id='+id);
	Message("Please wait");
	
}

//########################colors for feeds###############################
var activeFeed=null;
var feedColors= new Array();
var i;
	
function toHex(c) {
  var r, g, b;
  r = c[0].toString(16);
  if (c[0] < 0x10) {
    r = "0" + r;
  }
  g = c[1].toString(16);
  if (c[1] < 0x10) {
    g = "0" + g;
  }
  b = c[2].toString(16);
  if (c[2] < 0x10) {
    b = "0" + b;
  }
  return (r + g + b).toUpperCase();
}


function sf_ok(f, v) {
  if (window.event) {
    if (event.keyCode == 13) {
      sf_oc(f, v); // simulate onchange
      event.cancelBubble = true;
    }
  }
}

var sf_vv = /#[0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F][0-9A-F]/i;

function feed_sf(f, v) {
	// check if V have color format(#xxxxxx)
  if (!sf_vv.test(v)) {
    return;
  }
  	//alert(active.id.length);
  	var regexp = /^feed([0-9]*)/;
	var id=regexp.exec(f.id)[1];
	
	feedColors[id] = v;
 	f.style.background = v;
}

function ws(c, s, z) {
  var v = "#" + toHex(c);
  var out=(
    "<td style='font-size:1px; height:20px; width:10px;' onclick=\"feed_sf(activeFeed,'" + v +
    "')\" title=\"" + v + "\" " + ((s == 1) ? "" : ("colspan=\"" + s +
    "\" ")) + "bgcolor=\"" + v + "\" onmouseover=\"status='" + v +
    "'\" " + "onmouseout=\"status=''\"><div class=\"" + z + "\"></div></td>");
  return out;
}


// LAYOUT OF THE COLORPIKER PANE
function feedsWt() {
  var out='';
  /*for(var r = 255; r >= 100; r -= 30) {
    out+="<tr>";
    for(var g = 255; g >= 100; g -= 30) {
      for(var b = 255; b >= 100; b -= 30) {
        out+=ws([r, g, b], 1, "swatch");
      }
    }
    out+="</tr>";
  }*/
  
  var cLen = treemapColors.length;
  
  var size = parseInt(Math.sqrt(cLen)) + 1;
  
  for (var i=0; i<size; i++){
	out+='<tr>';
  	for(var j=0; j<size; j++){
  		if (typeof(treemapColors[i*size+j]) != 'undefined'){
  			var col = treemapColors[i*size+j];
  			out+='<td style="font-size:1px" onclick="feed_sf(activeFeed, \''+col+'\')" title="'+col+'" bgcolor="'+col+'" width="20" height="10"></td>';
  			//alert(out);
  			//return;
  		}else{
  			out+='<td></td>';
  		}
  	}
  	out+='</tr>';
  }
  
 // out+="<tr>";
 // for(var l = 255; l >= 0; l -= 51) {
 //   out+=ws([l, l, l], 6, "swatch2");
 // }
 // out+="</tr>";
 
  //alert(out);
  return out;
}



function SaveFeedColors()
{
	var postData='do=updateColors';
	for (i in feedColors){
		if (document.getElementById('feed'+i)) 
		postData=postData+'&feed['+i+']='+feedColors[i];
	}
	
	var clb =
	{
	  success:function(o)
	  {
			var resp=evalScripts(o.responseText);
			placeForm(resp.html);
			for (ind in resp.js) eval(resp.js[ind]);
	  },
	  failure: function()
	  {
		Message('Failed to load form');
	  },
	  argument: ['foo','bar']
	};
	YAHOO.util.Connect.asyncRequest('POST',srvName+'/rssreader/usr/extensions/add_feeds.inc.php', clb, postData);
	Message('Please wait...');
}

function ManageFeedsTab1()
{
	var postData='do=manageFeeds1';
	var clb ={
	  success:function(o){
			var resp=evalScripts(o.responseText);
			placeForm(resp.html);
			for (ind in resp.js) eval(resp.js[ind]);
	  },
	  failure: function(){
		Message('Failed to load form');
	  },
	  argument: ['foo','bar']
	};
	YAHOO.util.Connect.asyncRequest('POST',srvName+'/rssreader/usr/extensions/add_feeds.inc.php', clb, postData);
	Message('Please wait...');	
}

function loadFeedsFromCat(catId){
	var postData='do=loadFeedsFromCat&catId='+catId;
	var clb ={
	  success:function(o){
			var resp=evalScripts(o.responseText);
			var feed_area=document.getElementById('feeds_list');
			feed_area.innerHTML=resp.html;
			Message('Feeds loading finished');
			for (ind in resp.js) eval(resp.js[ind]);
	  },
	  failure: function(){
		Message('Failed to load feeds list...');
	  },
	  argument: ['foo','bar']
	};
	YAHOO.util.Connect.asyncRequest('POST',srvName+'/rssreader/usr/extensions/add_feeds.inc.php', clb, postData);
	Message('Please wait...');	
}

function DeleteCat(id)
{
	var postData='do=deleteCatById&catId='+id;
	var el=document.getElementById('cat'+id);
	var clb ={
	  success:function(o){
			var resp=evalScripts(o.responseText);
			for (ind in resp.js) eval(resp.js[ind]);
			if (resp.html.indexOf('OK')!=-1)
			{
				Message('Category deleted');
				if (el==activeFeed) activeFeed=0;
				el.parentNode.style.display='none';
			}else
			{
				Message('Unable to delete category');
			}
	  },
	  failure: function(){
		Message('Unable to send query');
	  },
	  argument: ['foo','bar']
	};

	if (confirm('Really delete category: '+el.innerHTML+'\n It will be deleted with all contained feeds'))
	{
		Message('Please wait');
		YAHOO.util.Connect.asyncRequest('POST',srvName+'/rssreader/usr/extensions/add_feeds.inc.php', clb, postData);		
	}	
}

function DeleteFeed(id)
{
	var postData='do=deleteFeedById&feedId='+id;
	var el=document.getElementById('feed'+id);
	var clb ={
	  success:function(o){
			var resp=evalScripts(o.responseText);
			for (ind in resp.js) eval(resp.js[ind]);
			if (resp.html.indexOf('OK')!=-1)
			{
				Message('Feed deleted');
				if (el==activeCat) 
				{
					activeCat=0;
					var area = document.getElementById('feeds_list');
					if (area)
						area.innerHTML='';
				}
				el.parentNode.style.display='none';
			}else
			{
				Message('Unable to delete feed');
			}
	  },
	  failure: function(){
		Message('Unable to send query');
	  },
	  argument: ['foo','bar']
	};

	if (confirm('Really delete feed: '+el.innerHTML))
	{
		Message('Please wait');
		YAHOO.util.Connect.asyncRequest('POST',srvName+'/rssreader/usr/extensions/add_feeds.inc.php', clb, postData);		
	}
}

function RenameCat(id)
{
	var postData='do=updateCatName&catId='+id;
	var el=document.getElementById('cat'+id);
	var clb ={
	  success:function(o){
			var resp=evalScripts(o.responseText);
			for (ind in resp.js) eval(resp.js[ind]);
			if (resp.html.indexOf('OK')!=-1)
			{
				Message('Category name changed');
				el.innerHTML=newname;
			}else
			{
				Message('Unable to rename category');
			}
	  },
	  failure: function(){
		Message('Unable to send query');
	  },
	  argument: ['foo','bar']
	};
	
	var newname='';
	var catName = el.innerHTML;
	catName = catName.trim();
	if (newname=prompt('Enter new name for '+catName, catName)){
		Message('Please wait');
		postData=postData+'&newName='+newname;
		YAHOO.util.Connect.asyncRequest('POST',srvName+'/rssreader/usr/extensions/add_feeds.inc.php', clb, postData);	
	}	
}

function RenameFeed(id)
{
	var postData='do=updateFeedName&feedId='+id;
	var el=document.getElementById('feed'+id);
	var clb ={
	  success:function(o){
			var resp=evalScripts(o.responseText);
			for (ind in resp.js) eval(resp.js[ind]);
			if (resp.html.indexOf('OK')!=-1)
			{
				Message('Feed name changed');
				el.innerHTML=newname;
			}else
			{
				Message('Unable to rename feed');
			}
	  },
	  failure: function(){
		Message('Unable to send query');
	  },
	  argument: ['foo','bar']
	};
	
	var newname='';
	if (newname=prompt('Enter new name for '+el.innerHTML, el.innerHTML)){
		Message('Please wait');
		postData=postData+'&newName='+newname;
		YAHOO.util.Connect.asyncRequest('POST',srvName+'/rssreader/usr/extensions/add_feeds.inc.php', clb, postData);	
	}	
}


function userLoginForm(){
	var postData='do=getLoginForm';
	var clb ={
	  success:function(o){
			Message('Please enter your password');
			var resp=evalScripts(o.responseText);
			placeForm(resp.html);
			for (ind in resp.js) eval(resp.js[ind]);
	  },
	  failure: function(){
		Message('Unable to send query');
	  },
	  argument: ['foo','bar']
	};
		Message('Please wait');
		YAHOO.util.Connect.asyncRequest('POST',srvName+'/rssreader/usr/extensions/add_feeds.inc.php', clb, postData);	
}

function userPasswordCheck(){
	var username = (document.getElementById('username')?document.getElementById('username').value:"");
	var password = document.getElementById('password').value;

	var clb ={
	  success:function(o){
			if (o.responseText.indexOf('OK') != -1){				
				setLogoutButton();
				//offsetX = 130;
				document.getElementById('adSense').className = 'tblcell';
				document.getElementById('opts_links').className = 'block';
				document.getElementById('login_form').className = 'hidden';
				document.getElementById('settings_area').innerHTML='';
				getListBox();
				for (i in feedsList) delete feedsList[i];
				document.getElementById('filter_feeds').innerHTML='';
				delete f['feeds'];
				delete f[2];
				filter_products();
			}else
			{
				if (o.responseText.indexOf('FAILED') != -1)
				Message('Wrong password');
				else
				Message('Only page owner can login here');
			}
	  },
	  failure: function(){
		Message('Unable to send query');
	  },
	  argument: ['foo','bar']
	};	
	Message('Please wait');
	r = YAHOO.util.Connect.asyncRequest('POST', srvName+'/rssreader/usr/extensions/login.php', clb , 'username='+username+'&pass='+password);
}

function userLogout(){
	var postData='do=logoutUser';
	var clb ={
	  success:function(o){
		  	var resp=evalScripts(o.responseText);
			Message('Logged out');
			placeForm(resp.html); // debugging purpose
			setLoginButton();
			for (ind in resp.js) eval(resp.js[ind]);
			document.getElementById('opts_links').className = 'hidden';
			document.getElementById('login_form').className='';
			document.getElementById('adSense').className = 'hidden';
			offsetX = 6;
			getListBox();
			for (i in feedsList) delete feedsList[i];
			document.getElementById('filter_feeds').innerHTML='';
			delete f['feeds'];
			delete f[2];
			filter_products();
	  },
	  failure: function(){
		Message('Unable to send query');
	  },
	  argument: ['foo','bar']
	};
		Message('Please wait');
		YAHOO.util.Connect.asyncRequest('POST',srvName+'/rssreader/usr/extensions/add_feeds.inc.php', clb, postData);	
}

function setLoginButton(){
			document.getElementById('loginLink').innerHTML = 'Log in';
			document.getElementById('loginLink').onclick = userLoginForm;
}

function setLogoutButton(){
			document.getElementById('loginLink').innerHTML = 'Logout';
			document.getElementById('loginLink').onclick = userLogout;
}

function updateLoginLink(){
	var clb ={
	  success:function(o){
		if (o.responseText.indexOf('OK') != -1){
			setLogoutButton();
			document.getElementById('opts_links').className='';
			document.getElementById('login_form').className = 'hidden';
		}else{
			setLoginButton();
			document.getElementById('opts_links').className='hidden';
			document.getElementById('login_form').className = '';	
		}
	  },
	  failure: function(){
	  }
	};
	Message('Please wait');
	YAHOO.util.Connect.asyncRequest('GET',srvName+'/rssreader/usr/extensions/login.php?action=get_login_state', clb);	
}

function setEmptyText(id){
	var el = document.getElementById('mess'+id);
	if (el.value == 'type text here...')
		el.value='';
}

function setEmptyMail(id){
	var el = document.getElementById('mail'+id);
	if (el.value == 'type email here...')
		el.value='';
}

function setBlurMail(id){
	var el = document.getElementById('mail'+id);
	if (el.value == '')
		el.value = 'type email here...';
}

function setBlurText(id){
	var el = document.getElementById('mess'+id);
	if (el.value == '')
		el.value = 'type text here...';
}

var oTagCloud = {
	init: function(){
	
	},
	visible: false,
	load: function (chkEl){
		var id = 7;
		var el = document.getElementById('chk'+id).checked;
		var type = (el?'bookmark':'feed');
		var postData='do=getTagCloud&type='+type;
		var clb = {
			success: function(o){
				var resp=evalScripts(o.responseText);
				document.getElementById('tagCloud').innerHTML = resp.html;
				for (i in resp.js) eval(resp.js[i]);
				document.getElementById('tagCloud').style.display="block";
				this.visible = true;
				chkEl.disabled = false;
			},
			failure: function(){
				chkEl.disabled = false;
				Message( 'Failed to make query' );
			}
		}
		chkEl.disabled = true;
		YAHOO.util.Connect.asyncRequest('POST',srvName+'/rssreader/usr/extensions/add_feeds.inc.php', clb, postData);
	},
	show: function (chkEl){
		this.load(chkEl);
	},
	hide: function (){
		document.getElementById('tagCloud').style.display="none";
		this.visible = false;
	},
	toggle: function (chkEl){
		if (!chkEl)
			return;
		if ( typeof(chkEl.checked) != 'undefined' && chkEl.checked )
			this.show(chkEl);
		else
			this.hide();
	}
};
oTagCloud.init();

function filterTag(strTag){
	filter_products(strTag, 'tag');
	f['tag'] = '';
}

function ManageBookmarksTab1()
{
	var postData='do=manageBookmarks1';
	var clb ={
	  success:function(o){
			var resp=evalScripts(o.responseText);
			placeForm(resp.html);
			for (ind in resp.js) eval(resp.js[ind]);
	  },
	  failure: function(){
		Message('Failed to load form');
	  },
	  argument: ['foo','bar']
	};
	YAHOO.util.Connect.asyncRequest('POST',srvName+'/rssreader/usr/extensions/add_feeds.inc.php', clb, postData);
	Message('Please wait...');	
}

function loadBookmarksFromCat(catId){
	var postData='do=loadBookmarksFromCat&catId='+catId;
	var clb ={
	  success:function(o){
			var resp=evalScripts(o.responseText);
			var feed_area=document.getElementById('feeds_list');
			feed_area.innerHTML=resp.html;
			Message('Feeds loading finished');
			for (ind in resp.js) eval(resp.js[ind]);
	  },
	  failure: function(){
		Message('Failed to load feeds list...');
	  },
	  argument: ['foo','bar']
	};
	YAHOO.util.Connect.asyncRequest('POST',srvName+'/rssreader/usr/extensions/add_feeds.inc.php', clb, postData);
	Message('Please wait...');	
}

function RenameBookmark(id)
{
	var postData='do=updateBookmarkName&bmarkId='+id;
	var el=document.getElementById('bmark'+id);
	var clb ={
	  success:function(o){
			var resp=evalScripts(o.responseText);
			for (ind in resp.js) eval(resp.js[ind]);
			if (resp.html.indexOf('OK')!=-1)
			{
				Message('Bookmark name changed');
				el.innerHTML=newname;
			}else
			{
				Message('Unable to rename bookmark');
			}
	  },
	  failure: function(){
		Message('Unable to send query');
	  },
	  argument: ['foo','bar']
	};
	
	var newname='';
	var catName = el.innerHTML;
	catName = catName.trim();
	if (newname=prompt('Enter new name for '+catName, catName)){
		Message('Please wait');
		postData=postData+'&newName='+newname;
		YAHOO.util.Connect.asyncRequest('POST',srvName+'/rssreader/usr/extensions/add_feeds.inc.php', clb, postData);	
	}	
}

function DeleteBookmark(id)
{
	var postData='do=deleteBookmarkById&bmarkId='+id;
	var el=document.getElementById('bmark'+id);
	var clb ={
	  success:function(o){
			var resp=evalScripts(o.responseText);
			for (ind in resp.js) eval(resp.js[ind]);
			if (resp.html.indexOf('OK')!=-1)
			{
				Message('Bookmark deleted');
				if (el==activeCat) 
				{
					activeCat=0;
					var area = document.getElementById('feeds_list');
					if (area)
						area.innerHTML='';
				}
				el.parentNode.style.display='none';
			}else
			{
				Message('Unable to delete bookmark');
			}
	  },
	  failure: function(){
		Message('Unable to send query');
	  },
	  argument: ['foo','bar']
	};

	if (confirm('Really delete bookmark: '+el.innerHTML))
	{
		Message('Please wait');
		YAHOO.util.Connect.asyncRequest('POST',srvName+'/rssreader/usr/extensions/add_feeds.inc.php', clb, postData);		
	}
}
var feedsList = new Array();
var feedsConn = null;
function getFeedsList(cats){
	YAHOO.util.Connect.abort(feedsConn);
	for (i in feedsList) delete feedsList[i];
	delete f['feeds'];
	
	var el=document.getElementById('filter_feeds');	
	if (cats == ""){
		el.innerHTML = '';
		return;
	}

	var postData='do=getFeedsList&cats='+cats;
	
	var clb ={
	  success:function(o){
			el.innerHTML = o.responseText;
	  },
	  failure: function(){
	  }
	};
	YAHOO.util.Connect.asyncRequest('POST',srvName+'/rssreader/usr/extensions/add_feeds.inc.php', clb, postData);		
}

function filterFeed(el){
	if (typeof(feedsList[el.id]) == 'undefined') {
		feedsList[el.id] = 1;	
		el.className='active';
	} else {
		if (feedsList[el.id] == 1) {
			feedsList[el.id] =0; 
			el.className='inactive';
		} else {
			feedsList[el.id] = 1;
			el.className='active';
		}
	}
	var ids = '';
	for (i in feedsList)
		if ( feedsList[i] == 1) ids += i+',';
	filter_products(ids, 'feeds');
}

function getListBox(){
	var clb ={
	  success:function(o){
			el = document.getElementById('listbox_wrapper');
			if (el){
				el.innerHTML = o.responseText;	
			}
	  },
	  failure: function(){
		Message('Failed to load listbox...');
	  }
	};
	YAHOO.util.Connect.asyncRequest('GET',srvName+'/rssreader/usr/extensions/ajax_get_listbox.php', clb);
	Message('Please wait...');	
}
