//Основной класс приложения
function Application_callback()
{
	//windows.location
	var get = new String(window.location);
 	if (match = get.match(/\/([^\/]*)\/$/)) {
		this.Pages[0] = {f:match[1],params:null,target:'content',type:null,title:null};
		this.curPage = 0;
	}
}
Application_callback.prototype = {
	Pages: new Array(),
	curPage: null,
	getPage: function(folder, params, target, type, title, p_params){
		var i;
		if(!target) target = 'content';

		if(!type){
			var page = this.Pages[this.curPage];

			if(!(page.f == folder && page.params == params && page.target == target)){
                this.curPage = this.Pages.length;
				this.Pages[this.curPage] = {f:folder,params:params,target:target,type:type,title:title};
		  	}

		  	var menu = document.getElementById('main_context');
		  	if(menu){
	     	    var m_elem = menu.getElementsByTagName('A');
	     	    var ClassReg = new RegExp("\\bcurrent\\b");
	     	    for(i=0; i<m_elem.length; i++){
	     	    	m_elem[i].className = '';//m_elem[i].className.replace(ClassReg, "");;
	     	    }
	     	    var current = document.getElementById(folder+'_item');
	     	    if(current){
	     	    	current.className = 'current';
		     	    var parent = current.parentNode;
		     	    while(parent.tagName != 'DIV'){
		     	    	if(parent.tagName == 'LI'){
		     	    		parent.firstChild.className = 'current';
		     	    	}
		     	    	parent = parent.parentNode;
		     	    }
		     	}
			}

		    result = appl_cl.getPage(folder, params);

	        if(result){
		     	var content = document.getElementById(target);
		     	if(result['content']!=undefined){
			     	HTML_AJAX_Util.setInnerHTML(target, result['content']);
			     	Behavior.apply();
			     	document.title = result['title']+ ' - Статистика сайтов';
			     	var title = document.getElementById('PageTitle');
			     	if(title){
			     		title.innerHTML = result['title'];
                        title.setAttribute('title', result['title']);
			     	}
		     	}
                if(result['date_range']!=undefined){
                	var display = result['date_range'] ? 'block' : 'none';
                	var date_range = document.getElementById('date_range');
			     	var ControlPanel = document.getElementById('ControlPanel');
                    if(date_range) date_range.style.display = display;
                    if(ControlPanel) ControlPanel.style.display = display;
                }
			}
		}else if(type == 'window'){
			result = appl_cl.getPage(folder, params);
			if(result['content']!=undefined){
				if(!p_params['no_mask'])
					showMask();
		     	popup_window = dhtmlwindow.open(target, 'inline', '', result['title'],
					"width="+(window.innerWidth < 900 ? window.innerWidth-50 : 900)+",height="+(window.innerHeight ? window.innerHeight-100 : 750)
					+",resize=1,scrolling=1,left="+(window.innerWidth>900 ? (window.innerWidth-900)/2 : 180)+",top=25", 'recal');
                var node = document.getElementById(target);
                HTML_AJAX_Util.setInnerHTML(node.childNodes[1], result['content']);
                Behavior.apply();
                if(!p_params['no_mask'])
                	popup_window.onclose = hideMask;
	     	}

		}

        return false;
	},

	Prev: function(){
		var page = this.Pages[this.curPage-1];
	    if(page)
			this.getPage(page.f, page.params, page.target, page.type, page.title);
	},

	Reload: function(dopParam){
		var page = this.Pages[this.curPage];
	    if(dopParam){
	    	if(!page.params) page.params = {};
	    	for (var p in dopParam) {
	    		page.params[p] = dopParam[p];
	    	}
	    }
	    if(!dopParam || !dopParam['entrant']){
	    	if(page.params['entrant'])
	    		page.params['entrant'] = null;
	    }
	    if(page)
			this.getPage(page.f, page.params, page.target, page.type, page.title);
	},

	Next: function(){
	    var page = this.Pages[this.curPage+1];
	    if(page)
			this.getPage(page.f, page.params, page.target, page.type, page.title);
	}
}

var popup_window;
var appl_cl = new Application();
var appl = new Application_callback();


var Open = HTML_AJAX.Open;
var Load = HTML_AJAX.Load;

HTML_AJAX.Open = function(request) {
	if (!request.isAsync) {
		document.body.style.cursor = 'wait';
    	showMask();
	}
	Open(request);
	//document.getElementById('eventLog').innerHTML += "Open: "+request.className+'::'+request.methodName+"\n";
}
HTML_AJAX.Send = function(request) {
	//document.getElementById('eventLog').innerHTML += "Send: "+request.className+'::'+request.methodName+"\n";
}
HTML_AJAX.Progress = function(request) {
	//document.getElementById('eventLog').innerHTML += "Progress: "+request.className+'::'+request.methodName+"\n";
}
HTML_AJAX.Load = function(request) {
	Load(request);
	if (!request.isAsync) {
		document.body.style.cursor = 'default';
    	hideMask();
	}
	//document.getElementById('eventLog').innerHTML += "Load: "+request.className+'::'+request.methodName+"\n";
}

var errorWindow;
HTML_AJAX.onError = function(e) {
	msg = "";
	for(var i in e) {
		msg += i + ':\t' + e[i] +"\n";
	}
	errorWindow = dhtmlwindow.open('errorWindow', 'inline', '<pre>'+msg+'</pre>', 'Ошибки AJAX', 'width=210px,height=150px,left=2px,top=630px,resize=1,scrolling=1');
	//document.getElementById('error').innerHTML += msg;
}

document.onkeydown = NavigateThrough;


function NavigateThrough (event)
{

	switch (event.keyCode ? event.keyCode : event.which ? event.which : null)
	{
		case 116:
			appl.Reload();
			return false;
			break;
		case 0x27:
			//link = document.getElementById ('NextLink');
			break;
	}
	//if (link && link.href) document.location = link.href;
}

function getPositionData(element){
    var left = element.offsetLeft;
	var top = element.offsetTop;
        for(var parent = element.offsetParent; parent; parent = parent.offsetParent){
            left+=parent.offsetLeft;
            top+=parent.offsetTop;
        }
	return {left: left, top: top, right: left + element.offsetWidth, bottom: top + element.offsetHeight, width: element.offsetWidth, height: element.offsetHeight};
}

function setSize(id, fr_pos)
{
	var iframe = document.getElementById(id);
	if(iframe)	iframe.style.height = (10+fr_pos.height)+'px';

}

function showMask()
{
	var m = document.getElementById('FloatMask');
	m.style.display = 'block';
	return true;
}

function hideMask()
{
	var m = document.getElementById('FloatMask');
    m.style.display = 'none';
    return true;
}

function showMask2()
{
	var m = document.getElementById('FloatMask2');
	m.style.display = 'block';
	return true;
}

function hideMask2()
{
	var m = document.getElementById('FloatMask2');
    m.style.display = 'none';
    return true;
}

function confirm_dial(quest, hide, yes_callback, no_callback)
{
    if(hide) showMask();
    var q = document.getElementById('quest');
    q.firstChild.nodeValue = quest;


	dial = dhtmlwindow.open('confirm_window', 'div', 'confirm', 'Подтверждение', "width=350px,resize=0,scrolling=0,center=1", "recal");

    var frm =  document.getElementById('confirm_form');
    var elem;
   	elem = frm.elements['yes'];
    elem.onclick = function(){
   		if(yes_callback){
   			eval(yes_callback);
   			//yes_callback.apply(yes_callback);
   		}
   		dial.hide();
   	}



   	elem = frm.elements['no'];
    elem.onclick = function(){
   		if(no_callback){eval(no_callback);}
   		dial.hide();
   	}

	if(hide) dial.onclose = hideMask;
}


function testCallback() {}
testCallback.prototype = {
	getFactor: function(result)
	{

	},

	edit: function(result)
	{
		if(result){
    		HTML_AJAX_Util.setInnerHTML(document.getElementById("test_edit_cont"), result);

 		}
	},

	deleteFactor: function(result)
	{
    	var tr = document.getElementById('f_'+result);
    	var tableID = tr.parentNode.parentNode.getAttribute('id');
		if(tr)	tr.parentNode.removeChild(tr);
		if(tableID) TableSecondRow(tableID, true);
	},


	FactorForm: function(result)
	{
		if(result['tbl'])
			HTML_AJAX_Util.setInnerHTML(document.getElementById("test_param_cont"), result['tbl']);
		else if(result){
    		HTML_AJAX_Util.setInnerHTML(document.getElementById("FactorForm_cont"), result);

 		}
	},

	deleteDiagnos: function(result)
	{
    	var tr = document.getElementById('dg_'+result);
    	var tableID = tr.parentNode.parentNode.getAttribute('id');
		if(tr)	tr.parentNode.removeChild(tr);
		if(tableID) TableSecondRow(tableID, true);
	},

	DiagnosForm: function(result)
	{
		if(result['tbl'])
			HTML_AJAX_Util.setInnerHTML(document.getElementById("TestDiagnos_cont"), result['tbl']);
		else if(result){
    		HTML_AJAX_Util.setInnerHTML(document.getElementById("Diagnos_cont"), result);

 		}
	},

	deleteQuest: function(result)
	{
    	var tr = document.getElementById('q_'+result);
    	var tableID = tr.parentNode.parentNode.getAttribute('id');
		if(tr)	tr.parentNode.removeChild(tr);
		if(tableID) TableSecondRow(tableID, true);
	},


	QuestForm: function(result)
	{
		if(result['tbl'])
			HTML_AJAX_Util.setInnerHTML(document.getElementById("test_quest_cont"), result['tbl']);
		else if(result){
    		HTML_AJAX_Util.setInnerHTML(document.getElementById("QuestForm_cont"), result);

 		}
	},

	QuestFromXLS: function(result)
	{
		if(result)
			HTML_AJAX_Util.setInnerHTML(document.getElementById("test_quest_cont"), result);
	},

	saveResult: function(result)
	{
		HTML_AJAX_Util.setInnerHTML('result', result);
	}
}
var test = new test(new testCallback());

function respondentCallback() {}
respondentCallback.prototype = {
	userExists: function(result)
	{
		var frm = document.getElementById("reg_frm");
		var msgDiv = document.getElementById("username_msgDiv");
		if(!msgDiv){
			msgDiv = document.createElement("div");
			msgDiv.id = 'username_msgDiv';
		    frm.elements['username'].parentNode.insertBefore(msgDiv, frm.elements['username']);
			var span = document.createElement("span");
		    msgDiv.appendChild(span);
		    msgDiv.appendChild(document.createElement("br"));
		}else{
			var span = msgDiv.firstChild;
		}

    	if(!result){
    		var elReg = new RegExp("\\berror\\b");
    		msgDiv.parentNode.className = msgDiv.parentNode.className + ' error';

    		span.innerHTML = 'Логин <strong>'+frm.elements['username'].value+'</strong> уже занят';
    		span.className = "error";
    	}else{
    		var elReg = new RegExp("\\bmessage\\b");
    		msgDiv.parentNode.className = msgDiv.parentNode.className + ' message';
    		span.innerHTML = 'Логин <strong>'+frm.elements['username'].value+'</strong> свободен';
    		span.className = "message";
    	}
	},

	getCityes: function(result)
	{		var frm = document.getElementById("reg_frm");
		var select = frm.elements['city'];
	    while (select.options.length) {
			select.remove(0);
		}
		for (var i=0; i<result.length; i++) {
        	select.options[i] = new Option(result[i]['name'], result[i]['id'], false, false);
  		}
	},

	getCabinete: function(result){
    	HTML_AJAX_Util.setInnerHTML(document.getElementById('pers_cabinet'), result);
	},

	remind_pass: function(result){		if(result)
    	HTML_AJAX_Util.setInnerHTML(document.getElementById('remind_message'), result);
	},

	delete_r: function(result){
		var tr = document.getElementById('r_'+result)
     	deleteTableRow(tr);
	}

}
var respondent = new respondent(new respondentCallback());
