function SettignsElements() {
	var dublicate = this;
	
	this.vacancy = {
		// разворачивающиеся описания вакансий
		c: Vacancy,
		tag: "div",
		ancestors: ["div", "vacancy-box"],
		openClass: "vacancy-box-open",
		closeClass: "vacancy-box-hidden",
		activeClass: "vacancy-box-in-process",
		checkNode: function(node) {
			var parent = dom.get( dom.ancestors(node), this.ancestors[0], this.ancestors[1]);
			if (parent.length && dom.hasClass(node, "toggler")) {
				return {
					node: node,
					parent: parent[0],
					content: dom.get(parent[0], "div")[0],
					openClass: this.openClass,
					closeClass: this.closeClass,
					activeClass: this.activeClass
				};
			}
		}
	};
	
	this.simpleSearch = {
		// поле поиска в правой колонке
		c: SimpleSearch,
		tag: "input",
		emptyText: "поиск",
		checkNode: function(node) {
			if ( dom.hasClass(node, "text") && dom.get( dom.ancestors(node), "form", "simple-search" ) ) {
				return [node, this.emptyText];
			}
		}
	};
	
	this.sublogoImages = {
		// картинки под логотипом, одну из них нужно показать
		c: SublogoImages,
		tag: "span",
		checkNode: function(node) {
			if ( dom.hasClass(node, "sublogo-images") ) {
				return node;
			}
		}
	};
	/*
	this.boxBottom = {
		c: function(node) {
			this.init = function() {
				dom.ie6Refresh();
			};
		},
		tag: "div",
		checkNode: function(node) {
			if ( dom.hasClass(node, "box-bottom") ) {
				return node;
			}
		}
	};*/
}

var elements = new SettignsElements();

function SimpleSearch(data) {
	var node = data[0];
	var emptyText = data[1];
	
	this.init = function() {
		node.onfocus = enter;
		node.onblur = exit;
	};
	
	function enter() {
		if (node.value==emptyText) node.value = "";
	}
	
	function exit() {
		if (/^\s*$/.test(node.value)) node.value = emptyText;
	}
}

function Vacancy(params) {
	var open = false;
	var interval = 10; // ms
	var speed = 15; // px
	var actualHeight;
	var hold;

	this.init = function() {
		dom.addListener(params.node, {click: toggle});
		
		var contentBox = dom.get(dom.precedingSiblings(params.parent), "div", "vacancy-box")[0];
		if (contentBox) {
			var header = dom.get(contentBox, "h2")[0];
			if (header) {
				dom.addListener(header, {click: toggle});
			}
		}
		/*var anc = params.node.getElementsByTagName("a");
		if (anc && anc[0]) {
			dom.addListener(anc[0], {
				click: function(evt) {
					window.location.href = this.href;
					dom.stopEvent(evt || window.event);
				} 
			});
		}*/
	};

	function toggle(evt) {
		if (hold) return;
		
		var evt = evt || window.event;
		var el = evt.originalTarget || evt.srcElement;
		if (el.tagName.toLowerCase()=="a") return;
		
		if (!open) {
			actualHeight = params.node.offsetHeight;
			params.parent.style.height = actualHeight +"px";
			dom.remClass(params.parent, params.closeClass);
			dom.addClass(params.parent, params.openClass);
		}
		
		dom.addClass(params.parent, params.activeClass);
		
		hold = window.setInterval(open ? remHeight : addHeight, interval);
		
	}
	
	function addHeight() {
		actualHeight += speed;
		params.parent.style.height = actualHeight +"px";
		if (params.parent.offsetHeight >= params.content.offsetHeight + params.node.offsetHeight) { 
			params.parent.style.height = actualHeight - (params.parent.offsetHeight - (params.content.offsetHeight + params.node.offsetHeight)) +"px";
			unHold();
		}
		if (dom.ie) dom.ie6Refresh();
	}
	
	function remHeight() {
		actualHeight -= speed;
		params.parent.style.height = actualHeight +"px";
		if (params.parent.offsetHeight <= params.node.offsetHeight) {
			dom.remClass(params.parent, params.openClass);
			dom.addClass(params.parent, params.closeClass);
			params.parent.style.height = params.node.offsetHeight +"px";
			unHold();
		}
		if (dom.ie) dom.ie6Refresh();
	}
	
	function unHold() {
		window.clearInterval(hold);
		hold = null;
		open = !open;
		dom.remClass(params.parent, params.activeClass);
	}
}

function SublogoImages(container) {
	var imgs = container.getElementsByTagName("img");
	
	this.init = function() {
		if (SublogoImages.inited) return;
		SublogoImages.inited = true;
		var l = imgs.length;
		var pos = Math.round( Math.random() * (l-1) );
		imgs[pos].style.display = "block";
		try {
			imgs[pos].width = imgs[pos].getAttribute("width")*1;
			imgs[pos].height = imgs[pos].getAttribute("height")*1;
			
		} catch(er) {}
	};
}
/* dom */

var dom = {
	ie: navigator.userAgent.indexOf("MSIE") > -1,
	opera: navigator.userAgent.indexOf("Opera") > -1,
	fox: navigator.userAgent.indexOf("Firefox") > -1,
	scrollSpeedInPage: .8,
	get: function(parent, tagName, className, attrHash) {
		// parent - родитель, или массивHTML-элементов или нодесет 
		// tagName - строка
		// className - строка или массив
		// attrHash - объект { name: value }
		var tags, ret;
		if (parent.length) {
			ret = dom.nodesetToArray(parent);
			for (var i=0, l=ret.length, r, ok; i<l; i++) {
				if ( (ret[i].tagName || "").toLowerCase() != tagName.toLowerCase() ) {
					ret.splice(i, 1);
					i--;
					l--;
				}
			}
		} else {
			ret = dom.nodesetToArray( parent.getElementsByTagName( tagName ) );
		}
		if (className) {
			for (var i=0, l=ret.length, r, ok; i<l; i++) {
				r = ret[i];
				ok = true;
				if (className.constructor == Array) {
					for (var i2=0, l2=className.length, c; ok, i2<l2; i2++) {
						c = className[i2];
						ok = true;
						if ( !dom.hasClass( r, c ) ) ok = false;
					}
				} else if (className) {
					if ( !dom.hasClass( r, className ) ) ok = false;
				}
				if (!ok) {
					ret.splice(i, 1);
					i--;
					l--;
				}
			}
		}
		if (attrHash) {
			for (var i=0, l=ret.length, r, ok; i<l; i++) {
				r = ret[i];
				ok = true;
				for (var attrName in attrHash) {
					if ( !dom.hasAttr(r, attrName, attrHash[attrName]) ) ok = false;
				}
				if (!ok) {
					ret.splice(i, 1);
					i--;
					l--;
				}
			}
		}
		return ret || [];
	},
	ancestors: function(node) {
		var ret = [];
		while(node = node.parentNode) ret.push(node);
		return ret;
	},
	precedingSiblings: function(node) {
		var ret = [];
		while(node = node.previousSibling) if (node.nodeType==1) ret.push(node);
		return dom.nodesetToArray(ret);
	},
	cr: function(tagName, className, inside, attrHash, propHash, listenersHash) {
		var ret = document.createElement( tagName );
		if (className) ret.className = className;
		if (inside) {
			if ( typeof(inside)=="string" ) {
				ret.innerHTML = inside;
			} else if (inside.constructor == Array) {
				for (var i=0, l=inside.length; i<l; i++) {
					if (inside[i].nodeType) ret.appendChild(inside[i]);
				}
			} else if (inside.nodeType) {
				ret.appendChild(inside);
			}
		}
		if (attrHash) {
			for (var name in attrHash) ret.setAttribute(name, attrHash[name]);
		}
		if (propHash) {
			for (var name in propHash) ret[name] = propHash[name];
		}
		if (listenersHash) {
			dom.addListener(ret, listenersHash);
		}
		return ret;
	},
	rem: function(node) {
		return node.parentNode.removeChild( node );
	},
	clear: function(node) {
		while(node.firstChild) node.removeChild(node.firstChild);
		return node;
	},
	text: function(node) {
		return String(node.textContent || node.innerText);
	},
	nodesetToArray: function(nodeset) {
		var ret = [];
		for (var i=0, l=nodeset.length, r, ok; i<l; i++) {
			ret[i] = nodeset[i];
		};
		return ret;
	},
	hasClass: function(node, need) {
		return (new RegExp("(^|\\s)"+ (need || "").toLowerCase().replace(/\-/g, "\\-") +"(\\s|$)")).test( (node.className || "").toLowerCase() );
	},
	hasAttr: function(node, name, need) {
		return (new RegExp("(^|\\s)"+ need +"(\\s|$)")).test( node.getAttribute(name) );
	},
	addClass: function(node, name) {
		if (!dom.hasClass(node, name)) node.className += " " + name;
		return node;
	},
	remClass: function(node, name) {
		node.className = node.className.replace( new RegExp("(^|\\s)"+ name +"(\\s|$)"), " ");
		return node;
	},
	style: function(node, styleName, toInt) {
		if ( !document.defaultView && styleName.indexOf("-")>-1) {
			styleName = styleName.replace(/-top/, "Top");
			styleName = styleName.replace(/-right/, "Right");
			styleName = styleName.replace(/-bottom/, "Bottom");
			styleName = styleName.replace(/-left/, "Left");
		}
		var ret = document.defaultView 
			? document.defaultView.getComputedStyle(node, null).getPropertyValue(styleName)
			: node.runtimeStyle[styleName] || node.currentStyle[styleName];
		if (toInt) ret = parseInt(ret);
		return ret;
	},
	xy: function(node) {
		var x = 0, y = 0;
		while(node.offsetParent) {
			x += node.offsetLeft;
			y += node.offsetTop;
			node = node.offsetParent;
		}
		return [x, y];
	},
	whStyle: function(node) {
		if (dom.opera) {
			ret = [ parseInt(dom.style(node, "width")), parseInt(dom.style(node, "height"))];
			ret[0] -= dom.style(node, "border-left", 1) + dom.style(node, "padding-left", 1) + dom.style(node, "padding-right", 1) + dom.style(node, "border-right", 1);
			ret[1] -= dom.style(node, "border-top", 1) + dom.style(node, "padding-top", 1) + dom.style(node, "padding-bottom", 1) + dom.style(node, "border-bottom", 1);
			return ret;
		} else {
			return [ parseInt(dom.style(node, "width")), parseInt(dom.style(node, "height"))];
		}
	},
	addListener: function(node, listeners) {
		if (node==="body") node = document.getElementsByTagName("body")[0];
		if (node.addEventListener) {
			for (var name in listeners) {
				node.addEventListener(name, listeners[name], false);
			}
		} else {
			for (var name in listeners) {
				node.attachEvent("on"+ name, listeners[name]);
			}
		}
	},
	remListener: function(node, listeners) {
		if (node==="body") node = document.getElementsByTagName("body")[0];
		if (node.addEventListener) {
			for (var name in listeners) {
				try {
					node.removeEventListener(name, listeners[name], false);
				} catch(er) { ; }
			}
		} else {
			for (var name in listeners) {
				try {
					node.detachEvent("on"+ name, listeners[name]);
				} catch(er) { ; }
			}
		}
	},
	stopEvent: function(evt) {
		var evt = evt || window.event;
		if (evt.stopPropogandation) evt.stopPropogandation();
		if (evt.preventDefault) evt.preventDefault();
		evt.returnValue = false;
		evt.cancelBubble = true;
		return false;
	},
	ie6Refresh: function() {
		/*
		var body = document.getElementsByTagName("body")[0];
		body.style.paddingBottom = "1px";
		body.style.paddingBottom = "0px";
		*/
		var footer = document.getElementById("footer");
		footer.style.borderRight = "1px solid #535353";
		footer.style.borderRight = "none";
	}
}

/* / dom */



/* defer */

if ( navigator.userAgent.indexOf("MSIE") > -1 ) {
	onDOMContentLoaded();
} else if (document.readyState) {
	var _timer = window.setInterval(function() {
		if (/loaded|complete/.test(document.readyState)) {
			clearInterval(_timer);
			delete _timer;
			onDOMContentLoaded();
		}
	}, 10);
} if (window.addEventListener) {
    window.addEventListener('DOMContentLoaded', onDOMContentLoaded, false);
} else {
	onDOMContentLoaded();
}

function onDOMContentLoaded(root) {
	// верстка загружена
	var ret = {}, count = 0;
	var nodes = (root && root.getElementsByTagName ? root : document).getElementsByTagName("*");
	
	// создаем элементы
	for (var name in elements) {
		element = elements[name];
		ret[name] = [];
		for (var i=0, l=nodes.length, node, tagName, element, check; i<l; i++) {
			node = nodes[i];
			tagName = node.tagName.toLowerCase();
			if (element.tag == tagName) {
				check = element.checkNode.call(element, node);
				if (check) {
					ret[name].push( new element.c(check) );
				}
			}
		}
		if ( !ret[name].length ) delete ret[name];
	}
	
	// запускаем .init на каждом элементе
	for (var name in ret) {
		for (var i=0, l=ret[name].length; i<l; i++) {
			try {
				ret[name][i].init();
			} catch(er) { ; }
		}
	}
	dom.ie6Refresh();
	if (typeof CreatePoints == "function" ) CreatePoints();
}

/* / defer */



/* BG cache */

try{ if (typeof(document.execCommand && !window.XMLHttpRequest)!="undefined") document.execCommand("BackgroundImageCache", false, true) }
catch(er) { }

/* / BG cache */