﻿/*
 *** Регистрация в uNet
 *** by ucodes.ru
 ***
 *** 21.12.2010 (Bogggdan)
 */


var reg = {
	init: function () {
		var html = '<fieldset><div class="bf"><div class="sf">E-mail:</div> <input type="text" onblur="reg.check.email(this);" name="email"> <img align="absmiddle" alt=""> </div><hr>' + '<div class="bf"><div class="sf">Логин:</div> <input type="text" onblur="reg.check.nick(this);" name="nick"> <img align="absmiddle" alt=""> </div><hr>' + '<div class="bf"><div class="sf">Пароль:</div> <input type="text" onblur="reg.check.pass(this);" name="password"> <img align="absmiddle" alt=""> </div><hr>' + '<div class="bf"><div class="sf">Пол:</div> <input name="gender" value="2" onchange="reg.check.gener(this);" id="fGender2" type="radio"><label for="fGender2">Женщина</label> <input name="gender" onchange="reg.check.gener(this);" value="1" id="fGender1" type="radio"><label for="fGender1">Мужчина</label> <img align="absmiddle" alt=""></div> <hr>' + '<div class="bf rh"><div class="sf">Настоящее имя:</div> <input type="text" onblur="reg.check.name(this);" name="name"> <img align="absmiddle" alt=""> </div><hr class="rh">' + '<div class="bf rh"><div class="sf">Дата рождения:</div> <select size="1" name="by" onchange="reg.check.birth(this);"><option value="0">Год</option><option value="2005">2005</option><option value="2004">2004</option><option value="2003">2003</option><option value="2002">2002</option><option value="2001">2001</option><option value="2000">2000</option><option value="1999">1999</option><option value="1998">1998</option><option value="1997">1997</option><option value="1996">1996</option><option value="1995">1995</option><option value="1994">1994</option><option value="1993">1993</option><option value="1992">1992</option><option value="1991">1991</option><option value="1990">1990</option><option value="1989">1989</option><option value="1988">1988</option><option value="1987">1987</option><option value="1986">1986</option><option value="1985">1985</option><option value="1984">1984</option><option value="1983">1983</option><option value="1982">1982</option><option value="1981">1981</option><option value="1980">1980</option><option value="1979">1979</option><option value="1978">1978</option><option value="1977">1977</option><option value="1976">1976</option><option value="1975">1975</option><option value="1974">1974</option><option value="1973">1973</option><option value="1972">1972</option><option value="1971">1971</option><option value="1970">1970</option><option value="1969">1969</option><option value="1968">1968</option><option value="1967">1967</option><option value="1966">1966</option><option value="1965">1965</option><option value="1964">1964</option><option value="1963">1963</option><option value="1962">1962</option><option value="1961">1961</option><option value="1960">1960</option><option value="1959">1959</option><option value="1958">1958</option><option value="1957">1957</option><option value="1956">1956</option><option value="1955">1955</option><option value="1954">1954</option><option value="1953">1953</option><option value="1952">1952</option><option value="1951">1951</option><option value="1950">1950</option><option value="1949">1949</option><option value="1948">1948</option><option value="1947">1947</option><option value="1946">1946</option><option value="1945">1945</option><option value="1944">1944</option><option value="1943">1943</option><option value="1942">1942</option><option value="1941">1941</option><option value="1940">1940</option><option value="1939">1939</option><option value="1938">1938</option><option value="1937">1937</option><option value="1936">1936</option><option value="1935">1935</option><option value="1934">1934</option><option value="1933">1933</option><option value="1932">1932</option><option value="1931">1931</option><option value="1930">1930</option></select>-<select size="1" name="bm" onchange="reg.check.birth(this);"><option value="0">Месяц</option><option value="1">Январь</option><option value="2">Февраль</option><option value="3">Март</option><option value="4">Апрель</option><option value="5">Май</option><option value="6">Июнь</option><option value="7">Июль</option><option value="8">Август</option><option value="9">Сентябрь</option><option value="10">Октябрь</option><option value="11">Ноябрь</option><option value="12">Декабрь</option></select>-<select size="1" name="bd" onchange="reg.check.birth(this);"><option value="0">День</option><option value="1">1</option><option value="2">2</option><option value="3">3</option><option value="4">4</option><option value="5">5</option><option value="6">6</option><option value="7">7</option><option value="8">8</option><option value="9">9</option><option value="10">10</option><option value="11">11</option><option value="12">12</option><option value="13">13</option><option value="14">14</option><option value="15">15</option><option value="16">16</option><option value="17">17</option><option value="18">18</option><option value="19">19</option><option value="20">20</option><option value="21">21</option><option value="22">22</option><option value="23">23</option><option value="24">24</option><option value="25">25</option><option value="26">26</option><option value="27">27</option><option value="28">28</option><option value="29">29</option><option value="30">30</option><option value="31">31</option></select> <img align="absmiddle" alt=""> </div><hr class="rh">' + '<div class="bf rh"><div class="sf">Место жительства:</div> <span id="locSel"></span> <img align="absmiddle" alt=""> </div><hr class="rh">' + '<div class="bf"><div class="sf">&nbsp;</div> <input type="button" value="Регистрация" onclick="reg.checkAll();"> </div>' + '</fieldset>';
		new _uWnd('reg', 'Регистрация', 365, 220, {
			customButtons: {
				'show': [true, function () {
					reg.showFields();
				}],
				'hide': [false, function () {
					reg.hideFields();
				}]
			},
			icon: 'http://ucodes.ru/upload/icons/reg.png',
			hideonmove: 0,
			oncontent: function () {
				reg.getLocations();
			}
		},
		html);
	},
	icons: {
		'ok': 'http://ucodes.ru/upload/icons/ok.png',
		'error': 'http://ucodes.ru/upload/icons/error.png',
		'load': 'http://ucodes.ru/upload/icons/load.gif'
	},
	check: {
		email: function (el) {
			var v = el.value,
			img = $(el).parent().find("img");
			if (v.length == 0) {
				$(img).fadeOut("slow");
				return;
			}
			$(img).attr("src", reg.icons.load).show();
			if (/^[a-zA-Z0-9_\.\-]+\@[a-zA-Z0-9\.\-]+\.[a-zA-Z0-9]{2,6}$/.test(v)) {
				$.post("/index/sub/", {
					email: v,
					a: 50
				},
				function (de) {
					var _data = $(de).text();
					if (_data.indexOf("ok.p") != -1) $(img).attr("src", reg.icons.ok)
					else if (_data.indexOf("заня") != -1) {
						$(img).attr("src", reg.icons.error);
						reg.msg('Email занят другим пользователем', false);
					}
					else $(img).attr("src", reg.icons.error); //unknown error
				});
			}
			else {
				$(img).attr("src", reg.icons.error);
				reg.msg('Проверьте правильность ввода E-mail', false);
			}
		},
		nick: function (el) {
			var v = el.value,
			img = $(el).parent().find("img");
			if (v.length == 0) {
				$(img).fadeOut("slow");
				return;
			}
			$(img).attr("src", reg.icons.load).show();
			if (v.length > 2) {
				$.post("/index/", {
					nick: v,
					a: 49
				},
				function (dn) {
					var _data = $(dn).text();
					if (_data.indexOf("ok.p") != -1) $(img).attr("src", reg.icons.ok); //ник не занят
					else if (_data.indexOf("прещен") != -1) {
						$(img).attr("src", reg.icons.error);
						reg.msg('Найдены запрещенные символы', false);
					}
					else if (_data.indexOf("использ") != -1) {
						$(img).attr("src", reg.icons.error);
						reg.msg('Ник занят', false);
					}
					else $(img).attr("src", reg.icons.error); //unknown error
				});
			}
			else {
				$(img).attr("src", reg.icons.error);
				reg.msg('Слишком короткий ник', false);
			}
		},
		pass: function (el) {
			var v = el.value,
			img = $(el).parent().find("img");
			if (v.length == 0) {
				$(img).fadeOut("slow");
				return;
			}
			$(img).show();
			if ((v.length < 6) || (/^(.)\1*$/.test(v))) {
				$(img).attr("src", reg.icons.error);
				reg.msg('Пароль слишком простой', false);
			}
			else if (v.length > 15) {
				$(img).attr("src", reg.icons.error);
				reg.msg('Максимальная длина пароля — 15 символов', false);
			}
			else if (/[^a-zA-Z0-9\-_]/.test(v)) {
				$(img).attr("src", reg.icons.error);
				reg.msg('В пароле найдены запрещенные символы', false);
			}
			else $(img).attr("src", reg.icons.ok); //норм пасс
		},
		gener: function (el) {
			$($(el).parent().find("img")).show().attr("src", reg.icons.ok);
		},
		birth: function (el) {
			var img = $(el).parent().find("img");
			if (($("select[name='by']").val() != 0) && ($("select[name='bm']").val() != 0) && ($("select[name='bd']").val() != 0)) {
				$(img).attr("src", reg.icons.ok).show();
			}
			else $(img).attr("src", reg.icons.error).show(); //не выбран день, месяц или год
		},
		location: function (el) {
			var img = $(el).parent().parent().find("img"),
			v = el.value;
			if (parseInt(v) == -1) {
				$(img).hide();
				reg.intCheck = setInterval(function () {
					reg.check.locationi(el);
				},
				1100);
				new _uWnd('Loc', 'Выбрать место жительства', 600, 500, {
					hideonmove: 0,
					autosize: 0,
					closeonesc: 1
				},
				{
					url: '/index/47',
					cache: 1
				});
			}
			else if (parseInt(v) > 0) {
				$(img).attr("src", reg.icons.ok).show();
			}
			else {
				$(img).attr("src", reg.icons.error).show();
			}
		},
		locationi: function (el) {
			var img = $(el).parent().parent().find("img"),
			v = el.value;
			if (v != -1) {
				$(img).attr("src", reg.icons.ok).show();
				clearInterval(reg.intCheck);
			}
		},
		name: function (el) {
			var img = $(el).parent().find("img"),
			v = el.value;
			if (v.length == 0) {
				$(img).fadeOut("slow");
				return;
			}
			if (/[!"#\$%&()*+:;<=>?\@\[\]^{}|~]/.test(v) || v.length < 2) {
				$(img).attr("src", reg.icons.error);
				reg.msg('А свое ли имя вы ввели?', false);
			}
			else $(img).attr("src", reg.icons.ok).show();
		}
	},
	msg: function (txt, type) {
		var color = type == false ? "red": "green";
		_uWnd.alert('<span style="color:' + color + '">' + txt + '</span>', 'Информация', {
			w: 270,
			h: 70
		});
	},
	showFields: function () {
		$(".rh").fadeIn("slow", function () {
			_uWnd.getbyname('reg').checksize();
		});
		_uWnd.getbyname('reg').showcustombutton('show', false);
		_uWnd.getbyname('reg').showcustombutton('hide', true);
	},
	hideFields: function () {
		$(".rh").fadeOut("slow", function () {
			_uWnd.getbyname('reg').checksize();
		});
		_uWnd.getbyname('reg').showcustombutton('show', true);
		_uWnd.getbyname('reg').showcustombutton('hide', false);
	},
	getLocations: function () { //Подгружаем select места жительства. Кто знает - тот поймет
		$.get("/index/3", function (data) {
			$("#locSel").html($("<select/>").attr({
				id: 'fLocation',
				name: 'location'
			}).change(function () {
				reg.check.location($("#fLocation")[0]);
			}).html($("#fLocation", data).find("option").slice(1).clone()));
		});
	},
	Gen: function (len) {
		var pass = "";
		for (var i = 0; i < len; i++) {
			var ran = Math.floor(Math.random() * 3),
			//цифры, большие и маленькие буквы
			cd = ran == 0 ? (Math.floor(Math.random() * 24) + 65) : ran == 1 ? (Math.floor(Math.random() * 10) + 48) : (Math.floor(Math.random() * 24) + 97);
			pass += String.fromCharCode(cd);
		}
		return pass;
	},
	checkAll: function () {
		if ($("div.bf img[src$='error.png']:visible").size() > 0) {
			reg.msg('Исправьте допущенные ошибки', false);
			return;
		}
		else if ($("input[name='email']").val().length == 0) {
			reg.msg('Поле «E-mail» обязательно для заполнения', false);
			return;
		}
		else {
			var objFields = {};
			$([["email"], ["nick"], ["password"], ["gender", 0, 1], ["name"], ["by", 1], ["bm", 1], ["bd", 1], ["location", 1]]).each(function () {
				var name = $(this)[0],
				tag = $(this)[1] ? "select": "input",
				ch = $(this)[2] ? ":checked": "",
				val = $(tag + "[name='" + name + "']" + ch).val();
				if ((typeof val != "undefined") && (val != "0") && val) {
					objFields[name] = val;
				}
			});
			reg.Fields = $.extend({
				password: reg.Gen(10),
				//Если пасс не введен, генерируется
				name: 'ucodesru' + reg.Gen(5),
				//Имя, если не введено (ucodesru + 5 случ. символов)
				name_perm: 0,
				//все могут видеть имя
				surname: 'ucodesru' + reg.Gen(5),
				//Фамилия (ucodesru + 5 случ. символов)
				surname_perm: 0,
				//все могут видеть фамилию
				nick: 'ucodesru' + reg.Gen(5),
				//ник, если не введен (ucodesru + 5 случ. символов)
				by: '1980',
				//год рожд., если не введен
				bm: '9',
				// === месяц
				bd: '13',
				// === день
				birth_perm: 0,
				//все видят дату рождения
				gender: 1,
				//мужик, если нет инфы о поле
				location: '214020097',
				//если нет инфы о месте проживания, живем в Киеве
				photo: '',
				//фото. нах надо, необязательно же
				avatar: 'http://ucodes.ru/images/noava.png',
				//наша аватарка
				site: 'http://ucodes.ru/',
				//дом. страница
				terms: 1,
				//подтверждаем условия
				code: '',
				//тут будет каптча
				seckey: '',
				a: 51,
				act: '',
				rnd: '',
				ssid: ''
			},
			objFields);
			reg.capImg();
		}
	},
	capImg: function () {
		new _uWnd('acap', 'Код с картинки', 360, 80, {
			shadow: 0,
			autosize: 0,
			alert: 1,
			oncontent: function () {
				$.get("/index/3", function (data) {
					var _sos = data.match(/\=_dS\(\'(.+)\'\)\;/)[1].replace(/\\\'/g, "'"), unsos = reg.sos(_sos);
					if (unsos) reg.Fields.sos = unsos;
					reg.Fields.password1 = reg.Fields.password;
					reg.Fields.seckey = $("#uNetRegF input[name='seckey']", data).val();
					reg.Fields.act = $("#uNetRegF input[name='act']", data).val();
					reg.Fields.rnd = $("#uNetRegF input[name='rnd']", data).val();
					reg.Fields.ssid = $("#uNetRegF input[name='ssid']", data).val();
					reg.checkCupKey = $("#chCodeForm input[name='seckey']", data).val();
					var img = $("#secImg", data).clone();
					setTimeout(function () {
						$("#capImgSpan").html(img);
						$("#hideCont").show();
						$("#imgwait").hide();
						$("#capcode").focus();
					},
					100);
				});
			}
		},
		'<img src="/.s/img/wd/3/ajax.gif" alt="loading" id="imgwait"><span id="hideCont"><span id="capImgSpan"></span> <input type="text" id="capcode" onkeyup="try{reg.checkCapCode();}catch(e){}"></span>');
	},
	checkCapCode: function () {
		var v = $("#capcode").val();
		if (v.length >= 6) {
			$.post("/index/", {
				code: v,
				seckey: reg.checkCupKey,
				a: 48
			},
			function (ch) {
				var _d = $(ch).text();
				if (_d.indexOf("ok.p") != -1) {
					reg.Fields.code = v;
					reg.postForm(); // true code, post
				}
				else if (_d.indexOf("Непра") != -1) {
					$("#capcode").val("").focus();
					$("#secImg").trigger("click");
				}
				else reg.msg('Unknown error', false);
			});
		}
	},
	postForm: function () {
		$(_uWnd.getbyname('acap').wnd).animate({
			opacity: 0
		},
		1500); //slow hide uwnd
		$.post("/index/sub/", reg.Fields, function (regData) {
			var rdata = $(regData).text();
			if (rdata.indexOf("regDone") != -1) {
				reg.success();
			}
			else alert(rdata);
		});
	},
	sos: function (code) {
		for (var i = 0, _i = code.length - 1, session = ''; i < _i; i++) {
			session += String.fromCharCode(code.charCodeAt(i) - code.substr(_i, 1));
		}
		return session.match(/\d+/g);
	},
	success: function () {
		_uWnd.close('acap');
		_uWnd.close('reg');
		new _uWnd('s', 'Регистрация прошла успешно', 290, 180, {
			align: 0
		},
		'<fieldset><legend>Ваши данные</legend>Email: ' + reg.Fields.email + '<br>Пароль: ' + reg.Fields.password + '<br>Никнейм: ' + reg.Fields.nick + '<hr><div style="color: blue; font-weight: bold; text-align: center;">Подтвердите ваш email для окончания регистрации</div></fieldset>');
	}
}
