var Feeds = Class.create();

Feeds.prototype = {
	initialize: function() {
		this.idArray = new Array();
		this.arrayEventToday = new Array();
		this.lang = new Array();
		this.lastEventId = 0;
		document.observe("dom:loaded", function() {
			feeds.attachMouseEvent();
		});

	},
	attachMouseEvent: function() {
		feeds.hiddenEvents = 0;
		var eventDivs = $('newsBox').select('div[data]');
		eventDivs.each(function(item) {
			feeds.attachEvent0(item);
		});
	},
	attachEvent0: function(item) {
		var feedData = item.readAttribute('data').evalJSON();
		if(feedData.eventId > 0) {
			var deleteButton = $('feedCloseButton_' + feedData.eventId);
			if(deleteButton == null) return false;
			Event.observe(item, 'mouseover', function() {
				deleteButton.absolutize();
				//deleteButton.style.width = 9 + 'px';
				//deleteButton.style.height = 9 + 'px';
				deleteButton.style.left = (item.getWidth() - 10) + 'px';
				deleteButton.show();
			});
			Event.observe(item, 'mouseout', function() {
				deleteButton.hide();
			});
		}
	},
	showPopup: function(id) {
		var offset = $('newUserCont' + id).cumulativeOffset();
		$('newUserDetails' + id).absolutize();
		$('newUserDetails' + id).style.left = offset[0] + 65 + 'px';
		$('newUserDetails' + id).style.top = offset[1] - 35 + 'px';
		$('newUserDetails' + id).style.display = 'block';
	},
	hidePopup: function(id) {
		$('newUserDetails' + id).style.display = 'none';
	},
	showCommentPopup: function(eventId, userId) {
		var parent = $('userCommentLink_' + eventId + '_' + userId);
		var commentBox = $('myComment_' + eventId + '_' + userId);
		var offset = parent.cumulativeOffset();
		commentBox.style.left = (parent.positionedOffset().left + 30) + 'px';
		commentBox.style.top = (parent.positionedOffset().top - 65) + 'px';
		commentBox.show();
	},
	hideCommentPopup: function(eventId, userId) {
		var commentBox = $('myComment_' + eventId + '_' + userId);
		commentBox.hide();
	},
	saveUsersSettings: function() {
		new Ajax.Request(PUBLIC_URL + 'ajax-feed/save-new-users-settings', {
			method: 'post',
			postBody: $H({cityId : $F('cityId'), sexm: $F('sexm'), sexf: $F('sexf'), sexa: $F('sexa'), ageFrom: $F('ageFrom'), ageTo: $F('ageTo') }).toQueryString(),
			onSuccess: function(transport) {
				togglePopupBox('usersSettings');
				window.location = PUBLIC_URL + 'feeds';
			}
		}
		);
	},
	toggle: function(obj) {
		var children = this.idArray;
		var todayNews = this.arrayEventToday;
    	children.each(function(el) {
    		if(obj == el) {
    			document.getElementById(el).style.display = 'block';
    			if (obj == children[0]) {
    				todayNews.each(function(element) {
			     		document.getElementById(element).style.display = 'block';
					});
    			}
				$('closedNews').style.display = 'block';
				if ($('moreNews'))
					$('moreNews').style.display = 'none';
    		} else {
    			document.getElementById(el).style.display = 'none';
    		}
    	});
	},

	getMoreFeeds: function(fromId, perPage, isOwner, userId) {
		perPage = parseInt(perPage) > 0 ? perPage : 50;
		isOwner = parseInt(isOwner) > 0 ? isOwner : 0;
		userId = parseInt(userId) > 0 ? userId : 0;
		$('moreNewsBox_'+fromId).style.display='none';
		$('feedLoadImg_'+fromId).style.display='block';
		new Ajax.Request(PUBLIC_URL + 'ajax-feed/more-news',
		{
			method: 'post',
			parameters: {from: fromId , page: perPage, owner: isOwner, id: userId},
			onSuccess: function(transport) {
				$('newsBox').innerHTML+=transport.responseText;
				$('feedLoadImg_'+fromId).style.display='none';
				$('moreNewsBox_'+fromId).style.display='none';
				feeds.attachMouseEvent();
				if(!isOwner) {
					var lastHiddenEvents = parseInt($('hiddenFeedsCnt_' + fromId).innerHTML);
					$('hiddenFeedsCnt_' + transport.headerJSON.lastEventId).innerHTML = lastHiddenEvents + parseInt(transport.headerJSON.hiddenEvents);
				}
				feeds.lastEventId = transport.headerJSON.lastEventId;
				new Effect.Appear('newsBox_'+fromId);
			}
		});
	},
	getMoreComments: function(ownerId, objectId, parentId, from, type, key, eventId) {
		new Ajax.Request(PUBLIC_URL + 'ajax-feed/more-comments',
		{
			method: 'post',
			parameters: {ownerId: ownerId, objectId: objectId, parentId: parentId, from: from, type: type, eventId: eventId},
			onSuccess: function(transport) {
				$('moreCommentsLink_'+key+'_'+from).style.display = 'none';
				$('moreCommentsCont_' + key).innerHTML += transport.responseText;
			}
		});
	},

	toggleToday: function(obj, day) {
		var children = this.arrayEventToday;
		if (obj == 'moreNews') {
			children.each(function(el) {
				document.getElementById(el).style.display = 'block';
			});
			$('closedNews').style.display = 'block';
			$('moreNews').style.display = 'none';

			var otherNews = this.idArray;
        	otherNews.each(function(el) {
        		if (day == el)
    				document.getElementById(el).style.display = 'none';
    		});
		}
		else if (obj == 'closedNews') {
			$(day).style.display = 'none';
		}
	},

	remove: function(userId, date, day) {
		if (!userId || !date || !day)
			return false;
		var lang = this.lang;
		new Ajax.Request(PUBLIC_URL+'ajax/remove-feeds',
		{
			method: 'post',
			postBody: Object.toQueryString({ userId: userId, date: date, day: day}),
			onSuccess: function(transport) {
				function callback() {
						$('news_' + day).remove();
					}
				new Effect.BlindUp('news_' + day, {duration: 1, delay: 0.2, afterFinish: callback});
				systemMessenger.set(lang['22664_feed_delete'], 1);
				systemMessenger.display();
				return false;
			}
		});
	},
	addUserStatus1: function (defaultText) 
	{
		varUserStatus = $F('userStatus');
		if(varUserStatus == defaultText && !jQuery.mediaId) {
			$('userStatus').focus();
			return false;
		}
		$('comPublishButton').disable(); $('userStatus').disable();
		progress.show('result-cnt');
		if(varUserStatus == defaultText) {
			varUserStatus = '';
		}
		var ajaxAction = 'ajax-feed/add-user-status';
		var query = '';
		var deleteStatus = true;
		switch(jQuery.mediaType) {
		case 'ad':
			ajaxAction = 'neobizz/ajax/feedaddad';
			jQuery('#adContentTextArea').val(varUserStatus);
			query = '&'+jQuery('#add_ad_form').serialize();
		break;
		case 'video':
			ajaxAction = 'upload/videos/feeds-complete-upload';
		break;
		case 'audio':
			ajaxAction = 'upload/audios/feeds-complete-upload';
		break;
		case 'photo':
			ajaxAction = 'albums/feed-complete-upload';
			if(jQuery.uploaderSettings.post_params.uploadSession)
				query = '&uploadSession='+jQuery.uploaderSettings.post_params.uploadSession;
		break;
		}
		
		new Ajax.Request(PUBLIC_URL + ajaxAction, {
				method: 'post',
				postBody: Object.toQueryString({ userStatus: varUserStatus, mediaId: jQuery.mediaId })+ query,
				onSuccess: function(transport) {
					var result = transport.responseText.evalJSON();
					if( (jQuery.mediaType == "audio" || jQuery.mediaType == "video") && result.result == "success") {
						jQuery('#upload-notification').show('slow');
						setTimeout(function() {jQuery('#upload-notification').hide('slow');}, 10000);
					}
					if(jQuery.mediaType == "ad" && result.result == "success"){
						loadAdForm = false;
						jQuery('#bizz-button').css("background-position","0 0px");
						jQuery('#general-error').hide();
						jQuery('#bizz-container').hide();
						jQuery('#bizz-container').html('');
					}
					if(jQuery.mediaType == "ad" && result.result == "error"){
						deleteStatus = false;
						jQuery('#general-error').html(result.message);						
						jQuery('#general-error').show();
						systemMessenger.set(result.message, 0);
						systemMessenger.display();
					}
					if(jQuery.mediaType == "ad" && result.result == "redirect"){
						document.location = result.location;
						return;
					}
					
					$('newsBox').insert({'top': result.html});
					feeds.attachEvent0($('event_'+result.eventId));
					return false;
				},
				onComplete: function() {
					$('comPublishButton').enable(); $('userStatus').enable();
					progress.hide('result-cnt');
					if(deleteStatus) $('userStatus').value = defaultText;
					jQuery.resetUploadForm();
				}
			}
		);
	},
	addUserStatus0: function (defaultText)
	{
		varUserStatus = $F('userStatus');
		if(varUserStatus == defaultText) {
			$('userStatus').focus();
			return false;
		}
		$('comPublishButton').disable(); $('userStatus').disable();
		new Ajax.Request(PUBLIC_URL + 'ajax-feed/add-user-status', {
				method: 'post',
				postBody: Object.toQueryString({ userStatus: varUserStatus }),
				onSuccess: function(transport) {
					var result = transport.responseText.evalJSON();
					$('newsBox').insert({'top': result.html});
					feeds.attachEvent0($('event_'+result.eventId));
					return false;
				},
				onComplete: function() {
					$('comPublishButton').enable(); $('userStatus').enable();
					$('userStatus').value = defaultText;
				}
			}
		);
	},
	setDefaultText: function(defaultText, textEl) {
		if (textEl.value == "") {
			textEl.value = defaultText;
		}
	},
	resetDefaultText: function(defaultText, textEl) {
		if (textEl.value == defaultText) {
			textEl.value = "";
		}
	},
	emoticon: function(text, txtarea, defaultText) {
		if (txtarea.value == defaultText) {
			txtarea.value = "";
		}
		text = ' ' + text + ' ';
		if (txtarea.createTextRange && txtarea.caretPos) {
			var caretPos = txtarea.caretPos;
			caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text;
			txtarea.focus();
			txtarea.scrollTop = txtarea.scrollHeight;
		} else {
			txtarea.value  += text;
			txtarea.focus();
			txtarea.scrollTop = txtarea.scrollHeight;
		}
	},
	fitToText: function(textArea) {
		textArea.style.height = 36+"px";
		if(textArea.scrollHeight < 36){
			textArea.style.height = 36+"px";
		} else {
			textArea.style.height = textArea.scrollHeight+"px";
		}
	},
	countRemainingChars: function(maxLength, defaultText)
	{
		var text = $('userStatus');
		text.style.height = 36+"px";
		if(text.scrollHeight < 36){
			text.style.height = 36+"px";
		} else {
			text.style.height = text.scrollHeight+"px";
		}
		currentLength = text.value.length;
		if (!currentLength)
			return false;

		if (currentLength > maxLength) {
			$('usRemainingChars').innerHTML = 0;
			text.value = text.value.substring(0, maxLength);
		} else {
			$('usRemainingChars').innerHTML = maxLength - currentLength;
		}
	},
	deleteComment: function(object, parentObject, type, comment, eventId) {
		new Ajax.Request(PUBLIC_URL+'ajax-feed/delete-comment', {
			method: 'post',
			postBody: Object.toQueryString({objectId: object, parentObjectId: parentObject, type: type, commentId: comment }),
			evalJSON: 'force',
			onSuccess: function(transport) {
				if(transport.responseJSON.result == 'success') {
					Effect.Fade('comment_'+eventId+'_'+comment , { duration: 1.0 });
				}
				eval(transport.responseJSON.messenger);
			return false;
			}
		});
		feeds.hideConfirmBoxComment();
	},
	showConfirmBoxDeleteComment: function(object, parentObject, type, comment, eventId) {
		Event.stopObserving('okConfirmBtnComment_delete', 'click');
		var confirmBox = $('popupBoxConfirmComment_delete');

		var xCenter = Math.round(document.viewport.getWidth() / 2);
		var yCenter = Math.round(document.viewport.getHeight() / 2) + document.viewport.getScrollOffsets().top;
		var boxW = Math.round(confirmBox.getWidth() / 2);
		var boxH = Math.round(confirmBox.getHeight() / 2);

		confirmBox.absolutize();
		confirmBox.style.left = (xCenter - boxW)  + 'px';
		confirmBox.style.top = (yCenter - boxH) + 'px';
		confirmBox.show();
		Event.observe(document, 'keypress', function(event) {
			if(event.keyCode == Event.KEY_ESC) {
				feeds.hideConfirmBoxComment();
			}
		});
		Event.observe($('okConfirmBtnComment_delete'), 'click', function() {
			feeds.deleteComment(object, parentObject, type, comment, eventId);
		});
	},
	hideConfirmBoxComment: function() {
		Event.stopObserving('okConfirmBtnComment_delete', 'click');
		Event.stopObserving(document, 'keypress');
		$('popupBoxConfirmComment_delete').hide();
	},
	deleteEvent: function(eventId) {
		new Ajax.Request(PUBLIC_URL+'ajax-feed/delete-event', {
			method: 'post',
			postBody: Object.toQueryString({ eventId: eventId }),
			evalJSON: 'force',
			onSuccess: function(transport) {
				if(transport.responseJSON.result == 'success') {
					Effect.Fade('event_'+eventId, { duration: 1.0 });
					$('event_'+eventId).previous('p.ui-feed-separator').hide();
				}
				feeds.hideConfirmBox('delete');
				eval(transport.responseJSON.messenger);
				return false;
			}
		});
	},
	showConfirmBoxDelete: function(eventId) {
		Event.stopObserving('okConfirmBtn_delete', 'click');
		var confirmBox = $('popupBoxConfirm_delete');
		var xCenter = Math.round(document.viewport.getWidth() / 2);
		var yCenter = Math.round(document.viewport.getHeight() / 2) + document.viewport.getScrollOffsets().top;
		var boxW = Math.round(confirmBox.getWidth() / 2);
		var boxH = Math.round(confirmBox.getHeight() / 2);

		confirmBox.absolutize();
		confirmBox.style.left = (xCenter - boxW)  + 'px';
		confirmBox.style.top = (yCenter - boxH) + 'px';
		confirmBox.show();
		Event.observe(document, 'keypress', function(event) {
			if(event.keyCode == Event.KEY_ESC) {
				feeds.hideConfirmBox('delete');
			}
		});
		Event.observe($('okConfirmBtn_delete'), 'click', function() {
			feeds.deleteEvent(eventId);
		});
	},
	showUsersEvent: function(userId) {
		new Ajax.Request(PUBLIC_URL+'ajax-feed/show-user-event', {
			method: 'post',
			postBody: Object.toQueryString({ userId: userId }),
			evalJSON: 'force',
			onSuccess: function(transport) {
				if(transport.responseJSON.result == 'success') {
					var userDivs = $('newsBox').select('div[data]');
					var showEvents = 0;
					$('userOption_' + userId).hide();
					userDivs.each(function(item) {
						var feedData = item.readAttribute('data').evalJSON();
						if(feedData.owner == userId) {
							item.show().previous('p.ui-feed-separator').show();
							showEvents++;
						}
					});
					$('hiddenFeedsCnt_' + feeds.lastEventId).innerHTML = parseInt($('hiddenFeedsCnt_' + feeds.lastEventId).innerHTML) - showEvents;
					if(parseInt($('hiddenFeedsCnt_' + feeds.lastEventId).innerHTML) < 1) {
						$('showHiddenEventsLink_' + feeds.lastEventId).hide();
					}
				}
				eval(transport.responseJSON.messenger);
				return false;
			}
		});
	},
	hideEvent: function(eventId) {
		new Ajax.Request(PUBLIC_URL+'ajax-feed/hide-event-user', {
			method: 'post',
			postBody: Object.toQueryString({ eventId: eventId }),
			evalJSON: 'force',
			onSuccess: function(transport) {
				if(transport.responseJSON.result == 'success') {
					var userDivs = $('newsBox').select('div[data]');
					var hiddenEvents = 0;
					userDivs.each(function(item) {
						var feedData = item.readAttribute('data').evalJSON();
						if(feedData.owner == transport.responseJSON.owner) {
							item.hide().previous('p.ui-feed-separator').hide();
							hiddenEvents++;
						}
					});
					$('hiddenFeedsCnt_' + feeds.lastEventId).innerHTML = parseInt($('hiddenFeedsCnt_' + feeds.lastEventId).innerHTML) + hiddenEvents;
					$('showHiddenEventsLink_' + feeds.lastEventId).show();
				}
				feeds.hideConfirmBox('hide');
				eval(transport.responseJSON.messenger);
				return false;
			}
		});
	},
	showConfirmBoxHide: function(eventId) {
		var feedData = $('event_'+eventId).readAttribute('data').evalJSON();
		Event.stopObserving('okConfirmBtn_hide', 'click');
		var title = $('popupBoxTitle_hide');
		title.innerHTML = feeds.lang['31037_feed_hide_title'].interpolate({username: feedData.username});
		var content = $('popupBoxContent_hide');
		content.innerHTML = feeds.lang['31038_feed_hide_content'].interpolate({username: '<a href="'+PUBLIC_URL+'/'+feedData.username+'" class="'+feedData.linkClass+'" target="_blank">'+feedData.username+'</a>'});
		var confirmBox = $('popupBoxConfirm_hide');

		var xCenter = Math.round(document.viewport.getWidth() / 2);
		var yCenter = Math.round(document.viewport.getHeight() / 2) + document.viewport.getScrollOffsets().top;
		var boxW = Math.round(confirmBox.getWidth() / 2);
		var boxH = Math.round(confirmBox.getHeight() / 2);

		confirmBox.absolutize();
		confirmBox.style.left = (xCenter - boxW)  + 'px';
		confirmBox.style.top = (yCenter - boxH) + 'px';
		confirmBox.show();
		Event.observe(document, 'keypress', function(event) {
			if(event.keyCode == Event.KEY_ESC) {
				feeds.hideConfirmBox('hide');
			}
		});
		Event.observe($('okConfirmBtn_hide'), 'click', function() {
			feeds.hideEvent(eventId);
		});
	},
	hideConfirmBox: function(type) {
		Event.stopObserving('okConfirmBtn_'+type, 'click');
		Event.stopObserving(document, 'keypress');
		$('popupBoxConfirm_'+type).hide();
	},
	showOptionsBox: function(lastEventId) {
		new Ajax.Request(PUBLIC_URL+'ajax-feed/settings-popup', {
			method: 'post',
			onSuccess: function(transport) {
				$('settingsPopup').innerHTML = transport.responseText;
				var offset = $('editOptionsLink_' + lastEventId).cumulativeOffset();
				$('settingsPopup').absolutize();
				$('settingsPopup').style.left = (offset[0] - 420) + 'px';
				$('settingsPopup').style.top = (offset[1] - 300) + 'px';
				Effect.Appear('settingsPopup');
				return false;
			}
		});
		Event.observe(document, 'keypress', function(event) {
			if(event.keyCode == Event.KEY_ESC) {
				feeds.hideOptionsBox();
			}
		});
	},
	hideOptionsBox: function() {
		Event.stopObserving(document, 'keypress');
		Effect.Fade('settingsPopup');
	},
	showHiddenEvents: function(owner, lastEventId) {
		$('hiddenFeedsCnt_'+lastEventId).innerHTML = 0;
		$('showHiddenEventsLink_'+lastEventId).hide();
		var eventDivs = $('newsBox').select('div[data]');
		eventDivs.each(function(item) {
			var feedData = item.readAttribute('data').evalJSON();
			if(feedData.owner != owner) {
				item.show().previous('p.ui-feed-separator').show();
			}
		});
	},
	addComment: function(owner, object, parentObject, eventId, type, defaultText)
	{
		if($F('comment_' + type + '_' + owner + '_' + object + '_' + eventId) == defaultText) {
			$('comment_' + type + '_' + owner + '_' + object + '_' + eventId).focus();
			return false;
		}
		$('commentButton_'+eventId).removeClassName('ui-feed-comment-button').addClassName('ui-feed-comment-button-disable').disable();
		$('comment_' + type + '_' + owner + '_' + object + '_' + eventId).disable();
		new Ajax.Request(PUBLIC_URL+'ajax-feed/add-feed-comment',
			{
				method: 'post',
				postBody: Object.toQueryString({ ownerId: owner, objectId: object, parentObjectId: parentObject, type: type, eventId: eventId, body: $F('comment_' + type + '_' + owner + '_' + object + '_' + eventId) }),
				onSuccess: function(transport) {
					if (transport.responseText.match(/Error:spam/g)) {
						systemMessenger.set(transport.responseText, 0);
						systemMessenger.display();
					} else {
						$('commentContent_' + type + '_' + owner + '_' + object + '_' + eventId).innerHTML = transport.responseText + $('commentContent_' + type + '_' + owner + '_' + object + '_' + eventId).innerHTML;
					}
					return false;
				},
				onComplete: function() {
						$('commentCont_' + type + '_' + owner + '_' + object + '_' + eventId).toggle();
						$('commentButton_'+eventId).removeClassName('ui-feed-comment-button-disable').addClassName('ui-feed-comment-button').enable();
						$('comment_' + type + '_' + owner + '_' + object + '_' + eventId).enable();
						$('comment_' + type + '_' + owner + '_' + object + '_' + eventId).value = defaultText;
					}
				});
	},
	repost: function(eventId)
	{
		progress.show('event_'+eventId);
		new Ajax.Request(PUBLIC_URL+'ajax-feed/re-post',
				{
					method: 'post',
					postBody: Object.toQueryString({ id: eventId }),
					evalJSON: 'force',
					onSuccess: function(transport) {
						if(transport.responseJSON.result == 'success') {
							Effect.Fade('event_'+eventId, { duration: 0.5, afterFinish: function() {
								$('event_'+eventId).previous('p.ui-feed-separator').hide();
								$('newsBox').insert({'top': transport.responseJSON.html});
								Effect.ScrollTo('event_' + transport.responseJSON.eventId, { duration: 0.5, offset: -100, afterFinish: function() {
									Effect.Appear('event_' + transport.responseJSON.eventId);
									$('event_'+transport.responseJSON.eventId).previous('p.ui-feed-separator').show();
									}
								});
								feeds.attachMouseEvent();
							}});
						} else {
							eval(transport.responseJSON.messenger);
						}
					}
					});
	}
};

var feeds = new Feeds();