var bView;
var flashView;
var curFlash = new Array();

/* Функция возращает размеры HTML элемента
 	параметры:
 		elem_name - Элемент или ID элемента
 	возвращает:
 		Объект left,top,width,height
 */
function globalBounds(elem_name) {   
	var elem = elem_name;
	if (typeof(elem_name) == 'string')
		elem = document.getElementById(elem_name);
		
	if (elem) {
		var res = new Object();
		if (elem.getBoundingClientRect) {
			var bounds 	= elem.getBoundingClientRect();
			res.left 	= bounds.left;
			res.top 	= bounds.top + document.body.scrollTop;
			res.width 	= bounds.right - bounds.left; 
			res.height 	= bounds.bottom - bounds.top; 
		} else {
			res.left	= 0;
			res.top		= 0;
			res.width	= elem.offsetWidth; 
			res.height	= elem.offsetHeight; 
			var parent	= elem;
			while (parent != null) {
				res.left += parent.offsetLeft; 
				res.top += parent.offsetTop; 
				parent = parent.offsetParent;
			}
		}
		return res;
	}	
	return null;
}

//Возвращает структуру {width,height}, размеры клиента, окна браузера
function screenSize() {
	return {width:(window.innerWidth ? window.innerWidth : (document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.offsetWidth)), 
  		  height:(window.innerHeight ? window.innerHeight : (document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.offsetHeight))};
}

function headHTML(postID, isFlash) {
	if (isFlash) {
		var class1 = 'flashTab1';
		var class2 = 'flashTab2';
	} else {
		var class1 = 'flashTab2';
		var class2 = 'flashTab1';
	}
	return '<a href="" class="' + class1 + '" onclick="showFlash(' + postID + '); return false;">Просмотр</a>' + 
			'<a href="" class="' + class2 + '" onclick="send(' + postID + '); return false;">Обсуждение</a>' +
			'<div style="height:20px"><a href="" onclick="hiddeFlash(); return false;" class="closeButton"></a></div>';
}

function showFlash(postID, flashPath, basePath, width, height) {
	if (flashPath) curFlash.flashPath = flashPath;
	else flashPath = curFlash.flashPath;
	if (basePath) curFlash.basePath = basePath;
	else basePath = curFlash.basePath;
	if (width) curFlash.width = width;
	else width = curFlash.width;
	if (height) curFlash.height = height;
	else height = curFlash.height;
	
	if (!bView) {
		bView 		= createDiv('backView');
		flashView 	= createDiv('flashView');
		flashView.id = 'flashView';
	} else {
		bView.style.display 	= 'block';
		flashView.style.display = 'block';
	}
	
	if (!height) {
		if (width) height = Math.round(width * 0.75);
		else height = 540; 
	}
	if (!width) width = 800; 
	flashView.innerHTML = headHTML(postID, true);
	flashView.innerHTML += '<div><embed src="' + flashPath + '"' + 
			'quality="high"' + 
			'bgcolor="#FFFFFF"' + 
			'width="' + width + '" height="' + height + '"' + 
			'name="fl_user"' +  
			'base="' + basePath + '"' +
			'align="middle"' +  
			'allowScriptAccess="sameDomain"' + 
			'type="application/x-shockwave-flash"' + 
			'pluginspage="http://www.macromedia.com/go/getflashplayer"/></div>';
/*	var content = document.getElementById('fc' + postID);
	if (content) {
		flashView.innerHTML += '<div style="width:' + width + 'px">' + content.innerHTML + '</div>';
	}*/
	width += 10;
	height += 30;
	var rect = globalBounds('MainBody');
	bView.style.height = rect.height + 'px';

	flashView.style.left = (screenSize().width  - width) / 2 + 'px';
	flashView.style.top  = (document.body.scrollTop + screenSize().height - height) / 2 + 'px';
}

function hiddeFlash() {
	bView.style.display 	= 'none';
	flashView.style.display = 'none';
	flashView.innerHTML 	= '';
}

function createDiv(className) {
	var _ret = document.createElement('DIV');
	_ret.className = className;
	document.body.appendChild(_ret);
	return _ret;
}

// Callback функция, обрабатывает ответ от сервера
// Параметры:
//		link - адрес от которого пришел ответ
//		target - имя, слой куда следует поместить ответ от сервера
//		htmlText - содержимое ответа
function receiveData(postID, htmlText) {
	flashView.innerHTML = headHTML(postID) + htmlText;
}

/*
	Преобразует элементы ввода, формы в строку, для передачи в запрос
	а так же проверяет заполняемость 	
 */
function pack_form(form) {
	var post='';
	
	for (var i = 0; i < form.elements.length; i++) {
		if (post) post += '&';
		if ((form.elements[i].type == 'checkbox') && !form.elements[i].checked) continue; 
		if ((form.elements[i].type == 'radio') && !form.elements[i].checked) continue; 
		if (form.elements[i].nodeName == 'SELECT') {
			var select = form.elements[i];
			if (select.selectedIndex > -1) {
				post += select.name + '=' + select.options[select.selectedIndex].value;
				continue;
			}
		} else if (form.elements[i].type == 'radio') {
			post += form.elements[i].name + '=' + form.elements[i].value;
			continue;
		} else if ((form.elements[i].type != 'hidden')) {
			if (form.elements[i].name=='text' && form.elements[i].value=='') {
				handleError('Вы забыли ввести текст.');
				return false;
			} else if (form.elements[i].name=='date_contact' && form.elements[i].value=='') {
				handleError('Вы забыли ввести дату.');
				return false;
			} else if (form.elements[i].value=='') {
				handleError('Вы забыли ввести данные в поле: ' + form.elements[i].name);
				return false;
			}
		}	
		post += form.elements[i].name + '='+encodeURIComponent(form.elements[i].value);
	}
	return post;
}


// 	Отправляет запрос на сервер по адресу link, полученный ответ помещает в слой target
//	Параметры:
// 		link		- строка, адрес запроса
//		target		- имя или HTML элемент куда следует поместить ответ
//		form		- если отправляется POST-ом тогда form это имя или HTML элемент типа FORM
//		receiveFunc	- Callback функция, обработчик результата запроса, если не задана, 
//					тогда вызывается стандартная функ. receiveData
function send(postID, form) {
	var req		= getXmlHttp();
	var params 	= '';
	if (form) {
		if (typeof(form) == 'string') 
			form = document.getElementById(form);
		if (!form) return false;
		params = pack_form(form);
		if (!params) return false;
		method = 'POST'; 
	} else method = 'GET';
	
	req.open(method, '?p=' + postID + '&post_only=1', true);
	req.setRequestHeader('AJAX', 1);
	req.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

	var timeout=setTimeout( function() { req.abort(); /*handleError("Time over") */}, 10000);
	req.onreadystatechange=function() { 
		if (req.readyState==4) {
			clearTimeout(timeout);
			if (req.status==404) {
				handleError('Страница не найденна, статус: '+req.statusText);
			} else if (req.status==12029) {
				handleError('Невозможно подключение, статус: '+req.statusText);
			} else if (req.status==200) {
				receiveData(postID, req.responseText);
				clearTimeout(timeout);	
			}
		}
	}
	req.send(params);
	return true;
}

function getXmlHttp(){
	var xmlhttp;
	try {
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
		try {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (E) {
			xmlhttp = false;
		}
	}
	if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
		xmlhttp = new XMLHttpRequest();
	 }
	return xmlhttp;
}


