function spinner(a) {

    var spinner =  document.getElementById('spinner_outer');

    if (a == 1) {
        spinner.style.display = 'block';
    } else {
        spinner.style.display = 'none';
    }

}

// Возвращает название скрипта (из URL)
function caller() {

    return location.pathname.substring(location.pathname.lastIndexOf('/') + 1);

}

// Возвращает название ф-ции(если аргумент = arguments.callee)
function func_name(func) {

    var p=/function\s+(\w+)/.exec(func + "");
    return p?p[1]:null;

}

// Отменяет продвижение события вверх
function cancelBubble(ev) {
    
    if (!ev) {
        ev = window.event;
    }
    
    ev.cancelBubble = true;
    
}

// Возвращает ассоциативный массив ключ => значение,
// где ключи равняются атрибуту name,
// значения - value
// (для тех эл-тов, у которых есть name и value одновременно)
// параметр - эл-т формы, кот. может быть получен 
// с помощью getElementById(), либо любым другим способом
//
// Пример:
// 
// var formObj = document.getElementById('myForm');
// var data = getFormInputObj(formObj);
//
// JsHttpRequest.query('script.php',  
//                     obj,  // --> Данные формы
//                     function(result, errors) {
//                  
//                         if (result['status'] == 1) {
//                    
//                             alert('Ваша заявка была сохранена.\n' +
//                                   'На указанный вами email выслано письмо с указанием о дальнейших действиях.\n');
//                    
//                         } else {
//                    
//                             alert(result['status']);
//                    
//                         }
//                    
//                     },
//                     true);
function getFormInputObj(f) {
    
    if (f &&
        f.tagName &&
        f.tagName.toLowerCase() == 'form') {
            
            var ar = new Array(); 
            /*var nodes = formElement.elements;*/
            
            for (var i=0; i < f.length; ++i) {
            
                var tagName = f[i].tagName.toLowerCase(); 
                var name    = f[i].getAttribute('name');
                var value   = '';
                
                // Если input
                if (tagName == 'input') {
                
                    switch (f[i].getAttribute('type')) {
                    
                        // type = null, text, password, hidden имеют одинаковую природу
                        case null:
                        case '':
                        case 'text':
                        case 'password':                
                        case 'hidden':
                        
                            value = f[i].value;
                            
                            break;
                            
                        // У чекбокса проверяем checked    
                        case 'checkbox':
                        
                            if (f[i].checked) {
                            
                                value = f[i].getAttribute('value'); 
                                if (!value) value = 1;
                                
                            } else {
                            
                                value = 0;
                                
                            }
                            
                            break;
                            
                        default:
                        
                            continue;
                            break;                  
                    }
                
                // С textarea все также как и с input[type=text]    
                } else if (tagName == 'textarea') {
                
                    value = f[i].value;
                
                // select может быть multiple    
                } else if (tagName == 'select') {
                
                    /*if (f[i].multiple) {
                     
                        opt = f[i].options;
                        
                        for (var j=0; j < opt.length; ++j) {
                        
                            if (opt[j].selected) {
                                 
                                o.name = name; 
                                o.value = opt[j].value;
                                this.data.push(o);
                            }               
                        }
                    
                        continue; 
                        
                    } else {*/
                    
                        value = f[i].value;
                        
                    //}
                }
                
                ar[name] = value;
                
            }
            
            return ar;
           
        } else {
    
        
            return false;
    
        }
    
}

/*for (var i=0; i < tf.length; ++i) {
        var tagName = tf[i].tagName.toLowerCase();
        var name = tf[i].getAttribute('name');
        var value = '';
       
        if (tagName == 'input') {
            switch (tf[i].getAttribute('type')) {
                case null:
                case '':
                case 'text':
                case 'password':               
                case 'hidden':
                    value = tf[i].value;
                    break;
                case 'checkbox':
                    if (tf[i].checked) {
                        value = tf[i].getAttribute('value');
                        if (!value) value = 'on';
                    } else {
                        continue;
                    }
                    break;
                default:
                    continue;
                    break;                   
            }
        } else if (tagName == 'textarea') {
            value = tf[i].value;
        } else if (tagName == 'select') {
            if (tf[i].multiple) { 
                opt = tf[i].options;
                for (var j=0; j < opt.length; ++j) {
                    if (opt[j].selected) {
                        o = new Object();
                        o.name = name;
                        o.value = opt[j].value;
                        this.data.push(o);
                    }               
                }
           
                continue; // а�б� б�аЖаЕ аЗаАаНаЕб�аЛаИ аВб�аЕ аПаОаЗаИб�аИаИ аВ аМаАб�б�аИаВ
            } else {
                value = tf[i].value;
            }
        }
       
        o = new Object();
        o.name = name;
        o.value = value;
        this.data.push(o);
    }*/