/**
 * Handles loading the content of the request into the dot-wrapper element
 *	also will evaluate any scripts passed through the ajax query
 */
function ajaxLoad(url, message, id)
{
	cancelHs();
	if (!id) {
		var el = $('dot-wrapper');
	} else {
		var el = $(id);
	}
	date = new Date();
	el.innerHTML = message;
	new Ajax.Request(url+"r/"+date.getTime(), {
	  	method: 'get',
	  	onSuccess: function(transport) {
			el.innerHTML = transport.responseText;
			el.innerHTML.evalScripts();
    	}
	});
}

function ajaxFormSubmit(url)
{
	//submit form via ajax
	new Ajax.Request(url, {
	  method: 'get',
	  onSuccess: function(transport) {
		var str = transport.responseText.evalJSON();
	    if (str.status == 'ERROR') {
			alert(str.message);
		} else {
			hs.close();
		}
	  }
	});
}

function hsLoad(el, height, width, src)
{
	cancelHs();
	var obj = { objectType:'ajax', width:width, height:height};
	if (src) {
		obj.src = src+'r/'+((new Date()).getTime());
	}
	return hs.htmlExpand(el, obj);
}

function cancelHs() {
	hs.close();
}

/**
 * Loads the list of accounts
 */
function loadAccountsList()
{
	ajaxLoad('/account/list/', 'Fetching Twindicate Accounts...');
}

/**
 * loads a single account
 */
function loadAccountPage(id)
{
	var url = '/account/index/';
	if (id != null) {
		url = url + 'id/' + id+'/';
	}	
	ajaxLoad(url, 'Fetching Account Users...');
}

/**
 * Loads a single user page
 */
function loadUserPage(id)
{
	var url = '/user/index/';
	if (id != null && id != 'load' && typeof(id) != 'object') {
		url = url + 'id/' + id+'/';
	}	
	ajaxLoad(url, 'Fetching Your Feeds...');
}

/**
 * Loads a single feed's page
 */
function loadFeed(id)
{
	ajaxLoad('/feed/index/id/'+id+'/', 'Loading Feed Page...');
}

function openAccountEdit(el) {
	hsLoad(el, '500', '500');
}

function saveAccountChanges(id) {
	//grab data from form
	var allowRePosting = $('allow-repost-yes-'+id);
	if (allowRePosting.checked == true) {
		allowRePosting = 1;
	} else {
		allowRePosting = 0;
	}
	
	var rePostSpacing = $('rePostSpacing-'+id).value;
	var postSpacing = $('postSpacing-'+id).value;
	
	var useApprovalProcess = $('useApprovalProcessYes-'+id).checked;
	if (useApprovalProcess) {
		useApprovalProcess = 1;
	} else {
		useApprovalProcess = 0;
	}
	
	var postNewImmediately = $('postNewImmediatelyYes-'+id).checked;
	if (postNewImmediately) {
		postNewImmediately = 1;
	} else {
		postNewImmediately = 0;
	}
	
	var postRandomly = $('postRandomlyYes-'+id).checked;
	if (postRandomly) {
		postRandomly = 1;
	} else {
		postRandomly = 0;
	}
	
	var prepend = $('prepend-'+id).value;
	var postpend = $('postpend-'+id).value;
	
	var shortener1 = '';
	var shortener2 = '';
	if ($('shortener1-'+id)) {
		shortener1 = $('shortener1-'+id).value;
	}
	
	if ($('shortener2-'+id)) {
		shortener2 = $('shortener2-'+id).value;
	}
	
	var login = $('loginYes-'+id).checked;
	if (login) {
		login = 1;
	} else {
		login = 0;
	}
	
	var url = '/account/editformprocess/id/'+id+
				'/postSpacing/'+postSpacing+
				'/rePostSpacing/'+rePostSpacing+
				'/postNewImmediately/'+postNewImmediately+
				'/useApprovalProcess/'+useApprovalProcess+
				'/allowRePosting/'+allowRePosting+
				'/postRandomly/'+postRandomly+
				'/prepend/'+prepend+
				'/postpend/'+postpend+
				'/urlshorteningservice/'+$('url-shortening-service-'+id).value+
				'/shortener1/'+shortener1+
				'/shortener2/'+shortener2+
				'/login/'+login+'/';
	
	ajaxFormSubmit(url);
}

function addTwitterUser(accountId) {
	var user = $('username').value;
	var pass = $('password').value;
	
	var url = '/user/addprocess/username/'+escape(user)+'/password/'+escape(pass)+'/account/'+accountId+'/';

	new Ajax.Request(url, {
	  method: 'get',
	  onSuccess: function(transport) {
		var str = transport.responseText.evalJSON();
	    if (str.status == 'ERROR') {
			alert(str.message);
		} else {			
			url = '/user/displaynew/id/'+str.id+'/';
			/**
			 * Get the HTML for the new user form
			 */ 
			new Ajax.Request(url, {
			  	method: 'get',
			  	onSuccess: function(transport) {
					html = transport.responseText;
					$('add-account').insert({before: html});
					$('username').value = '';
					$('password').value = '';
					$('accounts-remaining').innerHTML = str.accountsRemaining;
					
					if (str.accountsRemaining == '0' || str.accountsRemaining == 0) {
						$('add-account').remove();
					}
				}
			});
		}
	  }
	});
}

function openFeedEdit(el) {
 	hsLoad(el, 300, 500);
}

function saveFeedChanges(id) {
	//grab data from form
	var allowRePosting = $('feed-allow-repost-yes-'+id);

	if (allowRePosting.checked == true) {
		allowRePosting = 1;
	} else {
		allowRePosting = 0;
	}
	
	var feedUrl = $('feed-url-'+id).value;
	
	var rePostSpacing = $('feedrePostSpacing-'+id).value;
	
	var useApprovalProcess = $('feeduseApprovalProcessYes-'+id).checked;
	
	if (useApprovalProcess) {
		useApprovalProcess = 1;
	} else {
		useApprovalProcess = 0;
	}
	
	var postNewImmediately = $('feedpostNewImmediatelyYes-'+id).checked;
	if (postNewImmediately) {
		postNewImmediately = 1;
	} else {
		postNewImmediately = 0;
	}
	var url = '/feed/editprocess/id/'+id+
				'/rePostSpacing/'+rePostSpacing+
				'/postNewImmediately/'+postNewImmediately+
				'/useApprovalProcess/'+useApprovalProcess+
				'/allowRePosting/'+allowRePosting+
				'/url/'+feedUrl+'/';

	ajaxFormSubmit(url);
}

function removeFeed(id) {
	if (confirm('Are you sure you want to remove this feed and all of its articles?')) {
		var url = '/feed/remove/id/'+id+'/';
	
		new Ajax.Request(url, {
		  method: 'get',
		  onSuccess: function(transport) {
			var str = transport.responseText.evalJSON();
		    if (str.status == 'ERROR') {
				alert(str.message);
			} else {
				$('feed-'+id).remove();
			}
		  }
		});
	}
}

function addAccount(el)
{
	hsLoad(el, 400, 500, '/account/addform/');
}

function getPaymentButton()
{
	if ($('getPaymentButton')) {
		$('getPaymentButton').hide();
	}
	var name = $('accountName').value;
	var userCount = $('userCount').value;
	var usersType = $('usersType').value;
	var twitterUser = $('twitterUser').value;
	var twitterUserLevel = $('twitterUserLevel').value;

	var url = '/payment/getbutton/accountName/'+name+
				'/userCount/'+userCount+'/usersType/'+usersType+
				'/twitterUser/'+twitterUser+'/twitterUserLevel/'+twitterUserLevel+'/';
	
	new Ajax.Request(url, {
	  	method: 'get',
	  	onSuccess: function(transport) {
			$('paymentButton').innerHTML = transport.responseText;
    	}
	});
}

function createFreeAccount()
{
	if ($('getPaymentButton')) {
		$('getPaymentButton').hide();
	}
	var name = $('accountName').value;
	var userCount = $('userCount').value;
	var feedCount = $('usersType').value;
	var twitterUser = $('twitterUser').value;
	var twitterUserLevel = $('twitterUserLevel').value;
	var el = $('paymentButton');
	el.innerHTML = 'Fetching Payment Button...';

	var url = '/account/makefree/'+(name.length > 0 ? 'accountname/'+name+'/' : '')+
					(userCount.length > 0 ? 'userCount/'+userCount+'/' : '')+
					(feedCount.length > 0 ? 'feedCount/'+feedCount+'/' : '')+
					(twitterUser.length > 0 ? 'twitterUser/'+twitterUser+'/' : '')+
					(twitterUserLevel.length > 0 ? 'twitterUserLevel/'+twitterUserLevel : '')+'/';
	new Ajax.Request(url, {
	  	method: 'get',
	  	onSuccess: function(transport) {
			el.innerHTML = transport.responseText;
    	}
	});
}

function openArticleEdit(el) {
	hsLoad(el, 360, 520);
}

function cancelArticleEdit(id)
{
	hs.close();
}

function saveArticleChanges(id)
{
	var twitterPost = $('twitterPost-container-'+id).innerHTML;
	var customTitle = $('customTitle-'+id).value;
	var url = $('customUrl-'+id).value;
	var shortUrl = $('customUrlShort-'+id).innerHTML;
	var articleExpires = $('articleExpires-'+id).checked;

	//only add the expires date if the checkbox is checked
	var expires = '';
	if (articleExpires) {
		expires = $('expiresYear-'+id).value+'-'+$('expiresMonth-'+id).value+
						'-'+$('expiresDay-'+id).value;
	}

	var url = '/article/editprocess/id/'+id+
				'/url/'+url+
				'/shortUrl/'+shortUrl+
				'/customTitle/'+customTitle+
				'/expires/'+expires+
				'/twitterPost/'+twitterPost;

	//submit form via ajax
	new Ajax.Request(url, {
	  method: 'get',
	  onSuccess: function(transport) {
		var str = transport.responseText.evalJSON();
	    if (str.status == 'ERROR') {
			alert(str.message);
		} else {
			cancelHs();

			var strlen = twitterPost.length;

			twitterPost = twitterPost.substr(0, 137);

			if (strlen != twitterPost.length) {
				twitterPost = twitterPost + '...';
			}
			//reset the displayed value
			$('article-title-'+id).innerHTML = twitterPost;
		}
	  }
	});
}

function deleteApprovedArticle(feedId, id)
{
	deleteArticle(feedId, id, 'approved-article');
}

function deleteArticle(feedId, id, countEl)
{
	if (confirm('Are you sure you want to delete this article? \n \n This is permanent and cannot be undone.')) {
		var elid = 'article'+id;
		$(elid).hide();
		var url = '/article/delete/id/'+id+'/feed/'+
						feedId+'/count/'+countEl;
		new Ajax.Request(url, {
		  	method: 'get',
		  	onSuccess: function(transport) {
				countEl = countEl+'-count';
				countEl = $(countEl);
				countEl.innerHTML = transport.responseText;
	    	}
		});
	}
}






/* ################ */

function hideAndShow(hide, show) {
	Effect.BlindUp(hide, {duration:1.5});
	Effect.BlindDown(show, {duration:1.5});
}

function urlshorteners(id) {
	var select = $('url-shortening-service-'+id);
	var url = '/rss/user/ajax/parts/urlshorteners.php?id='+id+
				'&shortener='+select.value;
	//submit form via ajax
	new Ajax.Request(url, {
	  method: 'get',
	  onSuccess: function(transport) {
		if ($('url-shortener-box-'+id)) {
			$('url-shortener-box-'+id).remove();
		}
		$('shortening-services').insert({after:transport.responseText});
	  }
	});
}

function cancelFeedChanges(id) {
	hideAndShow('feed-edit-form-'+id, 'feed-name-'+id);
}

function feedRepostSettings(id)
{
	var yes = $('feed-allow-repost-yes-'+id);
	var never = $('feed-allow-repost-never-'+id);
	var repostArea = $('feed-repost-settings-'+id);
		
	if (yes.checked) {
		repostArea.show();
	} else if (never.checked) {
		repostArea.hide();
	}	
}

function openExpiresDate(id)
{
	var articleExpires = $('articleExpires-'+id).checked;
	if (articleExpires){
		$('articleExpiresDd-'+id).show();
	} else {
		$('articleExpiresDd-'+id).hide();
	}
}


function handleCustomTitleEdit(id, max)
{
	var prepend = $('prepend-'+id).value;
	var postpend = $('postpend-'+id).value;
	var customTitle = $('customTitle-'+id).value;
	var shortUrl = $('customUrlShort-'+id).innerHTML;
	var container = $('twitterPost-container-'+id);
	//customTitle-container
	container.innerHTML = prepend+' '+customTitle+' '+shortUrl+' '+postpend;

	//characters-left
	countCharactersEl(container, 'characters-left-'+id, max);	
}

function shortenArticleUrl(elId, id)
{
	var el = $(elId);
	//ajax to a script which will shortent the url	
	var url = '/rss/user/ajax/parts/shortenUrl.php?url='+el.value;
	//submit form via ajax
	new Ajax.Request(url, {
	  method: 'get',
	  onSuccess: function(transport) {
		var str = transport.responseText.evalJSON();
	    if (str.status == 'ERROR') {
			alert(str.message);
		} else {
			//reset the displayed value
			$('customUrlShort-'+id).innerHTML = str.url;
			handleCustomTitleEdit(id, 140);
		}
	  }
	});
	
}

function shortenUrl(elId, id)
{

}

/**
 * Hide the post immediately option
 */
function approvalProcessYes(el, id)
{
	$(el+"postnewdt-"+id).hide();
	$(el+"postnewdd-"+id).hide();
}

/**
 * Show the post immediately option
 */
function approvalProcessNo(el, id)
{
	if (confirm('All currently unapproved articles for this user will be marked approved. Unless this is overridden at the feed level.\n\n Is that OK?')) {
		$(el+"postnewdt-"+id).show();
		$(el+"postnewdd-"+id).show();
	} else {
		$(el+'useApprovalProcessYes-'+id).checked=true;
	}
}

/**
 * Show the post immediately option
 */
function feedApprovalProcessNo(el, id)
{
	if (confirm('All currently unapproved articles for this feed will be marked approved.\n\n Is that OK?')) {
		$(el+"postnewdt-"+id).show();
		$(el+"postnewdd-"+id).show();
	} else {
		$(el+'useApprovalProcessYes-'+id).checked=true;
	}
}

function feedApprovalProcessYes(el, id)
{
	if (confirm('All articles already in Twindicate from this feed will be considered \'approved\'.\n\n')) {
		$(el+"postnewdt-"+id).hide();
		$(el+"postnewdd-"+id).hide();
	} else {
		$(el+'useApprovalProcessNo-'+id).checked=true;
	}
}

function addFeed(id) {
	var feedName = $('add-another-name-'+id);
	var feedUrl = $('add-another-url-'+id);
	var li = $('add-area-'+id);
	
	if (feedUrl.value != '' && feedName.value != '') {
	
		var url = '/rss/user/ajax/addFeed.php?id='+id+'&url='+
					escape(feedUrl.value)+'&name='+escape(feedName.value);
		
		li.insert({before:'<li id="loading-'+id+'"><img src="/rss/images/loading.gif" /></li>'});
		
		new Ajax.Request(url, {
		  method: 'get',
		  onSuccess: function(transport) {
			$('loading-'+id).remove();
			var str = transport.responseText.evalJSON();
		    if (str.status == 'ERROR') {
				alert(str.message);
			} else {
				li.insert({	before : '<dl id="feed-'+str.id+
							'"><dt><a href="'+feedUrl.value+'" target="_blank">'+
							feedName.value.replace('\\', '')+
							'</a></dt><dd>'+str.articles+' Articles</dd><dd> <a href="'+
							'javascript:void(0);" onClick="removeFeed('+
							str.id+')" class="edit-button">Remove '+feedName.value+'</a>'+
							'</dd><dd><a href="javascript:void(0);"'+
							' onClick="openFeedEdit('+str.id+')"'+
							' class="edit-button">Edit '+feedName.value+'</a></dd></dl>'});
				feedName.value = '';
				feedUrl.value = '';				
			}
		  }
		});
	} else {
		alert('Either the Name or Url of the feed you added was missing, please try again.');
	}	
}

function addTwindicateAccount()
{
	var name = $('name').value;
	var userCount = $('userCount').value;
	var totalCost = $('totalCost').value;
	var twitterUser = $('twitterUser').value;
	var url = '/rss/user/admin/addAccount.php?name='+escape(name)+
				'&userCount='+escape(userCount)+'&totalCost='+totalCost+
				'&twitterUser='+escape(twitterUser);

	new Ajax.Request(url, {
	  method: 'get',
	  onSuccess: function(transport) {
		var str = transport.responseText.evalJSON();
		$('name').value 		= '';
		$('userCount').value 	= '';
		$('totalCost').value 	= '';
		$('twitterUser').value 	= '';
		alert('admin is lazy: ' + str.message);
	  }
	});
}

function repostSettings(id)
{
	var yes = $('allow-repost-yes-'+id);
	var never = $('allow-repost-never-'+id);
	var repostArea = $('repost-settings');
		
	if (yes.checked) {
		repostArea.show();
	} else if (never.checked) {
		repostArea.hide();
	}	
}

function showAccountDetails(id)
{
	hs.close();
	var el = $('dot-wrapper');
	el.innerHTML = 'Loading User Page...';
	var url = '/rss/user/ajax/accountPage.php?id='+id;
	new Ajax.Request(url, {
	  	method: 'get',
	  	onSuccess: function(transport) {
			el.innerHTML = transport.responseText;
    	}
	});
}

function loadAdmin()
{
	hs.close();
	var el = $('dot-wrapper');
	el.innerHTML = 'Loading Admin...';
	var url = '/rss/user/admin/index.php';
	new Ajax.Request(url, {
	  	method: 'get',
	  	onSuccess: function(transport) {
			el.innerHTML = transport.responseText;
    	}
	});
}

function getPaymentTable()
{
	var name = $('accountName').value;
	var userCount = $('userCount').value;
	var feedCount = $('usersType').value;
	var twitterUser = $('twitterUser').value;
	var el = $('paymentTable');
	el.innerHTML = 'Fetching Payment Table...';
	var url = '/rss/user/ajax/payment/getTable.php?accountName='+name+
				'&userCount='+userCount+'&usersType='+feedCount+
				'&twitterUser='+twitterUser;
	new Ajax.Request(url, {
	  	method: 'get',
	  	onSuccess: function(transport) {
			el.innerHTML = transport.responseText;
    	}
	});
	
}

function openArticleQueue(id, type, other) 
{
	closeArticleQueue(id, other, type);
	var el = $(type+'-queue');
	el.innerHTML = '';
	var url = '/rss/user/ajax/parts/article/articlesList.php?id='+id+
																'&type='+type;
	new Ajax.Request(url, {
	  	method: 'get',
	  	onSuccess: function(transport) {
			el.innerHTML = transport.responseText;
			$(type+'-queue-action').innerHTML = '<a href="#" onclick="closeArticleQueue(\''+id+'\',\''+type+'\',\''+other+'\');">(close)</a>';
			Effect.BlindDown(el, {duration:1.5});
    	}
	});
}

function closeArticleQueue(id, type, other)
{
	Effect.BlindUp($(type+'-queue'), {duration:1.5});
	$(type+'-queue-action').innerHTML = '<a href="#" onclick="openArticleQueue(\''+id+'\',\''+type+'\',\''+other+'\');">(open)</a>';
}

function deleteApprovalQueueArticle(feedId, id)
{
	deleteArticle(feedId, id, 'approval-queue');
}




function approveArticle(feedId, id)
{
	var el = 'article'+id;
	$(el).hide();
	var url = '/rss/user/ajax/parts/approveArticle.php?id='+id+'&feed='+feedId;
	new Ajax.Request(url, {
	  	method: 'get',
	  	onSuccess: function(transport) {
			var split = transport.responseText.split('|');
		
			var countEl = $('approval-queue-count')
			countEl.innerHTML = split[0];
			
			var countEl2 = $('approved-article-count')
			
			countEl2.innerHTML = split[1];
			
			if (parseInt(split[1]) == 1) {
				countEl2.insert({after:
				'<span id="approved-queue-action" class="edit-button">'+
				'<a href="#" onclick="openArticleQueue(\''+
				feedId+'\',\'approved\', \'approval\',\'approved\');">'+
				'(open)</a></span>'});
			}
    	}
	});
}

function countCharacters(el, update, max)
{
	var count = el.value.length;
	var val = (max - count)+' Characters Left';
	if (count > max) {
		val = '<span style="color:red;font-weight:bold;">'+val+"</span>";
	}
	var update = $(update).innerHTML = val;	
}

function countCharactersEl(el, update, max)
{
	var count = el.innerHTML.length;
	var val = (max - count)+' Characters Left';
	if (count > max) {
		val = '<span style="color:red;font-weight:bold;">'+val+"</span>";
	}
	var update = $(update).innerHTML = val;	
}

function addCustomPost(feedId)
{
	var val = $('twitterpost');
	var link = $('custom-link');
	var url = '/rss/user/ajax/addCustomArticle.php?feed='+feedId+
					'&post='+escape(val.value)+'&link='+link.value;
	new Ajax.Request(url, {
	  	method: 'get',
	  	onSuccess: function(transport) {
			val.value = '';
			link.value = '';
			//add the twitterPost that is returned to the list above
			$('custom-article-list').insert({bottom: transport.responseText});
    	}
	});
}

function showhidehelp()
{
	var docs = $('helpdocs');
	if (docs.style.display == 'none') {
		$('helpheadera').innerHTML = 'Close Help';
		docs.show();
	} else {
		$('helpheadera').innerHTML = 'Help Me!';
		docs.hide();
	}
}

function openHelp(el)
{
	hs.close();
	return hs.htmlExpand(el, { objectType: 'ajax', width:'250', height:'150',
								cacheAjax: false});
}

function removeDmUser(id, name)
{
	if (confirm('Are you sure you want to stop sending RT requests to this user?')) {
		var url = '/rss/user/ajax/removeDmUser.php?id='+id;
	
		new Ajax.Request(url, {
		  method: 'get',
		  onSuccess: function(transport) {
			var str = transport.responseText.evalJSON();
		    if (str.status == 'ERROR') {
				alert(str.message);
			} else {
				$('dmUser-'+id).remove();
			}
		  }
		});
	}
}
