if (typeof(HTMLElement) != "undefined") {
    var _emptyTags = {
       "IMG": true,
       "BR": true,
       "INPUT": true,
       "META": true,
       "LINK": true,
       "PARAM": true,
       "HR": true
    };

    HTMLElement.prototype.__defineGetter__("outerHTML", function () {
       var attrs = this.attributes;
       var str = "<" + this.tagName;
       for (var i = 0; i < attrs.length; i++)
          str += " " + attrs[ i ].name + "=\"" + attrs[ i ].value + "\"";

       if (_emptyTags[this.tagName])
          return str + ">";

       return str + ">" + this.innerHTML + "</" + this.tagName + ">";
    });

    HTMLElement.prototype.__defineSetter__("outerHTML", function (sHTML) {
       var r = this.ownerDocument.createRange();
       r.setStartBefore(this);
       var df = r.createContextualFragment(sHTML);
       this.parentNode.replaceChild(df, this);
    });
}

var fucked_IE = false;
if (navigator.userAgent.indexOf ("MSIE") != -1) fucked_IE = true;
var toggles = Array();

var tree;
var treeArray;

function showTree(jsonStr, loadTree, loadStr)
{
	if (jsonStr == "") return;
	var json = JSON.parse(jsonStr);
	tree = new Mif.Tree(
		{
			container: $('interests_tree'),
			forest: true,
			initialize: function(){
			this.initCheckbox('simple');
			new Mif.Tree.KeyNav(this);
		},
		types: 
		{
			folder:{
			openIcon: 'mif-tree-open-icon',
			closeIcon: 'mif-tree-close-icon'
		}
	},
	onCheck: function(node){
		if (node.name == "") return;
		arr.push(node.id);
		$('tvrubrics_tree').value = arr.join(";");
	},
	onUnCheck: function(node){
		if (node.name == "") return;
		arr.erase(node.id);
		$('tvrubrics_tree').value = arr.join(";");
	},
		dfltType:'folder',
		height:20
	});
	tree.load({
		json: json
	});
	if (loadTree) {
		treeArray = Array();
		treeArray = loadStr.split(";");

		tree.root.recursive( function() { 
			if (treeArray.indexOf(String(this.id)) != -1) {
				this['switch']();
			} 

		} );
	}
}

function clearElement(elName, inner)
{
	var el = $(elName);
	if (inner) {
		while (el.firstChild.childNodes.length > 0){
			el.firstChild.removeChild(el.firstChild.firstChild);
		}
		el.innerHTML = "";
	}
	else {
		el.value = "";
	}
}

function checkSpaces(el, inner, alertText)
{
	var str = "";
	if (inner) { str = $(el).outerHTML; alert(str);}
	else str = $(el).value;
	str = str.replace(/[\s+]/g, "");
	if (str.length == 0) {
		alert("В поле \"" + alertText + "\" не должны содержаться только пробелы, символы табуляции и переноса!");
		return false;
	}
	else return true;
}

function checkMaxTextSize(el, elCaption, maxSize)
{
	var str = $(el).value;
	if (str.length > maxSize) {
		alert("Текст в поле \"" + elCaption + "\" превышает " + maxSize + " символов. Вы ввели " + str.length + " символов");
		return false;
	}
	else return true;
}

function showCustomTree(jsonStr, el, onSelectFunc)
{
	if (jsonStr == "") return;
	var json = JSON.parse(jsonStr);
	var tree = new Mif.Tree({
		container: $(el),
		forest: true,
	types: {
		folder:{
			openIcon: 'mif-tree-open-icon',
			closeIcon: 'mif-tree-close-icon'
		}
	},
	onSelect: onSelectFunc,
	dfltType:'folder',
	height:20
	});
	tree.load({
		json: json
	});
}


function setTogglesFromCookie()
{
	if (Cookie.read("toggles") == null) return;
	toggles = Cookie.read("toggles").split(".");
	toggles.each(function(el) {
		var box = $(el + "_innertube");
		var toggler = $(el);
		
		if (toggler == null) return;
		if (box == null) return;
		
		box.style.height = "0px";
		
		toggler.style.backgroundImage = "url(assets/templates/cab/img/blockopener.jpg)";
		toggler.store("toggled", true);
	});
}

function setClass(el, className)
{
	if (fucked_IE) {
		$(el).className = className;
	}
	else {
		$(el).setAttribute("class", className);
	}
}

function expandSearch()
{
	setClass("search_menu_div", "hidden_el");
	setClass("search_menu_div_exp", "search_menu_div_exp");
	if ($("search_str").value == "Поиск...") $("search_str_exp").value = "";
	$("search_str_exp").focus();
}

function collapseSearch()
{
	if ($("search_str_exp").value != "") return; 
	$("search_str").value = "Поиск...";
	setClass("search_menu_div_exp", "hidden_el");
	setClass("search_menu_div", "search_menu_div");
}

MochaUI.composeMsgWnd = function(content) {
	new MochaUI.Window({
		id: 'composemsg',
		title: 'Создание сообщения',
		content: content,
		resizable: false,
		width: 520,
		height: 280
	});
};

function composeMessage() {
	new Request({
		method: "post",
		data: "action=" + "web/message/compose",
		onSuccess: function(response) {
                    MochaUI.composeMsgWnd(response);
		},
		onFailure: function() {
			MochaUI.notification("Ошибка при выполнении запроса!");
		},
		url: "assets/components/2nets/connector.php"
	}).send();
}

function sendMsgToUser(id) {
	new Request({
		method: "get",
		data: "id=" + id,
		onSuccess: function(response) {
			$("user_msg_div").innerHTML = response;
		},
		onFailure: function() {
			MochaUI.notification("Ошибка при создании сообщения");
		},
		url: "ajaxrequest?action=composemsgforuser"
	}).send();
}

function sendMessage(id) {
	if ($("msg_theme").value == "") {
		alert("Введите тему сообщения!");
		return;
	}
	if ($("msg_content").value == "") {
		alert("Введите содержание сообщения!");
		return;
	}
	new Request({
		method: "post",
		data: "id=" + id + "&theme=" + $("msg_theme").value + "&content=" + $("msg_content").value,
		onSuccess: function(response) {
			MochaUI.closeWindow($("composemsg"));
		},
		onFailure: function() {
			MochaUI.notification("Ошибка при отправке сообщения");
		},
		url: "ajaxrequest?action=sendmessage"
	}).send();
}

function searchUsersForMsg() {
	if ($("msg_search_type").value == 1) {
            currentUsersMsgSearch = $("search_msg_str").value;
            showUsersPage(1);
        }
        if ($("msg_search_type").value == 2) {
            currentPartnersMsgSearch = $("search_msg_str").value;
            showPartnersPage(1);
        }
}

function cancelSendMessage() {
	MochaUI.closeWindow($("composemsg"));
}

var currentUsersMsgSearch = "%";
function showUsersPage(page) {
	new Request({
		method: "post",
		data: "action=" + "web/message/searchusers" + "&str=" + currentUsersMsgSearch + "&page=" + page,
		onSuccess: function(response) {
                    if ($("paginate")) $("paginate").destroy();
                    $("user_msg_div").outerHTML = response;
		},
		onFailure: function() {
			MochaUI.notification("Ошибка при поиске");
		},
		url: "assets/components/2nets/connector.php"
	}).send();
}

var currentPartnersMsgSearch = "%";

function showPartnersPage(page) {
	new Request({
		method: "post",
		data: "action=" + "web/message/searchpartners" + "&str=" + currentPartnersMsgSearch + "&page=" + page,
		onSuccess: function(response) {
                    if ($("paginate")) $("paginate").destroy();
                    $("user_msg_div").outerHTML = response;
		},
		onFailure: function() {
			MochaUI.notification("Ошибка при поиске");
		},
		url: "assets/components/2nets/connector.php"
	}).send();
}

function sendMessageToUser(id) {
	MochaUI.composeMsgWnd('<div id="user_msg_div"></div>');
	sendMsgToUser(id);
}

MochaUI.presentationWnd = function(content) {
	new MochaUI.Window({
		id: 'presentation',
		title: 'Просмотр презентации',
		content: content,
		width: 800,
		height: 600
	});
};

function showPresentation(link) {
	new Request({
		method: "get",
		onSuccess: function(response) {
			MochaUI.presentationWnd(response);
		},
		onFailure: function() {
			MochaUI.notification("Ошибка при загрузке презентации");
		},
		url: link
	}).send();
	return false;
}

var togglers = Array();

function collectToggleElements() {
	togglers = $$(".hider");
	togglers.each(function(el) {
		var box = $(el.id + "_innertube");
		if (box != null) el.store("original_height", box.getHeight());
		
		el.onclick = function() {
			var toggled = this.retrieve("toggled");
			var box = $(this.id + "_innertube");
			
			if (box == null) return;
			
			if (toggled == null) {
				toggled = false;
			}
			
			var myEffect = new Fx.Morph(box, {duration: 'normal'});
			if (toggled) {
				myEffect.start({
					'height': this.retrieve("original_height")
				});
				this.store("toggled", false);
				
				this.style.backgroundImage = "url(assets/templates/cab/img/blockcloser.jpg)";
				
				toggles.erase(this.id);
			}
			else {
				myEffect.start({
					'height': 0
				});
				this.store("toggled", true);
				this.style.backgroundImage = "url(assets/templates/cab/img/blockopener.jpg)";
				
				toggles.include(this.id);
			}
			
			Cookie.write("toggles", toggles.join("."));
		};
	});
}


var datePickers;
var currentDatePicker = null;

function stopEvent(e) {
	var event = e;
	if (window.event) event = window.event;
	if (event.stopPropagation) event.stopPropagation();
	else event.cancelBubble = true; 
}

function collectDatePickers() {
	datePickers = $$(".date_picker");
	datePickers.each(function(el) {
		el.onclick = function(e) {
			stopEvent(e);
			
			if (currentDatePicker == this) return;
			
			if (currentDatePicker != null) {
				$("date_picker_div").destroy();
			}

			currentDatePicker = this;
			
			var datePickerDiv = new Element("div", {
				"id": "date_picker_div"
			});
			
			datePickerDiv.style.position = "absolute";
			datePickerDiv.style.top = currentDatePicker.getPosition().y + "px";
			datePickerDiv.style.left = (currentDatePicker.getPosition().x + currentDatePicker.getWidth()) + "px";
			datePickerDiv.innerHTML = '<div id="dp"></div>';
			
			$(document.body).appendChild(datePickerDiv);
			
			swfobject.embedSWF("/assets/flash/cl.swf", "dp", "185px", 
					"165px", "9", "expressInstall.swf", null, null);
		};
	});
	$(document.body).onclick = function() {
		if (currentDatePicker == null) return;
		if ($("date_picker_div") != null) $("date_picker_div").destroy();
		currentDatePicker = null;
	};
}

function setDateDateNYAAA(str) {
	if ($(currentDatePicker.id + "_input") != null) $(currentDatePicker.id + "_input").value = str;
	if ($("date_picker_div") != null) $("date_picker_div").destroy();
	currentDatePicker = null;
}
