YAHOO.namespace('ojp.common');
YAHOO.namespace('ojp.toolbar');
YAHOO.namespace('ojp.search');
YAHOO.namespace('ojp.logout');
YAHOO.namespace('ojp.util');
YAHOO.namespace('ojp.env');

var $D = YAHOO.util.Dom,
	$U = YAHOO.ojp.util,
	$E = YAHOO.util.Event;

YAHOO.ojp.logout.process = function(confirmMessage)
{
	if (confirm(confirmMessage))
	{
		var callback =
			{
				success: function(o) { document.location.href = '/' },
				failure: $U.connectionCallbackFailure
			};
		$U.showLoadingPanel();
		YAHOO.util.Connect.asyncRequest('POST', '/xmlservice/logout.html' , callback, null);
	}
}


$U.setEnv = function(params)
{
	YAHOO.ojp.env.RES_SERVER = params.RES_SERVER;
	YAHOO.ojp.env.DOMAIN = params.DOMAIN;
	YAHOO.ojp.env.PANEL_WIDTH = '500px';
	YAHOO.ojp.env.PANEL_EFFECT = {effect:YAHOO.widget.ContainerEffect.FADE,duration:0.15};
	YAHOO.ojp.env.LABEL_OK = 'ОК';
	YAHOO.ojp.env.LOADING_ICON = new Image();
	YAHOO.ojp.env.LOADING_ICON.src = YAHOO.ojp.env.RES_SERVER + '/i/loading.gif';
}


$U.checkEmail = function(email)
{
	var s = email.replace( new RegExp('/\(.*?\)/'), '' ),
		re = /^[A-Za-z0-9][-\w]*(\.[A-Za-z0-9][-\w]*)*@[A-Za-z0-9][-\w]*(\.[A-Za-z0-9][-\w]*)*\.[a-zA-Z]{2,4}$/;
	return re.test(s);
}


$U.buildSid = function(s)
{
	var sid = s,
		re1 = /[^a-z0-9\-]/gi,
		re2 = /^\-/gi;
	sid = sid.replace(re1, '');
	return sid.replace(re2, '');
}

$U.setMessage = function(ns, k, v)
{
	if( !$U._messages ) $U._messages = new Array();
	if( !$U._messages[ns] ) $U._messages[ns] = new Array();
	$U._messages[ns][k] = v;
}

$U.getMessage = function(ns, k)
{
	return $U._messages[ns][k];
}


$U.showLoadingPanel = function()
{
	if( !$D.get('panel-loading') )
	{
		var panel = document.createElement('div');
		panel.id = 'panel-loading';
		if(0< YAHOO.env.ua.ie && YAHOO.env.ua.ie < 7) panel.className = 'panel-loading-msie-6';

		var panel1 = document.createElement('div');

		panel1.appendChild(YAHOO.ojp.env.LOADING_ICON);
		panel.appendChild(panel1);
		document.body.insertBefore(panel, document.body.firstChild);
	}

	$D.setStyle('panel-loading', 'display', '');

}


$U.hideLoadingPanel = function()
{
	$D.setStyle('panel-loading', 'display', 'none');
}


/* FORM INDICATORS */


$U.buildFormIndicatorOk = function(el)
{
	var containerEl = $D.get(el),
		imgEl = document.createElement('img');
	$D.replaceClass(containerEl, 'form-indicator-error', 'form-indicator-ok');
	containerEl.innerHTML = '';
	imgEl.setAttribute('src', YAHOO.ojp.env.RES_SERVER + 'i/form-icon-ok.png');
	imgEl.setAttribute('alt', '');
	containerEl.appendChild(imgEl);
}


$U.buildFormIndicatorError = function(el)
{
	var containerEl = $D.get(el),
		imgEl = document.createElement('img');
	$D.replaceClass(containerEl, 'form-indicator-ok', 'form-indicator-error');
	containerEl.innerHTML = '';
	imgEl.setAttribute('src', YAHOO.ojp.env.RES_SERVER + 'i/form-icon-error.png');
	imgEl.setAttribute('alt', '');
	containerEl.appendChild(imgEl);
}


$U.buildFormTextOk = function(el)
{
	var containerEl = $D.get(el);
	containerEl.innerHTML = '';
	$D.replaceClass(containerEl, 'form-indicator-error', 'form-indicator-ok');
}


$U.buildFormTextError = function(el, errorText)
{
	var containerEl = $D.get(el);
	$D.replaceClass(containerEl, 'form-indicator-ok', 'form-indicator-error');
	containerEl.innerHTML = '';
	containerEl.appendChild(document.createTextNode(errorText));
}


/*
 *	Editable Label Begin
 */

$U.editableLabelMouseover = function(targetEl)
{
	var spanEl = $D.getElementsByClassName('editable', 'span', targetEl.parentNode)[0];
	$D.addClass(spanEl, 'editable-mouseover');
}


$U.editableLabelMouseout = function(targetEl)
{
	var spanEl = $D.getElementsByClassName('editable', 'span', targetEl.parentNode)[0];
	$D.removeClass(spanEl, 'editable-mouseover');
}


$U.editableLabelClick = function(targetEl, saveUri, inputType)
{
	if (!inputType) inputType = 'string';
	if( saveUri.indexOf('?') == -1 ) saveUri = '/xmlservice/label-save.html?sid=' + $U.encodeUriVal(saveUri); // native label

	var spanEl = $D.getElementsByClassName('editable', 'span', targetEl.parentNode)[0],
		val = $U.encodeInputVal(spanEl.innerHTML),
		tableEl = document.createElement('table'),
		theadEl = document.createElement('tbody'),
		trEl = document.createElement('tr'),
		td1El = document.createElement('td'),
		td2El = document.createElement('td'),
		btnEl = document.createElement('button'),
		inputEl = (inputType == 'text') ? document.createElement('textarea') : document.createElement('input');

	spanEl.parentNode.style.position = 'relative'; // for displaying fix

	td1El.className = 'input';
	td2El.className = 'button';

	inputEl.value = val.replace(/[\t|\s]+$/gi, '');

	tableEl.appendChild(theadEl);
	theadEl.appendChild(trEl);
	trEl.appendChild(td1El);
	trEl.appendChild(td2El);
	td1El.appendChild(inputEl);
	td2El.appendChild(btnEl);
	spanEl.appendChild(tableEl);

	inputEl.focus();

	btnEl.innerHTML = YAHOO.ojp.env.LABEL_OK;

	btnEl.onclick = function()
	{
		spanEl.innerHTML = inputEl.value;
		btnEl.style.display = 'none';
		targetEl.style.display = '';
		$U.editableLabelSave(saveUri, spanEl.innerHTML, spanEl);
		spanEl.parentNode.style.position = '';
	}

	inputEl.onkeyup = function(e)
	{
		var evt = e ? e : window.event;
		if(evt.keyCode == 13) btnEl.onclick()
	}

	targetEl.style.display = 'none';

	if( spanEl.childNodes.length > 1 ) spanEl.removeChild(spanEl.firstChild); // Замочить старое значение
	var emptyEl = $D.getElementsByClassName('placeholder-empty', 'span', spanEl.parentNode)[0];
	if( emptyEl ) emptyEl.innerHTML = '';
}

$U.editableLabelSave = function(uri, val, spanEl)
{
	var u = uri.substr(0, uri.indexOf('?')),
		q = encodeURI(uri.substr(uri.indexOf('?')+1)) + '&value=' + $U.encodeUriVal(val),
		callback =
		{
			success: function(o)
			{
				$U.hideLoadingPanel();
				xdoc = o.responseXML;
				if( xdoc.getElementsByTagName('error').length > 0 )
				{
					alert(xdoc.getElementsByTagName('error')[0].firstChild.nodeValue);
				}
				else
				{
					spanEl.innerHTML = xdoc.getElementsByTagName('value')[0].firstChild.nodeValue;
					var emptyEl = $D.getElementsByClassName('placeholder-empty', 'span', spanEl.parentNode)[0];
					if( emptyEl ) emptyEl.innerHTML = '';
				}
			},
			failure: $U.connectionCallbackFailure
		};
	$U.showLoadingPanel();
	YAHOO.util.Connect.asyncRequest('POST', u, callback, q);
}


$U.encodeUriVal = function(s)
{
	if( s ) return encodeURI(s).replace(/\&/g, '%26');
	return '';
}

$U.encodeInputVal = function(s)
{
	var result = s;
	result = result.replace(/^\s+/gi, '');
	result = result.replace(/\&lt;/gi, '<');
	result = result.replace(/\&gt;/gi, '>');
	return result;
}

$U.showError = function(message)
{
	alert('Ошибка!\n' + message);
}

$U.connectionCallbackFailure = function(o)
{
	$U.showError(o.statusText);
	$U.hideLoadingPanel();
}

$U.getYuiCalendar = function(id, contId, title, currDate)
{
	var cal = new YAHOO.widget.Calendar(id, contId, { title:title, close:true, LOCALE_WEEKDAYS:'short', START_WEEKDAY:1 } ),
		selectedDate;

	cal.cfg.setProperty('MONTHS_SHORT',   ['Янв', 'Фев', 'Мар', 'Апр', 'Май', 'Июн', 'Июл', 'Авг', 'Сен', 'Окт', 'Ноя', 'Дек']);
	cal.cfg.setProperty('MONTHS_LONG',    ['Январь', 'Февраль', 'Март', 'Апрель', 'Май', 'Июнь', 'Июль', 'Август', 'Сентябрь', 'Октябрь', 'Ноябрь', 'Декабрь']);
	cal.cfg.setProperty('WEEKDAYS_1CHAR', ['В', 'П', 'В', 'С', 'Ч', 'П', 'С']);
	cal.cfg.setProperty('WEEKDAYS_SHORT', ['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб']);
	cal.cfg.setProperty('WEEKDAYS_MEDIUM',['Вс', 'Пн', 'Вт', 'Ср', 'Чт', 'Пт', 'Сб']);
	cal.cfg.setProperty('WEEKDAYS_LONG',  ['Воскресенье', 'Понедельник', 'Вторник', 'Среда', 'Четверг', 'Пятница', 'Суббота']);

	cal.cfg.setProperty('DATE_FIELD_DELIMITER', '.');
	cal.cfg.setProperty('DATE_RANGE_DELIMITER', ',');

	cal.cfg.setProperty('MDY_DAY_POSITION', 1);
	cal.cfg.setProperty('MDY_MONTH_POSITION', 2);
	cal.cfg.setProperty('MDY_YEAR_POSITION', 3);

	cal.cfg.setProperty('MD_DAY_POSITION', 1);
	cal.cfg.setProperty('MD_MONTH_POSITION', 2);

	if (currDate)
	{
		cal.select(currDate);
		selectedDate = cal.getSelectedDates();
		if (selectedDate.length > 0)
		{
			selectedDate = selectedDate[0];
			cal.cfg.setProperty('pagedate', (selectedDate.getMonth()+1) + '.' + selectedDate.getFullYear());
		}
	}


	cal.render();

	return cal;
}


$U.appendHtmlToDom = function(parentNode, html, replaceChildren, appendToTop)
{
	var p = ( typeof parentNode == 'string' ) ? $D.get(parentNode) : parentNode,
		w = document.createElement('div'),
		el;

	if( replaceChildren ) p.innerHTML = '';
	w.innerHTML = html;

	if( appendToTop )
	{
		el = p.firstChild;
		while(w.childNodes[0]) p.insertBefore(w.childNodes[0], el);
	}
	else
	{
		while(w.childNodes[0]) p.appendChild(w.childNodes[0]);
	}
}


$U.json = function(s)
{
	s = s.replace(/[\n\r]/g, '');
	//s = s.replace(/\'/g, '');

	return eval('(' + s + ')');
}


$E.onDOMReady(function()
{
	var filter = function(el) { return (el.className != '' && el.className != 's' && el.className != 'logo') },
		ftrue = function(){return true},
		searchEl = $D.get('input-search'),
		searchLabel = 'поиск по сайту',
		searchColorEmpty = 'gray',
		bodyClassName;

	// toolbar rendering
	$D.getElementsBy(filter, 'td', 'toolbar', function(el)
	{
		if( el.className == 'logout' )
		{
			el.onclick = $D.getElementsBy(ftrue, 'span', el)[0].onclick;
			$D.getElementsBy(ftrue, 'span', el)[0].onclick = null;
		}
		else
		{
			$E.on(el, 'click', function(){ var a = $D.getElementsBy(ftrue, 'a', el)[0]; if(a) window.location = a.href; })
		}
		el.style.cursor = 'pointer';
		$E.on(el, 'mouseover', function(){ $D.addClass(el, 'hover') });
		$E.on(el, 'mouseout',  function(){ $D.removeClass(el, 'hover') });
	});

	// search rendering
	if(searchEl)
	{
		//label = $U.getMessage('ojp.common', 'search-label');

		if( !searchEl.value || searchEl.value == searchLabel ) { searchEl.value = searchLabel; searchEl.style.color = searchColorEmpty; }
		searchEl.onfocus = function() { if( searchEl.style.color == searchColorEmpty ) { searchEl.value = ''; searchEl.style.color = ''; } }
		searchEl.onblur = function() { if( searchEl.value == '' ) { searchEl.value = searchLabel; searchEl.style.color = searchColorEmpty; } }

		if (YAHOO.env.ua.webkit)
		{
			$D.removeClass(searchEl.parentNode.parentNode.parentNode, 'sidebar-search');
			$D.setStyle(searchEl, 'width', '100%');
			searchEl.type = 'search';
		}
	}

	if (YAHOO.env.ua.gecko)		$D.addClass(document.body, 'firefox');
	if (YAHOO.env.ua.ie)		$D.addClass(document.body, 'msie');
	if (YAHOO.env.ua.opera)		$D.addClass(document.body, 'opera');
	if (YAHOO.env.ua.webkit)	$D.addClass(document.body, 'safari');
});
