$(document).bind('_login', function(e, box){
	var submit = $('.submit', box);
	submit.click(function(e){
		box.trigger('submit');
		return false;
	});
	box.keypress(function(e){
		if(e.keyCode == 13){
			box.trigger('submit');
		}
	});
	$('[name=username]', box).click(function(){
		if ($(this).val() == 'username'){
			$(this).val('');
		}
	});
	box.submit(function(){
		if (!document.cookie){
			alert('You should accept cookies!');
			return;
		}

		var username = $('[name=username]', box).attr('value');
		
		username = clearUsername(username);
		
		var password = $('[name=password]', box).attr('value');
		if (username == 'username'){
			username = '';
		}
		$.myAjax({
			type: "POST",
			url: "action.php",
			dataType: 'json',
			data: {type: 'login', username: username, password: password},
			myFailure:  function(message, data) {
				alert(message);
			},
			mySuccess:  function(message, data) {
				window.location = window.location;
			}
		});
		return false;
	});
});
$(document).bind('_logout', function(e, box){
	box.click(function(){
		$.myAjax({
			type: "POST",
			url: "action.php",
			dataType: 'json',
			data: {type: 'logout'},
			myFailure:  function(message, data) {
				alert(message);
			},
			mySuccess:  function(message, data) {
				window.location = window.location;
			}
			
		});
		return false;
	});
});
$(document).bind('_faq', function(e, box){

	var faqBody = $('.faqBody', box);
	$('.link', box).click(function(e){
		faqBody.empty();
		faqBody.addClass('indicator');
		var f_id = $(this).attr('f_id');
		$.myAjax({
			type: "POST",
			url: "action.php",
			dataType: 'json',
			data: {type: 'getFaq', f_id: f_id},
			myFailure:  function(message, data) {
				alert(message);
			},
			mySuccess:  function(message, data) {
				faqBody.removeClass('indicator');
				var tHtml = '<h3>' + data.faq.subject + '</h3><div>' + data.faq.body + '</div>';
				faqBody.html(tHtml);
				return false;
			}
		});
		return false;
	});
});
$(document).bind('_register', function(e, box){
	var form = $('form', box);
	var formResContainer = $('.formResContainer', box);
	form.submit(function(){
		var agree = $('[name=agree]', form).attr('checked') ? 1 : 0;
		formResContainer.empty();
		formResContainer.show('slow');
		formResContainer.addClass('indicator');
		var username = $('[name=username]', form).attr('value');
		username = clearUsername(username);
		var password = $('[name=password]', form).attr('value');
		var password2 = $('[name=password2]', form).attr('value');
		var email = $('[name=email]', form).attr('value');
		var time_zone = $('[name=time_zone]', form).attr('value');
		
		$.myAjax({
			type: "POST",
			url: "action.php",
			dataType: 'json',
			data: {
				type: 'register', 
				username: username, 
				password: password,
				password2: password2,
				time_zone: time_zone,
				email: email,
				agree: agree
			},
			myFailure:  function(message, data) {
				formResContainer.removeClass('indicator');
				formResContainer.html(message);
			},
			mySuccess:  function(message, data) {
				formResContainer.removeClass('indicator');
				box.html(message);
			}
			
		});
		return false;
	});
});
$(document).bind('_contact', function(e, box){
	var form = $('form', box);
	var formResContainer = $('.formResContainer', box);
	form.submit(function(){
		formResContainer.empty();
		formResContainer.show('slow');
		formResContainer.addClass('indicator');
		var username = $('[name=username]', form).attr('value');
		var email = $('[name=email]', form).attr('value');
		var body = $('[name=body]', form).attr('value');
		$.myAjax({
			type: "POST",
			url: "action.php",
			dataType: 'json',
			data: {
				type: 'contact', 
				username: username, 
				body: body,
				email: email
			},
			myFailure:  function(message, data) {
				formResContainer.removeClass('indicator');
				formResContainer.html(message);
			},
			mySuccess:  function(message, data) {
				formResContainer.removeClass('indicator');
				box.html(message);
			}
			
		});
		return false;
	});
});
$(document).bind('_forgot', function(e, box){
	var form = $('form', box);
	var formResContainer = $('.formResContainer', box);
	form.submit(function(){
		formResContainer.empty();
		formResContainer.show('slow');
		formResContainer.addClass('indicator');
		var username = $('[name=username]', form).attr('value');
		$.myAjax({
			type: "POST",
			url: "action.php",
			dataType: 'json',
			data: {
				type: 'forgot', 
				username: username 
			},
			myFailure:  function(message, data) {
				formResContainer.removeClass('indicator');
				formResContainer.html(message);
			},
			mySuccess:  function(message, data) {
				formResContainer.removeClass('indicator');
				box.html(message);
			}
			
		});
		return false;
	});
});
$(document).bind('_forgot_accept', function(e, box){
	var alreadySent = false;
	var form = $('form', box);
	var formResContainer = $('.formResContainer', box);
	form.submit(function(){
		if (alreadySent){
			return false;
		}
		alreadySent = true;
		formResContainer.empty();
		formResContainer.show('slow');
		formResContainer.addClass('indicator');
		var password = $('[name=password]', form).attr('value');
		var password2 = $('[name=password2]', form).attr('value');
		var act_id = $('[name=act_id]', form).attr('value');
		var hash = $('[name=hash]', form).attr('value');
		$.myAjax({
			type: "POST",
			url: "action.php",
			dataType: 'json',
			data: {
				type: 'forgot_accept', 
				password: password, 
				password2: password2, 
				act_id: act_id, 
				hash: hash 
			},
			myFailure:  function(message, data) {
				formResContainer.removeClass('indicator');
				formResContainer.html(message);
				alreadySent = false;
			},
			mySuccess:  function(message, data) {
				formResContainer.removeClass('indicator');
				box.html(message);
			}
			
		});
		return false;
	});
});

$(document).bind('_profile', function(e, box){
	var formResContainer = $('.formResContainer', box);

	box.bind('showEditPass', function(){
		$('.linkContainer:has(.editPass)', box).hide('slow');
		$('.passwordEditContainer', box).show('slow');
		$('.linkContainer:has(.editPassCancel)', box).show('slow');
	});
	box.bind('hideEditPass', function(){
		$('.linkContainer:has(.editPassCancel)', box).hide('slow');
		$('.passwordEditContainer', box).hide('slow');
		$('.linkContainer:has(.editPass)', box).show('slow');
	});
	box.bind('showEditProfile', function(){
		$('.linkContainer:has(.editProfile)', box).hide('slow');
		$('.profileShowContainer', box).hide('slow');
		$('.profileEditContainer', box).show('slow');
		$('.linkContainer:has(.editProfileCancel)', box).show('slow');
	});
	box.bind('hideEditProfile', function(){
		$('.linkContainer:has(.editProfileCancel)', box).hide('slow');
		$('.profileEditContainer', box).hide('slow');
		$('.profileShowContainer', box).show('slow');
		$('.linkContainer:has(.editProfile)', box).show('slow');
	});
	$('.linkContainer:has(.editPass)', box).click(function(e){
		box.trigger('showEditPass');
		return false;
	});
	
	$('.linkContainer:has(.editPassCancel)', box).click(function(e){
		box.trigger('hideEditPass');
		return false;
	});
	$('.linkContainer:has(.editProfile)', box).click(function(e){
		box.trigger('showEditProfile');
		return false;	
	});
	
	$('.linkContainer:has(.editProfileCancel)', box).click(function(e){
		box.trigger('hideEditProfile');
		return false;	
	});
	
	$('.passwordEditContainer form', box).submit(function(){
		
		formResContainer.empty();
		formResContainer.show('slow');
		formResContainer.addClass('indicator');
		$(this).attr('action', 'action.php');
		
		$(this).myAjaxSubmit({
			dataType: 'json',
			myFailure:  function(message) {
				formResContainer.removeClass('indicator');
				formResContainer.html(message);
			},
			mySuccess:  function(message) {
				formResContainer.removeClass('indicator');
				formResContainer.html(message);
				box.trigger('hideEditPass');
			}
		});
		return false;
	});
	$('.profileEditContainer form', box).submit(function(){
		
		formResContainer.empty();
		formResContainer.show('slow');
		formResContainer.addClass('indicator');
		$(this).attr('action', 'action.php');
		
		$(this).myAjaxSubmit({
			dataType: 'json',
			myFailure:  function(message) {
				formResContainer.removeClass('indicator');
				formResContainer.html(message);
			},
			mySuccess:  function(message) {
				formResContainer.removeClass('indicator');
				formResContainer.html(message);
				$('.formDesc.uemail', box).html($('[name=email]', box).val());
				$('.formDesc.ppage', box).html($('[name=ppage]', box).val());
				var select = $('[name=time_zone]', box);
				var option = $('option[value=' + select.val() + ']', select);
				
				$('.formDesc.time_zone', box).html(option.text());
				
				var selectReport = $('[name=report]', box);
				var optionReport = $('option[value=' + selectReport.val() + ']', selectReport);
				
				var selectIndexing = $('[name=indexing]', box);
				var indexingReport = $('option[value=' + selectIndexing.val() + ']', selectIndexing);
				
				$('.formDesc.report', box).html(optionReport.text());
				$('.formDesc.indexing', box).html(indexingReport.text());
				box.trigger('hideEditProfile');
			}
		});
		return false;
	});
	
});


$(document).bind('_codeContainer', function(e, box){
	$('.code', box).click(function(e){
		this.select();
	});
});

$(document).bind('_viewDataRow', function(e, box){
	var table = $('.viewTable', box);
	var usernameTd = $('.trUsernameContainer', box);
	var tempData = $('.trContainer .viewRow', box);
	
	var nextLink = $('.next', box);
	var backLink = $('.prev', box);
	
	nextLink.click(function(){
		getData.page = Number(getData.page) + 1;
		box.trigger('getViewData', [getData]);
		return false;
	});
	backLink.click(function(){
		getData.page = Number(getData.page) - 1;
		box.trigger('getViewData', [getData]);
		return false;
	});
	
	box.bind('getViewData', function(e, getData){
	
		$('#previewBox').hide();
		$('#statContainer', box).hide();
		box.addClass('indicator2');
		
		$('.viewRow', table).remove();
		$.myAjax({
			type: "POST",
			url: "action.php",
			dataType: 'json',
			data: {
				type: 'getViewData',
				p: getData.page,
				search: getData.search
			},
			myFailure:  function(message, data) {
				$('#statContainer', box).show();
				box.removeClass('indicator2');
				return;
			},
			mySuccess:  function(message, data) {
				$('#statContainer', box).show();
				box.removeClass('indicator2');
				for (var i in data.viewData){
					var clone = tempData.clone(true);
					clone.html(getReplaceRow(data.viewData[i]));
					if (!data.viewData[i].viewed){
						clone.addClass('viewed');
					}
					clone.appendTo(table);
					initBoxType(box, clone);
					
					//$('.td1', clone).addClass('relab' + data.viewData[i].relab);
				}
				
				if (data.viewDataCount > data.viewDataLimit){
					$('.pageContainer', box).show();
					var template = $('[template=dataViewPage]', box);
					var topPageC = $('.pageingTopContainer', box);
					var botPageC = $('.pageingContainer', box);
					topPageC.empty();
					botPageC.empty();
					if (getData.page == 0){
						backLink.hide();
					} else {
						backLink.show();
					}
					var lastPage = Math.ceil(data.viewDataCount / data.viewDataLimit) - 1;
					if (getData.page >= lastPage){
						nextLink.hide();
					} else {
						nextLink.show();
					}
					
					for (var i = 0; i < (data.viewDataCount / data.viewDataLimit); i++){
						
						var clone = template.clone(true);
						var clHtml = 1 + i;
						
						if (i != 0 && i != lastPage){
						
							if (i == Number(getData.page) + 5 || i == Number(getData.page) - 5){
								clHtml = ' ... ';
							}else if (i > Number(getData.page) + 5 || i < Number(getData.page) - 5){
								continue;
							} 
						}
						clone.attr('boxType', clone.attr('template'))
							.removeAttr('template')
							.attr('page', i)
							.html(clHtml);
						if (getData.page == i){
							clone.css('font-weight', 'bold');
						} 
						
						clone.appendTo(topPageC);
						initBoxType(box, clone);
						clone.show();
						clone.clone(true).appendTo(botPageC)
					}
				} else {
					$('.pageContainer', box).hide();
				}
			}
			
		});
	});
	
	function getReplaceRow(viewObj){
		var username = viewObj.username;
		var date = viewObj.date;
		var address = viewObj.address;
		var title = viewObj.title;
		var count = viewObj.count;
		var location = viewObj.location;
		var cname = viewObj.cname;
		var comments = viewObj.comments;
		var cnameIP = viewObj.cnameIP;
		if (!title){
			title = urldecode(urldecode(address));
		}
		if (comments != 0){
		
			title += ' (' + comments + ')';
		}
		var browser = viewObj.browser;
		var ip = viewObj.ip;
		cloneHtml = tempData.html();
		var usernameTdClone = '';
		var relabReq = '';
		if (username){	
			usernameTdClone = usernameTd.html();
			usernameTdClone = usernameTdClone.replace(/__USERNAME__/g, username);
			relabReq = $('#relab' + viewObj.relab).html();
		}
		if (count > 1){
			usernameTdClone += '<span class="starView" boxType="starView" vid="' + viewObj.id + '"> (*' + count + ')</span>';
		}
		
		usernameTdClone += ' ' + relabReq;
		usernameTdClone += cname;

		cloneHtml = cloneHtml.replace(/__USERNAME_TD__/g, usernameTdClone);
		
		cloneHtml = cloneHtml.replace(/__ADDRESS__/g, address);
		cloneHtml = cloneHtml.replace(/__ADDRESS_DEC__/g, urldecode(urldecode(address)));
		cloneHtml = cloneHtml.replace(/__BROWSER__/g, browser);
		cloneHtml = cloneHtml.replace(/__TITLE__/g, title);
		cloneHtml = cloneHtml.replace(/__DATE__/g, date);
		cloneHtml = cloneHtml.replace(/__CNAME_IP__/g, cnameIP);
		
		cloneHtml = cloneHtml.replace(/__LOCATION__/g, location);
		cloneHtml = cloneHtml.replace(/__IP__/g, ip);
		
		return cloneHtml;
	} 
	
	var getData = {page: 0,limit: 25, search: ''};
	box.trigger('getViewData', [getData]);
	
	$('.refresh', box).click(function(e){
		if (Math.round(Math.random() * 20) == 5){
			document.location = document.location;
		} else {
			box.trigger('getViewData', [getData]);
		}
		return false;
	});
	
	box.bind('_dataViewPage', function(e, box){
		box.click(function(e){
			getData.page = box.attr('page');
			box.trigger('getViewData', [getData]);
			return false;
		});
	
	});
	var searchInput = $('.searchView', box);
	searchInput.attr('value', '');
	var timeOutSearch;
	var prevValue = '';
	searchInput.keyup(function(e){
		
		var searchKey = jQuery.trim(searchInput.attr('value'));
		if (searchKey == prevValue){
			return false;
		}
		prevValue = searchKey;
		
		clearTimeout(timeOutSearch);
		timeOutSearch = setTimeout(function(){
			
			if (!searchKey.length){
				getData.search = '';
				box.trigger('getViewData', [getData]);
			} else if(searchKey.length > 2){
				getData.search = searchKey;
				getData.page = 0;
				box.trigger('getViewData', [getData]);
			}
		}, 1000); 
			
	});
});
$(document).bind('_starView', function(e, box){
	var timeOut;
	box.mouseenter(function(e){
		timeOut = setTimeout(function(){
		var vid = box.attr('vid');
		$.myAjax({
			type: "POST",
			url: "action.php",
			dataType: 'json',
			data: {type: 'getStarData', vid: vid},
			myFailure:  function(message, data) {
				alert(message);
			},
			mySuccess:  function(message, data) {
				var tmpHtml = '';
				for(var i = 0; i < data.dateData.length; i++){
					tmpHtml += data.dateData[i] + '<br />';
				}
				var previewBox = $('#previewBox');
				previewBox.empty();
				previewBox.html(tmpHtml);

				var Yc = e.pageY;
				var Xc = e.pageX;
				
				if (Xc + previewBox.innerWidth() + 10 > window.innerWidth){
					Xc -= (previewBox.innerWidth() + 10);
				}
				
				if (Yc + previewBox.innerHeight() + 10 > window.innerHeight){
					Yc -= (previewBox.innerHeight() + 10);
				}
				previewBox.css({
					'top': Yc,
					'left': Xc
				});
				
				previewBox.show('slow');
			}
		});

		}, 300); 
	});
	box.mouseleave(function(e){
		clearTimeout(timeOut);
	});

});
$(document).bind('_previewBox', function(e, box){
	$(document).click(function(e){
		box.hide();
	});
});
$(document).bind('_postLj', function(e, box){

	function showEditBox(type){
		if (type == 'html'){
			$('.editorTypeLink.html', box).addClass('active');
			$('.editorTypeLink.visual', box).removeClass('active');
			$('.bodyTextarea', box).show();
			$('.bodyVisual', box).hide();
			if (visual){
				var text = FCKeditorAPI.GetInstance('event').GetXHTML();
				text = text.replace(/<br \/>/gi, '\n');
				$('textarea[name=body]', form).val(text);
				
			}
		} else {
			$('.editorTypeLink.html', box).removeClass('active');
			$('.editorTypeLink.visual', box).addClass('active');
			$('.bodyTextarea', box).hide();
			$('.bodyVisual', box).show();
			if (!visual){
				var text = $('textarea[name=body]', form).val();
				text = text.replace(/\n/gi, '<br />');
				FCKeditorAPI.GetInstance('event').SetHTML(text);
			}
		}
	}
	var visual = false;
	if (visual){
		showEditBox('visual');
		
	} else {
		showEditBox('html');
	}
	$('.editorTypeLink', box).click(function(){
		if ($(this).hasClass('html')){
			showEditBox('html');
			visual = false;
		} else {
			showEditBox('visual');
			visual = true;
		}
		return false;
	});
	$('input[name=postpone]', box).click(function(){
		if ($(this).is(':checked')){
			$('#timePickContainer').show('slow');
		} else {
			$('#timePickContainer').hide('slow');
		}
	});
	/*
	var d = new Date( )
	$('[name=postdate]', form).datepicker({ yearRange: d.getFullYear() + ':' + (d.getFullYear() + 1), dateFormat: 'yy-mm-dd'});
	*/
	
	$('[name=postdate]', form).datepicker({
    	duration: '',
        showTime: true,
        constrainInput: true,
        time24h: true,
        dateFormat: 'yy-mm-dd',
        stepMinutes: 10
     });

	
	
	var form = $('form', box);
	var formResContainer = $('.formResContainer', box);
	form.submit(function(){
	
		var postpone = $('[name=postpone]', form).is(':checked') ? 1 : 0;
		var postdate = $('[name=postdate]', form).attr('value');
		if (postpone && !postdate){
			alert('empty date');
			return false;
		}
	
		formResContainer.empty();
		formResContainer.show('slow');
		formResContainer.addClass('indicator');
		if (visual){
			var event = FCKeditorAPI.GetInstance('event').GetXHTML();
		} else {
			var event = $('textarea[name=body]', form).val();
		}
		var subject = $('[name=subject]', form).attr('value');
		var password = $('[name=password]', form).attr('value');
		var security = $('[name=security]', form).attr('value');
		var tag = $('[name=tag]', form).attr('value');
		
		var date = new Date();
		$.myAjax({
			type: "POST",
			url: "action.php",
			dataType: 'json',
			data: {
				type: 'postEvent', 
				event: event, 
				subject: subject,
				password: password,
				security: security,
				tag: tag,
				postdate: postdate,
				postpone: postpone,
				hour: date.getHours(),
				minute: date.getMinutes(),
				year: date.getFullYear(),
				month: date.getMonth(),
				day: date.getDate()
			},
			myFailure:  function(message, data) {
				formResContainer.removeClass('indicator');
				formResContainer.html(message);
			},
			mySuccess:  function(message, data) {
				formResContainer.removeClass('indicator');
				box.html(message);
			}
			
		});
		return false;
	});
});
$(document).bind('_postponeItem', function(e, box, parent, options){

	box.click(function(){
		
		if (confirm($('input[name=areyousure]').val())){
			$.myAjax({
				type: "POST",
				url: "action.php",
				dataType: 'json',
				data: {
					type: 'removePostpone', 
					p_id: options.p_id 
				},
				myFailure:  function(message, data) {
					alert(message);
				},
				mySuccess:  function(message, data) {
					box.hide('slow');
				}
			});
		}
		return false;
	});
});
$(document).bind('_addCname', function(e, box, parent, options){

	box.click(function(){
		var newCname = prompt($('input[name=cnameAdd]').val() + options.ip, '');
		if (newCname){
			$.myAjax({
			type: "POST",
			url: "action.php",
			dataType: 'json',
			data: {
				type: 'addCname', 
				ip: options.ip, 
				cname: newCname
			},
			myFailure:  function(message, data) {
				alert(message);
			},
			mySuccess:  function(message, data) {
				var getData = {page: 0,limit: 25, search: ''};
				$('[boxtype=viewDataRow]').trigger('getViewData', [getData]);
				alert(message);
			}
			
		});
		}
	});
});
$(document).bind('_editCname', function(e, box, parent, options){
	box.click(function(){
		var newCname = prompt($('input[name=cnameEdit]').val() + options.ip, options.cname);
		if (newCname != null){
			$.myAjax({
				type: "POST",
				url: "action.php",
				dataType: 'json',
				data: {
					type: 'updateCname', 
					ip: options.ip, 
					cname: '' + newCname
				},
				myFailure:  function(message, data) {
					alert(message);
				},
				mySuccess:  function(message, data) {
					var getData = {page: 0,limit: 25, search: ''};
					$('[boxtype=viewDataRow]').trigger('getViewData', [getData]);
					alert(message);
				}
			});
		}
	});
});
$(document).bind('_sendConfirm', function(e, box, parent, options){
	
	$('a', box).click(function(){
		$.myAjax({
			type: "POST",
			url: "action.php",
			dataType: 'json',
			data: {
				type: 'sendConfirm'
			},
			myFailure:  function(message, data) {
				alert(message);
			},
			mySuccess:  function(message, data) {
				alert(message);
			}
		});
		return false;
	});
});


function clearUsername(username){
	var pattern = /(http:\/\/)?([a-zA-Z0-9_-]+)(\.livejournal\.com)?/
	var regexpRes = username.match(pattern);
	if (regexpRes){
		return regexpRes[2];
	}
	return username;
	
}