// scripts.js : Saitistika Script Library

// Вспомогательные функции
// ------------------------------------------------------------------
function getElement(id) {
	if (document.all) {
		return document.all[id];
	} else if (document.getElementById) {
		return document.getElementById(id);
	} else return null;
}
function cb_s_other(s,dn) {
	if (!s.options) return;
	var v = '', d = getElement(dn);
	if (!d) return;
	for (i = 0; i < s.options.length; i++) {
		if (s.options[i].selected) v = s.options[i].value;
	}
	d.style.display = v==''?'':'none';
}

// Скрытие и отображение SELECT-ов
// ------------------------------------------------------------------
function checkBrowserSelectModel() {
	if (!navigator || !navigator.appVersion) return false;
	var vs = navigator.appVersion.toString();
	var r = vs.match(/MSIE (\d)+/i);
	if (!r) return false;
	var iever = parseInt(r[1]);
	return iever < 7;
}

function hideSelects() {
	if (!document.all || !checkBrowserSelectModel()) return;
	var ss = document.all.tags("select");
	for (var i = 0; i < ss.length; i++) {
		if (ss[i].style.visibility != 'hidden') {
			if (ss[i].__shide_adjacent)
				ss[i].__shide_adjacent.outerHTML = '';
			var s_value = '&nbsp;';
			if (ss[i].options && ss[i].selectedIndex >= 0) {
				s_value = ss[i].options[ss[i].selectedIndex].text;
			}
			var a_left = 0, a_top = 0;
			for (var p = ss[i]; p != null; p = p.offsetParent) {
				a_left += p.offsetLeft;
				a_top += p.offsetTop;
			}
			var a_width = ss[i].offsetWidth, a_height = ss[i].offsetHeight;
			ss[i].insertAdjacentHTML('AfterEnd',
				'<span id="__shide_adjacent_' + i + '"' +
				' class="shide-adjacent"' +
				' style="position:absolute; left:' + a_left + '; top:' + a_top + ';' +
				' width:' + a_width + '; height:' + a_height + ';' +
				' padding-left: 4; padding-top: 2">' + s_value + '<\/span>');
			ss[i].__shide_adjacent = document.all['__shide_adjacent_' + i];
			ss[i].__shide_visibility = ss[i].style.visibility;
			ss[i].__shide_hidden = true;
			ss[i].style.visibility = 'hidden';
		}
	}
}
function showSelects() {
	if (!document.all || !checkBrowserSelectModel()) return;
	var ss = document.all.tags("select");
	for (var i = 0; i < ss.length; i++) {
		if (ss[i].__shide_hidden) {
			ss[i].style.visibility = ss[i].__shide_visibility;
			if (ss[i].__shide_adjacent) {
				ss[i].__shide_adjacent.outerHTML = '';
				ss[i].__shide_adjacent = null;
			}
		}
	}
}

// Функции, которые используются в визуальном редакторе для
// формирования всплывающих ссылок.
// ------------------------------------------------------------------
function popupUrl(name, url, l, t, w, h, scroll, resizable, toolbar, menu, status) {
	if (!l && w) {
		l = parseInt((screen.availWidth - w) / 2);
	}
	if (!t && h) {
		t = parseInt((screen.availHeight - h) / 2);
	}
	var wnd = window.open(url, name, 'left=' + l + ',top=' + t + ',width=' + w + ',height=' + h + ',scrollbars=' + scroll + ',resizable=' + resizable + ',toolbar='+toolbar + ',menubar=' + menu + ',status=' + status);
	if (wnd != null) wnd.focus();
}
function popup(type, param, l, t, w, h) {
	popupUrl('popup', '/themes/default/popup.asp?type=' + type + '&param=' + param, l, t, w, h);
}
function popupEx(type, param, l, t, w, h, scroll, resizable, toolbar, menu, status) {
	popupUrl('popup', '/themes/default/popup.asp?type=' + type + '&param=' + param, l, t, w, h, scroll, resizable, toolbar, menu, status);
}

// Функции для работы с формами
// ------------------------------------------------------------------

var forms_dynamics_field_rels = [];
var forms_dynamics_field_ref_rels = [];

function forms_dynamics_field_rel(ref_field, field, op, value) {
	this.ref_field = ref_field;
	this.field = field;
	this.op    = op;
	this.value = value;
	
	this.checkVisible = function(values) {
		if (this.checkOp(values, this.value)) {
			return true;
		}
		return false;
	}
	
	this.checkOp = function(values, value) {
		switch (this.op) {
			case 'i' :
				return this._includes(values, value);
			case 'x' :
				return this._excludes(values, value);
			default  :
				return false;
		}
	}
	
	this._includes = function(values, value) {
		if (values.length) {
			for (var i = 0; i < values.length; i++) {
				if (values[i] == value)
					return true;
			}
			return false;
		} else {
			return values == value;
		}
	}
	
	this._excludes = function(values, value) {
		if (values.length) {
			for (var i = 0; i < values.length; i++) {
				if (values[i] == value)
					return false;
			}
			return true;
		} else {
			return values != value;
		}
	}
}

function forms_dynamics_field_update(field, values) {
	var rel_i, v = false;
	for (rel_i in forms_dynamics_field_rels[field.id]) {
		rel = forms_dynamics_field_rels[field.id][rel_i];
		if (rel.checkVisible(values)) {
			v = true; break;
		}
	}
	field.style.display = v ? '' : 'none';
}

function forms_dynamics_field_ref_update_el(el) {
	var rel_i, rel;
	for (rel_i in forms_dynamics_field_ref_rels[el.name]) {
		rel = forms_dynamics_field_ref_rels[el.name][rel_i];
		forms_dynamics_field_update(rel.field, forms_dynamics_get_values(el));
	}
}

function forms_dynamics_field_ref_update() {
	return forms_dynamics_field_ref_update_el(this);
}

function forms_dynamics_attach_field(form_name,field_name,ref_field_name,op,value) {
	var form = document.forms[form_name];
	if (!form) return;
	var field = getElement(field_name);
	if (!field) return;
	var ref_field = form.elements[ref_field_name];
	if (!ref_field) return;
	var newRel = new forms_dynamics_field_rel(ref_field, field, op, value);
	if (!forms_dynamics_field_rels[field.id]) {
		forms_dynamics_field_rels[field.id] = [newRel];
	} else {
		forms_dynamics_field_rels[field.id].push(newRel);
	}
	if (!forms_dynamics_field_ref_rels[ref_field_name]) {
		forms_dynamics_field_ref_rels[ref_field_name] = [newRel];
	} else {
		forms_dynamics_field_ref_rels[ref_field_name].push(newRel);
	}
	forms_dynamics_attach_event(ref_field);
}

function forms_dynamics_attach_event(field) {
	if (!field.tagName && field.length) {
		for (var i = 0; i < field.length; i++) {
			forms_dynamics_attach_event(field[i]);
		}
	} else if (field.tagName == 'INPUT' && (field.type == 'checkbox' || field.type == 'radio')) {
		field.onclick = forms_dynamics_field_ref_update;
	} else {
		field.onchange = forms_dynamics_field_ref_update;
		if (field.type == 'text' || field.tagName == 'TEXTAREA') {
			field.onkeyup = forms_dynamics_field_ref_update;
		}
	}
}

function forms_dynamics_get_values(field) {
	if (field.tagName.toUpperCase() == 'INPUT' &&
		field.type && field.type.toUpperCase() == 'CHECKBOX' &&
		field.form) {
		var fs = field.form.elements[field.name], v_i = 0, v = [];
		if (fs.length) {
			for (var i = 0; i < fs.length; i++) {
				if (fs[i].checked)
					v[v_i++] = fs[i].value;
			}
		} else {
			v[0] = fs.checked ? fs.value : null;
		}
		return v;
	} else {
		return [field.value];
	}
}

function __form__defaultFocus(e) {
	var fe = null;
	if (e) {
		fe = e.target;
	} else if (event) {
		fe = event.srcElement;
	}
	if (!fe) return;
	if (fe.__isDefaultValue)
		fe.value = '';
}

function __form__defaultBlur(e) {
	var fe = null;
	if (e) {
		fe = e.target;
	} else if (event) {
		fe = event.srcElement;
	}
	if (!fe) return;
	if (fe.value == '') {
		fe.value = fe.__defaultValue;
		fe.__isDefaultValue = true;
	} else {
		fe.__isDefaultValue = false;
	}
}

function __form__attachDefault(f,d) {
	var fe = null;
	if (document.getElementById) {
		fe = document.getElementById(f);
	} else if (document.all) {
		fe = document.all[f];
	}
	if (!fe) return;
	fe.__defaultValue = d;
	if (fe.value == '') {
		fe.value = d;
		fe.__isDefaultValue = true;
	} else {
		fe.__isDefaultValue = false;
	}
	fe.onfocus = __form__defaultFocus;
	fe.onblur = __form__defaultBlur;
}

// FLASH-баннер
// ------------------------------------------------------------------
function br_create_flash(src, element_id, style) {
	document.writeln('<object id="' + element_id + '" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" style="' + style + '"');
	document.writeln(' codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0">');
	document.writeln('<param name="movie" value="' + src + '"/>');
	document.writeln('<param name="wmode" value="transparent"/>');
	document.writeln('<param name="quality" value="high"/>');
	document.writeln('<param name="bgcolor" value="#CCCCCC"/>');
	document.writeln('<param name="menu" value="0"/>');
	document.writeln('<embed id="' + element_id + '" src="' + src + '" quality="high" style="' + style + '"');
	document.writeln(' bgcolor="#CCCCCC" type="application/x-shockwave-flash"');
	document.writeln(' wmode="transparent"');
	document.writeln(' pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash">');
	document.writeln('</object>');
	
	if (navigator.appName && navigator.appName.indexOf("Microsoft") != -1 && navigator.userAgent.indexOf("Windows") != -1 && navigator.userAgent.indexOf("Windows 3.1") == -1) {
		document.writeln('<script language=\"VBScript\"\>');
		document.writeln('On Error Resume Next');
		document.writeln('Sub ' + element_id + '_FSCommand(ByVal command, ByVal args)');
		document.writeln('	SplashHideByFlashID "' + element_id + '"');
		document.writeln('End Sub');
		document.writeln('</script\>');
	}
}

// SPLASH-баннер
// ------------------------------------------------------------------
function __splash_left(s) {
	return( parseInt((document.body.clientWidth - s.clientWidth) / 2) + document.body.scrollLeft );
}

function __splash_top(s) {
	return( parseInt((document.body.clientHeight - s.clientHeight) / 2) + document.body.scrollTop );
}

function __splash_init(id) {
	var s = null, e = null;
	
	if (document.getElementById) {
		s = document.getElementById('splash_' + id);
		e = document.getElementById('splash_element_' + id);
	} else if (document.all) {
		s = document.all['splash_' + id];
		e = document.all['splash_element_' + id];
	}
	
	if (!s) return;
	
	var hs = null;
	
	var cookies = document.cookie.split(/;\s*/);
	for (var i = 0; i < cookies.length; i++) {
		var nv = cookies[i].split(/=/);
		if (nv.length == 2) {
			var n = unescape(nv[0]);
			var v = unescape(nv[1]);
			
			if (n == 'splash' && v == 'no')
				return;
		}
	}
	
	if (document.getElementById) {
		hs = document.getElementById('splash_hide_' + id);
	} else if (document.all) {
		hs = document.all['splash_hide_' + id];
	}
	
	s.__splash_apply = function() {
		try {
			if (!s.filters) return;
		} catch (e) { return; }
		var f = s.filters['blendTrans'];
		if (f) {
			f.apply();
		}
	}
	
	s.__splash_play = function() {
		try {
			if (!s.filters) return;
		} catch (e) { return; }
		var f = s.filters['blendTrans'];
		if (f) {
			f.play();
		}
	}
	
	s.__splash_update = function() {
		s.style.left = __splash_left(s) + 'px';
		s.style.top = __splash_top(s) + 'px';
	}
	
	s.__splash_show = function() {
		s.__splash_apply();
		s.style.left = '-5000px';
		s.style.top = '-5000px';
		s.style.display = 'block';
		s.style.visibility = 'visible';
		s.__splash_update();
		s.__splash_play();
	}
	
	s.__splash_hide = function() {
		s.__splash_apply();
		s.style.visibility = 'hidden';
		s.__splash_play();
	}
	
	s.__splash_show();
	document.cookie = 'splash=no';

	var s_wr = window.onresize;
	var s_ws = window.onscroll;
	
	window.onresize = function() {
		if (s_wr) s_wr();
		s.__splash_update();
	}
	window.onscroll = function() {
		if (s_ws) s_ws();
		s.__splash_update();
	}
	
	if (hs && (!e || e.tagName == 'IMG')) setTimeout(function() { hs.style.display = 'block'; }, 5000);
}

function SplashHideByFlashID(id) {
	var e_id = id.toString().replace(/^.*?(\d+)$/, '$1');
	__splash_hide(e_id);
}

function __splash_hide(id) {
	var s = null;
	
	if (document.getElementById) {
		s = document.getElementById('splash_' + id);
	} else if (document.all) {
		s = document.all['splash_' + id];
	}
	
	if (!s) return;

	if (s.__splash_hide) {
		s.__splash_hide();
	}
}

var nav_layered__open = null;

function nav_layered_show(id, force) {
	if (!force) return;		// <-- disable onhover behavior
	//if (force) return;			// <-- disable onclick behavior
	
	if (nav_layered__open) {
		if (force)
			nav_layered_hide();
		else return;
	}
	
	var layer = null;
	
	if (document.getElementById) {
		layer = document.getElementById(id);
	} else if (document.all) {
		layer = document.all[id];
	}

	if (!layer) return;

	var filter = null;
	try {
        filter = layer.filters['DXImageTransform.Microsoft.Fade'];
	} catch (ex) { }

	if (filter) {
	    filter.apply();
	    layer.style.backgroundColor = '#FFFFFF';
	}
	layer.style.visibility = 'visible';
	if (filter) {
	    filter.play(0.4);
	    if (layer.__tmt) clearTimeout(layer.__tmt);
	    layer.__tmt = setTimeout(function() { layer.style.backgroundColor = 'transparent'; }, 500);
	}
	nav_layered__open = layer;
}

function nav_layered_hide() {
	if (!nav_layered__open) return;
	var layer = nav_layered__open;

	var filter = null;
	try {
	    filter = layer.filters['DXImageTransform.Microsoft.Fade'];
	} catch (ex) { }

	if (filter) {
	    if (layer.__tmt) {
	        clearTimeout(layer.__tmt);
	        layer.__tmt = null;
	    }
	    layer.style.backgroundColor = '#FFFFFF';
	    filter.apply();
	}
	layer.style.visibility = 'hidden';
	if (filter) {
	    filter.play();
	}
	nav_layered__open = null;
}
