var agent=navigator.userAgent.toLowerCase();
var ver=navigator.appVersion;
var isOPERA=agent.indexOf("opera")>-1 && window.opera;
var isIE4 = (agent.indexOf("msie")>-1 && !isOPERA);
var isNN4=(agent.indexOf("gecko")>-1 || window.sidebar);

function getXML(query, func){
	if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
        req.onreadystatechange = func;
        req.open("GET", query, true);
        req.send(null);
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
        if (req) {
            req.onreadystatechange = func;
            req.open("GET", query, true);
            req.send();
        }
    } else {
		alert('Your browser dousn`t support AJAX');
	}
}

function XMLtoArray(response, ar){
	if(!response) return;
	if(!response.childNodes) return;
	
	var count = response.childNodes.length;
	for (var i=0; i<count; i++){
		var name = response.childNodes.item(i).nodeName;
		if (response.childNodes.item(i).childNodes.item(0)){
			var type = response.childNodes.item(i).childNodes.item(0).nodeType;
		} else {type = 2;}
		
		if (type == 1){
			ar[name] = new Array();
			XMLtoArray(response.childNodes.item(i), ar[name]);
		} else if (type == 3) {
			ar[name] = response.childNodes.item(i).childNodes.item(0).nodeValue;
		} else {
			ar[name] = '';
		}
	}
}

var xsl_url;
var object;
function AjaxPOST(xml_url, xsl_url, object, parameters) {
      http_request = false;
      if (window.XMLHttpRequest) { // Mozilla, Safari,...
         http_request = new XMLHttpRequest();
         /*if (http_request.overrideMimeType) {
            http_request.overrideMimeType('text/html');
         }*/
      } else if (window.ActiveXObject) { // IE
         try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
         } catch (e) {
            try {
               http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
         }
      }
      if (!http_request) {
         alert('Cannot create XMLHTTP instance');
         return false;
      }
	  
	  this.xsl_url = xsl_url;
	  this.object = object;
      
	  http_request.onreadystatechange = alertContents;
      http_request.open('POST', xml_url, true);
      http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
      http_request.setRequestHeader("Content-length", parameters.length);
      http_request.setRequestHeader("Connection", "close");
      http_request.send(parameters);
   }
   
function alertContents(){
	if (http_request.readyState == 4) {
		if (http_request.status == 200) {
			if (this.isIE4) {
				var source = http_request.responseXML;
				var style = new ActiveXObject("Microsoft.XMLDOM");
				style.async = false;
				style.load(xsl_url);
				document.getElementById(object).innerHTML = source.transformNode(style);
			} else {
				var source = http_request.responseXML;
				var xsltProcessor = new XSLTProcessor();
				var myXMLHTTPRequest = new XMLHttpRequest();
				var resultDocument;
				myXMLHTTPRequest.open("GET", xsl_url, false);
				myXMLHTTPRequest.send(null);
				xslStylesheet = myXMLHTTPRequest.responseXML;
				xsltProcessor.importStylesheet(xslStylesheet);
				resultDocument = xsltProcessor.transformToFragment(source, document);				
				document.getElementById(object).innerHTML = "";
				document.getElementById(object).appendChild(resultDocument);
				document.getElementById(object).innerHTML += " ";
			}
		}
	} else {
	}
}
   
function Ajax(xml_url, xsl_url, object){
	if (this.isIE4) {
		source = new ActiveXObject("Microsoft.XMLDOM");
		source.async = false;
		style = new ActiveXObject("Microsoft.XMLDOM");
		style.async = false;
		source.load(xml_url);
		style.load(xsl_url);
		document.getElementById(object).innerHTML = source.transformNode(style);

	} else if (this.isNN4 || this.isNN6) {
		var xsltProcessor = new XSLTProcessor();
		var myXMLHTTPRequest = new XMLHttpRequest();
		var xmlSource;
		var resultDocument;
	
		myXMLHTTPRequest.open("GET", xsl_url, false);
		myXMLHTTPRequest.send(null);
		xslStylesheet = myXMLHTTPRequest.responseXML;
		xsltProcessor.importStylesheet(xslStylesheet);

		myXMLHTTPRequest = new XMLHttpRequest();
		myXMLHTTPRequest.open("GET", xml_url, false);
		myXMLHTTPRequest.send(null);
		xmlSource = myXMLHTTPRequest.responseXML;

		resultDocument = xsltProcessor.transformToFragment(xmlSource, document);
		document.getElementById(object).innerHTML = "";
		document.getElementById(object).appendChild(resultDocument);
		document.getElementById(object).innerHTML += " ";
		
		xsltProcessor.reset();

	} else if (this.isOPERA) {
		if (window.XMLHttpRequest) {
			req = new XMLHttpRequest();
			switch (object) {
				case '' : {
			        req.onreadystatechange = parseObjectInfo;
					break;
				}
				case 'command_message' : {
			        req.onreadystatechange = setCommandMessage;
					break;
				} 
				case 'expert_message' : {
			        req.onreadystatechange = _Opera_setExpertMessage;
					break;
				} 
			}
	        req.open("GET", xml_url+"&opera=1", true);
	        req.send(null);
			this.done = false;
		}
	}
}

function checkUpdates(){
	var query = "";
	// Для экспертов
	if (!this.refresh_time['expert']) {
		this.refresh_time['expert'] = new Array();
		this.refresh_time['expert']['time'] = 0;
	}
	query += "&expert[time]=" + this.refresh_time['expert']['time'];

	// Для субтитров
	if (!this.refresh_time['subtitre']) {
		this.refresh_time['subtitre'] = new Array();
		this.refresh_time['subtitre']['last_id'] = 0;
	}
	query += "&subtitre[last_id]=" + this.refresh_time['subtitre']['last_id'] + "&subtitre[state]=" + document.getElementById('subtitre').parentNode.style.display;
	
	// Для плеера
	if (!this.refresh_time['player']) {
		this.refresh_time['player'] = new Array();
		this.refresh_time['player']['time'] = 0;
	}
	
	var state = 'none';
	var players = new Array('PlayerIE', 'Flash', 'IPIX', 'Img');
	for (var n = 0; n < players.length; n++) {
	    var obj = document.getElementById('o'+players[n]+'_div');
	    if (obj.innerHTML == '') continue;
	    state = obj.style.display;
	}
		
	query += "&player[time]=" + this.refresh_time['player']['time'] + "&player[oPlayer_state]=" + state;

	var date = new Date();

	//getXML(location.href + "?uptime=" + date.getTime() + "&act=getUpdate" + query + "&transl_id=" + (this.translation_id ? this.translation_id : this.nearest_id), processReqChange);
	getXML('/press/handleConference' + "?uptime=" + date.getTime() + "&act=getUpdate" + query + "&transl_id=" + (this.translation_id ? this.translation_id : this.nearest_id), processReqChange);
	this.TimerID = window.setTimeout('checkUpdates()', 10000);
}

function HideTranslation(){
	// Убираем из области плеера изображения и текст
	this.translation = false;
	HideAllObjectsInPlayer();
	document.getElementById('subtitre').parentNode.style.display = 'none';
	// Если есть картинка - ставим ее
	if (this.nearest_image) {
		document.getElementById('oImg_div').innerHTML = '<img src="/files/' + this.nearest_image + '">';
		document.getElementById('oImg_div').style.display = 'block';
	}
}

function parseObjectInfo(){
	if (req.readyState == 4) {
        if (req.status == 200) {
			ShowInfoForOpera();
        } else {
            //alert("There was a problem retrieving the XML data:\n" + req.statusText);
        }
    }
}

function setExpertMessage(){
	var obj_array = new Array();
	XMLtoArray(req.responseXML.documentElement, obj_array);
	document.getElementById('expert_message').innerHTML = obj_array['message'];
}

function ShowInfoForOpera(){
	var obj_array = new Array();
	XMLtoArray(req.responseXML.documentElement, obj_array);
	for (i in obj_array){
		switch (i) {
			case '_object' : {
				text = "<h1>" + obj_array[i]['_title'] + "</h1>";
				for (j in obj_array[i]['objects']){
					text += "<strong>" + obj_array[i]['objects'][j]['name'] + "</strong>: " + obj_array[i]['objects'][j]['text'] + "<br>";
				}
				document.getElementById('object').innerHTML = text;
				break;
			}
			case 'gallery' : {
				text = '';
				for (j in obj_array[i]){
					text += '<a href="#" onclick="window.open(\'/popup.php?img=/files/' + obj_array[i][j]['imagepath'] + '\', \'popup\', \'scrollbars=no,menubar=no,location=no,status=no,toolbar=no\'); return false;"><img src="/files/' + obj_array[i][j]['smallimagepath'] + '" alt="' + obj_array[i][j]['name'] + '" width="' + obj_array[i][j]['width'] + '" height="' + obj_array[i][j]['height'] + '" /></a>' + obj_array[i][j]['name'];
				}
				document.getElementById('gallery').innerHTML = text;
				break;
			}
			case 'infrastructure' : {
				text = '<table><tr>';
				for (j in obj_array[i]){
					text += '<td align="center"><a href="#" onclick="window.open(\'/popup.php?img=/files/' + obj_array[i][j]['imagepath'] + '\', \'popup\', \'scrollbars=no,menubar=no,location=no,status=no,toolbar=no\'); return false;"><img src="/files/' + obj_array[i][j]['smallimagepath'] + '" alt="' + obj_array[i][j]['name'] + '" width="' + obj_array[i][j]['width'] + '" height="' + obj_array[i][j]['height'] + '" /></a><br />' + obj_array[i][j]['name'] + '</td>';
				}
				text += '</table></tr>';
				document.getElementById('infrastructure').innerHTML = text;
				break;
			}
		}
	}
}

function showSubtitre(arr){
	var last_id = 0;
	if (arr['act'] == 'show') {
		str = "";
		document.getElementById('subtitre').parentNode.style.display = 'block';
		for (i in arr['items']) {
			if (arr['items'][i]['id'] >= last_id) last_id = arr['items'][i]['id'];
			str += arr['items'][i]['time'] + " - " + arr['items'][i]['text'] + "<br>";
		}
		if (str != "") document.getElementById('subtitre').innerHTML = str + document.getElementById('subtitre').innerHTML;
	} else if (arr['act'] == 'hide'){
		document.getElementById('subtitre').parentNode.style.display = 'none';
	} else {
		str = "";
		for (i in arr['items']) {
			if (arr['items'][i]['id'] >= last_id) last_id = arr['items'][i]['id'];
			str += arr['items'][i]['time'] + " - " + arr['items'][i]['text'] + "<br>";
		}
		if (str != "") document.getElementById('subtitre').innerHTML = str + document.getElementById('subtitre').innerHTML;
	}
	if (arr['items'][i] != null && arr['items'][i]['id'] != null) this.refresh_time['subtitre']['last_id'] = last_id;
}

function ParseXML() {
	XMLtoArray(req.responseXML.documentElement, globalArray);
	if (globalArray['act'] == 'show')
		this.translation = true;
	else if (globalArray['act'] == 'hide') 
		this.translation = false;

	for (i in globalArray) {
		if (i == 'experts') {
			//DeleteExpert(globalArray['experts']['delete']);
			//AddExpert(globalArray['experts']['add']);
			UpdateExpert(globalArray['experts']['update']);
		} else if (i == 'subtitre') {
			showSubtitre(globalArray['subtitre']);
		} else if (i == 'player') {
			showPlayer(globalArray['player']);
		} else if (i == 'command') {
			showCommand(globalArray['command']);
		}
	}
}

function processReqChange(){
	if (req.readyState == 4) {
        if (req.status == 200) {
			ParseXML();
        } else {
            //alert("There was a problem retrieving the XML data:\n" + req.statusText);
        }
    }
}


function objDump (obj, except) { 
 return  _objDump (obj, [obj], 0);
}
 
function inArray (arr, elt){
 for (var i = 0; i < arr.length; i++)
   if (elt == arr[i]) return i;
 return false;
}
function _objDump (obj, used, level) { 
var rez = '';
var spaces = "";
for (var i = 0; i < level; i++)
  spaces += "  ";
  rez += spaces+('---Dumping object: ' + obj.toString () + "\n"); 
  for (var i in obj) { 
    if (used && inArray(used ,obj[i]) !== false) {
      rez += spaces+"->"+"!Self Reference"+"\n";
      continue; 
    }
    rez += (spaces+"->" + i + ': '); 
    if ( (typeof obj[i]) == "object"){
     try{
      rez += _objDump (obj[i], used.slice(0).push(obj[i]), 1 +level) +"\n";
     }catch (eee) {rez += spaces+"->"+"!Error"+"\n";}
    }
    else
      rez +=(spaces+"->"+obj[i] + "\n"); 
  } 
  return  rez; 
}
