﻿/// <reference name="MicrosoftAjax.js"/>

var PendingTab = {
	render: function(container, optOptions) {

		var options = $j.extend({}, {
			groupNameMaxLength: 20,
			webSiteMaxLength: 40,
			subCategoryId: null,
			createSuccess: null,
			createButtonClass: ''
		}, optOptions);

		var sb = new Sys.StringBuilder();
		sb.append('<div class="pendingTab">');
		sb.append('	<div class="fieldName left">Group Name</div>')
		sb.append('	<div class="counter groupNameCounter"></div>');
		sb.append('	<br class="clear" /><input name="groupNameInput" type="text" />');
		sb.append('	<div class="groupExample">example, troops</div>');
		sb.append('	<div class="fieldName left">Web Site Address</div>')
		sb.append('	<div class="counter webSiteAddressCounter"></div>');
		sb.append('	<br class="clear" /><input name="webSiteAddressInput" type="text" />');
		sb.append('	<div class="webSiteExample"></div>');
		sb.append('	<div class="errorLabelContainer"></div>');
		sb.append('	<a id="signinProgress" class="AjaxRefreshBigImage" style="visibility:hidden">&nbsp;</a>');
		sb.append('	<a class="createTab" title="Create Tab"></a><br class="clear" />');
		sb.append('</div>');

		var obj = $j(sb.toString())
			.appendTo(container);
		var createTabButton = $j('.createTab', obj)
			.addClass(options.createButtonClass)
			.click(function() {
				if (!$j(this).hasClass('createTabDisabled')) {
					$j('#aspnetForm').submit();
				}
				return false;
			});

		var groupNameInput = $j('[name=groupNameInput]', obj)
			.keyup(function() {
				dataBind();
			})
			.change(function() {
				if (addressInput.val().trim() == '') {
					new ServiceProxy(App.buildUrl('/WebServices/GroupService.asmx/'))
						.invoke(
							'SuggestTabUrl',
							{
								publicUrl: groupNameInput.val()
							},
							function(url) {
								if (addressInput.val() == '') {
									addressInput.attr('value', url);
									dataBind();
								}
							},
							function() { }
						);
				}
			})
			.attr('maxlength', options.groupNameMaxLength);

		var addressInput = $j('[name=webSiteAddressInput]', obj)
			.keyup(function() {
				dataBind();
			})
			.attr('maxlength', options.webSiteMaxLength);

		function dataBind() {
			obj
				.find('.groupNameCounter')
					.text(options.groupNameMaxLength - groupNameInput.val().length)
				.end()
				.find('.webSiteAddressCounter')
					.text(options.webSiteMaxLength - addressInput.val().length)
				.end()
				.find('.webSiteExample')
					.text('www.tabup.com/' + addressInput.val())
				.end();
		}

		var validator = $j("#aspnetForm").validate({
			rules: {
				groupNameInput: {
					required: true
				},
				webSiteAddressInput: {
					required: true
				}
			},
			messages: {
				groupNameInput: {
					required: 'Group Name is a required field.'
				},
				webSiteAddressInput: {
					required: 'Web Site Address is a required field.'
				}
			},
			errorLabelContainer: $j('.errorLabelContainer', obj),
			submitHandler: function(form) {
				createTabButton.addClass('createTabDisabled');
				$j('#signinProgress').css('visibility', 'visible');
				var groupName = groupNameInput.val();
				var address = addressInput.val();
				if(App.isAuthenticated) {
					new ServiceProxy(App.buildUrl('/WebServices/GroupService.asmx/'))
						.invoke('CreateGroup2',
							{
								pendingGroup: {
									name: groupName,
									webAddress: address,
									subCategoryId: options.subCategoryId
								}
							},
							function(success) {
								if (success.ErrorList.length > 0) {
									$j.each(success.ErrorList, function(index, item) {
										if (item.Name == 'name')
											validator.showErrors({ 'groupNameInput': item.Message });
										else if (item.Name == 'webAddress')
											validator.showErrors({ 'webSiteAddressInput': item.Message });
									});
									createTabButton.removeClass('createTabDisabled');
									$j('#signinProgress').css('visibility', 'hidden');
								}
								else if (success.ServerErrorId)
									App.showErrorPage(success.ServerErrorId);
								else {
									window.location.href = App.buildUrl('/' + success.SuccessResult.tabUrl);
								}
							},
							function(failed) {
								App.showErrorPage();
							}
						);
				}
				else {
					new ServiceProxy(App.buildUrl('/WebServices/GroupService.asmx/'))
						.invoke('ValidatePendingGroup',
							{
								name: groupName,
								webAddress: address,
								subCategoryId: options.subCategoryId
							},
							function(success) {
								if (success.ErrorList.length > 0) {
									$j.each(success.ErrorList, function(index, item) {
										if (item.Name == 'name')
											validator.showErrors({ 'groupNameInput': item.Message });
										else if (item.Name == 'webAddress')
											validator.showErrors({ 'webSiteAddressInput': item.Message });
									});
									createTabButton.removeClass('createTabDisabled');
									$j('#signinProgress').css('visibility', 'hidden');
								}
								else if (success.ServerErrorId)
									App.showErrorPage(success.ServerErrorId);
								else {
									var p = { 
										ptn: encodeURIComponent(groupName),
										pta: encodeURIComponent(address)
									};
									if(options.subCategoryId)
										p.sc = options.subCategoryId;
									window.location.href = App.buildUrl('/SignUp.aspx?' + $j.param(p));
								}
							},
							function(failed) {
								App.showErrorPage();
							}
						);
				}
			}
		});
		dataBind();
	}
};
