function callInProgress (xmlhttp) {
    switch (xmlhttp.readyState) {
        case 1: case 2: case 3: 
            return true;
            break;
            // Case 4 and 0
            default:
            return false;
            break;
    }
}

var resTimer = '';
function showResult(){
    clearTimeout(resTimer);   
    if($('resultContainer')) {
        Position.center('resultContainer');
         $('resultContainer').style.display = "block";
    }
    var func = 'hideResult()';
    resTimer = setTimeout(func, 1200);
}

function hideResult(){
    
    if(!$('AJAX_POPUP') || $('AJAX_POPUP').style.display == "none") {
        if($('DISABLING')) $('DISABLING').style.display = "none";
    }

    if($('resultContainer')) {
         $('resultContainer').style.display = "none";
         $('resultContainer').innerHTML = '';
    }
}


// Register global responders that will occur on all AJAX requests
Ajax.Responders.register(
        {onCreate: function(request) {request['timeoutId'] = window.setTimeout(
            function() {
                // If we have hit the timeout and the AJAX request is active, abort it and let the user know
                if (callInProgress(request.transport)) {
                    request.transport.abort();
                    if (request.options['onFailure']) {
                        whenFailureTimeout(request.transport, request.json);
                    }
                }
            }, 60*1000
            );
        }, 
        onComplete: function(request) {
            window.clearTimeout(request['timeoutId']);
        }
    }
);


Position.center = function(element){
    var options = Object.extend({update: false}, arguments[1] || {});
    element = $(element);
    if(!element._centered){
        //Element.setStyle(element, {position: 'absolute', zIndex:options.zIndex });
        element._centered = true;
    }
    var dims = Element.getDimensions(element);
    Position.prepare();
    var winWidth = self.innerWidth || document.documentElement.clientWidth || document.body.clientWidth || 0;
    var winHeight = self.innerHeight || document.documentElement.clientHeight || document.body.clientHeight || 0;
    var offLeft = (Position.deltaX + Math.floor((winWidth-dims.width)/2));
    var offTop = (Position.deltaY + Math.floor((winHeight-dims.height)/2));
    element.style.top = ((offTop != null && offTop > 0) ? offTop : '0') + 'px';
    element.style.left = ((offLeft != null && offLeft > 0) ? offLeft :'0') + 'px';
    if(options.update){
        Event.observe(window, 'resize', function(evt){Position.center(element);}, false);
        Event.observe(window, 'scroll', function(evt){Position.center(element);}, false);
    }    
}

function whenLoading(request, json){
    
    if($('DISABLING')) $('DISABLING').style.display = "block";
    if($('ProgressContainer')) {
        if($('ProgressContainer').style.position == "absolute") {
            Position.center('ProgressContainer');
        }
        $('ProgressContainer').style.visibility = 'visible';
    }
}

function whenCompletedForm(){
    $('ProgressContainer').style.visibility = 'hidden';
    $('ProgressContainer').style.top = '0px';
    $('ProgressContainer').style.left = '0px';


    clearTimeout(resTimer);
    showResult();
}

function whenCompleted(response, json){
    if($('DISABLING')) $('DISABLING').style.display = "none";
    if($('ProgressContainer')) {
        $('ProgressContainer').style.visibility = 'hidden';
        $('ProgressContainer').style.top = '0px';
        $('ProgressContainer').style.left = '0px';
    }
}

function whenFailureTimeout(response, json){
    $('ProgressContainer').style.visibility = 'hidden';
    alert('Timeout: Сервер не отвечает. Процесс остановлен. Попробуйте еще раз.');
    if($('DISABLING')) $('DISABLING').style.display = "none";
}

function whenFailure(response, json){
    $('ProgressContainer').style.visibility = 'hidden';
    alert('Unknown Error: Сервер не отвечает. Попробуйте еще раз.');
    if($('DISABLING')) $('DISABLING').style.display = "none";
}

function ajax_preview(obj, url_preview, url, tr, classname) {
    if($(obj).style.display == 'none') {
        ajax_navigate('AJAX_MAIN', url);
    } else {
        $(tr).className  = classname;
        ajax_navigate(obj, url_preview);
    }
}




function ajax_navigate(obj, url) {

    new Ajax.Updater({success:obj}, url
            , {onLoading:whenLoading
            , onComplete:whenCompleted
            , onFailure: whenFailure
            , method:'get'
            , evalScripts:true
            }
        );
}


function ajax_popup(obj, url) {
    $(obj).style.width  = "650px";
    $(obj).style.height = "350px";
    $(obj).style.display = "block";
    Position.center(obj);
    new Ajax.Updater({success:obj}, url
            , {onLoading:whenLoading
            , onComplete:whenCompletedPopup
            , onFailure: whenFailure
            , method:'get'
            , evalScripts:true
            }
        );
}

function popupClose(obj){
    if($('DISABLING')) $('DISABLING').style.display = "none";
//    if($('DISABLING')) $('DISABLING').style.opacity = "0";
    $(obj).style.display = "none";
    $(obj).innerHTML = "";
}

function whenCompletedPopup(response, json){
//    if($('DISABLING')) $('DISABLING').style.opacity = "0.5";
    if($('ProgressContainer')) $('ProgressContainer').style.visibility = 'hidden';
}

var check_fields = {};

function get_form_data(form_obj){
    
    //alert(check_fields);

    var params_ar = {};
    var forms = document.getElementsByTagName("form");

    var error = 0;
    var error_text = 'Обязательные поля не заполнены.' + "\n\n";

    for(name in check_fields) {
        error = 1;
        for(name2 in check_fields[name]) {
            if($(check_fields[name][name2])) {
                if($(check_fields[name][name2]).checked == true) {
                    error = 0;
                    //alert('Name: '+name2+' is number ' + check_fields[name][name2]);            
                }
            }
        }

        if(error == 1) {
            error_text = error_text + " - " + check_fields[name]['title'] + "\n";
        }
    }


    if(error == 1) {
        alert(error_text);
        return false;
    } else {

        for (var m=0; m < forms.length; m++){
            if( forms[m].name == form_obj || forms[m].id == form_obj ) {
                var form = forms[m];
                var radio_switch_FCK  = (form.type && form.type[1] && form.type[1].checked);
                var hidden_switch_FCK = form.show_FCK;
                var is_FCK = radio_switch_FCK || hidden_switch_FCK;
                
                if(is_FCK) {
                    var oEditor = FCKeditorAPI.GetInstance('FCK');
                    form.description.value = oEditor.GetXHTML(true);
                } else {
                    if(document.getElementById('FCKON')){
                        var Item = $($('FCKON').value);
                        var oEditor = FCKeditorAPI.GetInstance('FCK');
                        Item.value = oEditor.GetXHTML(true);
                    }
                }
 
                var items = form.elements;
                for (var i=0; i<items.length; i++){
                    if(items[i].name) {
                        if($(items[i].name + '_required')) {
                            if($(items[i].name + '_required').value == "email") {
                                mailRE = new RegExp( );
                                mailRE.compile( '^[._a-z0-9-]+@[.a-z0-9-]+[.]{1}[a-z]{2,4}$', 'gi' );
                                if(!(mailRE.test( items[i].value ))){
                                    items[i].select();
                                    return false;
                                }
                            }
                        }
                    
                        if(items[i].type == 'radio' || items[i].type == 'checkbox') {
                            if(items[i].checked) {
                                params_ar[items[i].name] = items[i].value;
                            }
                        } else if(items[i].type == 'select-multiple') {
                            if(items[i].options) {
                                for (var k=0; k < items[i].options.length; k++){
                                    if(items[i].options[k].selected || $(items[i].id + "_source")) {
                                        var idx_ = items[i].name + "[" + items[i].options[k].value + "]";
                                        var val_ = items[i].options[k].value;
                                        //alert(idx_);
                                        params_ar[idx_] = val_;
                                    }
                                }
                            }
                        } else if(items[i].type == 'select-one') {
                            if(items[i].options) {
                                for (var k=0; k < items[i].options.length; k++){
                                    if(items[i].options[k].selected) {
                                        params_ar[items[i].name] = items[i].options[k].value;
                                    }
                                }
                            }
                        } else if(items[i].type == 'textarea') {
                            params_ar[items[i].name] = items[i].value;
                        } else {
                            if($(items[i].id + '_file')){
                                params_ar[items[i].name] = $(items[i].id + '_file').value;
                                if($(items[i].id + '_file').value) {
                                    params_ar[items[i].name] = $(items[i].id + '_file').value;
                                } else {
                                    var multi = $(items[i].id + '_form').elements;
                                    for (var j=0; j < multi.length; j++){
                                        if(multi[j].name
                                                && multi[j].name != 'id'
                                                && multi[j].name != 'name'
                                                && multi[j].name != 'driver'
                                                && multi[j].name != 'path'
                                                && multi[j].name != 'code'
                                                ) {
                                            params_ar[multi[j].name] = multi[j].value;
                                        }
                                    }
                                }
                            } else {
                                params_ar[items[i].name] = items[i].value;
                            }
                        }
                    }
                }
            }
        }
    }
    return params_ar;
}

//form processing
//form - form id
//obj  - container id

function ajax_post(form_obj, obj, url){
    
    if(form_data = get_form_data(form_obj) ){
        if($('reloadContainer')) {
            var container = 'reloadContainer';
        } else {
            var container = obj;
        }
        
        new Ajax.Updater({success:container}, url
                , {onLoading:whenLoading
                , onComplete:whenCompletedForm
                , onFailure: whenFailure
                , method:'post'
                , parameters:form_data
                , evalScripts:true
                }
                );
    } 
    
/*    
    else {
        alert('Ошибка заполнения формы!');
        return false;
    }
*/

}

//stumb
function ajax_submit(obj, form, url) {
    ajax_post(form, obj, url);
}

function ajax_message(form, obj, url) {
    ajax_post(form, obj, url);
    $('message').value = '';
}













function ajax_listing_search(obj, url){

    var keywords = "";

    if($('search_button')){
        $('search_button').disabled = true;
    }

    if($('keywords')){
        if($('keywords').value != '') {
            var keywords = "&keywords="+escape($('keywords').value);
            if($('search_for')){
                keywords += "&search_for="+escape($('search_for').value);
            }
        }
    }

    if( $('form_listing_search') ) {
        var items = $('form_listing_search').elements;
        if(items.length) {
            for (var i=0; i < items.length; i++){
                if(items[i].options && items[i].options.length > 0) {
                    for (var k=0; k<items[i].options.length; k++){
                        if(items[i].options[k].selected && items[i].options[k].value > 0 && items[i].options[k].value != 'undefined') {
                            keywords += "&" + items[i].name + "[" + items[i].options[k].value +"]" +"="+items[i].options[k].value;
                        }
                    }
                }
            }
        }
    }

    if( $('form_listing_search_content') ) {
        var items = $('form_listing_search_content').elements;
        if(items.length) {
            for (var i=0; i < items.length; i++){
                if(items[i].options && items[i].options.length > 0) {
                    for (var k=0; k<items[i].options.length; k++){
                        if(items[i].options[k].selected && items[i].options[k].value > 0 && items[i].options[k].value != 'undefined') {
                            keywords += "&" + items[i].name + "[" + items[i].options[k].value +"]" +"="+items[i].options[k].value;
                        }
                    }
                }
            }
        }
    }

    new Ajax.Updater({success:obj}, url+keywords, {
          onLoading:whenLoading
        , onComplete:whenCompleted
        , method:'get'
        , evalScripts:true
    });
}


function ajax_operate_single(url, element, post)
{
   if (!confirm('Выполнить действие?')) return;
   var params_ar = {};
   params_ar['action'] = post;
   params_ar['ID']     = element;

    new Ajax.Updater({success:'AJAX_MAIN'}, url, {
          onLoading:whenLoading
        , onComplete:whenCompleted
        , method:'post'
        , parameters:params_ar
        , evalScripts:false
    });
}



function ajax_send(button, container, url)
{
    if (!confirm('Выполнить?')) return;
    button.disabled = true;
    $(container).update('Обрабатывается');
    new Ajax.Updater({success:container}, url, {
          onLoading:whenLoading
        , onComplete:whenCompleted
        , method:'get'
        , evalScripts:false
    });

}



function ajax_edit2(obj, id, url){
    var params_ar = {};    
    if($('textarea'+id)){
        var desc  = $('textarea'+id);
        params_ar['description'] =  desc.value;
    }
    if($('title'+id)){
        var tit  = $('title'+id);
        params_ar['title'] =  tit.value;
    }
    if($('select'+id)){
        var desc  = $('select'+id);
        params_ar['grade'] =  desc.value;
    }
    new Ajax.Updater({success:obj}, url, {
          onLoading:whenLoading
        , onComplete:whenCompleted
        , method:'post'
        , parameters:params_ar
        , evalScripts:false
    });
}



function ajax_edit(obj, id, mode){

    var params_ar = {};    
    if($('textarea'+id)){
        var desc  = $('textarea'+id);
        params_ar['description'] =  desc.value;
    }
    if($('title'+id)){
        var tit  = $('title'+id);
        params_ar['title'] =  tit.value;
    }
    if($('select'+id)){
        var desc  = $('select'+id);
        params_ar['grade'] =  desc.value;
    }
    var url = '/xajax.php?mode=' + mode + '&id=' + id;

    new Ajax.Updater({success:obj}, url, {
          onLoading:whenLoading
        , onComplete:whenCompleted
        , method:'post'
        , parameters:params_ar
        , evalScripts:false
    });
}


function ajax_edit_start(id, url){
    if( $('textarea' + id).value == '' && $('select' + id).value == 0) {
        ajax_navigate('AJAX_COMMENTS', url);
    } else {
        ajax_edit('post' + id,id, 'feedback_post');
    }
}



//check All in grid
function checkAll()
{
   var items = $('grid_form').elements;
   if($('checkAll__').checked == true) {
        for (var i=0; i<items.length; i++) {
            if(items[i].value == '1') {
                if($('tr' + items[i].id)) {
                    items[i].checked = true;
                    checkTR(items[i], 'tr' + items[i].id, $('tr' + items[i].id).className);
                }
            }
        }
   } else {
        for (var i=0; i<items.length; i++) {
            if(items[i].value == '1') {
                if($('tr' + items[i].id)) {
                    items[i].checked = false;
                    var restore_classname = $('tr' + items[i].id).className.replace(/CHECKED/g, '');
                    checkTR(items[i], 'tr' + items[i].id, restore_classname);
                }
            }
        }
   }
}




function checkTR(but_obj, tr, classname) {
    if($(tr)) {
        if(but_obj.checked == true) {
            $(tr).className  = classname + "CHECKED";
        } else {
            $(tr).className  = classname;
        }
    }
}




group_url = '';
group_obj = '';

function ajax_group_operations(obj, url, action)
{
   var form  = $('grid_form');
   var items = form.elements;


   group_obj = obj;
   group_url = url;

   empty = true;
   var params_ar = {};
   for (var i=0; i<items.length; i++) {
       if(items[i].type == 'checkbox') {
           if(items[i].checked == true) {
               params_ar[items[i].name] = items[i].value;
               empty = false;
           }
       } else if(items[i].type == 'text') {
           params_ar[items[i].name] = items[i].value;
           empty = false;
       } else if(items[i].type == 'radio') {
           if(items[i].checked == true) {
               params_ar[items[i].name] = items[i].value;
               empty = false;
           }
       }
   }

   if(empty) {
      alert('Не выделено ни одного элемена списка.');
      return ;
   }
   
   if (!confirm('Выполнить действие?')) return;
   params_ar['action'] = action;

   if(form.folders_id) {
       params_ar['folders_id'] = form.folders_id.value;
   }

   if(form.soap_id) {
       params_ar['soap_id'] = form.soap_id.value;
   }

   if($('resultContainer')) {
       var obj = 'resultContainer';
       new Ajax.Updater({success:obj}, url, {
                  onLoading:whenLoading
                , onComplete:whenCompletedGroup
                , method:'post'
                , parameters:params_ar
                , evalScripts:true
                }
        );
   } else {
       new Ajax.Updater({success:obj}, url, {
                  onLoading:whenLoading
                , onComplete:whenCompleted
                , method:'post'
                , parameters:params_ar
                , evalScripts:true
                }
        );
   }  
}



function ajax_listing_fields(obj, url, action){
    
    group_obj = obj;
    group_url = url;
    
    var params_ar = {};
    params_ar = get_form_data('listing_form');
    params_ar['action'] = action;
    
    if($('resultContainer')) {
        var obj = 'resultContainer';
        new Ajax.Updater({success:obj}, url, {
                  onLoading:whenLoading
                , onComplete:whenCompletedGroup
                , method:'post'
                , parameters:params_ar
                , evalScripts:true
                }
                );
    
        } else {
            new Ajax.Updater({success:obj}, url, {
                  onLoading:whenLoading
                , onComplete:whenCompleted
                , method:'post'
                , parameters:params_ar
                , evalScripts:true
                }
        );
   }  
}










function whenCompletedGroup(request, json){
    new Ajax.Updater({success:group_obj}, group_url
            , {onLoading:whenLoading
            , onComplete:whenCompletedResult
            , onFailure: whenFailure
            , method:'get'
            , evalScripts:true
            }
        );
}

function whenCompletedResult(request, json){
    $('ProgressContainer').style.top = '0px';
    $('ProgressContainer').style.left = '0px';
    $('ProgressContainer').style.visibility = 'hidden';
    clearTimeout(resTimer);
    showResult();
}


//drop down boxes
function showList(container, button, prefix) {
    dd_obj = new Drop_Down_Box();
    dd_obj.showList(container, button, prefix);
}

function showListHover(button, prefix) {
    
    if($(button).className != prefix + 'Active'){
        $(button).className = prefix + "Hover";
    }
}
function showListOut(button, prefix) {

    if($(button).className != prefix + 'Active'){
        $(button).className = prefix + "Normal";
    }
}

function showListActive(button, prefix) {
    if($(button).className != prefix + 'Active'){
        $(button).className = prefix + "Active";
    } else {
        $(button).className = prefix + "Hover";
    }
}

function showListNormal(button, prefix) {
    if($(button)) {
        $(button).className = prefix + "Normal";
    }
}

function showListingFields(obj){
    var p = $(obj); 
    if(p.style.visibility && p.style.visibility == 'hidden'){
        p.style.visibility = 'visible';
    } else {
        p.style.visibility = 'hidden';
    }
}

function validateInteger( str ){
  var re = new RegExp( );
  re.compile( '^[0-9]+$', 'gi' );
  return re.test(str);
}

function checkValue(obj, check_value){
    var p = $(obj);
    var check_value = new Number(check_value);
    var p_value = new Number(p.value);
    if(p_value != '' && check_value != '' && (!validateInteger(p_value) || p_value > check_value) ) {
        alert('Число не может быть больше ' + check_value);
        p.value = '';
        p.focus();
        return false;
    }
}

function editor_mode()
{	
    var d = $('editor_textarea'); 
    var e = $('editor_html'); 
    var p = $('editor_plain'); 
    
    if($('editor_type_html').checked) {
        
        var oEditor = FCKeditorAPI.GetInstance('FCK') ;
        oEditor.SetHTML( d.value );

        p.style.visibility = "hidden";
        e.style.visibility = "visible";
    
    } else {
    
        var oEditor = FCKeditorAPI.GetInstance('FCK') ;
        d.value = oEditor.GetHTML( false );
        
        e.style.visibility = "hidden";
        p.style.visibility = "visible";

    }

}

function popupWindow( sUri, iWidth, iHeight )
{
		var sWindowName = 'win' + Math.floor( Math.random()*1000 );
		var iRealWidth = iWidth ? iWidth : 600;
		var iRealHeight = iHeight ? iHeight : screen.height - 300;
	
		var iLeft = Math.round( (screen.width-iRealWidth)/2 );
		var iTop =  Math.round( (screen.height-iRealHeight)/2 ) - 35;
	
		var sWindowOptions = 'status=no,menubar=no,toolbar=no';
		sWindowOptions += ',resizable=yes,scrollbars=yes,location=no';
		sWindowOptions += ',width='  + iRealWidth;
		sWindowOptions += ',height=' + iRealHeight;
		sWindowOptions += ',left='   + iLeft;
		sWindowOptions += ',top='    + iTop;
	
		var win = window.open( sUri, sWindowName, sWindowOptions );
		win.focus();
		
		return win;
}


function popupImage(imageURL,imageTitle){

PositionX = 250;
PositionY = 250;
defaultWidth  = 350;
defaultHeight = 50;
var AutoClose = false;


if (parseInt(navigator.appVersion.charAt(0))>=4){
var isNN=(navigator.appName=="Netscape")?1:0;
var isIE=(navigator.appName.indexOf("Microsoft")!=-1)?1:0;}
var optNN='scrollbars=no,width='+defaultWidth+',height='+defaultHeight+',left='+PositionX+',top='+PositionY;
var optIE='scrollbars=no,width=150,height=100,left='+PositionX+',top='+PositionY;
    
    
    if (isNN){imgWin=window.open('about:blank','',optNN);}
if (isIE){imgWin=window.open('about:blank','',optIE);}
with (imgWin.document){
writeln('<html><head><title>Loading...</title><style>body{margin:0px;}</style>');writeln('<sc'+'ript>');
writeln('var isNN,isIE;');writeln('if (parseInt(navigator.appVersion.charAt(0))>=4){');
writeln('isNN=(navigator.appName=="Netscape")?1:0;');writeln('isIE=(navigator.appName.indexOf("Microsoft")!=-1)?1:0;}');
writeln('function reSizeToImage(){');writeln('if (isIE){');writeln('window.resizeTo(300,300);');
writeln('width=300-(document.body.clientWidth-document.images[0].width);');
writeln('height=300-(document.body.clientHeight-document.images[0].height);');
writeln('window.resizeTo(width,height);}');writeln('if (isNN){');       
writeln('window.innerWidth=document.images["George"].width;');writeln('window.innerHeight=document.images["George"].height;}}');
writeln('function doTitle(){document.title="'+imageTitle+'";}');writeln('</sc'+'ript>');
if (!AutoClose) writeln('</head><body bgcolor=000000 scroll="no" onload="reSizeToImage();doTitle();self.focus()">')
else writeln('</head><body bgcolor=000000 scroll="no" onload="reSizeToImage();doTitle();self.focus()" onblur="self.close()">');
writeln('<img name="George" src='+imageURL+' style="display:block"></body></html>');
close();		
}
}
