
Element.implement({
	sep_t_show: function() {
		this.setStyle('display','');
	},
	sep_t_hide: function() {
		this.setStyle('display','none');
	},
	sep_t_visible: function() {
		if(this.getStyle('display') == 'none') {
			return false;	
		}
		else {
			return true;
		}	
	},
	sep_t_toggle: function() {
		if(this.getStyle('display') == 'none') {
			this.sep_nfa_show();
		}
		else {
			this.sep_nfa_hide();
		}				
	},
	sep_t_update: function(html) {
		this.innerHTML = html;
	}
});	    
   



var SEP_Twitter_Tweet = new Class({
	initialize: function(tweet_form) {
		this.timer = null;
		
		this.max_characters = 140;
		
		this.tweet_form = $(tweet_form);
		
		this.link = $(tweet_form+'_Link');
		this.textarea = this.tweet_form.getElement('textarea');	
		this.in_reply_to_status_id = this.tweet_form.getElements('input')[0];
		this.submit = this.tweet_form.getElement('input.SEP_Twitter_Tweet_Submit');
		this.sending_div = this.tweet_form.getElement('div.SEP_Twitter_Tweet_Sending');
		this.success_div = this.tweet_form.getElement('div.SEP_Twitter_Tweet_Success');		
		this.form_div = this.tweet_form.getElement('div.SEP_Twitter_Tweet_Form');	
		this.counter = this.tweet_form.getElement('div.SEP_Twitter_Tweet_Characters_Counter');
		this.heading = this.tweet_form.getElement('span.SEP_Twitter_Tweet_Heading');
	},
	
	start: function() {
		this.check();
		this.timer = this.check.bind(this).periodical(300);
	},
	
	stop: function() {
		$clear(this.timer);
	},
	
	check: function() {
		// check max length
		counter = this.max_characters - this.textarea.value.length;
		if(counter < 10) {
			this.counter.addClass('counterNegative');
		}
		else {
			this.counter.removeClass('counterNegative');			
		}
		this.counter.sep_t_update(counter);
		
		// hide submit button?
		if(counter < 0) {
			this.submit.sep_t_hide();	
		}
		else {
			this.submit.sep_t_show();				
		}
		
		// check heading
		if(this.textarea.value.charAt(0) == '@') {
			this.heading.sep_t_update(SocialEngine.Language.Translate(18910079)); // Reply to tweet ...
			this.submit.value = SocialEngine.Language.Translate(18910087); // Reply
		}
		else {
			this.heading.sep_t_update(SocialEngine.Language.Translate(18910053)); // What are you doing?
			this.submit.value = SocialEngine.Language.Translate(18910058); // Update
		}
	},
	
	show_form: function() {
		this.check();
		this.link.sep_t_hide();		
		this.sending_div.sep_t_hide();
		this.success_div.sep_t_hide();
		this.tweet_form.sep_t_show();
		this.form_div.sep_t_show();		
	},
	
	show_sending: function() {
		this.link.sep_t_hide();		
		this.success_div.sep_t_hide();
		this.form_div.sep_t_hide();	
		this.tweet_form.sep_t_show();		
		this.sending_div.sep_t_show();				
	},
	show_success: function() {
		this.link.sep_t_hide();
		this.sending_div.sep_t_hide();
		this.form_div.sep_t_hide();	
		this.tweet_form.sep_t_show();		
		this.success_div.sep_t_show();				
	},
	show_link: function() {
		this.sending_div.sep_t_hide();
		this.form_div.sep_t_hide();	
		this.success_div.sep_t_hide();			
		this.tweet_form.sep_t_hide();		
		this.link.sep_t_show();		
		this.reset();
	},
	
	
	send: function() {
		// check max length
		if(this.max_characters - this.textarea.value.length < 0) {
			return false;	
		} 	
		
		this.show_sending();
		
		myreq2 = new Request({
			method: 'post',
			url: './user_twitter_ajax.php',
			data: '_ajaxReq=1&task=statuses_update&'+this.tweet_form.toQueryString(),
			onSuccess: function() { this.reset(); this.stop(); this.show_success(); }.bind(this),
			onFailure: function() { this.show_form(); alert(SocialEngine.Language.Translate(18910077)); }.bind(this) /* Error! Please try again later! */
		}).send();	
			
	},

	retweet: function(id, elm) {
		if(!id) {
			return false;
		}
		myreq2 = new Request({
			method: 'post',
			url: './user_twitter_ajax.php',
			data: '_ajaxReq=1&task=statuses_retweet&id='+encodeURI(id),
			onSuccess: function() { $(elm).setProperty('onClick', '$(this).destroy();'); $(elm).setProperty('src', './images/icons/twitter_okay.gif'); }.bind(this),
			onFailure: function() { $(elm).setProperty('src', './images/icons/twitter_icon_retweet.gif'); alert(SocialEngine.Language.Translate(18910077)); }.bind(this) /* Error! Please try again later! */
		}).send();	
			
	},
	
	reset: function() {
		this.textarea.value = '';
		this.check();	
	}
	
});


function SEP_Twitter_reply(id, screen_name, tweet_obj) {
	if(tweet_obj) {
		tweet_obj.textarea.value = '@'+screen_name+' ';
		tweet_obj.in_reply_to_status_id.value = id;
		tweet_obj.check();	
		tweet_obj.show_form();
		tweet_obj.textarea.focus();
		// scroll to textarea
		offset = 500;
		div_position_y = tweet_obj.tweet_form.getPosition().y;
		window.scrollTo(0, div_position_y-offset);		
		
	}
}





var SEPTwitterJQuery = {
		
		html_item_header: '<table border="0" class="SEP_Twitter_Table" cellpadding="0" cellspacing="0" width="100%">',
		html_item_footer: '</table>',
		html_item: '<tr id="statuses_public_timeline_%id">' +
						'<td width="46" valign="top" align="left" style="text-align: left"><a href="http://twitter.com/%user_screen_name" target="_blank"><img src="%user_profile_image_url" border="0" width="38" height="38" class="SEP_Twitter_ProfileImg"></a></td>' +
						'<td valign="top" class="SEP_Twitter_TextBig" align="left" style="text-align:left"><div class="SEP_Twitter_Tweet_Options" style="visibility: %hideOptions"><img src="./images/icons/twitter_icon_reply.gif" border="0" onClick="SEP_Twitter_reply(\'%id\', \'%user_screen_name\', %instance_name_instance)"><br><img src="./images/icons/twitter_icon_retweet.gif" border="0" onClick="%instance_name_instance.retweet(\'%id\', this);this.src=\'./images/icons/twitter_icon_throbber.gif\';this.blur();"></div><a href="http://twitter.com/%user_screen_name" target="_blank"><b>%user_screen_name</b></a> %text<div class="SEP_Twitter_Small"><abbr class="timeago" style="border-bottom: 0" title="%created_at">%created_at</abbr> from %source</div></td>' +
					'</tr>',
		
		
		statuses_public_timeline: function(divId, instance_name, emptyOnAppend, hideOptions) {
			var url = 'http://twitter.com/statuses/public_timeline.json?callback=?';
			this.process(url, divId, instance_name, emptyOnAppend, hideOptions);
		},
		
		statuses_user_timeline: function(divId, instance_name, emptyOnAppend, screen_name, page, hideOptions) {
			var page = page * 1;
			var url = 'http://twitter.com/statuses/user_timeline.json?screen_name='+encodeURI(screen_name)+'&page='+page+'&callback=?';
			this.process(url, divId, instance_name, emptyOnAppend, hideOptions);		

			var next_html = '<div id="statuses_user_timeline_'+(page+1)+'" style="text-align:center"><a href="javascript:void(0)" onClick="jQueryTwitter(this).next(\'div\').show();jQueryTwitter(this).remove();SEPTwitterJQuery.statuses_user_timeline(\'statuses_user_timeline_'+(page+1)+'\', \''+instance_name+'\', \''+emptyOnAppend+'\', \''+escape(screen_name)+'\', \''+(page+1)+'\', '+(hideOptions ? 1 : 0)+');"><img src="./images/icons/twitter_more.png" border="0" /></a><div style="display:none"><img src="./images/icons/twitter_spinner.gif" border="0"></div></div>';					
			divElement = jQueryTwitter('#'+divId);
			divElement.after(next_html);

			
		},		
		statuses_friends: function(divId, instance_name, emptyOnAppend, screen_name, hideOptions) {
			// returns no valid data?!?!
			var url = 'http://twitter.com/statuses/friends/'+screen_name+'.json?callback=?';
			this.process(url, divId, instance_name, emptyOnAppend, hideOptions);
		},
		statuses_followers: function(divId, instance_name, emptyOnAppend, screen_name, hideOptions) {
			// returns no valid data?!?!			
			var url = 'http://twitter.com/statuses/followers/'+screen_name+'.json?callback=?';
			this.process(url, divId, instance_name, emptyOnAppend, hideOptions);
		},				
	
		process: function(url, divId, instance_name, emptyOnAppend, hideOptions) {
		
			jQueryTwitter.getJSON(url, {},
				function(data) {
					divElement = jQueryTwitter('#'+divId);
					if(emptyOnAppend) {
						divElement.html(''); // remove spinner
					}

					jQueryTwitter.each(data, function(i, element) { 
						html = SEPTwitterJQuery.html_item;
						html = html.replace(/%id/g, element.id);
						html = html.replace(/%user_screen_name/g, element.user.screen_name);
						html = html.replace(/%user_profile_image_url/g, element.user.profile_image_url);
						html = html.replace(/%text/g, SEPTwitterJQuery.parseTwitterText(element.text));
						html = html.replace(/%created_at/g, SEPTwitterJQuery.parseTimestampForTimeAgo(element.created_at));																		
						html = html.replace(/%source/g, element.source);																								
						html = html.replace(/%instance_name/g, instance_name);
						if(hideOptions) {
							html = html.replace(/%hideOptions/g, 'hidden');
						}
						else {
							html = html.replace(/%hideOptions/g, 'visible');
						}
						
						divElement.append(SEPTwitterJQuery.html_item_header + html + SEPTwitterJQuery.html_item_footer);	
					});				
					jQueryTwitter('abbr.timeago').timeago();
				}
			);		
		},


		search: function(divId, instance_name, emptyOnAppend, query, page, hideOptions) {
			var page = page * 1;
			var url = 'http://search.twitter.com/search.json?q='+escape(query)+'&page='+page+'&callback=?';

			jQueryTwitter.getJSON(url, {},
				function(data) {
					divElement = jQueryTwitter('#'+divId);
					if(emptyOnAppend) {
						divElement.html(''); // remove spinner
					}
					
					jQueryTwitter.each(data.results, function(i, element) { 
						html = SEPTwitterJQuery.html_item;
						html = html.replace(/%id/g, element.id);
						html = html.replace(/%user_screen_name/g, element.from_user);
						html = html.replace(/%user_profile_image_url/g, element.profile_image_url);
						html = html.replace(/%text/g, SEPTwitterJQuery.parseTwitterText(element.text));
						html = html.replace(/%created_at/g, SEPTwitterJQuery.parseTimestampForTimeAgo(element.created_at));																		
						html = html.replace(/%source/g, element.source.replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&quot;/g, '"'));	
						html = html.replace(/%instance_name/g, instance_name);
						if(hideOptions) {
							html = html.replace(/%hideOptions/g, 'hidden');
						}
						else {
							html = html.replace(/%hideOptions/g, 'visible');
						}
						
						divElement.append(SEPTwitterJQuery.html_item_header + html + SEPTwitterJQuery.html_item_footer);							
					});

				var next_html = '<div id="search_'+(page+1)+'" style="text-align:center"><a href="javascript:void(0)" onClick="jQueryTwitter(this).next(\'div\').show();jQueryTwitter(this).remove();SEPTwitterJQuery.search(\'search_'+(page+1)+'\', \''+instance_name+'\', \''+emptyOnAppend+'\', \''+escape(query)+'\', \''+(page+1)+'\', '+(hideOptions ? 1 : 0)+');"><img src="./images/icons/twitter_more.png" border="0" /></a><div style="display:none"><img src="./images/icons/twitter_spinner.gif" border="0"></div></div>';					
				divElement.append(next_html);
				jQueryTwitter('abbr.timeago').timeago();
				}
			);

		},		
		
		trends: function(divId) {
			var url = 'http://search.twitter.com/trends.json?callback=?';

			jQueryTwitter.getJSON(url, {},
				function(data) {
					divElement = jQueryTwitter('#'+divId);
					divElement.html('');
					jQueryTwitter.each(data.trends, function(i, element) { 
						divElement.append('<a href="twitter_timeline_public.php?q='+escape(element.name)+'">'+element.name+'</a> &nbsp;&nbsp;');
					});
				
				}
			);
			
		},
		
		friendships_exists: function(user_a, user_b) { // user, owner
			var url = 'http://twitter.com/friendships/exists.json?user_a='+encodeURI(user_a)+'&user_b='+encodeURI(user_b)+'&callback=?';
			
			jQueryTwitter.getJSON(url, {},
				function(data) {
					tdElement = jQueryTwitter('#SEPTwitter_Profile_Friendship_Button').parent('td');
					
					if(data == true) {
						tdElement.html('<a onclick="SEPTwitterJQuery.action_dont_follow(\''+escape(user_a)+'\', \''+escape(user_b)+'\')" id="SEPTwitter_Profile_Friendship_Button" href="javascript:void(0)"><img border="0" class="icon" src="./images/icons/twitter.gif"/>'+SocialEngine.Language.Translate(18910089)+'</a>'); // Do not follow
					}
					else {
						tdElement.html('<a onclick="SEPTwitterJQuery.action_follow(\''+escape(user_a)+'\', \''+escape(user_b)+'\')" id="SEPTwitter_Profile_Friendship_Button" href="javascript:void(0)"><img border="0" class="icon" src="./images/icons/twitter.gif"/>'+SocialEngine.Language.Translate(18910088)+'</a>'); // Follow On Twitter
					}				
				}
			);			
		},
		
		action_follow: function(user_a, user_b) {
			// user_a is user, user_b is owner
			jQueryTwitter.post('./user_twitter_ajax.php', {_ajaxReq: '1', task: 'friendships_create', screen_name: user_b}, function(data) { SEPTwitterJQuery.friendships_exists(user_a, user_b); });
		},
		
		action_dont_follow: function(user_a, user_b) {
			// user_a is user, user_b is owner
			jQueryTwitter.post('./user_twitter_ajax.php', {_ajaxReq: '1', task: 'friendships_destroy', screen_name: user_b}, function(data) { SEPTwitterJQuery.friendships_exists(user_a, user_b); });
		},
	
		
		parseTwitterText: function (string) {
			var words = string.split(' ');
			var words_count = words.length;
			if(words_count > 0) {
				var i = 0;
				for (i; i < words_count; i++) {
					if(words[i].substr(0, 1) == '@') {
						// search @user
						words[i] = '<a href="http://twitter.com/'+encodeURI(words[i].replace('@', ''))+'" target="_blank">'+SEPTwitterJQuery.wordwrapTwitterText(words[i])+'</a>';
					}
					else if(words[i].substr(0, 1) == '#') {
						// search trends
						words[i] = '<a href="twitter_timeline_public.php?q='+encodeURI(words[i])+'" target="_blank">'+SEPTwitterJQuery.wordwrapTwitterText(words[i])+'</a>';
					}
					else if(words[i].substr(0, 7) == 'http://') {
						// parse http:// url
						words[i] = '<a href="'+words[i].replace(/"/, '&quot;')+'" target="_blank">'+SEPTwitterJQuery.wordwrapTwitterText(words[i])+'</a>';
					}
					else if(words[i].substr(0, 8) == 'https://') {
						// parse https:// url
						words[i] = '<a href="'+words[i].replace(/"/, '&quot;')+'" target="_blank">'+SEPTwitterJQuery.wordwrapTwitterText(words[i])+'</a>';
					}
					else {
						words[i] = SEPTwitterJQuery.wordwrapTwitterText(words[i]);
					}					
				}	
				return words.join(' ');
			}
			
			return SEPTwitterJQuery.wordwrapTwitterText(string);
		},
		
		wordwrapTwitterText: function(str) {
			// http://phpjs.org/functions/wordwrap:581
		    var m = 40;
		    var b = "<br>";
		    var c = true;

		    var i, j, l, s, r;

		    str += '';

		    if (m < 1) {
		        return str;
		    }

		    for (i = -1, l = (r = str.split(/\r\n|\n|\r/)).length; ++i < l; r[i] += s) {
		        for (s = r[i], r[i] = ""; s.length > m; r[i] += s.slice(0, j) + ((s = s.slice(j)).length ? b : "")){
		            j = c == 2 || (j = s.slice(0, m + 1).match(/\S*(\s)?$/))[1] ? m : j.input.length - j[0].length || c == 1 && m || j.input.length + (j = s.slice(m).match(/^\S*/)).input.length;
		        }
		    }

		    return r.join("\n");
		},

		parseTimestampForTimeAgo: function(time) {
			if(!time) {
				return false;
			}
			var time = time.substr(26, 4)+'-01-'+time.substr(8, 2)+'T'+time.substr(11, 8)+'Z';
			return time;
		},
		

		shorten_url: function(url) {
			if(BitlyClientTwitter) {
				
				if(url.substr(0, 7) != 'http://' && url.substr(0, 8) != 'https://' &&  url.substr(0, 6) != 'ftp://') {
					url = 'http://' + url;
				}
				BitlyClientTwitter.shorten(url, 'SEPTwitterJQuery.shorten_url_response');
			}
		},
		shorten_url_response: function(data) {
			var first_result;
			// Results are keyed by longUrl, so we need to grab the first one.
			for(var r in data.results) {
				first_result = data.results[r]; break;
			}
			if(first_result && first_result.shortUrl) {
				jQueryTwitter('#SEPTwitter_URL_Shortener_Field').val(first_result.shortUrl);
			}
			else {
				alert('Bit.ly not available!');
			}
		},
		
		shorten_url_from_field: function(field) {
			SEPTwitterJQuery.shorten_url(jQueryTwitter('#'+field).val());
		}
		

}
