﻿function Remove(str, regex) {
    var flags = "g";
    if (regex.ignoreCase) flags += "i";
    if (regex.multiline) flags += "m";
    var globalRegex = new RegExp(regex.source, flags);
    return str.replace(globalRegex, "");
}

function Trim(str) {
    return Remove(str, /^\s+|\s+$/);
}

function RemoveMultipleSpaces(str) {
    return str.replace(/\s+/g, " ");
}

function FormatInput(str, removeQuotes) {
    if (removeQuotes) {
        var withoutQuotes = str.replace(/\"/g, "");
        return Trim(RemoveMultipleSpaces(withoutQuotes))
    }
    return Trim(RemoveMultipleSpaces(str));
}

var popup = {
    div: null,
    show: function (id, opts, afterAction) {
        opts = opts || {};
        opts.createTemplate = true;
        textLightBox.show(id, opts, afterAction);
    }
}

//light box object
//show(MessageBlock) - create light box
//hide() - destroy light box
var textLightBox = {
    div: null,
    sx: 0,
    sy: 0,
    docwidth: 0,
    show: function (MessageBlock, opts, afterAction) {
        opts = opts || {};

        opts.centerX = opts.centerX === undefined ? true : opts.centerX;
        opts.centerY = opts.centerY === undefined ? true : opts.centerY;
        div = document.createElement('div');
        if (!(div.msg = document.getElementById(MessageBlock))) return;
        document.body.appendChild(div);
        sx = document.documentElement.scrollLeft;
        sy = document.documentElement.scrollTop;
        document.documentElement.style.overflow = "hidden";

        if (document.documentElement.clientHeight < document.documentElement.scrollHeight) {
            docwidth = document.documentElement.currentStyle ? document.documentElement.currentStyle.width : "100%";
            document.body.style.width = (document.documentElement.clientWidth - 17) + "px";
        } else {
            docwidth = 0;
        }
        document.documentElement.scrollLeft = sx;
        document.documentElement.scrollTop = sy;

        div.style.cssText = "width:100%;_width:expression(documentElement.clientWidth);height:100%;_height:expression(documentElement.clientHeight);position:fixed;_position:absolute;z-index:100;left:0;_left:expression(documentElement.scrollLeft);top:0;_top:expression(documentElement.scrollTop);";
        div.appendChild(div.bg = document.createElement('div'));
        div.bg.style.cssText = "width:100%;height:100%;position:absolute;left:0;top:0;background:#000;opacity:0.4;filter:alpha(opacity=40);";
        div.appendChild(div.ifr = document.createElement('iframe'));
        div.ifr.style.cssText = 'width:100%;height:100%;position:absolute;left:0;top:0;filter:alpha(opacity=0);opacity:0';
        div.appendChild(div.scroll = document.createElement('div'));
        div.scroll.style.cssText = "width:100%;height:100%;position:absolute;left:0;top:0;overflow:auto;";
        div.scroll.appendChild(div.rel = document.createElement('div'));
        div.rel.style.cssText = "height:100%;_height:100%;position:relative;";
        div.rel.appendChild(div.table = document.createElement('table'));
        div.td = div.table.insertRow(0).insertCell(0);
        div.table.style.cssText = 'width:100%;_width:expression(documentElement.clientWidth);height:100%;_height:expression(documentElement.clientHeight);position:absolute;left:0;top:0;border-collapse:collapse;border:solid 0;';
        div.td.style.textAlign = opts.centerX ? "center" : "left";
        div.td.style.textAlign = opts.align || "center";
        div.td.style.verticalAlign = opts.centerY ? "middle" : "top";
        div.td.style.verticalAlign = opts.valign || "middle";
        //div.td.style.cssText = "text-align:center;vertical-align:middle;";
        div.appendChild(div.over = document.createElement("div"));
        div.over.style.cssText = "width:100%;height:100%;position:absolute;left:0;top:0;display:none;";

        div.msgparent = div.msg.parentNode;
        if (opts.createTemplate) {
            div.td.innerHTML = this.getHtml();
            div.td = document.getElementById("LightBoxContent");
        }
        div.td.appendChild(div.box = div.msgparent.removeChild(div.msg));
        if (opts.createTemplate) {
            div.msg.style.display = "block";
            div.box2 = div.box;
            div.box = document.getElementById("LightBoxTemplate");
        }
        div.box.style.cssText = 'display:inline-block;visibility:visible;' + (opts.width ? 'width: ' + opts.width + ';' : '');
        div.box.focus();
        //if (opts.centerX) div.box.style.margin = "0 auto";
        if (opts.align == "center") div.box.style.margin = "0 auto";
        if (opts.css) $(div.box).css(opts.css);

        _window_onkeydown = document.documentElement.onkeydown;

        document.documentElement.onkeydown = function (Event) {
            evt = window.event ? event : Event;
            if (evt.keyCode == 27) {
                textLightBox.hide();
            }
        }
        var boxClick = false;
        //div.td.onclick = function() { if (boxClick) { boxClick = false; } else { textLightBox.hide(); } };
        div.box.onclick = function () { boxClick = true; };
        var scripts = document.getElementsByTagName("script");
        /*for (var i = 0; i < scripts.length; i++) {
        rt = scripts[i];
        while (rt = rt.parentNode) {
        if (rt == div.box) {
        eval(scripts[i].textContent || scripts[i].text);
        }
        }
        }*/
        if (afterAction) afterAction();
    },
    hide: function (afterAction) {
        function tmpHide() {
            div.box = div.box2 || div.box;
            div.box.style.display = 'none';
            if (div.box.parentNode == div.td)
                div.msgparent.appendChild(div.td.removeChild(div.box));
            document.body.removeChild(div);
            document.documentElement.onkeydown = _window_onkeydown;
            document.documentElement.style.overflow = "";
            if (docwidth) {
                document.body.style.width = docwidth;
            }
            var sdiv = document.createElement("div");
            document.body.appendChild(sdiv);
            sdiv.style.height = "1px";
            setTimeout(function () {
                document.body.removeChild(sdiv);
                document.documentElement.scrollLeft = sx;
                document.documentElement.scrollTop = sy;
            }, 0);
            if (afterAction) afterAction();
        }
        div.over.style.display = "block";
        $(div.table).addClass("fade-out");
        $(div.table).fadeOut(150);
        $(div.bg).fadeOut(300, tmpHide);
    },
    getHtml: function () {
        return (['\
		<table class="lightbox" id="LightBoxTemplate"><tr><td class="lbc-">\
			<div class="boundary-">\
				<div class="elements-">\
					<div class="lt- corner-"><i><!----></i></div>\
					<div class="rt- corner-"><i><!----></i></div>\
					<div class="rb- corner-"><i><!----></i></div>\
					<div class="lb- corner-"><i><!----></i></div>\
					<div class="t-"><i><s><!----></s></i></div>\
					<div class="r-"><i><s><u><!----></u></s></i></div>\
					<div class="b-"><i><s><!----></s></i></div>\
					<div class="l-"><i><s><u><!----></s></u></i></div>\
				</div>\
				<div class="in-">\
					<a class="close-" href="javascript:void(0);" onclick="textLightBox.hide();return false;"><img src="/theme/images/pix.gif" width="8" height="7" alt="x" title="закрыть"/></a>\
					<div id="LightBoxContent"></div>\
				</div>\
			</div>\
		</td></tr></table>\
        ']).join('');
    }
}

/*всплывающее меню, напр.:Сайты СКБ Контур*/
function fixedPopup(button, popup) {
	button = typeof (button) == 'string' ? document.getElementById(button) : button;
	popup = typeof (popup) == 'string' ? document.getElementById(popup) : popup;
	if (window.opera) {
	    button.appendChild(button.img = document.createElement('img'));
	    button.img.style.cssText = 'width:' + button.clientWidth + 'px;height:' + button.clientHeight + 'px;position:absolute;left:0;top:0;border:solid 0;opacity:0';
		button.img.alt = "";
	}
	var click = function(Event) {
	    var evt = window.event ? event : Event;
	    this.layerX = evt.layerX || evt.x;
	    this.layerY = evt.layerY || evt.y;
	    popup.style.left = evt.clientX - this.layerX + document.documentElement.scrollLeft + 'px';
	    popup.style.top = evt.clientY - this.layerY + document.documentElement.scrollTop + 'px';
	    popup.style.display = 'block';
	};
	var mouseout = function(Event) {
		var rt = window.event ? event.toElement : Event.relatedTarget;
		if (!rt) rt = document.body;
		while (rt != document.body) {
			if (rt == popup) return false;
			rt = rt.parentNode;
		};
		popup.style.display = 'none';
	};
	if (document.all) {
		button.attachEvent('onclick', click);
		popup.attachEvent('onmouseout', mouseout);
	} else {
		button.addEventListener('click', click, false);
		popup.addEventListener('mouseout', mouseout, false);
	}
}
var locationRegions = [];
function BlockElement(elementQJ) {
	elementQJ.block({ message: "<img src='/theme/images/ajax-loader.gif' />",
		centerX: true,
		centerY: true,
		fadeOut: 0,
		fadeIn: 0,
		css: { width: '100%', textAlign: 'center' },
		overlayCSS: { backgroundColor: '#fff', opacity: '1' }
	});
}
function LoadRegions(url, regionSelectId, callback) {
	if (locationRegions.length > 0) {
		callback()
	} else {
		//BlockElement($("#" + regionSelectId).parent());
		$.post(url, '', function(data) {
			try {
				locationRegions = eval(data);
				callback();
				$("#" + regionSelectId).parent().unblock();
			} catch (e) { }
		});
	}
}
function GetCities(citySelectId, regionId, url, selectedCityId) {
	var citySelect = $("#" + citySelectId);
	var c = citySelect.parent();
	BlockElement(c);
	$("#" + citySelectId + " > option").remove();
	var centerId = GetRegionCenterId(regionId);
	$.post(url + '/' + regionId, '', function(data) {
		try {
			var cities = eval(data);
			var selectedCityIndex = GetCityIndex(cities, selectedCityId);
			if (selectedCityIndex < 0) {
				if (centerId) // Если есть город по умолчанию
					selectedCityIndex = GetCityIndex(cities, centerId);
				else
					selectedCityIndex = 0;
			}
			for (var i = 0; i < cities.length; i++)
				citySelect.append("<option value=" + cities[i].id + ">" + cities[i].value + "</option>")
			citySelect.get(0).scrollTop = 0;
			if (selectedCityIndex >= 0)
				citySelect.get(0).options[selectedCityIndex].selected = true;
		} catch (e) { }
		c.unblock();
	});
}
function BuildRegionSelect(locationRegions, regionSelectId, selectedRegionId, showIn) {
	var options = $("#" + regionSelectId + " > option"); //.remove();
	if (options.length > 0) {
		options.removeAttr("selected");
		$("#" + regionSelectId + " > option[value='" + selectedRegionId + "']").attr("selected", "selected");
		return;
	}

	var regionSelect = $("#" + regionSelectId);

	for (var i = 0; i < locationRegions.length; i++) {
		if (locationRegions[i].showIn == 0 || locationRegions[i].showIn == showIn) {
			var selectedStr = locationRegions[i].id == selectedRegionId ? " selected='selected' " : "";
			regionSelect.append("<option value=" + locationRegions[i].id + selectedStr + ">" + locationRegions[i].value + "</option>");
		}
	}
}
function GetRegionCenterId(regionId) {
	for (var i = 0; i < locationRegions.length; i++) {
		if (locationRegions[i].id == regionId)
			return locationRegions[i].centerId;
	}
	return null;
}
function GetCityIndex(cities, cityId) {
	for (var i = 0; i < cities.length; i++) {
		if (cities[i].id == cityId)
			return i;
	}
	return -1;
}

function FormAutoResizeTextArea(idStr) {
	var t = document.getElementById(idStr);
	var div = document.createElement('div');
	t.parentNode.insertBefore(div, t);
	div.appendChild(t.parentNode.removeChild(t));
	t.style.overflowY = 'hidden';
	t.style.overflowX = document.all != undefined ? '' : 'hidden';
	if (window.opera) t.style.cssText = "overflow:hidden;border:solid 1px #ccc;";
	t.h = t.clientHeight;
	var tresize = function () {
		if (!t.h) t.h = t.clientHeight - 2;
		if (!document.all && !window.opera) t.style.height = "0px";
		if (document.all && window.opera) t.style.height = "0px";
		t.style.height = div.style.minHeight = ((t.scrollHeight + 20) > t.h ? (t.scrollHeight + 20) : t.h) + 'px';
	};
	$(t).bind('keyup', tresize)
	.bind('blur', tresize)
	.bind('focus', tresize)
	.bind('cut', function () { setTimeout(tresize, 0) })
	.bind('paste', function () { setTimeout(tresize, 0) });
	t.style.height = div.style.minHeight = ((t.scrollHeight + 20) > t.h ? (t.scrollHeight + 20) : t.h) + 'px';
	t.style.height = 0;
	$(t).keyup();
};

function SelectText(text) {
    if ($.browser.msie) {
        var range = document.body.createTextRange();
        range.moveToElementText(text);
        range.select();
    } else if ($.browser.mozilla || $.browser.opera) {
        var selection = window.getSelection();
        var range = document.createRange();
        range.selectNodeContents(text);
        selection.removeAllRanges();
        selection.addRange(range);
    } else if ($.browser.safari) {
        var selection = window.getSelection();
        selection.setBaseAndExtent(text, 0, text, 1);
    }
}

function coptyToClipBoard(id) {
    $("#" + id).get(0).createTextRange().execCommand("Copy");
}

/**
* SWFObject v1.5: Flash Player detection and embed - http://blog.deconcept.com/swfobject/
*
* SWFObject is (c) 2007 Geoff Stearns and is released under the MIT License:
* http://www.opensource.org/licenses/mit-license.php
*
*/
if (typeof deconcept == "undefined") { var deconcept = new Object(); } if (typeof deconcept.util == "undefined") { deconcept.util = new Object(); } if (typeof deconcept.SWFObjectUtil == "undefined") { deconcept.SWFObjectUtil = new Object(); } deconcept.SWFObject = function(_1, id, w, h, _5, c, _7, _8, _9, _a) { if (!document.getElementById) { return; } this.DETECT_KEY = _a ? _a : "detectflash"; this.skipDetect = deconcept.util.getRequestParameter(this.DETECT_KEY); this.params = new Object(); this.variables = new Object(); this.attributes = new Array(); if (_1) { this.setAttribute("swf", _1); } if (id) { this.setAttribute("id", id); } if (w) { this.setAttribute("width", w); } if (h) { this.setAttribute("height", h); } if (_5) { this.setAttribute("version", new deconcept.PlayerVersion(_5.toString().split("."))); } this.installedVer = deconcept.SWFObjectUtil.getPlayerVersion(); if (!window.opera && document.all && this.installedVer.major > 7) { deconcept.SWFObject.doPrepUnload = true; } if (c) { this.addParam("bgcolor", c); } var q = _7 ? _7 : "high"; this.addParam("quality", q); this.setAttribute("useExpressInstall", false); this.setAttribute("doExpressInstall", false); var _c = (_8) ? _8 : window.location; this.setAttribute("xiRedirectUrl", _c); this.setAttribute("redirectUrl", ""); if (_9) { this.setAttribute("redirectUrl", _9); } }; deconcept.SWFObject.prototype = { useExpressInstall: function(_d) { this.xiSWFPath = !_d ? "expressinstall.swf" : _d; this.setAttribute("useExpressInstall", true); }, setAttribute: function(_e, _f) { this.attributes[_e] = _f; }, getAttribute: function(_10) { return this.attributes[_10]; }, addParam: function(_11, _12) { this.params[_11] = _12; }, getParams: function() { return this.params; }, addVariable: function(_13, _14) { this.variables[_13] = _14; }, getVariable: function(_15) { return this.variables[_15]; }, getVariables: function() { return this.variables; }, getVariablePairs: function() { var _16 = new Array(); var key; var _18 = this.getVariables(); for (key in _18) { _16[_16.length] = key + "=" + _18[key]; } return _16; }, getSWFHTML: function() { var _19 = ""; if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { if (this.getAttribute("doExpressInstall")) { this.addVariable("MMplayerType", "PlugIn"); this.setAttribute("swf", this.xiSWFPath); } _19 = "<embed type=\"application/x-shockwave-flash\" src=\"" + this.getAttribute("swf") + "\" width=\"" + this.getAttribute("width") + "\" height=\"" + this.getAttribute("height") + "\" style=\"" + this.getAttribute("style") + "\""; _19 += " id=\"" + this.getAttribute("id") + "\" name=\"" + this.getAttribute("id") + "\" "; var _1a = this.getParams(); for (var key in _1a) { _19 += [key] + "=\"" + _1a[key] + "\" "; } var _1c = this.getVariablePairs().join("&"); if (_1c.length > 0) { _19 += "flashvars=\"" + _1c + "\""; } _19 += "/>"; } else { if (this.getAttribute("doExpressInstall")) { this.addVariable("MMplayerType", "ActiveX"); this.setAttribute("swf", this.xiSWFPath); } _19 = "<object id=\"" + this.getAttribute("id") + "\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\"" + this.getAttribute("width") + "\" height=\"" + this.getAttribute("height") + "\" style=\"" + this.getAttribute("style") + "\">"; _19 += "<param name=\"movie\" value=\"" + this.getAttribute("swf") + "\" />"; var _1d = this.getParams(); for (var key in _1d) { _19 += "<param name=\"" + key + "\" value=\"" + _1d[key] + "\" />"; } var _1f = this.getVariablePairs().join("&"); if (_1f.length > 0) { _19 += "<param name=\"flashvars\" value=\"" + _1f + "\" />"; } _19 += "</object>"; } return _19; }, write: function(_20) { if (this.getAttribute("useExpressInstall")) { var _21 = new deconcept.PlayerVersion([6, 0, 65]); if (this.installedVer.versionIsValid(_21) && !this.installedVer.versionIsValid(this.getAttribute("version"))) { this.setAttribute("doExpressInstall", true); this.addVariable("MMredirectURL", escape(this.getAttribute("xiRedirectUrl"))); document.title = document.title.slice(0, 47) + " - Flash Player Installation"; this.addVariable("MMdoctitle", document.title); } } if (this.skipDetect || this.getAttribute("doExpressInstall") || this.installedVer.versionIsValid(this.getAttribute("version"))) { var n = (typeof _20 == "string") ? document.getElementById(_20) : _20; n.innerHTML = this.getSWFHTML(); return true; } else { if (this.getAttribute("redirectUrl") != "") { document.location.replace(this.getAttribute("redirectUrl")); } } return false; } }; deconcept.SWFObjectUtil.getPlayerVersion = function() { var _23 = new deconcept.PlayerVersion([0, 0, 0]); if (navigator.plugins && navigator.mimeTypes.length) { var x = navigator.plugins["Shockwave Flash"]; if (x && x.description) { _23 = new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split(".")); } } else { if (navigator.userAgent && navigator.userAgent.indexOf("Windows CE") >= 0) { var axo = 1; var _26 = 3; while (axo) { try { _26++; axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash." + _26); _23 = new deconcept.PlayerVersion([_26, 0, 0]); } catch (e) { axo = null; } } } else { try { var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); } catch (e) { try { var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); _23 = new deconcept.PlayerVersion([6, 0, 21]); axo.AllowScriptAccess = "always"; } catch (e) { if (_23.major == 6) { return _23; } } try { axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); } catch (e) { } } if (axo != null) { _23 = new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(",")); } } } return _23; }; deconcept.PlayerVersion = function(_29) { this.major = _29[0] != null ? parseInt(_29[0]) : 0; this.minor = _29[1] != null ? parseInt(_29[1]) : 0; this.rev = _29[2] != null ? parseInt(_29[2]) : 0; }; deconcept.PlayerVersion.prototype.versionIsValid = function(fv) { if (this.major < fv.major) { return false; } if (this.major > fv.major) { return true; } if (this.minor < fv.minor) { return false; } if (this.minor > fv.minor) { return true; } if (this.rev < fv.rev) { return false; } return true; }; deconcept.util = { getRequestParameter: function(_2b) { var q = document.location.search || document.location.hash; if (_2b == null) { return q; } if (q) { var _2d = q.substring(1).split("&"); for (var i = 0; i < _2d.length; i++) { if (_2d[i].substring(0, _2d[i].indexOf("=")) == _2b) { return _2d[i].substring((_2d[i].indexOf("=") + 1)); } } } return ""; } }; deconcept.SWFObjectUtil.cleanupSWFs = function() { var _2f = document.getElementsByTagName("OBJECT"); for (var i = _2f.length - 1; i >= 0; i--) { _2f[i].style.display = "none"; for (var x in _2f[i]) { if (typeof _2f[i][x] == "function") { _2f[i][x] = function() { }; } } } }; if (deconcept.SWFObject.doPrepUnload) { if (!deconcept.unloadSet) { deconcept.SWFObjectUtil.prepUnload = function() { __flash_unloadHandler = function() { }; __flash_savedUnloadHandler = function() { }; window.attachEvent("onunload", deconcept.SWFObjectUtil.cleanupSWFs); }; window.attachEvent("onbeforeunload", deconcept.SWFObjectUtil.prepUnload); deconcept.unloadSet = true; } } if (!document.getElementById && document.all) { document.getElementById = function(id) { return document.all[id]; }; } var getQueryParamValue = deconcept.util.getRequestParameter; var FlashObject = deconcept.SWFObject; var SWFObject = deconcept.SWFObject;

/* Отслеживание событий */

function RegisterPageEvent(eventName) {
    $(function () {
        window._gaq = window._gaq || [];
        window._gaq.push(['_trackPageview', eventName]);

        var yandexCounter = window['yaCounter' + window.yandexCounterID];
        if (typeof (yandexCounter) != "undefined")
            yandexCounter.reachGoal(eventName);
        else {
            window.pageEvents = window.pageEvents || [];
            window.pageEvents.push(eventName);
        }
    });
}

function CheckPageEventsQueue(yandexCounterID) {
    $(function () {
        window.yandexCounterID = yandexCounterID;
        var yandexCounter = window['yaCounter' + yandexCounterID];

        window.pageEvents = window.pageEvents || [];
        var pageEvents = window.pageEvents;

        if (typeof (yandexCounter) != "undefined" && typeof (pageEvents) != "undefined")
            for (var i = 0; i < pageEvents.length; i++)
                yandexCounter.reachGoal(pageEvents[i]);
    });
}

/* Отслеживание событий */

// create suggest
function createSuggest(opts) {
    var ie = document.all && (!window.opera);
    var emptyMessage = typeof (opts.msg) != 'undefined' ? opts.msg : 'По вашему запросу ничего не найдено';
    var inp = document.getElementById(opts.input);
    inp.oldvalue = inp.value;
    if (!inp) return false;
    inp.suggestEnabled = true;
    inp.url = opts.url;
    inp.hidden = document.getElementById(opts.hidden);
    inp.key = document.getElementById(opts.key);
    inp.txt = document.getElementById(opts.title);
    inp.comment = document.getElementById(opts.comment);
    inp.callback = opts.callback;
    inp.callbackParams = opts.callbackParams;
    inp.create = function () {
        var suggest = document.createElement('div');
        if (inp.nextSibling)
            inp.parentNode.insertBefore(suggest, inp.nextSibling)
        else
            inp.parentNode.appendChild(suggest);
        suggest.className = "suggest";

        inp.w = window.opera ? document.createElement("iframe") : document.createElement("div");
        suggest.insertBefore(inp.w, suggest.firstChild);
        inp.w.style.cssText = "width:1px;height:1px;position:absolute;left:0;top:0;font-size:0;border:solid 0;"; //opacity//

        document.body.appendChild(inp.abs = document.createElement("div"));
        inp.abs.style.cssText = "position:absolute;";
        inp.abs.className = "suggest";

        if (ie) {
            inp.abs.appendChild(inp.ifr = document.createElement('iframe'));
            inp.ifr.style.cssText = 'position:absolute;left:0;top:0;display:none;/*filter:alpha(opacity=0);opacity:0*/';
        }

        var ul = document.createElement('ul')
        inp.abs.appendChild(ul);
        ul.style.display = 'none';
        inp.setAttribute("autocomplete", "off");
        inp.suggest = suggest;
        inp.ul = ul;
    };
    inp.undoSubmit = function (undo) {
        if (!inp.form) return;
        if (undo) {
            if (!inp.formSubmit) {
                inp.formSubmit = inp.form.onsubmit ? inp.form.onsubmit : function () { ; };
                inp.form.onsubmit = function () { return false; };
            }
        } else {
            if (inp.formSubmit) {
                inp.form.onsubmit = inp.formSubmit;
                inp.formSubmit = null;
            }
        }
    };
    inp.onkeyup = function (Event) {
        if (!inp.suggest) inp.create();
        var evt = Event ? Event : event;
        var ul = inp.ul;

        if (inp.oldvalue != inp.value) {
            if (inp.callback) inp.callback('', inp.callbackParams);
            if (inp.txt) inp.txt.innerHTML = '';
        }
        var offsetFocus = function (offset) {
            var ul = inp.ul;
            if (!ul.childNodes.length) return false;
            if (ul.firstChild.className == "empty") return false;
            for (var i = 0; i < ul.childNodes.length; i++) {
                if (ul.childNodes[i].className.match('hover')) {
                    ul.childNodes[i].className = ul.childNodes[i].className.replace('hover', '');
                    if ((i + offset) < 0) i = ul.childNodes.length;
                    if ((i + offset) > (ul.childNodes.length - 1)) i = -1;
                    ul.childNodes[i + offset].className += ' hover';
                    inp.data(ul.childNodes[i + offset]);
                    return 0;
                }
            }
            if (offset > 0) {
                ul.childNodes[0].className += ' hover';
                inp.data(ul.childNodes[0]);
            };
            if (offset < 0) {
                ul.childNodes[ul.childNodes.length - 1].className += ' hover';
                inp.data(ul.childNodes[ul.childNodes.length - 1]);
            };
            inp.oldvalue = inp.value;
        };
        if (evt.keyCode == 38)//point up
        {
            offsetFocus(-1);
            return false;
        }
        if (evt.keyCode == 40)//point down
        {
            offsetFocus(1);
            return false;
        }
        if (evt.keyCode == 13)//enter
        {
            ul.innerHTML = '';
            ul.style.display = inp.abs.style.display = 'none';
            if (ie) inp.ifr.style.display = 'none';
            inp.undoSubmit();
            return false;
        }
        if (evt.keyCode == 27)//esc
        {
            ul.innerHTML = '';
            ul.style.display = inp.abs.style.display = 'none';
            if (ie) inp.ifr.style.display = 'none';
            inp.undoSubmit();
            return false;
        }

        inp.suggest.style.width = (inp.offsetWidth - 2) + 'px'; //suggest min-width

        if (inp.suggestEnabled && inp.value && (inp.value.length > 0)) {
            if (inp.oldvalue == inp.value) return false; //if value not changed
            clearTimeout(this.timeout);
            inp.timeout = setTimeout(function () { inp.query(inp); }, 10); //set timeout request
            inp.oldvalue = inp.value;
        } else {
            ul.innerHTML = '';
            ul.style.display = inp.abs.style.display = 'none';
            if (ie) inp.ifr.style.display = 'none';
            inp.undoSubmit();
        }
    };
    /*inp.onkeydown = function()
    {
    //if (document.all && event.keyCode == 13)//stop submit propagation
    //	return false;
    };*/
    var onblur = function ()//onblur - hide suggest
    {
        if (!inp.ul) return false;
        clearTimeout(this.timeout);
        this.timeout = false;
        inp.ul.innerHTML = '';
        inp.ul.style.display = inp.abs.style.display = 'none';
        if (ie) inp.ifr.style.display = 'none';
        inp.undoSubmit();
        if (inp.oldvalue != inp.value) {
            if (inp.txt) inp.txt.innerHTML = '';
        }
    };
    $(inp).bind('blur', onblur);
    inp.query = function (inp)//get data
    {
        if (!inp.value || FormatInput(inp.value, true).length == 0)
            return;
        $.ajax({
            url: inp.url + escape(FormatInput(inp.value, true)), //escape wrong for safari
            dataType: 'json',
            contentType: "application/json; charset=utf-8",
            type: "POST",
            success: function (data) { inp.ready(data); }
        });
    };
    inp.data = function (obj)//set values text input [and hidden input]
    {
        inp.value = obj.data;
        if (inp.hidden) inp.hidden.value = obj.key ? obj.key : "";
        if (inp.txt) inp.txt.innerHTML = obj.txt ? obj.txt : "";
        if (inp.callback) inp.callback(obj.data, inp.callbackParams);
        if (inp.comment) inp.comment.innerHTML = obj.comment ? obj.comment : "";
        inp.oldvalue = inp.value;
    };
    inp.ready = function (data)//create suggest list
    {
        if (this.timeout === false) return false;
        var ul = inp.ul;
        var li;
        var esc = document.createElement("div");
        ul.innerHTML = '';
        if (!data.length) {
            if (emptyMessage === false) {
                inp.ul.style.display = inp.abs.style.display = 'none';
                if (ie) inp.ifr.style.display = "none";
                return;
            }
            ul.appendChild(li = document.createElement('li'));
            li.className = 'empty';
            li.innerHTML = emptyMessage;
            li.data = "";
        }
        for (var i = 0; i < data.length; i++) {
            ul.appendChild(li = document.createElement('li'));
            if (typeof (data[i]) == 'object') {
                //li.innerHTML = data[i].valueEncoded;//если здесь ошибок не возникло, стоит убрать valueEncoded из серверной части
                if (document.all)
                    esc.innerText = data[i].value;
                else
                    esc.textContent = data[i].value;
                li.innerHTML = esc.innerHTML;
                //li.innerHTML = data[i].value;
                if (data[i].key) li.key = data[i].key;
                if (data[i].value) li.data = data[i].value;
                if (data[i].title) {
                    li.txt = data[i].title;
                }
                if (data[i].cssClass) li.className = data[i].cssClass;
            }
            else {
                li.innerHTML = data[i];
                li.data = data[i];
            }
            var words = FormatInput(inp.value.replace(/[^0-9a-zа-яё]+/gi, " "), false).split(" ");
            if (opts.light) {
                var title = li.innerHTML;
                var comm = data[i].comment;
                for (var ii = 0; ii < words.length; ii++) {
                    var re = new RegExp('(' + words[ii] + ')', 'gi');
                    title = title.replace(re, '<b>$1</b>');
                    if (comm != null) {
                        comm = comm.replace(re, '<b>$1</b>');
                    }
                }
                li.innerHTML = title;
                if (comm != null)
                    li.innerHTML += "<div class='comment'>" + comm + "</div>";
            }
            li.innerHTML += data[i].title ? "&nbsp;&nbsp;" + data[i].title + "" : '';
            li.onmouseover = function () {
                for (var i = 0; i < this.parentNode.childNodes.length; i++) {
                    this.parentNode.childNodes[i].className = this.parentNode.childNodes[i].className.replace(/\s?hover/, '');
                }
                this.className += ' hover';
            };
            li.onmousedown = function () { inp.data(this); };
        }
        esc = null;

        //if (data.length == 1) inp.data(li); //if we have one variant

        var sx, sy, sw, sh;
        sw = $(document).width();
        sh = $(document).height();
        sx = $(inp.suggest).offset().left;
        sy = $(inp.suggest).offset().top;

        inp.abs.style.left = sx + "px";
        inp.abs.style.top = sy + "px";

        inp.abs.style.width = (sw - sx - 20) + "px";

        ul.style.display = inp.abs.style.display = '';
        if (ie) inp.ifr.style.display = '';
        inp.undoSubmit(!opts.freeSubmit);
        if (ie) inp.ifr.style.width = ul.clientWidth + 2 + 'px';
        if (ie) inp.ifr.style.height = ul.clientHeight + 2 + 'px';
    };
}
/* оставить покачто для отладки */


//подсказка в текстовом поле
function textNote(inputId, note) {
    function init() {
        var input = $('#' + inputId);
        if (!input[0]) return false;
        var name = '';
        var onblur = function () {
            if (input.val() == '') {
                input.val(note);
                input.empty = true;
                name = input.attr('name');
                input.removeAttr('name');
                input.css({ color: '#999' });
                input.addClass('empty');
            } else {
                input.empty = false;
                input.attr('name', name);
                input.removeClass('empty');
            }
        };
        var onfocus = function () {
            if (input.empty) input.val('');
            input.css({ color: '#000' });
            input.addClass('empty');
            input.attr('name', name);
        };
        var onkeyup = function () {
            if ($(this).val()) $(this).empty = false;
            input.attr('name', name);
        };
        input.bind('blur', onblur);
        input.bind('focus', onfocus);
        input.bind('keyup', onkeyup);
        if (input.val() == note) input.val('');
        onblur();
    }
    $(document).ready(init);
}
