/////////////////////////////////////////////////////////////////////
//author:		Victor Sumkin
//e-mail:		reactorx@gmail.com
//icq #:		307207864
//company:	Hi-tech center
//web:			http://www.hi-techcenter.info
/////////////////////////////////////////////////////////////////////

//alert(document.compatMode);

var index_file = '/index.php';

function appendData(data_str, parent_node, mode) {
	//заводим уникальный идентефикатор для меток
	var milisec = new Date;
	milisec = milisec.getTime();

	//regExp выгребаем все конструкции script
	var js_reg = /<script.*?>(.|[\r\n])*?<\/script>/ig;

	var js_str = js_reg.exec(data_str);

	if (js_str != null) {
		//Флаг о присутствии js кода
		var js_exists_flag = true;
		var js_arr = new Array(js_str.shift());

		while(js_str) {
			js_str = js_reg.exec(data_str);
			if (js_str != null) js_arr.push(js_str.shift());
		}

		//раставляем метки вместо конструкций script
		for(var i=0; i<js_arr.length;i++) {
			data_str = data_str.replace(js_arr[i],'<span id="'+milisec+i+'" style="display:none;"></span>');
		}

	} else {
		var js_exists_flag = false;
	}

	//alert(parent_node.innerHTML);
	//вставляем получившийся текст
	if( mode == "rewrite" ) {
//		alert(data_str);
		parent_node.innerHTML = data_str;
	} else if ( mode == "append" ) {
		parent_node.innerHTML += data_str;
	}

	//если js код присутствует контент
	if (js_exists_flag) {
		//выражение для выгребания контента между тегами script
		var js_content_reg = /<script.*?>((.|[\r\n])*?)<\/script>/ig;
		//заменяем метки на javascript
		for (i = 0; i < js_arr.length; i++) {
			var mark_node = document.getElementById(milisec+''+i);
			var mark_parent_node = mark_node.parentNode;
			mark_parent_node.removeChild(mark_node);

			//выгребаем содержимое между тегами script
			js_content_reg.lastIndex = 0;
			var js_content = js_content_reg.exec(js_arr[i]);

			//очищаем от CDATA
			//js_content[1] = js_content[1].replace('<![CDATA[','');
			//js_content[1] = js_content[1].replace(']]>','');

			var script_node = mark_parent_node.appendChild(document.createElement('script'));
			//script_node.appendChild(document.createTextNode(js_content[1]));
			script_node.text = js_content[1];

			//Получаем имя параметра и его значение
			var script_params_str = js_arr[i].substring(js_arr[i].indexOf(' ',0),js_arr[i].indexOf('>',0));
			var params_arr = script_params_str.split(' ');

			//Флаг наличия src
			var src_flag = false;

			for (var j=0;j< params_arr.length; j++ )	{

				if(params_arr[j].length > 0){
					var param_arr = params_arr[j].split('=');
					param_arr[1] = param_arr[1].substr(1,(param_arr[1].length-2));
					script_node.setAttribute(param_arr[0],param_arr[1]);
					if (param_arr[0].toLowerCase() == 'src') {
						src_flag = true;
					}
				}

			}

			if(src_flag == false){
				script_node.setAttribute('src','http://');
			}
		}
	}

	loading_hide();
}



function loading_create() {
	load_node = document.body.appendChild(document.createElement('div'));
	load_node.setAttribute('id','loading');

	load_img_node = load_node.appendChild(document.createElement('img'));
	load_img_node.setAttribute('src','/img/system/loading/loading-6.gif');

	loading_hide();

}

function loading_show(){
	document.getElementById('loading').style.visibility = 'visible';
}

function loading_hide(){
	document.getElementById('loading').style.visibility = 'hidden';
}



function request_a(e) {
//+/Проверяем нажатие правой кнопки
	if(e && e.which == 3) { //FF
		return true;
	}
//+/Проверяем нажатие правой кнопки

	e=(typeof event!=='undefined')? event.srcElement : e.target

	while(e.nodeName.toLowerCase() != 'a') {
		if(e.nodeName.toLowerCase() == 'body') {return true;}
		if(e.nodeName.toLowerCase() == 'html') {return true;}

		e = e.parentNode;
	}

	if (e.getAttribute('onclick')) return false;//вываливаемся, по ходу там навешен js

	if (e.hostname != window.location.hostname) return true; //ссылка ведет на другой сайт
	if (e.pathname.indexOf('/method/standart/') != -1) return true; //стандартный метод
	if (e.pathname.indexOf('.') != -1) return true; //Пытаемся слить какой то реально расположенный на сервере файл

	// Do not process local anchors

	if ( e.hash.length > 0 ) return true;

	//content = e.pathname;
	var path = e.pathname;

	if(path){

		loading_show();
		JsHttpRequest.query(	index_file,
													{url: path},
													function (data, err) {
														if (!data) {
															loading_hide();
															return true;
														}
														for(var i = 0; i < data.length; i++) {
															//alert(data[i].content);

															if(data[i].template == '404') { alert('doc 404 url is ');}
															var node = eval("document.getElementById('"+data[i].template+"')");
															//alert(node.nodeName);
															//var node = document.getElementById( data[i].template );
															appendData(data[i].content, node, data[i].mode);
														}
													},
													true
		);

		return false;
	}

	return true; //Не ajax zапрос
}

function request_submit(e) {
	e=(typeof event!=='undefined')? event.srcElement : e.target
	//Доделать поиск формы
	if (e.getAttribute('onclick')) return false;//вываливаемся, по ходу там навешен js

	while(e.nodeName.toLowerCase() != 'form') {
		if(e.nodeName.toLowerCase() == 'body') {return true;}
		e = e.parentNode;
	}

//	alert(e.getAttribute('onclick'));
//	if (e.getAttribute('onclick')) return true;//вываливаемся, по ходу там навешен js

	var content = e;
	if(content){

		loading_show();
		JsHttpRequest.query(	index_file,
													{url: content},
													function (data, err) {
														for(var i = 0; i < data.length; i++) {
//															alert(data[i].content);

															if(data[i].template == '404') { alert('doc 404 url is ');}
															var node = eval("document.getElementById('"+data[i].template+"')");
															//alert( data[i].template );
															//var node = document.getElementById( data[i].template );
															appendData(data[i].content, node, data[i].mode);
														}
													},
													true
		);

		return false;
	}

	return true;
}

//document.onload = loading_create;

document.onsubmit = request_submit;
if (document.captureEvents) document.captureEvents(Event);

document.onclick = request_a;
if (document.captureEvents) document.captureEvents(Event);


function hand_request(url) { //Запрос в ручную

	loading_show();
	JsHttpRequest.query(	index_file,
												{url: url},
												function (data, err) {
													for(var i = 0; i < data.length; i++) {
														if(data[i].template == '404') { alert('doc 404 url is ');}
														var node = eval("document.getElementById('"+data[i].template+"')");
														appendData(data[i].content, node, data[i].mode);
													}
												},
												true
	);


}