/**
 * @include  "d:/www/_common/js/js_common.js"
 * @include  "d:/www/_common/js/ajaqs_sender.js"
 * @include  "d:/www/_common/js/events.js"
 * @include  "_p_messages.js"
 * @include  "_p_scripts.js"
 */
 
/**
 * @class
 * создает объект для хранения настроек сайта 
 */
function p_object_class()
{
	/**
	 * URL к корню сайта на локалке 
	 * @private
	 * @type String
	 */
	var root_local = 'http://prodaem:280/';

	/**
	 * URL к корню сайта на сервере 
	 * @private
	 * @type String
	 */
	var root_host = 'http://prodaem.ua/';

	/**
	 * URL к домену с JS на локалке 
	 * @private
	 * @type String
	 */
	var js_local = 'http://prodaem:280/js/';

	/**
	 * URL к домену с JS на сервере 
	 * @private
	 * @type String
	 */
	var js_host  = 'http://js.prodaem.kiev.ua/';

	/**
	 * URL к домену с CSS на локалке 
	 * @private
	 * @type String
	 */
	var css_local = 'http://prodaem:280/css/';

	/**
	 * URL к домену с CSS на сервере 
	 * @private
	 * @type String
	 */
	var css_host  = 'http://css.prodaem.kiev.ua/';

	/**
	 * URL к общим JS-скриптам на локалке 
	 * @private
	 * @type String
	 */
	var js_cmn_local = 'http://localhost:280/_common/js/';

	/**
	 * URL к общим JS-скриптам на сервере
	 * раньше был http://prodaem.kiev.ua/js/
	 * @private
	 * @type String
	 */
	var js_cmn_host = 'http://js.prodaem.kiev.ua/';
	
	/**
	 * URL к домену с JS-файлами
	 * @type String
	 */
	this.js_path = '';

	/**
	 * URL к домену с CSS-файлами
	 * @type String
	 */
	this.css_path = '';

	/**
	 * URL к домену с общими JS-скриптами
	 * @type String
	 */
	this.js_cmn = '';

	/**
	 * информация о браузере юзера - вид, версия и т.д.
	 * @type browserInfo
	 */
	this.bi = browserInfo();
	
	/**
	 * код региона сайта
	 * @type String
	 */
	this.region = 'ukraine';

	/**
	 * язык сайта
	 * @type String
	 */
	this.lang = 'ru';

	/**
	 * флаг - TRUE значит скрипт выполняется на машине разработчика
	 * @type Boolean
	 */
	this.isLocal = null;

	/**
	 * флаг - TRUE значит скрипт выполняется на сервере
	 * @type Boolean
	 */
	this.isHost = null;

	/**
	 * минимальная ширина бокового столбца
	 * @type Number
	 */
	this.side_width_min = 220;
	
	/**
	 * максиммальная ширина бокового столбца
	 * @type Number
	 */
	this.side_width_max = 220;
	
	/**
	 * подсказка которую пишем в поле поиска
	 * @type String
	 */
	this.search_help_text = 'Поиск в объявлениях';

	/**
	 * максимальная длина сообщения обратной связи
	 * @type Number
	 */
	this.maxFeedLen = 1000;

	/**
	 * ширина "окна" обратной связи
	 * @type Number
	 */
	this.feedW = 550;

	/**
	 * высота "окна" обратной связи
	 * @type Number
	 */
	this.feedH = 390;

	/**
	 * ширина "окна" формы отправки сообщения другому юзеру
	 * @type Number
	 */
	this.messageW = 550;

	/**
	 * высота "окна" формы отправки сообщения другому юзеру
	 * @type Number
	 */
	this.messageH = 370;

	/**
	 * имя печеньки в которой храним название выбранного города
	 * @type String
	 */
	this.cookieCity = 'prcity';

	/**
	 * максимальная длина поля "объявление"
	 * @type Number
	 */
	this.maxPostLen = 1000;

	/**
	 * максимальная длина поля "тема"
	 * @type Number
	 */
	this.maxThemeLen = 50;

	/**
	 * ширина "окна" предпросмотра объявления
	 * @type Number
	 */
	this.previewW = 750;

	/**
	 * высота "окна" предпросмотра объявления
	 * @type Number
	 */
	this.previewH = 500;

	/**
	 * ширина блока с деревом категорий/подкатегорий
	 * @type Number
	 */
	this.treeW = 450;

	/**
	 * минимальная высота блока с деревом категорий/подкатегорий
	 * @type Number
	 */
	this.treeH = 350;
	
	/**
	 * HTML-сущность символизирующая закрытие подгруппы
	 * @type String
	 */
	this.upSign = '&#9650;';
	
	/**
	 * HTML-сущность символизирующая открытие подгруппы
	 * @type String
	 */
	this.downSign = '&#9660;';

	/**
	 * URL к корню сайта
	 * @type String
	 */
	this.root = _get_site_root.call(this);
	
	/**
	 * HTML-код для кнопки вКонтакте 
	 * @type String
	 */
	this.vkontakteShareBtn = '<img src="./pix/vkontakte.png" width="84" height="18" alt="" border="0" />';

	/**
	 * путь к PHP-скрипту FaceBook для расшаривания страниц
	 * @type String
	 */	
	this.facebookShareURL = 'http://www.facebook.com/sharer.php';

	/**
	 * HTML-код для кнопки facebook 
	 * @type String
	 */
	this.facebookShareBtn = '<img src="./pix/facebook.png" width="73" height="18" alt="" border="0" />';
	
	/**
	 * путь к JS-скрипту МойМир для расшаривания страниц
	 * @type String
	 */	
	this.moymirShareScript = 'http://cdn.connect.mail.ru/js/share/2/share.js';

	/**
	 * путь к PHP-скрипту МойМир для расшаривания страниц
	 * @type String
	 */	
	this.moymirShareURL = 'http://connect.mail.ru/share';

	/**
	 * HTML-код для кнопки МойМир
	 * @type String
	 */
	this.moymirShareBtn = '<img src="./pix/moymir.png" width="86" height="18" alt="" border="0" />';

	/**
	 * длина пароля генерируемого функцией автогенерации
	 * @type Number
	 */
	this.password_generation_len = 8;

	/**
	 * скорость (в мс) появления новых символов в сгенерированном пароле
	 * чем больше значение, тем медленнее
	 * @type Number
	 */
	this.password_generation_speed = 100;

	/**
	 * пароль сгенерированный функцией автогенерации
	 * @type String
	 */
	this.password_generation_result = '';

//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////

	/**
	 * @private
	 * возвращает URL к корню сайта
	 * также определяет это хостинг или локалка
	 * 
	 * @return {String} - URL к корню сайта
	 */
	function _get_site_root()
	{
		var lcURL = window.location.hostname;

		var lcServer = 'http://'+lcURL+'/';
		var lcRoot = '';

		if (lcURL.toLowerCase() == 'prodaem')
		{
			lcRoot = root_local;
			this.region = 'developer';
			this.css_path = css_local;
			this.js_path = js_local;
			this.js_cmn = js_cmn_local;
			this.isHost = false;
			this.isLocal = true;
		}
		else
		{
			lcRoot = lcServer;
			var laURL = lcURL.split('.');
			var lnPos = (laURL[0].toLowerCase() == 'www') ? 2 : 1;	//	защита от идиотов любящих www

			this.region = laURL[lnPos].toLowerCase();

			this.css_path = css_host;
			this.js_path = js_host;
			this.js_cmn = js_cmn_host;

			this.isHost = true;
			this.isLocal = false;
		}

		return lcRoot;
	}
	
	/**
	 * @public
	 * генерирует пароль длиной tnPassLen символов
	 * 
	 * @return {String} - строка с паролем
	 */
	this.passwordGenerator = function()
	{
		var tnIteration = 0;
		var lcPassword = "";
		var lnRandomChar;
		var tlUseSpecials = false;
	
		while(tnIteration < p_obj.password_generation_len)
		{
	    	lnRandomChar = (Math.floor((Math.random() * 100)) % 94) + 33;
	    	if(true /*! tlUseSpecials*/)
	    	{
	      		if ((lnRandomChar >=33) && (lnRandomChar <=47)) { continue; }
	      		if ((lnRandomChar >=58) && (lnRandomChar <=64)) { continue; }
	      		if ((lnRandomChar >=91) && (lnRandomChar <=96)) { continue; }
	      		if ((lnRandomChar >=123) && (lnRandomChar <=126)) { continue; }
	    	}
	    	tnIteration++;
	    	lcPassword += String.fromCharCode(lnRandomChar);
	  	}

	  	return lcPassword;
	}

	/**
	 * @public
	 * мультипликация "создания" пароля в полях ввода
	 * 
	 * @param {String} tcField1 - ID первого поля с паролем
	 * @param {String} tcField2 - ID второго поля с паролем (повтор пароля)
	 * @param {Boolean} tlNoFirstRun - признак того, что функция запускается не первый раз (это параметр использует сама функция при перезапуске себя самой)
	 */
	this.passwordMultiplicator = function(tcField1, tcField2, tlNoFirstRun)
	{
		var loField1 = id(tcField1);
		var loField2 = id(tcField2);

		/**
		 * если запускается первый раз - очищаем поля
		 * и ставим атрибут type в text (а то юзер не увидит своего пароля
		 */
		if (tlNoFirstRun); else
		{
			loField1.value = ''; 
			loField2.value = '';

			loField1.setAttribute('type', 'text');

			if (tcField2  &&  tcField2!= '')
			{
				loField2.setAttribute('type', 'text');
			}
		}

		var lcCur = loField1.value;
		var lnLen = lcCur.length;

		var lcNew = lcCur + p_obj.password_generation_result[lnLen];

		loField1.value = lcNew;

		if (tcField2  &&  tcField2!= '') loField2.value = lcNew;

		var lcCur = loField1.value;

		if (lcCur !=  p_obj.password_generation_result) setTimeout(function () { p_obj.passwordMultiplicator(tcField1, tcField2, true);  }, p_obj.password_generation_speed);
		else id('txtUEmail').focus();
	}
}

/**
 * @type object
 * объект для инициализации саггестера для формы добавления/редактирования
 */
var poSuggesterPost =
{
	KeywordID : 'txtPCity',
	SuggestID : 'citys_suggest',
	ScrollID : 'citys_scroll',
	AutoFocusID : 'txtPAddress',
	ListID : 'streets_list',
	HLClass : 'hli',
	LiPrefix : 'tr',
	APrefix : 'a',
	MinLenRun : 2,
	MaxLenRun : 3,
	NotFoundMSG : 'Нет населенных пунктов начинающихся с ',
	ResponseURL : './suggest-citys/'
};

/**
 * @type object
 * объект для инициализации саггестера для форм регистрации и профайла
 */
var poSuggesterReg =
{
	KeywordID : 'txtCity',
	SuggestID : 'citys_suggest',
	ScrollID : 'citys_scroll',
	AutoFocusID : 'txtAddress',
	ListID : 'streets_list',
	HLClass : 'hli',
	LiPrefix : 'tr',
	APrefix : 'a',
	MinLenRun : 2,
	MaxLenRun : 3,
	NotFoundMSG : 'Нет населенных пунктов начинающихся с ',
	ResponseURL : './suggest-citys/'
};

/**
 * здесь храним все глобальные настройки сайта
 *
 * @type p_object_class
 */
var p_obj = new p_object_class();
