$('#whois').append(
	'<div class="formBox"><div><input type="text" name="nameDomain" id="nameDomain" value="" /></div></div>'+
	'<div class="formButton"><div><button type="submit" id="checking">Проверить</button></div></div>'+
	'<div class="errorBox"></div>'+
	'<div class="resultBox"></div>'	
);

$(document).ready(function() {
	var payUrl = 'deenhost.ru/index.php?option=com_breezingforms&ff_form=19';
	var refID = $('#whois_refid').val();
	var lang = $('#whois_lang').val();
	//var phpFile = '/whois.php';
	var phpFile = 'http://deenhost.ru/whois/whois.php';
	
	var whois = {
		startBlock: '<table width="100%"><tr><td style="width:50%">',
		endBlock: '</td><td><i class="loaderImg"></i></td><td><i class="loaderImg"></i></td></tr></table></div>',
		listDomainsZone: ['ru', 'рф', 'su', 'com', 'org', 'net', 'info', 'biz', 'name', 'me', 'tel'],
		intervalID: '',
		alreadyChecking: false,
		oldDomaneName: '',
		
		/**
		 * Очестка домена от ненужного.
		 * 
		 * @param domain
		 * @returns
		 */
		clearDomainName: function(domain)
		{
			if (domain.substr(0, 7) == 'http://')
				domain = domain.replace('http://', '');
			var domainAndZone = domain.split('\.');
			if(domainAndZone.length > 2 && domain.substr(0, 4) == 'www.')
				domain = domain.replace('www.', '');
			if(domain.indexOf('/') > 0) {
				var tmp = domain.split('/');
				domain = tmp[0]; 
			}
			
			return domain;
		},
		
		/**
		 * Проверка доменного имени на допустимость.
		 * 
		 * @param domain
		 * @returns
		 */
		checkingValidDomainName: function(domain)
		{
			var domainAndZone = domain.split('\.');
			if(domainAndZone[0].length < 3) {
				$('.errorBox').html('<p>Минимальная длина домена 3 знака.</p>').fadeIn(600);
				return false;
			}
			if(domainAndZone[0].length > 32) {
				$('.errorBox').html('<p>Максимальная длина домена 32 знака.</p>').fadeIn(600);
				return false;
			}

			domainAndZone[0] = $.trim(domainAndZone[0]);
			if (/[^a-zA-Z0-9-]/.test(domainAndZone[0])) {
				if (/[^а-яёА-ЯЁ0-9-]/.test(domainAndZone[0])) {
					$('.errorBox').html('<p>В имени домена можно использовать только буквы, цифры и знак - (дефис).</p>').fadeIn(600);
					return false;
				}
			}
			
			for (var i = 2; i < domainAndZone.length; i++) {
				domainAndZone[1] += '.'+domainAndZone[i];
			}
			
			return domainAndZone;
		},
		
		/**
		 * Отправляет домены на проверку.
		 * 
		 * @param domain
		 */
		checkingDomain: function(domain)
		{
			var domainTmp = domain[0];
			var idDiv = '';
			whois.alreadChecking = true;
			$('.resultBox').text('');
			for (var i = 0; i < this.listDomainsZone.length; i++) {
				domainTmp = domain[0];
				if (this.listDomainsZone[i] == 'рф') {
					if(/[a-zA-Z]/.test(domain[0])) { 
						idDiv = domain[0]+'_rf';
						domainTmp = whois.toTranslit(domain[0], true);
					}else
						idDiv = whois.toTranslit(domain[0])+'_rf';
				}else { 
					if(/[а-яА-Я]/.test(domain[0])) 
						domainTmp = whois.toTranslit(domain[0]);
					idDiv = domainTmp+'_'+this.listDomainsZone[i];
				}
				var ajaxOpts = {  
					type: 'get',  
					url: phpFile,
					crossDomain: true,
					dataType: 'jsonp',
					context: idDiv,
					data: 'domain_name='+domainTmp+'.'+whois.listDomainsZone[i]+'&refid='+refID+'&lang='+lang,
					beforeSend: function() {
						$('.resultBox').append('<div id="'+idDiv+'" style="display:none">'+
							whois.startBlock+domainTmp+'.'+whois.listDomainsZone[i]+whois.endBlock
						);
						$('#'+idDiv).fadeToggle(1400);
					},
					success: function(data) {
						whois.forSucess(data, this);
					}
				};  
							
				$.ajax(ajaxOpts);
			}
			whois.alreadChecking = false;
		},
		
		/**
		 * Обрабатывает (выводит) результат ответа сервера.
		 * 
		 * @param data
		 * @param idDiv ID div для вывода результата.
		 * @returns {Boolean}
		 */
		forSucess: function(data, idDiv)
		{
			if (data.length < 1)
				data = {};
			if ('error' in data) {
				//alert(idDiv);
				$('#'+idDiv+' td').eq(1).text('Неизвестно');
				$('#'+idDiv+' td').eq(2).html('<a href="#" class="rechecking">Обновить</a>');
				return false;
			}
			$.each(data, function(key, val) {
				$('#'+idDiv+' td').eq(0).text(val[1]);
				if (val[0] === 0) { 
					$('#'+idDiv+' td').eq(1).text('Свободен');
					$('#'+idDiv+' td').eq(2).html('<a href="http://billing.deen.ru/domain/go2order/?domain='+val[1]+'" target="_blank">Заказать</a>');
				}else if (val[0] === 1) { 
					$('#'+idDiv+' td').eq(0).html('<a href="http://'+val[1]+'/" target="_blank">'+val[1]+'</a>');
					$('#'+idDiv+' td').eq(1).text('Занят');
					$('#'+idDiv+' td').eq(2).html('<a href="#" class="veiwWhois">Whois</a>');
					$('#'+idDiv).append('<div style="display:none"><pre>'+val[2]+'</pre></div>');
				}else {
					$('#'+idDiv+' td').eq(1).text('Неизвестно');
					$('#'+idDiv+' td').eq(2).html('<a href="#" class="rechecking">Обновить</a>');
				}
			});
		},
		
		/**
		 * Переводит строку в транслит и обратно.
		 * 
		 * @param text
		 * @param reTranslit Если true, то будет переводить с латиницы на кирилицу.
		 * @returns
		 */
		toTranslit: function(text, reTranslit)
		{
			text = text.replace(/[ьъ]/g, '');
			transBase = {
				'А': 'A','Б': 'B', 'В': 'V', 'Г': 'G', 'Д': 'D',
				'Е': 'E', 'Ё': 'Jo', 'Ж': 'Zh', 'З': 'Z',
				'И': 'I', 'Й': 'J', 'К': 'K', 'Л': 'L',
				'М': 'M', 'Н': 'N', 'О': 'O', 'П': 'P',
				'Р': 'R', 'С': 'S', 'Т': 'T', 'У': 'U',
				'Ф': 'F', 'Х': 'H', 'Ц': 'C', 'Ч': 'Ch',
				'Ш': 'Sh', 'Щ': 'W', 'Ы': 'Y', 'Э': 'Je',
				'Ю': 'Yu', 'Я': 'Ya',
				'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g',
				'д': 'd', 'е': 'e', 'ё': 'jo', 'ж': 'zh',
				'з': 'z', 'и': 'i', 'й': 'j', 'к': 'k',
				'л': 'l', 'м': 'm', 'н': 'n', 'о': 'o',
				'п': 'p', 'р': 'r', 'с': 's', 'т': 't',
				'у': 'u', 'ф': 'f', 'х': 'h', 'ц': 'c',
				'ч': 'ch', 'ш': 'sh', 'щ': 'w', 'ы': 'y',
				'э': 'je', 'ю': 'yu', 'я': 'ya'
			};
			
			transExtra = {
				'Ку': 'Q', 'Х': 'X', 'ку': 'q', 'х': 'x'	
			};
			
			if (/[а-яА-Я]/.test(text) && reTranslit !== true) {
				$.each(transBase, function(key, val) { 
					text = text.replace(new RegExp(key,'g'), val);	
				});
				$.each(transExtra, function(key, val) { 
					text = text.replace(new RegExp(key,'g'), val);	
				});
			}else if (/[a-zA-Z]/.test(text) && reTranslit === true) {
				$.each(transBase, function(key, val) {
					text = text.replace(new RegExp(val,'g'), key);	
				});
				$.each(transExtra, function(key, val) {
					text = text.replace(new RegExp(val,'g'), key);	
				});
			}
			return text;
		}
	};
	
	// Проверка доменов.
	$('#checking').live('click', function(e) {
		e.preventDefault();
		$('.errorBox').fadeOut(600);
		var domain = whois.clearDomainName($('#nameDomain').val());
		domain = whois.checkingValidDomainName(domain);
		if (domain == false)
			return false;
		whois.checkingDomain(domain);
	});
	
	// Живая проверка доменов.
	$('#nameDomain').live('focus', function() {
		whois.intervalID = setInterval(function() {
			if (!whois.alreadChecking) {
				var domain = $('#nameDomain').val();
				if (whois.oldDomaneName != domain) {
					$('.errorBox').fadeOut(600);
					whois.oldDomaneName = domain;
					domain = whois.clearDomainName($('#nameDomain').val());
					domain = whois.checkingValidDomainName(domain);
					if (domain == false)
						return false;
					whois.checkingDomain(domain);
				}
			}else {
				return false;
			}
		}, 2000);
	});
	
	// Остановка живой проверки доменов
	$('#nameDomain').live('blur', function() {    
		clearInterval(whois.intervalID);
		whois.alreadyChecking = false;
	});
	
	// открывает окошко с whois
	$('.veiwWhois').live('click', function(e) {
		e.preventDefault();
		$(this).closest('div').find('div').slideToggle();
	});
	
	// Перепроверка
	$('.rechecking').live('click', function(e) {
		e.preventDefault();
		$('.errorBox').fadeOut(600);
		var idDiv = $(this).closest('div').attr('id');
		var domain = whois.clearDomainName($('#'+idDiv).find('td').eq(0).text());
		domain = whois.checkingValidDomainName(domain);
		if (domain == false)
			return false;
		domain = domain[0]+'.'+domain[1];
		var ajaxOpts = {  
			type: 'get',  
			url: phpFile,
			crossDomain: true,
			dataType: 'jsonp',
			data: 'rechecking=1&domain_name='+domain+'&refid='+refID+'&lang='+lang,
			beforeSend: function() {
				$('#'+idDiv).replaceWith('<div id="'+idDiv+'">'+whois.startBlock+domain+whois.endBlock);
			},
			success: function(data) {
				 whois.forSucess(data, idDiv);
			}
		};  
			
		$.ajax(ajaxOpts);
	});
	
});
