var xdoc_ajax = new XDocAjaxHandler("xdoc_ajax");
/*
 * whole system function like this:
 * first there is called person service
 * it can return continue call or matricola choice in
 * case of multiple persons with the same login
 */
 
function start_xdoc(){
	if(xdoc_handle_multi_logins == "true"){
		//alert("start_xdoc");
		//set environment
		xdoc_ajax.setSkin(xdoc_skin);
		xdoc_ajax.setDebug(xdoc_logAjax == "true");
		xdoc_ajax.setServicesUrl(xdoc_services);
		xdoc_ajax.setServiceExtension(xdoc_service_extension);
		xdoc_ajax.setWorkSequential(xdoc_ajaxWorkSeq == "true");
		
		if(xdoc_active == "false") return;
		//load person
		xdoc_ajax.doRequest('checkPerson', null, "handlePersonResult", null); //just check person
		//alert("start_xdoc call done");
	}else{
		start_work_xdoc();
	}
}

function handlePersonResult(what){
	//alert("handlePersonResult:" + what);
	if(what == "OK"){
		start_work_xdoc();		
	}else{
		xdoc_ajax.doRequest('personChoice', xdoc_lookup_holder, "handlePersonChoice", null);
	}	
}
function handlePersonChoice(_userIIdUnit){
	//alert("handlePersonResult:" + _userIIdUnit);
	var personParams = {userIIdUnit:_userIIdUnit};
	xdoc_ajax.doRequest('checkPerson', null, "handlePersonResult", personParams);	
}

function start_work_xdoc(){
	//alert("start_work_xdoc");
	//set environment
	xdoc_ajax.setSkin(xdoc_skin);
	xdoc_ajax.setDebug(xdoc_logAjax == "true");
	xdoc_ajax.setServicesUrl(xdoc_services);
	xdoc_ajax.setServiceExtension(xdoc_service_extension);
	xdoc_ajax.setWorkSequential(xdoc_ajaxWorkSeq == "true");

    if(xdoc_active == "false") return;
    xdoc_ajax.doRequest('search', xdoc_search_holder, "doSearch");

	//here we have to decide what to do if mothing come just caal adv search if somthing arrived call titles
    if (xdoc_queryString == "" || xdoc_xdoc == "" || xdoc_xdoc == "advsearch") {
	    setAdvancedSearch();
	}else{
		if(xdoc_xdoc == "titles" && xdoc_queryString != ""){
	    	xdoc_ajax.doRequest('titles?' + xdoc_queryString, xdoc_data_holder, "titlesClick");
		}else if(xdoc_xdoc == "document" && xdoc_queryString != ""){
	    	xdoc_ajax.doRequest('document?' + xdoc_queryString, xdoc_data_holder, "documentClick");
		}else{
			setAdvancedSearch();
		}
	}
	//load person
	xdoc_ajax.doRequest('person', xdoc_person_holder, null, null);
	//load desktop
	var desktopParams = {xslver:xdoc_desktop_xslver, dskRule:xdoc_desktop_rule};
	xdoc_ajax.doRequest('desktop', xdoc_desktop_holder, "desktopClick", desktopParams);

	//menu
	navigateMenu(null);
	
	try{
		if(typeof(onXdoc_started) == "function"){
			onXdoc_started();
		}
	}catch(e){;}
	
	//refresh desktop
	xdoc_ajax.callLater("refreshDesktop", xdoc_refreshRate);
}

function desktopClick(cmd, data){
	switch(cmd){
		case 'dsk':
			if(xdoc_titlesUrl != ""){
		        window.location = xdoc_titlesUrl + '?xdoc=titles&selid=' + data;
		    }else{
			    xdoc_ajax.doRequest('titles?selid=' + data, xdoc_data_holder, "titlesClick");
			}
		break;
		case 'agg':
			refreshDesktop("true");
			setAdvancedSearch();
			
		break;
	}
}

function startLookup(type, data){
	xdoc_ajax.doRequest('lookup?type=' + type + "&" + data, xdoc_lookup_holder, "lookupClick");
}


//data1 = name, data2 = code office
function lookupClick(type, cmd, idx, data1, data2){
    switch(cmd){
       case 'pag':
			xdoc_ajax.doRequest('lookup?type='+type+'&cmd='+cmd+'&idx=' + idx + '&data=' + data1, xdoc_lookup_holder, "lookupClick");
        	break;
       case 'sel':
       		//document.getElementById(data3).value = data1;
       		//document.getElementById("_" + data3).value = data2;
       		offPerHandler.handleResult(type, idx, data1, data2);
       		hideModalPanel('popupPanel');
       		break;
    }
}

function titlesClick(cmd, data){
    switch(cmd){
        case 'doc':
        	if(xdoc_documentUrl != ""){
		        window.location = xdoc_documentUrl + '?xdoc=document&docNumber=' + data;
		    }else{
			    xdoc_ajax.doRequest('document?docNumber=' + data, xdoc_data_holder, "documentClick");
			}	        
	        break;
	       case 'pag':
	       case 'fas':
		   case 'rac':
				xdoc_ajax.doRequest('titles?cmd='+cmd+'&data=' + data, xdoc_data_holder, "titlesClick");
	        break;
    }
}

function showJustCreatedDoc(cmd, data){
    switch(cmd){
        case 'doc':
	        xdoc_ajax.doRequest('document?outofset=true&docNumber=' + data, xdoc_data_holder, "documentClick");
	        break;
    }
}

function documentClick(cmd, data){
				xdoc_ajax.doRequest('document?cmd=pag&data=' + data, xdoc_data_holder, "documentClick");
}

function doSearch(str){
    if(xdoc_titlesUrl != ""){
        window.location = xdoc_titlesUrl + '?xdoc=titles&full_text=' + str;
    }else{
	    xdoc_ajax.doRequest('titles?full_text=' + str, xdoc_data_holder, "titlesClick");
	}
}

function doAdvSearch(frm){
	if(xdoc_titlesUrl != ""){
        window.location = xdoc_titlesUrl + '?xdoc=yes&' + xdoc_ajax.getFormRequest(frm);
    }else{
	    xdoc_ajax.doFormRequest('titles', frm);
	}
}

function setAdvancedSearch() {
    xdoc_ajax.doRequest('adv-search', xdoc_data_holder, "doAdvSearch");
    /*
    if (xdoc_titlesUrl != "") {
        window.location = xdoc_titlesUrl + '?xdoc=advsearch';
    } else {
        xdoc_ajax.doRequest('adv-search', xdoc_data_holder, "doAdvSearch");
    }
    */	
}

function setNewDocument(){
	xdoc_ajax.doRequest('newdoc', xdoc_data_holder, "showJustCreatedDoc");
}

function setChangeRpa(){
	xdoc_ajax.doRequest('changeRpa', xdoc_data_holder, "");
}

function setChangeCc(){
	xdoc_ajax.doRequest('changeCc', xdoc_data_holder, "");
}

function setAddNote(){
	xdoc_ajax.doRequest('addNote', xdoc_data_holder, "");
}

function goToLastTitles(){
	titlesClick("pag", "current");
}

function goToLastDocument(id){
	if(id == "-1")
		titlesClick("pag", "current"); // in case of missing document id
	else
		titlesClick("doc", id);
}

function refreshDesktop(forceRefresh){
	 forceRefresh = forceRefresh && forceRefresh == "true" ? true : false;
     if(xdoc_active == "false") return;
     var desktopParams = {xslver:xdoc_desktop_xslver, dskRule:xdoc_desktop_rule, forceRefresh:forceRefresh};
     xdoc_ajax.doRequest('desktop', xdoc_desktop_holder, "desktopClick", desktopParams);
     xdoc_ajax.callLaterP("refreshDesktop", "true", xdoc_refreshRate);
}

function navigateMenu(_menu) {
    var menuParams = null;
    if (_menu != null) {
        menuParams = { menu: _menu };
    }
    xdoc_ajax.doRequest('menu', xdoc_menu_holder, null, menuParams);
}