Автор обзора: Завхоз (ZavhoZ)
Сайт: Башня Магов

Обзор по тесту http://jammy.newmail.ru/test/test.htm
Обсуждение теста: http://www.webboard.ru/wb.php?board=3007&fs=0&ord=0&arhv=

Сначала выводы, далее, кому интересно, подробный разбор программы(код не изменён, с моей стороны добавлены только русскоязычные коментарии.)

Итак, вывод - тест является обычным лохотроном с целью завлеч клиентов "Если же разница очень велика (60% и более), возможно, Вам стоит обратиться к специалисту." %))) Программа действует по следующему принципу: при первом посещении абсолютно случайным образом(НИКАК не основываясь на движениях мышки) выбирает число от 13 до 37 лет (хотя по идее "грамотнее" выдавать в данном случае от 1-го до 49 наверное... может програмист забыл где-то на два умножить... %) А может так и задумано) и запоминает это число.... а нам каждый раз выдаёт его с поправкой от -1 до +1... поправка меняется в этих пределах при каждом новом прохождении теста. %) В свете этого мне понравилась фраза "Если разница достигает 30-35%, во-первых, попробуйте пройти тестирование ещё раз. Если результат не изменился, обратите внимание...." Результат ФИЗИЧЕСКИ не может измениться больше чем на 2 единицы, так как он был запомнен... и изменить его можно только потерев с компа куки %).
Ещё порадовало, что программа обсчёта была, хоть и примитивным образом, защищена от просмотра %) - это первая строчка
//<meta http-equiv="refresh" content="0; url=about:blank">
, которая должна была переправлять на пустую страницу при открытии этой страницы в браузере отдельно от страниц теста и интерпретации... такая "защита" вскрывается очень просто многими способами.
Вот так некоторые психологи дурят народ %)

======================= код, коментарии на русском мои ========================
//<meta http-equiv="refresh" content="0; url=about:blank">
<!--
var i; //счётчик движения мыши... Единственная глобальная переменная %)

function Init() // функция вызывается при загрузки страницы теста
{               // http://jammy.newmail.ru/test/test.htm
	i = 0;
	endf(); //вызывается функция выставления начальных координат квадратов
	return false;
}

function endf() //функция выставления начальных координат квадратов
{
	var l = s.offsetLeft - 1;
	var t = s.offsetTop - 1;
	v0.style.left = l;
	v0.style.top = t;
	v1.style.left = l +298;
	v1.style.top = t;
	v2.style.left = l;
	v2.style.top = t + 298;
	v3.style.left = l + 298;
	v3.style.top = t + 298;
	v4.style.left = l + 149;
	v4.style.top = t + 149;
	v5.style.left = l + 149;
	v5.style.top = t + 149;
	v6.style.left = l + 149;
	v6.style.top = t + 149;
	v7.style.left = l + 149;
	v7.style.top = t + 149;
}

function m() // функция, которая вызывается при каждом движении мыши в левом квадрате
{
	if (i == 0) setTimeout("verify()", 20000); //если это первое движение,
     //то говорим, что надо выполнить функцию verify() через 20 секунд

	if (i == -1) { return false; }

//Дальше идёт простое управление движением квадратов на правом поле...
//вычисляются положения и сдвиги относительно текущего состояния
	var l = s.offsetLeft - 1;
	var t = s.offsetTop - 1;
	var x = window.event.offsetX;
	var y = window.event.offsetY;
	var x2 = 298 - x;
	var y2 = 298 - y;
	var x3 = Math.abs(149 - x);
	var y3 = Math.abs(149 - y);
	var x4 = 298 - x3;
	var y4 = 298 - y3;

	++i; //увеличиваем счётчик движений на единицу
	
//дальше двигаются квадраты по вычисленным значениям
	v0.style.left = l + x;
	v0.style.top = t + y;
	
	v1.style.left = l +x2;
	v1.style.top = t + y;

	v2.style.left = l + x;
	v2.style.top = t + y2;

	v3.style.left = l + x2;
	v3.style.top = t + y2;


	v4.style.left = l + x3;
	v4.style.top = t + y3;
	
	v5.style.left = l + x4;
	v5.style.top = t + y3;

	v6.style.left = l + x3;
	v6.style.top = t + y4;
	
	v7.style.left = l + x4;
	v7.style.top = t + y4;

	return false;
//выходим... как видим, НИКАКАЯ информация кроме счётчика движений мыши не накапливается
}

function verify() //функция, которая вызывается при первом движении над левым квадратом
{
	endf(); //квадратики ставятся в начальное положение
	if (i < 343) //если подвигали меньше 343 раз, нам говорят что мы
                     // сделали недостаточное количество телодвижений.. хороший ход
                     // на повышение "авторитетности" теста.
	{
		alert("К сожалению, сделанных Вами перемещаний недостаточно для проведения анализа. Пожалуйста, попробуйте ещё раз.")
		i = 0;
	}
	else   //иначе говорят что всё ок...
	{
		alert("Спасибо. Сейчас Вам будут представлен результат методики.")
		i = -1;
		sset(); //функция установки кукисов... по простому
                        //говоря нас "запомнили", что мы уже тут были...
                        //развёрнутая информация ниже
		res(); //перенаправление на страницу результатов...
	}
}

function res()
{
	window.location.href="results.htm"; //после того как запомнили
 //тот факт что мы были на этой странице(и больше ничего), нас перенаправляют
 //на страницу отображения результатов.... на странице результатов содержимое
 //поля "сколько лет" показывается функцией show();
}

function sc(a)
{
	var ed = new Date(); //берём текущую дату
	ed.setDate(1825 + ed.getDate()); //прибавляем 1825 дней(примерно 5 лет)
	document.cookie = "Age=" + a + "; expires=" + ed.toGMTString() + "; ";// запоминаем
//возраст - случайное число 25 +/- 12 лет %)
	return a;
}

function sset()
{
	var ed = new Date(); //берём текущую дату
	ed.setDate(1825 + ed.getDate()); //прибавляем 1825 дней(примерно 5 лет)
	document.cookie = "S=T; expires=" + ed.toGMTString() + "; "; //запоминаем...
   //а что-же мы запоминаем? А ТОЛЬКО факт того, что мы были на этой странице и
   //БОЛЬШЕ ничего... т.е. никаких данных о тестировании не передаётся... да они
   //и не собираются(как было замечено выше, кроме того сколько раз мы дёрнули мышь,
   //но даже эта информация не передаётся...)
}

function fset(fluct)
{
	var ed = new Date(); //берём текущую дату
	ed.setDate(1825 + ed.getDate()); //прибавляем 1825 дней(примерно 5 лет)
	document.cookie = "S=F; expires=" + ed.toGMTString() + "; ";  //теперь
// мы "затёрли" информацию о том что мы были на странице теста информацией что мы были на странице
// интерпретации
	document.cookie = "Fluctuation=" + fluct + "; expires=" + ed.toGMTString() + "; "; // и
// попутно запоминаем полученное значение переменной "fluctuation" теперь
// при нажатии кнопки обновить значение возраста в пределах -1 до +1 меняться не будет,
// а изменится только при новом "прохождении" теста на плюс/минус единицу %)
}

function gc()
{

	var p = Math.random() - 0.5; // p - случайная величина от -0.5 до +0.5
	var zage = 0;
	var theta = 0;
	var fluctuation = 0;
	var needfluct = 1;

	var cl = document.cookie.split("; "); //разбиваем куки
	
	for (var i = 0; i < cl.length; ++i)//просматриваем все куки
 //(пока запомнили только одну - факт того что мы там были)
	{
		var n = cl[i].split("=");
		if ((unescape(n[0]) == "S") && (unescape(n[1]) == "T"))//если мы были
 // на странице прохождения теста, то делаем следующее
		{
			needfluct = 0; //для чего устанавливаем эту переменную разберёмся далее...
			fluctuation = Math.round(2 * (Math.random() - 0.5)); // переменную
 //fluctuation выставляем случайным образом от -1 до +1 и округляем до целого
                          
			fset(fluctuation); //выставляем кукисы, но другие... поехали к той функции...
		}

// если кука, которую мы просматриваем - это запомненное выше в функции
// fset() значение "сдвига"(fluctuation), и нужно сдвинуть на запомненную в fset() 
// величину(не новое прохождение теста а нажатие на "обновить"), то переменной
// величины сдвига fluctuation присваеваем старое запомненное значение:
		if ((unescape(n[0]) == "Fluctuation") && (needfluct == 1)) fluctuation = Math.round(unescape(n[1]));

// Далее если мы уже один раз "посчитали", сколько ему лет,(об этом дальше)
// то вспоминаем это значение:
		if (unescape(n[0]) == "Age") zage = Math.round(unescape(n[1]));
	}
	
	if (zage == 0)//если мы не говорили сколько ему лет, то... тут самое интересное %)
	{ 
// находим его возраст как случайную величину в диапазоне 25 +/- 12 лет %))))))
// и запоминаем этот возраст функцией sc(), и прибавляем к нему нашу случайную
// "погрешность" от -1 до +1 (fluctuation) %)))
		zage = sc(Math.round(25 + (p * 24))) + fluctuation;
	}
	else
	{
// иначе ничего не запоминаем, так как один раз уже запомнили и сейчас вспомнили,
// просто прибавляем "погрешность" %))
		zage += fluctuation;
	}
	return (zage); //возвращаем найденное значение возраста %)))
	
}

function show() // функция которая показывает сколько нам лет %))))
{
	v.innerText = gc(); вызывается функция просмотра куки и возврата возраста...
 // идём к ней

	t.style.display = "";
}
//-->

Ну интересно мне, сколько сюда заходят :)