$.ajaxSetup({
    cache: false
});


jQuery(function($) {
	function getItemId(item) {
		var idTag = item.attr('className').match(/(?:^|\s)itemId\-(\d*)/);
		if (idTag.length > 0)
			return idTag[1];
	}
	
	function showLogin() {
		$('#loginDialog form input').val('');
		$('#loginDialog').jqmShow();
	}
	
	// init modal dialog
	$('#loginDialog').jqm({ modal: false });
	$('#loginDialog form').submit(function(ev) {
		ev.preventDefault();
		
		var form = $(ev.target);
		$.ajax({
			type: 'post',
			url: form.attr('action'),
			data: form.serialize(),
			success: function (result) {
				$('#loginDialog').jqmHide();
				if (result.indexOf('ok')>=0) {
					alert('You have successfully logged in.');
					$('body').addClass('registered');
					
					$(".hideAfterLogin").css("display","none");
					$("#loginArea").html("<h3>User: " + result.substring(3) + "</h3>");
					
					$("#updateAfterLogin li:last").removeClass("alt");
					$("#updateAfterLogin").append("<li><a href='/profile/" + result.substring(3) + "' title='My profile'>My profile</a></li>");
					$("#updateAfterLogin").append("<li class='alt'><a href='/user/logout' title='logout'>Logout</a></li>");
					
				}
				else
					alert('You have failed. Try again.');
				
			},
			error: function (result) { 
				alert('There is a system error. Try again later.');
			}
		});
	});
	
	
	
	$('input#search').example('Search for topic');
	$('label#label-username').replaceWith('<label id="label-username" for="username">Username:</label>');
	$('label#label-password').replaceWith('<label id="label-password" for="password">Password:</label>');
	
	// hover styles
	$("li.post").hover(
		function () { $(this).addClass("hover"); },
		function () { $(this).removeClass("hover"); }
	);
	
	$("li#discussed").hover(
		function () { $('body').addClass('hover-discussed'); },
		function () { $('body').removeClass('hover-discussed');	}
	);
	
	$("li#contested").hover(
		function () { $('body').addClass('hover-contested'); },
		function () { $('body').removeClass('hover-contested');	}
	);
	
	$("li#bookmarked").hover(
		function () { $('body').addClass('hover-bookmarked'); },
		function () { $('body').removeClass('hover-bookmarked'); }
	);
	
	$("li#popular").hover(
		function () { $('body').addClass('hover-popular'); },
		function () { $('body').removeClass('hover-popular'); }
	);
	
	function updateFavTitle(el) {
		var idx = 0, titles = ['Click to bookmark', 'Public bookmark', 'Private bookmark'];
		if (el.hasClass('on')) idx = 1;
		if (el.hasClass('private')) idx = 2;
		el.attr('title', titles[idx]);
	};
	
	/* flag/unflag favorite items */
	// the cycle: no-bookmark, public-bookmark, private-bookmark
	$('p.favorite').click(function() {
		if (!$('body').hasClass('registered'))
			return showLogin();
		
		var target = $(this),
			item = target.parents('.starable'), itemId;
		
		var isFavorite = false, isPrivate = false;
		if (target.hasClass('private'))
			target.removeClass('private');
		else if (target.hasClass('on')) {
			target.removeClass('on').addClass('private');
			isFavorite = isPrivate = true;
		}
		else {
			target.addClass('on');
			isFavorite = true;
		}
		
		updateFavTitle($(this));
		if (item.length < 1 || !(itemId = getItemId(item)))
			return;
		
		$.get('/question/favorite', { id: itemId, isFavorite: isFavorite, isPrivate: isPrivate });
	}).hover(
		function () {
			updateFavTitle($(this));
		}, 
		function () { $(this).attr('title', ''); }
	);
	
	/* vote */
	$('ul.votes li.up, ul.votes li.down').click(function() {
		if (!$('body').hasClass('registered'))
			return showLogin();
		
		var target = $(this),
			isUpvote = target.hasClass('up'),
			item = target.parents('.votable'), itemId;
		
		if (item.length < 1 || !(itemId = getItemId(item)))
			return;
		
		$.get('/question/vote', { id: itemId, isUpvote: isUpvote }, function (data, status) {
				if ('success' != status) 
					return;
				
				if(data != '') {
					var rgx = /OK\s+(\d+)\s+(\d+)/;
					var match = rgx.exec(data);
					if (match.length == 3) {
						var clsName = '.itemId-' + itemId + ' ul.votes li.up';
						$(clsName).html(match[1]);
						
						clsName = '.itemId-' + itemId + ' ul.votes li.down';
						$(clsName).html(match[2]);
					}
				}
				
			});
	});

	$('a#hide-votes').click(function () {
		$(this).text($('body').toggleClass('votes-off').hasClass('votes-off')? 'Show Votes' :'Hide Votes');
	});
	
	/* submits */
	$('form.requires-login').submit(function(ev) {
		if (!$('body').hasClass('registered')) {
			ev.preventDefault();
			showLogin();
			return;
		}
	});
	
	
	/* friend requests */
	$('.friend-request a.approve, .friend-request a.reject').click(function (ev) {
		ev.preventDefault();
		
		var url = $(ev.target).attr('href');
		$.get(url, {}, function (result, status) {
			if ('success' != status)
				return;
			
			if ($(ev.target).hasClass('approve')) {
				$(ev.target).parents('.controls').text('approved');
			}
			else {
				$(ev.target).parents('.controls').text('rejected').parents('.friend-request').fadeOut(2000);
			}
		}); 
	});
	
	$("a:contains('Profile')").click(function(ev) {
		if (!$('body').hasClass('registered')) {
			ev.preventDefault();
			showLogin();
			return;
		}
	});
	
	/* friends paeg */
	function recreateGroups(s) {
		friendsGroups.splice(0);
		
		var arrGrp = s.split(',');
		for (var i=0; i<arrGrp.length; i++)
			friendsGroups.push([arrGrp[i], arrGrp[i], arrGrp[i], arrGrp[i]]);
	};
	
	function addOnChangeEvent(cfg) {
		function bitBoxAdded (ev) {
			$.ajax({
				type: 'post',
				url: '/friends/addGroup',
				data: { 
					friendId: cfg.itemId,
					'group': ev.value[1] 
				},
				success: function (result) {
					recreateGroups(result);
				},
				error: function (result) { 
					alert('There is a system error. Try again later.'); 
				}
			});
		};

		function bitBoxRemoved (ev) {
			$.ajax({
				type: 'post',
				url: '/friends/removeGroup',
				data: { 
					friendId: cfg.itemId,
					'group': ev.value[1]
				},
				success: function (result) {
					recreateGroups(result);
				},
				error: function (result) { 
					alert('There is a system error. Try again later.'); 
				}
			});
		};
		
		
		cfg.input.addEvent('bitBoxAdd', bitBoxAdded);
		cfg.input.addEvent('bitBoxRemove', bitBoxRemoved);
	};

	if (window.friendsConfig && friendsConfig.length) {
		recreateGroups(friendsGroups.join(','));
		
		for (var i=0; i<friendsConfig.length; i++) {
			var cfg = friendsConfig[i]; 
			cfg.input = new TextboxList('#' + cfg.fieldId, {unique: true, max: 20, plugins: { autocomplete: {}}, bitsOptions:{editable:{addKeys: 188}}});

			for (var j=0; j<cfg.groups.length; j++)
				cfg.input.add(cfg.groups[j]);
				
			cfg.input.plugins['autocomplete'].setValues(friendsGroups);
			addOnChangeEvent(cfg);
		}
	}
	
	/*/ */
	
	$('input#search-submit').click(function(ev) {
		if (!$('#category-select').val()) {
			ev.preventDefault();
			alert('Please select a category!');
			return;
		}
		var q = $.trim($('#search-item').val());
		if (q.length < 1) {
			ev.preventDefault();
			alert('Please enter question!');
			return;
		}
		
	});
	
	/* group select post*/	
	$('li#bygroup select').change(function() {
		var val = $(this).val();
		if(val != '') {
			if(typeof selectGroupUrl !== 'undefined') {
  				// set the window's location property to the value of the option the user has selected
  				window.location = selectGroupUrl + '/group' + $(this).val();
			}
		}
	});

	
});