document.domain='argi.ru';


/* errors */

Err = function (err) {
	if (typeof(err)=='object' && err.constructor == Error) {
		throw err;
	} else {
		Err(new Error(err));
	}
}
window.Err = Err;


/* http requests */

if (typeof XMLHttpRequest === 'undefined') {
	XMLHttpRequest = function() {
		try { return new ActiveXObject("Msxml2.XMLHTTP.6.0"); }
		catch(e) {}
		try { return new ActiveXObject("Msxml2.XMLHTTP.3.0"); }
		catch(e) {}
		try { return new ActiveXObject("Msxml2.XMLHTTP"); }
		catch(e) {}
		try { return new ActiveXObject("Microsoft.XMLHTTP"); }
		catch(e) {}
		return Err("This browser does not support XMLHttpRequest.");
	};
}

/* modules */

function head() {
	if (!head.element) head.element = document.getElementsByTagName('head')[0];
	return head.element;
}

mod = {}
window.mod = mod;

function use(module) {
	if (window.mod[module]) return window.mod[module];
	
	var module_file = '/js/'+module+'.js';
	window.mod[module] = {filename:module_file};
	
	var req = new XMLHttpRequest();
	req.open('GET', module_file, false);
	req.setRequestHeader("Accept", 'text/javascript');
	req.send(null);
	
	window.mod.last = window.mod[module];
	
	var script = document.createElement('script');
	script.setAttribute('language','javascript');
	script.appendChild(document.createTextNode(req.responseText));
	head().appendChild(script);
	
	return window.mod[module];
}

function uses(modules, after_each_proc) {
	for(var i=0; i<modules.length; i++) {
		use(modules[i]);
		if (after_each_proc) after_each_proc(i + 1, modules.length, window.mod[modules[i]]);
	}
}

function css(name) {
	var file = '/css/'+name+'.css';
	var new_ln = document.createElement('link');
	new_ln.href = file;
	var file_url = new String(new_ln.href);
	var ln = document.getElementsByTagName('link');
	for(var i=0; i<ln.length; i++)
		if (ln[i].href == file_url)
			return ln[i];
	new_ln.script.setAttribute('rel', 'stylesheet');
	new_ln.script.setAttribute('type', 'text/css');
	head().appendChild(new_ln);
}

/* events */

function add_handler(object, event, handler, context) {
	if (context == undefined) {context=object;}
	var self_handler=function (e) {return handler.apply(context, [e||window.event]);};
	if (typeof object.addEventListener != 'undefined')
		object.addEventListener(event, self_handler, false);
	else if (typeof object.attachEvent != 'undefined')
		object.attachEvent('on' + event, self_handler);
	else
		return Err('add_handler failed.');
	return handler;
}

Object.prototype.on = function (event, handler, context) {add_handler(this, event, handler, context)}
	
function handled (event, cancelBubble) {
	if (typeof event.preventDefault != 'undefined') event.preventDefault();
	if (typeof event.returnValue != 'undefined') event.returnValue = false;
	if (cancelBubble) {
		if (event) event.cancelBubble=true;
		else window.event.cancelBubble=true;
	}
	return false;		
}


/* web-pages helper */

window.on('load', function(e) {
	var xpage = document.body.getAttribute('xpage');
	if (xpage) {
		var div = document.createElement('div');
		div.innerHTML = use(xpage).content;
		var cnt = document.body.firstChild;
		for(var i=0; i<div.childNodes.length; i++) {
			cnt.parentNode.insertBefore(div.childNodes[i], cnt);
		}
		document.getElementById('xpage_contents').appendChild(cnt);
	}
})








