function forms_input_counter(item_id) {
	var length = document.getElementById(item_id).value.length;
	document.getElementById(item_id + '_counter').value = length;
}

var tagButtons = {
	B: 'but1',
	I: 'but2',
	U: 'but3',
	RED: 'but4',
	GREEN: 'but5',
	GREY: 'but6',
	EMAIL: 'but7',
	URL: 'but8',
	NP: 'but9',
	'CUT/': 'but10'
};

var accessKeys = {
	'B': 'B',
	'I': 'I',
	'U': 'U', 
	'R': 'RED',
	'G': 'CREEN',
	'Y': 'GRAY',
	'E': 'EMAIL',
	'L': 'URL',
	'K': 'NP'
};

function appendEvent(obj, evt, func) {
	var prev = obj[evt];
	obj[evt] = function(e) {
		var ret;
		if (prev instanceof Function) ret = prev(e);
		if (ret !== false) return func(e);
	};
}

function navigateCtrlArrow() {
	document.onkeydown = document.onkeypress = function (e) {
		var event = e || window.event;
		if (event.ctrlKey  && !event.altKey && !event.shiftKey 
			&& (37 == event.keyCode || 39 == event.keyCode)) {
			if ('keydown' == event.type) {
				var lnk = document.getElementsByTagName('LINK');
				var dir = (37 == event.keyCode) ? 'prev' : 'next';
				for (var ix = 0; ix < lnk.length; ix++) {
					if (lnk[ix].rel && lnk[ix].href && lnk[ix].rel == dir) {
						document.location.replace(lnk[ix].href);
					}
				}
			}
			return false;
		}
	};
}

function prepareTextarea() {
	var noteText = document.getElementById('note_text');
	if (!!noteText) {
		noteText.onkeydown = noteText.onkeypress = function(e) {
			var event = e || window.event;
			if (event.ctrlKey && !event.altKey && !event.shiftKey) {
				if (event.keyCode == 13) {
					noteText.form.submit();
					return false;
				}
				var k = String.fromCharCode(event.keyCode);
				if (!!k && accessKeys[k]) {
					('keydown' == event.type) && InsertTags(accessKeys[k]);
					event.preventDefault ?
					event.preventDefault() :
					event.returnValue = false;
					return false;
				}
			}
			return true;
		};
		if (location.hash == '#form') noteText.focus();
	}
	var fileComment = document.getElementById('fileComment');
	if (!!fileComment) {
		if (!(fileComment.onkeydown instanceof Function)) {
			fileComment.onkeydown = function(e) {
				var event = e || window.event;
				if (event.ctrlKey && !event.altKey && !event.shiftKey && event.keyCode == 13) {
					fileComment.form.submit();
					return false;
				}
			}
		}			
	}
}

function prepareSmiles() {
	var smileContainer = document.getElementById('smiles');
	if (!!smileContainer) {
		var smiles = getChildsByClassName(smileContainer, 'smile');
		var l = smiles.length;
		for (var ix = 0; ix < l; ix++) {
			if (smiles[ix].nodeName == 'IMG') {
				smiles[ix].onclick = function(img) {
					return function() {
						insertSmile(img);
					}
				}(smiles[ix]);
			}
		}
	}
}

function prepareClipboardButtons() {
	var notesTable = document.getElementById('notesTable');
	if (!!notesTable) {
		var texts = getChildsByClassName(notesTable, 'copyText');
		var buttons = getChildsByClassName(notesTable, 'copyButton');
		var editButtons = getChildsByClassName(notesTable, 'editButton');
		var l = buttons.length;
		for (var ix = 0; ix < l; ix++) {
			if (!!texts[ix]) {
//				Предотвращение выделения при двойном клике на заметке
//				texts[ix].onmousedown = texts[ix].onselectstart = function(e) {
//					return false;
//				};
				appendEvent(texts[ix], 'ondblclick', function() {
						var editButton = editButtons[ix];
						return function(e) {
							location.replace(editButton.href, true);
							return false; 
						}; 
					}()
				);
				if (!!window.clipboardData && !!clipboardData.setData) {
					buttons[ix].firstChild.onclick = function (txt) {
						return function() {
							clipboardData.setData('Text', txt);
							return false;
						};
					} (texts[ix].innerText);
					buttons[ix].style.cursor = 'pointer';
				} else {
					var clip = new ZeroClipboard.Client();
					clip.setText(texts[ix].innerText || texts[ix].textContent);
					clip.glue(buttons[ix].firstChild, buttons[ix]);
					clip.setHandCursor(true);
				}
			}
		}
	}
}

function prepareContactButtons() {
	var block = document.getElementById('contactContainer');
	if (!!block) {
		var texts = getChildsByClassName(block, 'copyText');
		var buttons = getChildsByClassName(block, 'copyButton');
		var l = buttons.length;
		for (var ix = 0; ix < l; ix++) {
			if (!!texts[ix]) {
//				Предотвращение выделения при двойном клике
//				texts[ix].onmousedown = texts[ix].onselectstart = function(e) {
//					return false;
//				};
				buttons[ix].onmouseover = function (text) { return function() {
					text.className = 'copyBorder ' + text.className;
				};}(texts[ix]);
				buttons[ix].onmouseout = function (text) { return function() {
					text.className = text.className.replace('copyBorder ', '');
				};}(texts[ix]);

				if (!!window.clipboardData && !!clipboardData.setData) {
					buttons[ix].firstChild.onclick = function (txt) {
						return function() {
							clipboardData.setData('Text', txt);
							return false;
						};
					} (texts[ix].innerText);
					buttons[ix].style.cursor = 'pointer';
				} else {
					var clip = new ZeroClipboard.Client();
					clip.setText(texts[ix].innerText || texts[ix].textContent);
					clip.glue(buttons[ix].firstChild, buttons[ix]);
					clip.setHandCursor(true);
				}
			}
		}
	}
}

function prepareEditButtons() {
	var itemsTable = document.getElementById('itemsTable');
	if (!!itemsTable) {
		var editButtons = getChildsByClassName(itemsTable, 'editButton');
		var l = editButtons.length;
		for (var ix = 0; ix < l; ix++) {
			var tRow = editButtons[ix].parentNode;
			while (!!tRow) {
				if (tRow.nodeName == 'TR') {
					tRow.style.cursor = 'pointer';
					appendEvent(tRow, 'ondblclick', function() {
							var editButton = editButtons[ix];
							return function(e) {
								e = e || event;
								var target = e.target || e.srcElement || e.currentTarget;
								if (target.nodeName == 'TD') {
									location.replace(editButton.href, true);
									return false; 
								}
							}; 
						}()
					);
					break;
				}
				tRow = tRow.parentNode;
			}
		}
	}
}

function getChildsByClassName(elm, className) {
	if (!!elm.getElementsByClassName) {
		return elm.getElementsByClassName(className);
	}
	var l = elm.childNodes.length;
	var re = new RegExp('(^| )' + className + '( |$)');
	var nodes = [];
	for (var i = 0; i < l; i++) {
		var cNode = elm.childNodes[i]
		if (!!cNode.className && re.test(cNode.className)) {
			nodes.push(cNode);
		}
		if (cNode.hasChildNodes()) {
			nodes = nodes.concat(getChildsByClassName(cNode, className));
		}
	}
	return nodes;
}

function insertSmile(img) {
	note = document.getElementById('note_text');
	note.focus();
	if (document.selection) {
		var sel = document.selection.createRange();
		sel.text = img.alt;
		sel.collapse(false);
		sel.select();
	} else if (note.selectionStart || note.selectionStart == '0') {
		var startPos = note.selectionStart;
		var endPos = note.selectionEnd;
		note.value = note.value.substring(0, startPos)
					+ img.alt
					+ note.value.substring(endPos, note.value.length);
		setSelectionRange(note, startPos + img.alt.length, startPos + img.alt.length);
	} else {
		note.value += img.alt;
	}
}

function InsertTags(tag) {
	if (!tagButtons[tag]) return;
	var tagButton = document.getElementById(tagButtons[tag]);
	if (!tagButton) return;
	var selfClose = tagButton.value.slice(-1) == '/';
	var isClose = ('/' == tagButton.value.charAt(0));
	note = document.getElementById('note_text');
	if (insertTagAtCursor(note, tag, isClose)) {
		tagButton.value = tag;
	} else {
		tagButton.value = (isClose || selfClose) ? tag : '/' + tag;
	}
}

function insertTagAtCursor(myField, myValue, isClose) {
	var mvl = myValue.length;
	var selfClose = (myValue.slice(-1) == '/');
	if (document.selection) {
	//IE support
		myField.focus();
		sel = document.selection.createRange();
		var retValue = !!(sel.text);
		if (sel.text) { //!!!
			var stl = sel.text.length;
			sel.text = '[' + myValue + ']' 
				+ sel.text + (selfClose ? '' : '[/' + myValue + ']');
			var sdiff = selfClose ? 0 : (-3 - mvl);
			sel.moveStart('character', sdiff - stl);
			sel.moveEnd('character', sdiff);
			sel.select();
		} else {
			sel.text = '[' + (isClose ? '/' : '') + myValue + ']';
		}
		return retValue || selfClose;
	} else if (myField.selectionStart || myField.selectionStart == '0') {
	//MOZILLA/NETSCAPE support
		var startPos = myField.selectionStart;
		var endPos = myField.selectionEnd;
		if (endPos > startPos) {
			myField.value = myField.value.substring(0, startPos)
				+ '[' + myValue + ']'
				+ myField.value.substring(startPos, endPos)
				+ (selfClose ? '' : ('[/' + myValue + ']'))
				+ myField.value.substring(endPos);
			shiftPos = mvl + 2;
		} else {
			myField.value = myField.value.substring(0, startPos)
				+ '[' + (isClose ? '/' : '') + myValue + ']'
				+ myField.value.substring(startPos);
			shiftPos = mvl + (isClose ? 3 : 2);
		}
		setSelectionRange(myField,startPos + shiftPos,endPos + shiftPos);
		return endPos > startPos || selfClose;
	} else {
		myField.value += '[' + myValue + ']';
		return selfClose;
	}
}

function setSelectionRange(input, selectionStart, selectionEnd) {
	if (input.createTextRange) {
		var range = input.createTextRange();
		range.collapse(true);
		range.moveEnd('character', selectionEnd);
		range.moveStart('character', selectionStart);
		range.select();
	} else if (input.setSelectionRange) {
		input.focus();
		input.setSelectionRange(selectionStart, selectionEnd);
	}
}

function goToPage(startURL, selObj) {
	var o = selObj.options;
	var l = o.length;
	for (var ix = 0; ix < l; ix++) {
		if (o[ix].selected) location.replace(startURL + o[ix].value);
	}
}

function ShowDate() {
	var weekDays = [
		"Воскресенье",
		"Понедельник",
		"Вторник",
		"Среда",
		"Четверг",
		"Пятница",
		"Суббота"
	];
	var _now = new Date();
	var _month = _now.getMonth();
	_month++;
	if (_month<10) { _month = "0" + _month; }
	var _day = _now.getDate();
	if (_day<10) { _day = "0" + _day; }
	var _year = _now.getFullYear();
	var myday = _now.getDay();
	document.write(weekDays[myday] + ", " + _day + "." + _month + "." + _year);
}

function showDiv(lay, text1, text2) {
	if (!document.getElementById(lay)) {
		return;
	}
	var reg = /(\d+)/;
	var arr = reg.exec(lay);
	var href = 'href' + arr[0];

	if(document.getElementById(lay).style.display=='none'){
		document.getElementById(lay).style.display='';
		if (typeof text1 != 'undefined') document.getElementById(href).innerHTML = text1;
	} else {
		document.getElementById(lay).style.display='none';
		if (typeof text2 != 'undefined') document.getElementById(href).innerHTML = text2;
	}
}

function showEventForm(href, idBlock, captionShow, captionHide) {
	var blockStyle = document.getElementById(idBlock).style;
	var commentArea = document.getElementById('comment');
	if (blockStyle.display == 'none') {
		blockStyle.display = '';
		!!captionShow && (href.innerHTML = captionShow);
		commentArea.focus();
		if (!(commentArea.onkeydown instanceof Function)) {
			commentArea.onkeydown = function(e) {
				var event = e || window.event;
				if (event.ctrlKey && !event.altKey && !event.shiftKey && event.keyCode == 13) {
						commentArea.form.submit();
						return false;
				}
			}
		}
	} else {
		blockStyle.display = 'none';
		!!captionHide && (href.innerHTML = captionHide);
	}
}

function play() {
	if (navigator.appName == 'Microsoft Internet Explorer') {
		document.all.sound.src = "login.wav";
		setTimeout('document.location.href = "/cab/"',750);
	} else {
		document.location.href = '/cab/';
	}
}

function shortToggle(elm) {
	var p = elm.parentNode;
	var re = new RegExp('(?:^| )(shortNote)(?: |$)');
	if (p.className.match(re)) {
		p.className = p.className.replace(re, '');
	} else {
		p.className += (!p.className ? '' : ' ') + 'shortNote';
	}
}

function openWindow(url, wndName) {
	var wndName = wndName || "organizer";
	var params = "menubar=yes,location=no,resizable=yes,scrollbars=yes,status=yes,width=500,height=400";
	var wnd = window.open(url, wndName, params);
	wnd.focus();
	return false;
}

function refreshDisplayName(field) {
	if (!!field.form.contact && field.form.contact.value == 'edit') {
		return;
	}
	if (field.getAttribute('name') == 'displayname') {
		field.modeInput = 'manual';
		return;
	}
	if (!field.form) return;
	with (field.form) {
		if (!displayname) return;
		if (!displayname.value) {
			displayname.modeInput = 'auto';
		} 
		if (displayname.modeInput == 'manual') return;
		if (displayname.modeInput == 'auto') {
			var dName;
			if (!!surname.value) {
				dName = surname.value;
				if (!!firstname.value) {
					if (!patronymic.value) {
						dName += ' ' + firstname.value;
					} else {
						dName += ' ' + firstname.value.charAt(0) 
							+ '. ' + patronymic.value.charAt(0) + '.';
					}
				}
			} else if (!!firstname.value) {
				dName = '' + firstname.value
					+ ((!!patronymic.value) ? (' ' + patronymic.value) : '');
			} else if (!!nickname.value) {
				dName = nickname.value;
			} else {
				var organization = field.form['attr[organization][]'] || '';
				var position = field.form['attr[position][]'] || '';
				if (!!organization) {					
					dName = organization.value || organization[organization.length - 1].value;
				}
				dName += (!dName) ? '' : ' ';
				if (!!position) {
					dName += position.value;
				}
			}
			displayname.value = dName;
		}
	}
}

function addTag(tag, attrs, childs) {
	var node = document.createElement(tag);
	attrs = attrs || {};
	for (var ix in attrs) {
		if (ix == 'class') {
			node.className = attrs[ix];
		} else {
			node.setAttribute(ix, attrs[ix]);
		}
	}
	childs = childs || [];
	var cl = childs.length;
	for (var ix = 0; ix < cl; ix++) {
		if ('string' == typeof childs[ix]) {
			node.appendChild(document.createTextNode(childs[ix]));
		} else {
			node.appendChild(childs[ix]);
		}
	}
	return node;
}

function addContactField() {
	var sel = document.getElementById('extAttr');
	var val = document.getElementById('extAttrVal');
	var fav = document.getElementById('extAttrFav');
	var displayNameFields = { position: 1, organization: 1 };
	var selItem = sel.options[sel.selectedIndex];
	if (!!selItem.className) {
		var groupContainer = document.getElementById(selItem.className);
		if (!groupContainer) {
			var contactContainer = document.getElementById('contact_container');
			var groupFieldset = document.createElement('FIELDSET');
			groupFieldset.innerHTML = '<legend>' + selItem.parentNode.label 
				+ '</legend><table><cols><col width="150"/><col /></cols>'
				+ '<tbody id="' + selItem.className + '"></tbody></table>';
			contactContainer.appendChild(groupFieldset);
			groupContainer = document.getElementById(selItem.className);
		}
		var inputNode;
		var nodes = addTag('TR', {}, [ 
			addTag('TD', {}, [ '' + selItem.text + ':' ]),
			addTag('TD', {}, [ inputNode = addTag('INPUT', { 
					name: 'attr[' + selItem.value + '][]',
					value: val.value
				}),
				' ',
				favNode = addTag('INPUT', {
					type: 'hidden',
					name: 'fav[' + selItem.value + '][]',
					value: fav.value
				})
			])
		]);
		appendFavoriteField(favNode);
		groupContainer.appendChild(nodes);
		if (!!displayNameFields[selItem.value] && !!inputNode.form.contact
			&& inputNode.form.contact.value == 'add') {
			inputNode.onkeyup = function () {
				refreshDisplayName(this);
			};
			refreshDisplayName(inputNode);
		}
		fav.value = '0';
		fav.previousSibling.className = 'favorite0';
		val.value = '';
	}
}

function getcookie(name) {
	var cookies = document.cookie.split('; ');
	var ix = 0;
	var cookie = [];
	while (!!cookies[ix]) {
		cookie = cookies[ix].split('=', 2);
		if (cookie[0] == name) return unescape(cookie[1]);
		ix++;
	}
	return null;
}

function setcookie(name, value, expires, path, domain, secure) {
	var cookie = [];
	cookie.push(name + "=" + escape(value));
	if (!!expires && typeof expires == 'number') {
		var expDate = new Date();
		expDate.setTime(expDate.getTime() + expires * 1000);
		expires = expDate;
	}
	!!expires && cookie.push('expires=' + expires.toGMTString());
	!!path && cookie.push('path=' + path);
	!!domain &&	cookie.push('domain=' + domain);
	!!secure &&	cookie.push('secure');
	document.cookie = cookie.join(';');
}

function detectZoneOffset() {
	var localZoneOffset = new Date().getTimezoneOffset();
	var testZoneOffset = getcookie('tzOffset');
	var autodetectZone = getcookie('tzAutodetect');
	if (localZoneOffset != testZoneOffset) {
		setcookie('tzOffset', localZoneOffset, 7200, '/');
		testZoneOffset = getcookie('tzOffset');
		if (localZoneOffset == testZoneOffset && !!autodetectZone) {
			location.reload(true);
		}
	}
}

function timezoneModeChange() {
	if (!timezoneModeChange.manual) {
		document.getElementById('timezone').style.display = '';
		document.getElementById('timezone_auto').style.display = 'none';
	}
	timezoneModeChange.manual = true;
}

function prepareLogonFields() {
	var elm = document.getElementById('auth');
	if (!!elm) {
		var fields = getChildsByClassName(elm, 'auth_field');
		var l = fields.length;
		for (var ix = 0; ix < l; ix++) {
			fields[ix].onclick = fields[ix].onfocus = function() {
				if (!this.demoCleaned) {
					if (this.value == 'demo') {
						this.value = '';
					}
					this.demoCleaned = true;
				}
			}
		}
	}
}

function setupZoomWrapper() {
	if (typeof(setupZoom) == 'function') {
		setupZoom();
	}
}

function prepareFavoriteFields() {
	var elm = document.getElementById('contact_container');
	if (!!elm) {
		var fields = getChildsByClassName(elm, 'favoriteField');
		for (var ix = fields.length; ix-- > 0;) {
			appendFavoriteField(fields[ix]);
		}
		var field = document.getElementById('extAttrFav');
		appendFavoriteField(field);
	}
}

function appendFavoriteField(field) {
	var mode = (field.value == '1') ? '1' : '0';
	var imgCheck = new Image();
	imgCheck.src = '/images/spacer.gif';
	imgCheck.className = 'favorite' + mode;
	imgCheck.onclick = function(f) {
		return function() {
			f.value = (f.value == '1') ? '0' : '1';
			this.className = 'favorite' + f.value;
		};
	} (field);
	field.parentNode.insertBefore(imgCheck, field);
}

detectZoneOffset();
appendEvent(window, 'onload', setupZoomWrapper);
appendEvent(window, 'onload', prepareLogonFields);
appendEvent(window, 'onload', prepareTextarea);
appendEvent(window, 'onload', prepareEditButtons);
appendEvent(window, 'onload', prepareClipboardButtons);
appendEvent(window, 'onload', prepareFavoriteFields);
appendEvent(window, 'onload', prepareSmiles);
appendEvent(window, 'onload', navigateCtrlArrow);
appendEvent(window, 'onload', function() {
	showDiv('lay' + location.hash.substr(1));
});
/*
appendEvent(window, 'onload', function() {
	var authForm = document.getElementById('authForm');
	!!authForm && authForm.email.focus();
});
*/
