var wall = {

	// Выполнение AJAX FORM запроса, автоматически передает security key	
	ajaxSubmit : function(url,form,callback,more) {
		more=more || {};	
		if (typeof(form)=='string') {
			form=jQuery('#'+form);
		}
		if (url.indexOf('http://')!=0 && url.indexOf('https://')!=0) {
			url=aRouter['ajax']+url+'/';
		}
		
		var options={
			type: 'POST',
			url: url,
			dataType: more.dataType || 'json',
			data: { security_ls_key: LIVESTREET_SECURITY_KEY },
			success: callback || function(msg){
				console.log("base success: ");
				console.log(msg);
			}.bind(this),
			error: more.error || function(x,s,e){
				console.log("base error: ");
				console.log(x);
			}.bind(this)
		}
		
		form.ajaxSubmit(options);
	},
		
	// Выполнение AJAX запроса, автоматически передает security key
	ajax : function(url, params, callback){
		params=params || {};
		params.security_ls_key = LIVESTREET_SECURITY_KEY;
		
		jQuery.each(params,function(k,v){
			if (typeof(v) == "boolean") {
				params[k]=v ? 1 : 0;
			}
		})
		
		if (url.indexOf('http://')!=0 && url.indexOf('https://')!=0) {
			url=aRouter['ajax']+url+'/';
		}
		
		jQuery.ajax({
			type: "POST",
			url: url,
			data: params,
			dataType: 'json',
			success: callback
		});
		
	},

	// Добавление записи на стену
	add: function(formObj) {
		var thisObj = this;
		
		// Получаем обьект формы
		formObj = jQuery('#'+formObj);
		// добавляем класс "loader" и запрещаем доступ к полю ввода
      	jQuery('#form_wall_record_text').addClass('loader').attr('readonly',true);
		
      	var posturl = aRouter['wall']+'ajaxaddwallrecord/';      	
      	var postData = { wall_add_user_target_id: formObj.find('[name="wall_add_user_target_id"]').val(),
      					is_image_used_ok : false,
						wall_record_text: formObj.find('[name="wall_record_text"]').val()};
      	
      	thisObj.ajax(posturl, postData, function(result) {        
	        
			// Если не было получено результат
			if (!result) {
				thisObj.enableFormComment();
				jQuery.notifier.error('Error','Please try again later');  
				return;         
			}
			// Результат получен, но с ошибкой
			if (result.bStateError) {        			
				thisObj.enableFormComment();        			
				jQuery.notifier.error(null,result.sMsg);
			} else {
				// Расблокируем поле ввода
				thisObj.enableFormComment(); 
				
				// Очищаем поле ввода
				jQuery('#form_wall_record_text').val('');
				
				// Выводим пришедшее сообщение
				if(result.sMsg)
					jQuery.notifier.notice(null, result.sMsg);
				
				// Вывод новых записей
				thisObj.loadNew(formObj.find('[name="wall_add_user_target_id"]').val()); 
			}
		}.bind(this));
      
	},
	
	// Добавление комментария
	add_comment: function(formObj) {
		var thisObj = this;
		
		// Получаем обьект формы
		formObj = jQuery('#'+formObj);
		
      	var posturl = aRouter['wall']+'ajaxaddwallcomment/';      	
      	var postData = { wall_target_id: formObj.find('[name="wall_target_id"]').val(),
						wall_comment_text: formObj.find('[name="wall_comment_record_text"]').val()};
      	
      	thisObj.ajax(posturl, postData, function(result) {        
	        
			// Если не было получено результат
			if (!result) {
				jQuery.notifier.error('Error','Please try again later');  
				return;         
			}
			// Результат получен, но с ошибкой
			if (result.bStateError) {              			
				jQuery.notifier.error(null,result.sMsg);
			} else {				
				// Выводим пришедшее сообщение
				if(result.sMsg)
					jQuery.notifier.notice(null, result.sMsg);
					
				var aResWallComments = result.aResNewCommentRecords;	
				// Выводим все полученные записи на экран
				jQuery('#commentTmpl').tmpl(aResWallComments, {readyRemoveTextLabel : ready_remove_comment, wallId: formObj.find('[name="wall_target_id"]').val()}).
						prependTo('#wall_comments_' + formObj.find('[name="wall_target_id"]').val()).show('slow');
				
				jQuery('#hidden_comment_form_' + formObj.find('[name="wall_target_id"]').val()).fadeOut("slow", function() { jQuery(this).remove(); });
			}
		}.bind(this));
      
	},
	
	// Удаление записи со стены
	remove: function(confirm_text, userId, wallId) {	
		// Просим пользователя подтведить удаление
		if(confirm(confirm_text))
		{
			var thisObj = this;	
			var posturl = aRouter['wall']+'ajaxremoverecord/';			
			var postData = {wall_delete_user_target_id: userId, 
				        	wall_delete_wall_id: wallId};
  	
		  	thisObj.ajax(posturl, postData, function(result) {        
		        
		  		if (!result) {
					thisObj.enableFormComment();
					jQuery.notifier.error('Error','Please try again later');  
					return;         
				}      
				if (result.bStateError) {        			
					thisObj.enableFormComment();        			
					jQuery.notifier.error(null,result.sMsg);
				} else {
					// Выводим сообщение, которое пришло
					if(result.sMsg)
						jQuery.notifier.notice(null, result.sMsg);
					
					// Удаление записи с экрана
					jQuery('#wall_record' + wallId).fadeOut("slow", function() { jQuery(this).remove(); });
				}
			}.bind(this));
		}
	},
	
	// Удаление коментария
	removeComment: function(confirm_text, wallId, wallCommentId) {
		// Просим пользователя подтведить удаление
		if(confirm(confirm_text))
		{
			var thisObj = this;	
			var posturl = aRouter['wall']+'ajaxremovecomment/';			
			var postData = {wall_target_id: wallId, 
				        	wall_delete_comment_id: wallCommentId};
  	
		  	thisObj.ajax(posturl, postData, function(result) {        
		        
		  		if (!result) {
					thisObj.enableFormComment();
					jQuery.notifier.error('Error','Please try again later');  
					return;         
				}      
				if (result.bStateError) {        			
					thisObj.enableFormComment();        			
					jQuery.notifier.error(null,result.sMsg);
				} else {
					// Выводим сообщение, которое пришло
					if(result.sMsg)
						jQuery.notifier.notice(null, result.sMsg);
					
					// Удаление записи с экрана
					jQuery('#wall_comment' + wallCommentId).fadeOut("slow", function() { jQuery(this).remove(); });
				}
			}.bind(this));
		}
	},
	
	// Подгрузка новых сообщений
	loadNew: function(idProfileUser) {
		var thisObj = this;
	
		var posturl = aRouter['wall']+'ajaxgetnewrecord/';			
		var postData = { wall_last_id: wall_record_last_id, 
				  		 wall_user_target_id: idProfileUser };
	
	  	thisObj.ajax(posturl, postData, function(result) {        
	  		if (!result) { jQuery.notifier.error('Error','Please try again later'); }      
			if (result.bStateError) {
				jQuery.notifier.error(null, result.sMsg);
			} else {   
				// Получаем принятые данные
				var aResNewWallRecords = result.aResNewWallRecords;
				// Обновляем идентификатор последней записи				
				if (aResNewWallRecords.length > 0 && result.oWallId) { wall_record_last_id = result.oWallId; } 
					
				// Удаляем с экрана надпись об отсутствии записей с экрана
				jQuery('.emptyrecords').remove();
				
				jQuery('#recordTmpl').tmpl(aResNewWallRecords, {readyRemoveTextLabel : ready_remove_record}).prependTo('.wallrecords').show('slow');
				
				thisObj.toggleFromUp();
			}	  		
		}.bind(this));
	},
	
	// Подгрузка старых сообщений
	loadOld: function(idProfileUser) {
		var thisObj = this;
	
		var posturl = aRouter['wall']+'ajaxgetoldrecord/';			
		var postData = {wall_old_id: wall_record_old_id, 
				  		wall_user_target_id: idProfileUser};		
	
	  	thisObj.ajax(posturl, postData, function(result) {        
	  		if (!result) { jQuery.notifier.error('Error','Please try again later'); }      
			if (result.bStateError) {
				jQuery.notifier.error(null, result.sMsg);
			} else {   
				// Получаем принятые данные
				var aResOldWallRecords = result.aResNewWallRecords;
				// Обновляем идентификатор самой старой записи
				if (aResOldWallRecords.length > 0 && result.oWallId) { wall_record_old_id = result.oWallId; } 
					
				// Удаляем с экрана надпись об отсутствии записей с экрана
				jQuery('.emptyrecords').remove();
				
				jQuery('#recordTmpl').tmpl(aResOldWallRecords, {readyRemoveTextLabel : ready_remove_record}).appendTo('.wallrecords').show('slow');
			
				// Если выведены все записи, то, кнопка 'more' больше не нужна
				thisObj.toggleFromUp();
				if(result.isMore == 'false') {
					jQuery('.wallpagelink').fadeOut("slow", function() { jQuery(this).remove(); });
				}
					
			}	  		
		}.bind(this));		
	},
	
	// Подгрузка старых сообщений с ленты друзей
	loadOldFriend: function() {
		var thisObj = this;
	
		var posturl = aRouter['wall']+'ajaxgetoldfriendrecord/';	
		wall_record_offset = wall_record_offset + wall_record_row_size;
		var postData = {offset_value : wall_record_offset};
	
	  	thisObj.ajax(posturl, postData, function(result) {        
	  		if (!result) { jQuery.notifier.error('Error','Please try again later'); }      
			if (result.bStateError) {
				jQuery.notifier.error(null, result.sMsg);
			} else {   
				// Получаем принятые данные
				var aResOldWallRecords = result.aResNewWallRecords;
				// Обновляем идентификатор самой старой записи
				if (aResOldWallRecords.length > 0 && result.oWallId) { wall_record_old_id = result.oWallId; } 
					
				// Удаляем с экрана надпись об отсутствии записей с экрана
				jQuery('.emptyrecords').remove();
				// Выводим все полученные записи на экран
				jQuery('#recordTmpl').tmpl(aResOldWallRecords, {readyRemoveTextLabel : ready_remove_record}).appendTo('.wallrecords').show('slow');
																						
				// Если выведены все записи, то, кнопка 'more' больше не нужна
				thisObj.toggleFromUp();
				
				if(wall_record_count <= wall_record_offset)
					jQuery('.wallpagelink').fadeOut("slow", function() { jQuery(this).remove(); });					
			}	  		
		}.bind(this));		
	},	
	
	// Подгрузка комментариев к записи
	getComments: function(wallId) {
		var thisObj = this;
		
		if(jQuery('#wall_comments_' + wallId + ' .wall_comment').length > 0) {
			jQuery('#wall_comments_' + wallId + ' .wall_comment').fadeOut("slow", function() { jQuery(this).remove(); });			
		} else {	
			var posturl = aRouter['wall']+'ajaxgetcomments/';			
			var postData = {wall_id: wallId};		
		
			thisObj.ajax(posturl, postData, function(result) {        
				if (!result) { jQuery.notifier.error('Error','Please try again later'); }      
				if (result.bStateError) {
					jQuery.notifier.error(null, result.sMsg);
				} else {   
					// Получаем принятые данные
					var aResWallComments = result.aResNewCommentRecords;
						
					jQuery('#wall_comments_' + wallId + ' .wall_comment').fadeOut("slow", function() { jQuery(this).remove(); });	
					
					// Выводим все полученные записи на экран
					jQuery('#commentTmpl').tmpl(aResWallComments, {readyRemoveTextLabel : ready_remove_comment, wallId: wallId}).
								appendTo('#wall_comments_' + wallId).show('slow');
				}	  		
			}.bind(this));
		}
	},
	
	// Прокоментировать запись, показать форму
	answer: function(wallId) {
		var thisObj = this;
		
		if(jQuery('#hidden_comment_form_' + wallId + ' #form_wall_comment').length > 0) {
			jQuery('#hidden_comment_form_' + wallId).fadeOut("slow", function() { jQuery(this).remove(); });		
		} else {
			console.log(222);
			
			jQuery('.hidden_comment_form[id^=hidden_comment_form_]').fadeOut("slow", function() { jQuery(this).remove(); });
		
			jQuery('#wall_target_id_for_comment_form').val(wallId);
			
			jQuery('#wall_comment_form_' + wallId).empty();
			var newForm = jQuery('.hidden_comment_form[id=main_hidcomment_form]').clone(true);
			
			console.log(newForm);
			
			newForm.attr('id', 'hidden_comment_form_' + wallId);
			
			newForm.appendTo('#wall_comment_form_' + wallId);		
			
			newForm.slideDown('slow');
		}
	},
	

	enableFormComment: function() {
		jQuery('#form_wall_record_text').removeClass('loader').attr('readonly',false);
	},
	
	toggleFrom: function() {
		jQuery('.wall_form_add').slideToggle('normal');	
	},
	
	toggleFromUp: function() {
		jQuery('.wall_form_add').slideUp('normal');	
	},
	
	// Запрос на получения записей для вывода на WallFeed
	showwallstream: function() {
		var thisObj = this;
		
		// Получаем обьект на котором хранятся закладки
		var currBlockNav = jQuery('#wall_sream').parent();
		
		// Удаляем класс активности со всех закладок
		jQuery('li', currBlockNav).removeClass ('active');		
		// Добавляем класс активности в нашу закладку
		jQuery('#wall_sream', currBlockNav).addClass ('active');
		
		// Получаем обьект на котором выводится текст закладки
		var currentWorkBlock = jQuery('.block-content', currBlockNav.parent());
		currentWorkBlock.html ('');
		
		var newDiv = jQuery('<div>').css({'text-align': 'center',}).
						append( jQuery('<img>', {'id' : 'wallfeed-load-image', 'alt': '', 'src' : DIR_STATIC_SKIN + '/images/loader.gif'}) );
		
		// Добавляем картинку индикации загрузки
		currentWorkBlock.append(newDiv);
		
		// Добавление записей
		newDiv.append(jQuery('<ul>', {'class' : 'wallfeed-stream-content'}));		
		thisObj.loadForFead();
		
		// Удаление картинки индикации загрузки
		setTimeout("jQuery('#wallfeed-load-image').remove();", 300);
	},
	
	// Подгрузка записей для WallFeed
	loadForFead: function() {
		var thisObj = this;
		
		var posturl = aRouter['wall']+'ajaxgetforfeed/';			
		var postData = {};

	  	thisObj.ajax(posturl, postData, function(result) {        
	  		if (!result) { jQuery.notifier.error('Error','Please try again later'); }      
			if (result.bStateError) {
				jQuery.notifier.error(null, result.sMsg);
			} else {
				// Выводим все полученные записи на экран
				jQuery.each(result.aResNewWallRecords, function(index, item) { thisObj.injectWallFeeds( item.userPostLoginPath,
																									item.userPostLogin,
																									item.wallText); }); 
			}	  		
		}.bind(this));
	},	
	
	// Добавление новой записи на экран WallFeed
	injectWallFeeds: function(userPostLoginPath, userPostLogin, wallText) {	
		var isappend = false;
	
		if((wallText.indexOf('<img') == 0) && (wallText.indexOf('/>') > 0)) {
			printText = "";
			if(wallText.indexOf('title="') > 0) {
				titleText = wallText.substring(wallText.indexOf('title="') + 7);
				titleText = titleText.substring(0, titleText.indexOf('"'));
				printText = titleText;
			} else
				titleText = wallfeed_picture_click;
			
			wallText = wallText.substring(wallText.indexOf('src="') + 5);
			wallText = wallText.substring(0, wallText.indexOf('"'));
			
			wallText = jQuery('<a>', {'class': 'thickbox', 'href' : wallText}).text(titleText).click(function(){
																						var t = this.title || this.name || null;
																						var a = this.href || this.alt;
																						var g = this.rel || false;
																						tb_show(t,a,g);
																						this.blur();
																						return false;
																					});
			isappend = true;
		} 
		
		var mainLI = jQuery('<li>', {'class': 'wallfeed-even'})
					.append(jQuery('<a>', {'class': 'wallfeed-stream-author', 'href' : userPostLoginPath + userPostLogin + '/' }).text(userPostLogin))
					.append('&nbsp;→')
					.append(jQuery('<span>', {'class': 'wallfeed-stream-comment-icon'}));
					
		if(isappend == false)
			mainLI = mainLI.append(jQuery('<div>', {'class': 'wallfeed-stream-text'}).html(wallText));
		else
			mainLI = mainLI.append(jQuery('<div>', {'class': 'wallfeed-stream-text'}).append(wallText));
		
		jQuery('.wallfeed-stream-content').append(mainLI);
	},
	
	
	// Голосование за запись
	WallVote: function(wall_id, vote_value) {
		var thisObj = this;
		vote_value = parseInt(vote_value);
		
		var posturl = aRouter['wall']+'ajaxvote/';			
		var postData = {wall_id: wall_id, 
				  		vote_value: vote_value};
	
		// Отправка запроса на голосование
	  	thisObj.ajax(posturl, postData, function(result) {        
	  		if (!result) { jQuery.notifier.error('Error','Please try again later'); }      
			if (result.bStateError) {
				jQuery.notifier.error(null, result.sMsg);
			} else {
				// Получение текущего рейтинга
				var total = parseInt(jQuery("#wall_total_" + wall_id).text());
				// Получение результирующего рейтинга
				var resultvote = total + vote_value;
				// Меняем надпись о ретинге
				jQuery("#wall_total_" + wall_id).html(resultvote);
				
				// Удаляем все классы с div рейтингирования
				var voteDiv = jQuery("#wall_voting_" + wall_id);
				voteDiv.removeClass('plus').
						removeClass('minus').
						removeClass('voted').
						removeClass('guest').
						removeClass('positive').
						removeClass('negative');
				
				// Теперь добавляем нужные классы
				voteDiv.addClass('guest');
				voteDiv.addClass('voted');
				if(resultvote > 0)
					voteDiv.addClass('positive');					
				if(resultvote < 0)
					voteDiv.addClass('negative');					
				if(vote_value > 0)
					voteDiv.addClass('plus');
				if(vote_value < 0)
					voteDiv.addClass('minus');
			
				// Выводим пришедшее сообщение
				if(result.sMsg)
					jQuery.notifier.notice(null, result.sMsg);
			}	  		
		}.bind(this));
	},		

	ajaxUploadImg : function(form, userProfileId) {
	
		var thisObj = this;
	
		this.ajaxSubmit('upload/image/',form,function(data){
			if (!data) {
				jQuery.notifier.error('Error','Please try again later');  
			} else if (data.bStateError) {
				jQuery.notifier.error(data.sMsgTitle,data.sMsg);
			} else {
				// добавляем класс "loader" и запрещаем доступ к полю ввода
				jQuery('#form_wall_record_text').addClass('loader').attr('readonly',true);
				
				var posturl = aRouter['wall']+'ajaxaddwallrecord/';      	
				var postData = { wall_add_user_target_id: userProfileId, 
								 is_image_used_ok : true,
								 wall_record_text: data.sText};
				
				thisObj.ajax(posturl, postData, function(result) {        
					
					// Если не было получено результат
					if (!result) {
						thisObj.enableFormComment();
						jQuery.notifier.error('Error','Please try again later');  
						return;         
					}
					// Результат получен, но с ошибкой
					if (result.bStateError) {        			
						thisObj.enableFormComment();        			
						jQuery.notifier.error(null,result.sMsg);
					} else {
						// Расблокируем поле ввода
						thisObj.enableFormComment(); 
						
						// Очищаем поле ввода
						jQuery('#form_wall_record_text').val('');
						
						// Выводим пришедшее сообщение
						if(result.sMsg)
							jQuery.notifier.notice(null, result.sMsg);
						
						// Вывод новых записей
						thisObj.loadNew(userProfileId); 
					}
				}.bind(this));
			}
		});
	},
	
	
	putTagUrl: function(enter_url, form_text) {
		var thisObj = this;
		
		if (url=prompt(enter_url,'http://')) {
			
			var posturl = aRouter['wall']+'minimazeurl/';			
			var postData = {long_url: url};		
			
			thisObj.ajax(posturl, postData, function(result) {        
		  		if (!result) { jQuery.notifier.error('Error','Please try again later'); }      
				if (result.bStateError) {
					jQuery.notifier.error(null, result.sMsg);
				} else {
					if( result.shortURL.status_txt != 'OK') {
						if( result.shortURL.status_txt == 'INVALID_URI') 
							alert(incorrect_url);
						else
							alert(minimize_url_error);
					}
					else {					
						var formtext = jQuery('#' + form_text);
						formtext.val(formtext.val() + result.shortURL.data.url);
					}
				}	  		
			}.bind(this));	
        }
	},
	
}

var wall042 = {
	ajaxUploadImg : function (value, userProfileId) {	
		var req = new JsHttpRequest();
		req.onreadystatechange = function() {
			if (req.readyState == 4) {
				if (req.responseJS.bStateError) {
					jQuery.notifier.error(req.responseJS.sMsgTitle, req.responseJS.sMsg);				
				} else {
					
					// добавляем класс "loader" и запрещаем доступ к полю ввода
					jQuery('#form_wall_record_text').addClass('loader').attr('readonly',true);
					
					var posturl = aRouter['wall']+'ajaxaddwallrecord/';      	
					var postData = { wall_add_user_target_id: userProfileId, 
									 is_image_used_ok : true,
									 wall_record_text: req.responseJS.sText};
					
					wall.ajax(posturl, postData, function(result) {
						
						// Если не было получено результат
						if (!result) {
							wall.enableFormComment();
							jQuery.notifier.error('Error','Please try again later');  
							return;         
						}
						// Результат получен, но с ошибкой
						if (result.bStateError) {        			
							wall.enableFormComment();        			
							jQuery.notifier.error(null,result.sMsg);
						} else {
							// Расблокируем поле ввода
							wall.enableFormComment(); 
							
							// Очищаем поле ввода
							jQuery('#form_wall_record_text').val('');
							
							// Выводим пришедшее сообщение
							if(result.sMsg)
								jQuery.notifier.notice(null, result.sMsg);
							
							// Вывод новых записей
							wall.loadNew(userProfileId); 
						}
					}.bind(this));
					

				}
			}
		}
		req.open(null, DIR_WEB_ROOT+'/include/ajax/uploadImg.php', true);
		req.send( { value: value, security_ls_key: LIVESTREET_SECURITY_KEY } );
	},

}


