if (!BULK) {
	var BULK = new Object();
}

/////////////////////////////// COMMON ///////////////////////////////

/**
 * Method show form message
 * 
 * @param string message
 */
BULK.showMessage = function(message) {
	$('#bulkMessage').html(message);
};

/**
 * Method remove all form messages
 */
BULK.clearMessages = function() {
	$('#bulkMessage').html('');
};


/**
 * Method return form ID for specified Bulk operation
 * 
 * @param  string operation
 * @return string
 */
BULK.getFormID = function(operation) {
	if (!operation) {
		return false;
	}
	return 'frm' + operation.charAt(0).toUpperCase() + operation.slice(1);
};

/**
 * Method return to first screen of specified Bulk operation
 * 
 * @param string operation
 */
BULK.back = function(operation) {
	var form = $('#' + this.getFormID(operation));
	if (form.length == 0) {
		return false;
	}	
	form.find("input[name='step']").val('error');	
	form.submit();	
};

/**
 * Method goes to next screen of specified Bulk operation
 * 
 * @param string operation
 */
BULK.next = function(operation, confirm) {
	var form = $('#' + this.getFormID(operation));
	if (form.length == 0) {
		return false;
	}
	BULK.clearMessages();
	if (confirm) {
		form.find("input[name='step']").val('confirm');
	} else {
		form.find("input[name='step']").val('before');	
	}	
	if (form.find('textarea#validDomains').length) {
		form.find('textarea#domains').val(form.find('textarea#validDomains').val());
	}
	form.submit();	
};

/**
 * Method init domains counter for input area
 */
BULK.initDomainCounter = function(){		
	$(document).ready(function() {	
		$('#domains').wordCount();
	});
};

/**
 * Method export domains list
 */
BULK.exprt = function() {
	
}

/////////////////////////////// BULK EDIT ///////////////////////////////

/**
 * Method proceed with Bulk Edit request
 */
BULK.edit = function() {
	BULK.clearMessages();
	$('#BulkContainer').Loader('show');	
	var obj = new Object();
	// Get domains
	var domains = $('#frmEdit textarea#domains').val();
	obj.domains = new Array();
	$.each(domains.split('\n'), function(i, e) {
		var domain = $.trim(e);
		if (domain != '') {
			obj.domains.push(domain);
		}
	});
	// Get contacts
	var contacts = new Object();
	if ($('#chkContacts').is(':checked')) {
		contacts.status = true;
		contacts.single = true;
		contacts.list = new Array();
		var prev = null;
		$("#frmContactSet select[id^='contact']").each(function(i){
			var type = $(this).attr('id').substring(7);
			var id = $(this).val();
			// If not single or different - save to object
			if (id != 'single') {
				// If using single and previous id doesn't equal current id or id = 0 (different)
				// Set single to false
				if (contacts.single && prev != null && (prev != id || id == 0)) {
					contacts.single = false;
				}
				// If different - don't add to list
				if (id > 0) {
					contacts.list.push(new Array(type, id));
					prev = id;
				}			
			}
			// If same contact selected for all contact types - trigger toggleSingle()
			if (contacts.single && !$('#frmContactSet input#useSingleContact').is(':checked')) {
				$('#frmContactSet input#useSingleContact').trigger('click');
			}
		});	
	} else {
		contacts.status = false;
	}
	obj.contacts = contacts;
	// Get DNS Servers 
	var dnsservers = new Object();
	if ($('#chkDNSServers').is(':checked')) {
		dnsservers.status = true;
		dnsservers.state = $("#frmDNSServers input[name='state']:checked").val();	
		switch(dnsservers.state) {
			case 'custom':
				dnsservers.nameservers = new Array();
				$("#frmDNSServers input[name^='custom_ns']").each(function(i){
					if ($.trim($(this).val()) != '') {
						dnsservers.nameservers.push($(this).val());
					}
				});
				break;
			case 'preset':
				dnsservers.preset = $('#frmDNSServers #presetlist').val();
				break;
			case 'parking': 
			case 'default':
			default:
				break;
		}	
	} else {
		dnsservers.status = false;
	}
	obj.dnsservers = dnsservers;
	// Get DNS Records
	var dnsrecords = new Object();
	if ($('#chkHostRecords').is(':checked')) {
		dnsrecords.status = true;
		dnsrecords.records = new Array();
		// Host records		
		var hostTable = $('#frmHostRecords table#HostRecords > tbody > tr');		
		if (hostTable.length > 0) {		
			hostTable.each(function(i){
				var record = new Object();
				record.hostname = $.trim($(this).find("input[name^='hostrecord_name']").val());
				record.value = $.trim($(this).find("input[name^='hostrecord_value']").val());
				if (record.hostname != '' || record.value != '') { // add only rows with non-empty hostname				
					record.type = $.trim($(this).find("select[name^='hostrecord_type'] option:selected").val());				
					dnsrecords.records.push(record);
				}
			});
		}
		// Mail records
		var mailTable = $('#frmHostRecords table#MailRecords > tbody > tr');
		if (mailTable.length > 0) {		
			mailTable.each(function(i){
				var record = new Object();
				record.hostname = $.trim($(this).find("input[name^='mailrecord_name']").val());
				record.value = $.trim($(this).find("input[name^='mailrecord_value']").val());
				if (record.hostname != '' || record.value != '') { // add only rows with non-empty hostname
					record.type = $.trim($(this).find("input[name^='mailrecord_type']").val());				
					record.priority = parseInt($.trim($(this).find("input[name^='mailrecord_priority']").val()));
					if (record.priority < 1 || record.priority > 100) {
						record.prioriry = 10;
					}
					record.priority = Math.round(record.priority);
					$(this).find("input[name^='mailrecord_priority']").val(record.priority);
					dnsrecords.records.push(record);
				}
			});
		}
		if (dnsrecords.records.length == 0) {
			dnsrecords.status = false;
		}
	} else {
		dnsrecords.status = false;
	}
	obj.dnsrecords = dnsrecords;
	// Get Lock status
	var lock = new Object();
	if ($('#chkLock').is(':checked')) {
		lock.status = true;
		if ($('input#LockOn').is(':checked')) {
			lock.enabled = true;
		} else if ($('input#LockOff').is(':checked')) {
			lock.enabled = false;
		} else {
			lock.status = false;
		}
	} else {
		lock.status = false;
	}
	obj.lock = lock;
	$.ajax({
			url: $('#frmEdit').attr('action')
		,	data: 'step=ajax&data=' + JSON.stringify(obj)
		,	success: function(JsonResponse) {
				if (isJSON(JsonResponse)) {
					var response = JSON.parse(JsonResponse);
					BULK.showMessage(response.message);
					if (response.status) {	
						$("#frmEdit input[name='step']").val('summary');
						$("#frmEdit input[name='bulkid']").val(response.bulkid);
						$('#frmEdit').submit(); 
					} else {
						$('#BulkContainer').Loader('hide');
					}					
				} else {
					BULK.showMessage(JsonResponse);
					$('#BulkContainer').Loader('hide');
				}				
			}
	});
};

/**
 * Method toggle sections on Bulk Edit screen
 * 
 * @param object checkbox
 */
BULK.editToggleSection = function(chkbox) {
	var id = $(chkbox).attr('id').slice(3);	
	var section = $('div#section' + id);
	if (section.length && section.is(':hidden')) {
		section.show();
	} else {
		section.hide();
	}
	/*if (id == 'DNSServers') {
		this.editCheckDNS();
	}*/
	if ($("input[id^='chk']:checked").length) {
		$('#buttonEditContinue').sbutton('enable', 'click', function(){
			BULK.edit();
		});		
	} else {
		$('#buttonEditContinue').sbutton('disable');
	}
};

/**
 * Method toggle host records checkbox if not default dns servers selected 
 */
BULK.editCheckDNS = function() {
	if ($('input#chkDNSServers').is(':checked')) {	
		var form = $('#frmDNSServers');
		if (form.find("input[name^='state']:checked").attr('id') != 'state_default') {
			$('input#chkHostRecords').attr('disabled', 'disabled').removeAttr('checked');
		}
	} else {
		$('input#chkHostRecords').removeAttr('disabled');
	}
};

/////////////////////////////// BULK MODEL ///////////////////////////////

/**
 * Method called when operation selected on bulk model screen 
 */
BULK.modelSelectOperation = function() {
	if ($("#modelOperations input[id^='chk']:checked").length) {
		$('#buttonModelContinue').sbutton('enable', 'click', function(){
			BULK.next('model');
		});
	} else {
		$('#buttonModelContinue').sbutton('disable');
	}	
	if ($('input#chkContacts').is(':checked')) {
		$('div#contactsList').show();		
	} else {
		$('div#contactsList').hide();
	}
};

