
var status = true;

var bff =
{

extend: function(destination, source) {
    for (var property in source)
        destination.prototype[property] = source[property];
    return destination;
},

addListener: function (element, event, func)
{
    var handler = function (e)
    {
        var target = e.target || e.srcElement;
        var e = e || window.event;
        func.call(bff.ie ? target : this, e)
    };

    bff.ie ? element.attachEvent('on' + event, handler) : element.addEventListener(event, handler, false);
},

cancelEvent: function(event) {
  var e = event.originalEvent || event;
  if (e.preventDefault)
      e.preventDefault();
  if (e.stopPropagation)
      e.stopPropagation();
  e.cancelBubble = true;
  e.returnValue = false;
  return false;
},
cloneObject: function clone(o) {
     if(!o || 'object' !== typeof o)  {
       return o;
     }
     varc = 'function' === typeof o.pop ? [] : {};
     var p, v;
     for(p in o) {
     if(o.hasOwnProperty(p)) {
      v = o[p];
      if(v && 'object' === typeof v) {
        c[p] = clone(v);
      }
      else {
        c[p] = v;
      }
     }
    }
     return c;
},
isEmail: function(item)
{
    var at="@";
    var dot=".";
    var lat=item.indexOf(at);
    var litem=item.length;
    var ldot=item.indexOf(dot);

       var regx= new RegExp ("^[_a-zA-Z0-9-]+(\.[_a-zA-Z0-9-]+)*@[-0-9a-z_^\\.]+\\.[a-z]{2,6}$", 'i');
       if (!regx.test(item)) {
               return false;
       }
    if (item.indexOf(at)==-1) return false;
    if (item.indexOf(at)==-1 || item.indexOf(at)==0 || item.indexOf(at)==litem) return false;
    if (item.indexOf(dot)==-1 || item.indexOf(dot)==0 || item.indexOf(dot) >= litem - 2) return false;
    if (item.indexOf(at,(lat+1))!=-1) return false;
    if (item.substring(lat-1,lat)==dot || item.substring(lat+1,lat+2)==dot) return false;
    if (item.indexOf(dot,(lat+2))==-1) return false;
    if (item.indexOf(" ")!=-1)  return false;

    return true;
},

textLimit: function(ta, count, counter)
{
  var text = document.getElementById(ta);
  if(text.value.length > count) {
    text.value = text.value.substring(0,count);
  }
  if(arguments.length>2) { // id of counter is defined
    document.getElementById(arguments[2]).value = text.value.length;
    }
},

popupPic: function(sPicURL)
{
    window.open( "/popup.htm?"+sPicURL, "", "resizable=1, scrollbars=yes, HEIGHT=200,WIDTH=200");
},

busylayer: function( toggle, callback )
{
    callback = callback || new Function();
    toggle = toggle || false;

    var bl = $('#busyLayer');
    if(!bl.length) //if not exists
    {
        var body = document.getElementsByTagName('body')[0];

        bl = document.createElement('div');
        bl.id = 'busyLayer';
        bl.className = 'busyLayer';
        bl.style.display = 'none';
        bl.style.textAlign = 'center';
        bl.innerHTML = '<img src="/img/progress-large.gif" />';
        body.appendChild(bl);

        $(document).keydown(function(e) {
            if (e.keyCode == 27 && $(bl).is(':visible')) {
                bff.cancelEvent(e);
                $(bl).fadeOut(500);
            }
        });
    }
    bl = $(bl);

    if(bl.is(':visible')) {
        if(toggle){
            bl.fadeOut(500);
        }
        return;
    }

    var height = $(document).height();
    var paddingTop = (height/2);
    bl.css('height', height + 'px');
    bl.css('paddingTop', paddingTop + 'px');
    bl.fadeIn(600, callback);
},

ajax_delnode: function (node){
    if(status) {
        node = $(node) || null;
        var callback = function (result){
            if(result) {
                var table = node.parents('table.admtbl');
                node.parents('tr').remove();

                var tr = table.find('tr[class^=row]');
                tr.each(function (key, value) {
                    $(value).attr('class', 'row'+(key%2))
                });

                if(tr.length == 0)
                    table.append('<tr class="row1"><td class="admDescription alignCenter" colspan="5">не найдено ни одной записи</td></tr>');
            }

            status = true;
        };

        if(node) {
            status = false;
            $.post(site_url + "/admin/" + node.attr('href'), {}, callback);
        }
    }
},


ajax_togglenode: function toggle(node){
    if(status) {
        node = $(node) || null;
        var callback = function (result){
            if(result)
                node.attr('class', (node.attr('class') == 'but unblock' ? 'but block' : 'but unblock'));

            status = true;
        };

        if(node) {
            status = false;
            $.post(site_url + "/admin/" + node.attr('href'), {}, callback);
        }
    }
},

ajax_movenode: function move(node){
    if(status) {
        node = $(node) || null;
        var callback = function (result){
            var row = node.parent().parent()

            switch(result) {
                case 'up':   var prev = row.prev();
                             var pclass = prev.attr('class');

                             prev.attr('class', row.attr('class'));
                             row.attr('class', pclass);
                             prev.before(row);

                break;
                case 'down': var next = row.next();
                             var nclass = next.attr('class');

                             next.attr('class', row.attr('class'));
                             row.attr('class', nclass);
                             next.after(row);
                break;
            }

            status = true;
        };

        if(node) {
            status = false;
            $.post(site_url + "/admin/" + node.attr('href'), {}, callback);
        }
    }
},


ajaxToggleWorking: false,
ajaxToggle: function(nRecordID, sURL, _options)
{
    if(bff.ajaxToggleWorking)
        return;

    bff.ajaxToggleWorking = true;

    var options = { };
        options = $.extend({
            link: '#lnk_',
            block: 'block', unblock: 'unblock',
            progress: false,
            toggled: false //return toggled records ids
        }, _options || {});

    if(sURL == '' || sURL == undefined)
        return;

    if(options.progress)
        $(options.progress).show();

    var me = this;
    var eLink = null;
    $.post(sURL, {'rec': nRecordID, 'toggled': options.toggled },
        function(data)
        {
            if(options.progress)
                $(options.progress).hide();

            if(data == 401)
            {
                alert('В доступе отказано');
                bff.ajaxToggleWorking = false;
                return;
            }

            if(data != 0)
            {
                if(options.toggled)
                {
                   data.toggled.each( function(t){
                        eLink = $(options.link+t);
                        if( eLink!=undefined) {
                            eLink.removeClass( (result.status ? options.block : options.unblock) );
                            eLink.addClass( (result.status ? options.unblock : options.block) );
                        }
                   });
                }
                else {
                    eLink = $(options.link+nRecordID);
                    if( eLink!=undefined) {
                        var has = eLink.hasClass( options.unblock);
                        eLink.removeClass( (has? options.unblock : options.block) );
                        eLink.addClass( (has? options.block : options.unblock) );
                    }
                }
            }
            bff.ajaxToggleWorking = false;
        }
    );
},

ajaxDeleteWorking: false,
ajaxDelete: function(sQuestion, nRecordID, sURL, _options)
{
    if(bff.ajaxDeleteWorking)
        return;

    if(!confirm(sQuestion))
        return;

    bff.ajaxDeleteWorking = true;

    var options = {};
        options = $.extend({
            prefix: '#item_',
            progress: false,
            onComplete: null,
            dataType: 'string'
        }, _options || {});

    if(sURL == '' || sURL == undefined)
        return;

    if(options.progress)
        $(options.progress).show();

    $.post(sURL, {'rec': nRecordID },
        function(data) {

            if(options.progress)
                $(options.progress).hide();

            if(options.onComplete)
            {
                bff.ajaxDeleteWorking = false;
                return options.onComplete(data);
            }
            if(data == 401)
            {
                alert('В доступе отказано');
                bff.ajaxDeleteWorking = false;
                return;
            }
            if(data == 0)
              $(options.prefix+nRecordID).remove();


            bff.ajaxDeleteWorking = false;
        },options.dataType
    );
},





rotate_tableDnD: function(list, url, rotateClass, progress)
{
    var aOldOrder = Array();
    var aNewOrder = Array();
    var rows      = Array();
    var orderChanged = 0;
    var progress     = $(progress);

    $(list).tableDnD
    (
        {
            onDragClass: rotateClass,
            onDragStart: function(table, row)
            {
                rows = table.tBodies[0].rows;

                for(var i=0; i<rows.length; i++)
                {
                    aOldOrder[i] = rows[i].id.replace('tr', '');
                }
            },
            onDrop: function(table, row)
            {
                rows = table.tBodies[0].rows;
                orderChanged = 0;

                for (i=0; i<rows.length; i++)
                    aNewOrder[i] = rows[i].id.replace('tr', '');

                for(i=0; i<aOldOrder.length; i++)
                {
                    if(aOldOrder[i] != aNewOrder[i])
                    {
                       orderChanged = 1;
                       break;
                    }
                }
                if(orderChanged == 1)
                {

                    progress.show();
                    $.ajax({
                      type: 'POST',
                      url: url,
                      data: $.tableDnD.serialize(),
                      success: function(data) { progress.hide();  }
                    });
                }
            }
        }
    );
},

formSelects:
{
    MoveAll: function(source_id, destination_id)
    {
        var source      = document.getElementById(source_id);
        var destination = document.getElementById(destination_id);

        for(var i=0; i<source.options.length; i++)
        {
            var opt = new Option(source.options[i].text, source.options[i].value, false);
            opt.style.color = source.options[i].style.color;
            destination.options.add(opt);
        }
        source.options.length = 0;
    },

    MoveSelect: function (source_id, destination_id)
    {
        var source      = document.getElementById(source_id);
        var destination = document.getElementById(destination_id);

        for(var i=source.options.length-1; i>=0; i--)
        {
            if(source.options[i].selected==true)
            {
                var opt = new Option(source.options[i].text, source.options[i].value, false);
                opt.style.color = source.options[i].style.color;
                destination.options.add(opt);
                source.options[i] = null;
            }
        }
    },

    SelectAll: function(sel_id)
    {
        var sel = document.getElementById(sel_id);
        for(i=0; i<sel.options.length; i++)
        {
            sel.options[i].selected = true;
        }
    }
},

accordionMenu: function(selector, current)
{
    $(document).ready(function(){

        current = current || 0;

        //hide all
//        $(selector+' ul').each(function(){
//            this.style.overflow = 'hidden';
//            this.style.visibility = 'hidden';
//            this.style.height = '0px';
//        });

        //show current
        current = $(selector+' li.tab:eq('+current+') ul');
        if(current.length) {
            current.height( current[0].scrollHeight + 'px' );
            current.css('visibility', 'visible');
        }

        $(selector+' li a.tab').click(function(){
             var nxt = $(this).next();
             if(nxt.is('ul'))
             {
                if(!nxt.is(':hidden')) {
                    nxt.animate({'height': '0px', 'opacity': 0}, 380);
                }
                else {
                    nxt.css('visibility', 'visible');
                    nxt.animate({'height': (nxt[0].scrollHeight+'px'), 'opacity': 1 }, 380);
                    if(nxt.attr('id')!=current.attr('id'))
                    {
                        current.animate({'height': '0px', 'opacity': 0}, 380);
                        current = nxt;
                    }
                }
                return false;
             }

        });

    });
},

formHelper: function( form, options )
{

    this.form     = form;
    this.elements = { };
    this.options  = { error_block: 'error_block',
                      error_msg: 'error_msg',
                      scroll: 800,
                      pass_ne_login: true,
                      login_min_length: 5 };

    if (options) {
        for (var o in options) {
            this.options[o] = options[o];
        }
    }

    this.initialize();
}

};

/*@cc_on bff.ie=true;@*/

bff.formHelper.prototype = {

    initialize: function( )
    {
        this.elements.errorblock = document.getElementById(this.options.error_block);
        this.elements.msg        = document.getElementById(this.options.error_msg);

    },
    $: function( name )
    {
        return this.form.elements[name];
    },
    showMessage: function( text )
    {
        this.elements.msg.innerHTML = text;
        this.elements.errorblock.style.display = 'block';
    },
    showMessageIncorrect: function( fieldTitle )
    {
        this.showMessage('поле <b>'+fieldTitle+'</b> заполнено некорректно');
    },
    hideMessage: function()
    {
        this.elements.errorblock.style.display = 'none';
    },
    isEmpty: function( input, title )
    {
        if(input.value.length == 0)
        {
             this.showMessage('не заполнено поле <b>'+title+'</b>');
             this.focusInput(input);
             return false;
        }
        return true;
    },
    isEmail: function(item)
    {
        return bff.isEmail(item);
    },

    error_last_input: undefined,
    error_last_input_border: null,
    focusInput: function( input )
    {
        if(this.options.scroll)
            $.scrollTo('#'+this.options.error_block, this.options.scroll );

        //if(this.error_last_input!=undefined && this.error_last_input!=input)
        //    $(this.error_last_input).css('border-color', this.error_last_input_border );

        //this.error_last_input = input;
        //this.error_last_input_border = $(input).css('border-color');
        //$(input).css('border-color', 'red');

        input.focus();
    }






};

