//=========================================//
// LOADING
//=========================================//

var api_seting = {
    my_modal: false,
    se_time: 0,
	is_loading_var:'#loading_info',
	is_loading_info:'Загрузка',
	error_var:'#error_conteiner',
	error_num:error_num = 0,
	error_speed:400,
	error_nav:'.info_nav',
	big_info_var:'.big_ingo',
	big_in_data:'#big_info_data',
	big_in_open:'.fast_start',
	big_in_close:'.close_big_info',
	big_in_speed:500,
	big_in_out_speed:300,
	big_in_fade:'slow',
	modal_win_var:'#modal_win',
	modal_win:'.modal_win',
	modal_win_speed:300,
	tabs_li_var:'.tabs_li_hash_',
	tabs_content_var:'#tabs_',
	tabs_hide_class:'.tabs_hash_',
	tabs_active_class:'active',
	sesion:'Сесия истекла, обновите страницу.',
    group:'Нет прав доступа к модулю!',
	show_operator:false
}

function is_loading(args){
    
    var in_i = $('#loading_info');

    if(!in_i.length){
        
        var in_i = [
            '<div id="loading_info" class="position left_50"><b></b><span></span></div>'
	        ].join('');
        $(in_i).appendTo('body');
        
    }
    
    var defaults = { info:"", callback:null };
    args         = $.extend(defaults, args);
    
    var is_info     = (args.info) ? args.info : api_seting.is_loading_info,
        elem        = $(api_seting.is_loading_var),
        status      = elem.css('display');
        
    if(status == 'none')
    elem.show().animate({'opacity':'1',top:'30px'},200,function(){ if(args.callback) { args.callback() } }).find('span').text(is_info+'...');
    else{
        close_is_loading(function(){
            is_loading(is_info);
        });
    }
}
function close_is_loading(callback){
    $(api_seting.is_loading_var).animate({'opacity':'0',top:'20px'},200,function(){ $(this).hide(); if(callback) { callback() }   });
}

//=========================================//
// ERROR
//=========================================//

var info_seting = {
    width_right_load:277,
    margin_c_load:152,
    width_c_load:304,
    height_span:38,
    width_right_def:26,
    margin_c_def:27,
    width_c_def:54,
    elem:'.show_error_layer',
    right:'.show_error_right',
    text:'.show_error_text span',
    shadow:'.show_error_shadow',
    max_w_text:220,
    time:0
}

function show_error(error,callback){
    
    if(!$(info_seting.elem).length){
        var er = [
        '<div class="show_error_layer">',
         '<div class="show_error_left"><div class="show_error_gif"></div><div class="show_error_o" onclick="hide_error()"></div></div>',
         '<div class="show_error_right">',
          '<div class="show_error_text_c"><div class="show_error_text"><span></span></div><div class="show_error_shadow"></div>',
         '</div></div>',
        '</div>'
	    ].join('');
        
        $(er).appendTo('body');	
    }
    
    var elem = $(info_seting.elem);
    
    go_text_a = function(text){
        
        w = $(info_seting.text).width();
        s = w-info_seting.max_w_text;
        
        $(info_seting.text).css({marginLeft:0});
        
        if(w > info_seting.max_w_text){
            $(info_seting.text).css({display:'block',marginLeft:0}).animate({marginLeft:'-'+s},1500+(s*15));
        }
        
    }
    
    go = function(text){
        elem.fadeIn(300,function(){
            elem.animate({marginLeft:'-'+info_seting.margin_c_load,width:info_seting.width_c_load},400);
        
            $(info_seting.right).animate({width:info_seting.width_right_load},400,function(){
                $(info_seting.text).html(text).fadeIn('fast');
                go_text_a();
                
                if(callback) callback();
            });
        });
    }
    
    gets = function(text){
        $(info_seting.shadow).show();
        $(info_seting.text).css({display:'block'}).stop().animate({opacity:0,marginTop:info_seting.height_span},400,function(){
            $(this).css({marginTop:'-'+info_seting.height_span+'px',marginLeft:0}).html(text).animate({opacity:1,marginTop:0},400,function(){
                $(info_seting.shadow).hide();
                go_text_a();
            });
        });
    }
    
    if(elem.is((':visible'))) gets(error);
    else go(error);

}
function hide_error(){
    var elem = $(info_seting.elem);
    
    $(info_seting.text).stop().fadeOut(300,function(){
        $(info_seting.right).animate({width:info_seting.width_right_def},400,function(){
                elem.fadeOut(300);
            });
        elem.animate({marginLeft:'-'+info_seting.margin_c_def,width:info_seting.width_c_def},400);
    });
}

//=========================================//
// OPERATOR
//=========================================//

function strpos( haystack, needle){

	var i = haystack.indexOf( needle );
	return i >= 0 ? true : false;
}


function operator(result,ej){
    var status = false;
    
    if(api_seting.show_operator){
        is_modal('Результат!',result);
        api_seting.show_operator = false;
        return false;
    }

    if(strpos(result, '<b>Parse error</b>:') || strpos(result, '<b>Fatal error</b>:') || strpos(result, '<b>Warning</b>:') || strpos(result, '<b>Catchable fatal error</b>:')){
        
        found = result.match(/<b>(.*?)<\/b>:(.*?)<br \/>/ig);
        
        result = found[0];
        
        is_modal('Ошибка!',result);
        return false;
    }
    
    if(strpos(result, 'seting = {')){
        
        found = result.match(/seting = \{(.*?)\}/g);
        
        result = found[0];

        status = true;
        result = eval(result);
        
        if(result.info)   show_error(result.info);
        if(result.sesion) show_error(api_seting.sesion);
        if(result.group)  show_error(api_seting.group);
        if(result.sql)    is_modal('Ошибка MYSQL!',result.sql);
    }

    if(ej && !status){
        if(result.status)   return true; 
        else is_modal('Ошибка!',result);
    }
    else{
        if(!result.info && !result.sql && !result.sesion && !result.group) return true;
    }
    
}

//=========================================//
// BIG_INFO
//=========================================//
function show_big_info(data){
    var elem = $(api_seting.big_info_var);
    var status = elem.css('opacity');
    
    if(status == '1'){
        close_big_info(function(){
            show_big_info(data);
        });
    }
    else{
        $(api_seting.big_in_data).html(data);
        elem.animate({bottom:'5px',opacity:'1'},api_seting.big_in_speed,function(){
            $(this).animate({bottom:'0px'},api_seting.big_in_out_speed);
            $(api_seting.big_in_open).slideUp(api_seting.big_in_fade);
            $(api_seting.big_in_close).slideDown(api_seting.big_in_fade);
        });
    }
    
}
function close_big_info(callback){
    $(api_seting.big_info_var).animate({bottom:'-107px',opacity:'0'},api_seting.big_in_speed,function(){
        $(api_seting.big_in_open).slideDown(api_seting.big_in_fade);
        $(api_seting.big_in_close).slideUp(api_seting.big_in_fade);
        $(api_seting.big_in_data).html('');
        if(callback) callback();
    });
}

//=========================================//
// MODAL_WINDOW
//=========================================//
function buld_modal(params){
    var elem = $(api_seting.modal_win_var);
    var hashw = Math.floor(Math.random() * (999 - 0) + 0);
    
    /*
    if(elem.length){
        close_modal(function(){
            buld_modal(params);
        }); 

	    return false;
    }
    */
    
    var buttonHTML = '';
		$.each(params.buttons,function(name,obj){

			buttonHTML += '<div class="win_button"><div><div><div>'+name+'</div></div></div></div>';

			if(!obj.action){
				obj.action = function(){};
			}
	});
    
    var promt = '';

    if(params.promt || params.promt == ''){
        promt = '<div class="input"><div><input type="text" value="'+params.promt+'" id="promt_modal" /></div></div>';
    }
    
    if(api_seting.my_modal){
        var markup = api_seting.my_modal({title:params.title,message:params.message,promt:promt,button:buttonHTML});
    }
    else{
        var markup = [
			'<div id="modal_win" style="z-index:998" class="win_',hashw,'"><div class="modal_win" onclick="is_modal_cur(this)">',
			'<div class="top_big_win">',
            '<div class="top_big_win_2">',
            '<div class="top_big_win_3">',
			'<h3 class="title_win">',params.title,'</h3>',
            '</div></div></div>',
            '<div class="cen_big_win">',
            '<div class="cen_big_win_2">',
            '<div class="cen_big_win_3">',
			'<div class="conteiner_modal">',params.message,promt,'</div>',
			'<div id="modal_buttons">',
			buttonHTML,
			'<div class="clear"></div></div></div></div></div>',
            '<div class="bot_big_win">',
            '<div class="bot_big_win_2">',
            '<div class="bot_big_win_3">',
            '</div></div></div></div></div>'
	    ].join('');
    }
    
    $(markup).hide().appendTo('body').fadeIn();
    
        var win = $('.win_'+hashw).find(api_seting.modal_win);
        
        if(params.width) win.css({'width':params.width});
        
        
        var height = win.height();
        var width  = win.width();
    
        var top    = (height / 2);
        var left   = (width  / 2);

        win.css({
            'top'        :'45%',
            'margin-top' :'-' + top + 'px',
            'margin-left':'-' + left + 'px'
        });
 
        win.animate({top:'50%',opacity:'1'},api_seting.modal_win_speed);
        
        
        get_pos = function(){
            var height = win.height();
    
            var top    = (height / 2);
            
            win.animate({marginTop:'-'+top+'px'},api_seting.modal_win_speed);
        }
        
        setTimeout("get_pos()",300);
    
        var buttons = $('.win_'+hashw).find('#modal_buttons .win_button');
			i = 0;

		$.each(params.buttons,function(name,obj){
			buttons.eq(i++).click(function(){
               
                if(params.promt || params.promt == ''){
                    obj.action($('.win_'+hashw).find('#promt_modal').val());
                }
                else{
                    obj.action();
                }
				
				close_modal('.win_'+hashw);
				return false;
			});
		});
}

function close_modal(obj,callback){
    var elem = $(obj);
    
    $(obj).find(api_seting.modal_win).animate({top:'45%',opacity:'0'},api_seting.modal_win_speed,function(){
        
        elem.fadeOut(function(){
			$(this).remove();
            if(callback) callback();
		});
        
    });
    
}

function is_modal_cur(id){
    setTimeout(function(){
        var height = $(id).height();
    
        var top    = (height / 2);
            
        $(id).animate({marginTop:'-'+top+'px'},api_seting.modal_win_speed);
    },300);
    
}

//=========================================//
// WARNING
//=========================================//
function buld_warning(params){
    var elem = $('#warning_modal');

    if(elem.length){
			return false;
    }
    
    var buttonHTML = '';
		$.each(params.buttons,function(name,obj){

			buttonHTML += '<div class="w_button">'+name+'</div>';

			if(!obj.action){
				obj.action = function(){};
			}
	});
    
    var markup = [
            '<div id="warning_modal" style="z-index:999">',
             '<div id="warning_win">',
             '<div class="top">',
              '<div class="content">',
               '<div class="warning_conteiner">',
                '<div class="warning_ico"></div>',
                '<div class="warning_title"></div>',
                '<div id="warning_content">',params.message,'</div>',
               '</div></div>',
             '</div>',
             '<div class="bot">',
              '<div id="warning_buttons">',
              buttonHTML,
              '<div class="clear"></div>',
             '</div>',
            '</div>',
            '</div>',
            '</div>'
	].join('');
    
    $(markup).hide().appendTo('body').fadeIn();
    
        var win = $('#warning_win');
        var height = win.height();
        var width  = win.width();
    
        var top    = (height / 2);
        var left   = (width  / 2);

        win.css({
             'top'        :'45%',
             'margin-top' :'-' + top + 'px',
             'margin-left':'-' + left + 'px'
             });
 
        win.animate({top:'50%',opacity:'1'},500);

        var buttons = $('#warning_buttons .w_button');
	    
        i = 0;

		$.each(params.buttons,function(name,obj){
			buttons.eq(i++).click(function(){
			 
             obj.action();
			 close_warning();
			 return false;
			});
		});
}

function close_warning(){
    var elem = $('#warning_modal');
    
    $('#warning_win').animate({top:'45%',opacity:'0'},500,function(){
        
        elem.fadeOut(function(){
			$(this).remove();
		});
        
    });
}

//=========================================//
// FORM
//=========================================//

function select_show_list(id){
    
    var select = $(id);

    var elem = $(id).find('div.list_select');
    
    var status = elem.css('display');
    
    if(status == 'none'){
        var zindex = eval(select.css('z-index')) + 1;
        
        select.css({'z-index':zindex});
        
        elem.find('ul').width(select.width());
        
        elem.slideDown();
    }
    else{
        var zindex = eval(select.css('z-index')) - 1;
        
        
        
        elem.slideUp(function(){
            select.css({'z-index':zindex});
        });
    }
    
}

function select_list(id,value,name,y){
    var list = $('.list_select_'+id);
    
    var elem = $('.select_name_'+id);
    
    elem.find('span').text(name);
    elem.find('input').val(value);
    
    list.removeClass('selected');
    $(y).addClass('selected');
}

function checkbox(id){
    var elem = $(id);
    
    var status = elem.find('input').val();
    
    if(status == 'yes'){
        elem.removeClass('check');
        elem.find('input').val('no');
    }
    else{
        elem.addClass('check');
        elem.find('input').val('yes');
    }
    
}

function tabs(hash,id,y){
    
    $(api_seting.tabs_li_var+hash).removeClass(api_seting.tabs_active_class);
    $(y).addClass(api_seting.tabs_active_class);
    
    $(api_seting.tabs_hide_class+hash).hide();
    $(api_seting.tabs_content_var+id).show();

}


//=========================================//
// API
//=========================================//


function conect(params){
    
    params = $.extend({url:false,nodisplay:false,post:''},params);
    
    if(!params.url) {
        show_error('Не указан url');
        return false;
    }
    
    sf = params.url.substring(0,1);
    
    if(sf == '/') params.url = params.url.substring(1,params.url.length);
    
    if(!params.nodisplay) is_loading();
    
    if(params.post){
        $.post(params.url,params.post,function(data){
            if(operator(data,params.status)){
                if(params.action) params.action(data);
            }
            else{
                if(params.error) params.error(data);
            }
            
            if(!params.nodisplay) close_is_loading();
        });
    }
    else{
        $.ajax({
            url: params.url,
            success: function(data) {
                if(operator(data,params.status)){
                    if(params.action) params.action(data);
                }
                else{
                    if(params.error) params.error(data);
                }
                
                if(!params.nodisplay) close_is_loading();
            },
            error: function(){
                show_error('Не удалось установить соединение!');
                if(!params.nodisplay) close_is_loading();
            }
        });
    }
    
}

function show_content(obj1,obj2,callback){
    $(obj1).fadeOut(200,function(){
        $(obj2).fadeIn(200,function(){
            if(callback) callback();
        });
    })
}

function show_load_content(obj1,callback){
    $(obj1).animate({opacity:'0.5'},200,function(){
        $(this).animate({opacity:'1'},200);
        if(callback) callback(obj1);
    })
}

function is_modal(title,massage,callback){
    buld_modal({
        'title'  :title,
        'message':massage,
        'width'  :600,
        'buttons':{
            'Закрыть':{
                'action':function(){ if(callback) callback(); }
            }
        }
    });
}

function is_modal_seting(title,massage,callback,width){
    buld_modal({
        'title'  :title,
        'message':massage,
        'width'  :((width) ? width : 600),
        'buttons':{
            'Отмена':{},
            'Сохранить':{
                'action':function(){ if(callback) callback(); }
            }
        }
    });
}

function is_confirm(title,massage,callback){
    buld_modal({
        'title'  :title,
        'message':massage,
        'buttons':{
            'Нет':{},
            'Да':{
                'action':function(){ if(callback) callback(); }
            }
        }
    });
}

function is_promt(title,massage,promt,action){
    buld_modal({
        'title'  :title,
        'message':massage,
        'promt'  :promt,
        'buttons':{
            'Нет':{},
            'Да':{
                'action':function(e){ if(action) action(e) }
            }
        }
    });
}

function warning_confirm(massage,callback){
    buld_warning({
        'message':massage,
        'buttons':{
            'Нет':{},
            'Да':{
                'action':function(){ if(callback) callback(); }
            }
        }
    });
}

function warning(massage,callback){
    buld_warning({
        'message':massage,
        'buttons':{
            'Закрыть':{
                'action':function(){ if(callback) callback(); }
            }
        }
    });
}

function ShowOrHide(id,type){
    var status = $(id).css('display');
    
    if(status == 'none'){
        if(!type)
           $(id).slideDown('fast');
        else
           $(id).show();
    }
    else{
        if(!type)
           $(id).slideUp('fast');
        else
           $(id).hide();
    }
}

function load_widget(id,widget,theme){
    conect({
        url: 'moduls/user_widgets/'+widget+'/saite_mod.php'+(theme ? '?mytheme='+theme : ''),
        action: function(data){
            $('#'+id).html(data);
        },
        nodisplay: true
    })
}

function replase(id){
    
    var val = $(id).val().replace(/[^a-z0-9_]/g,'');
        val = val.substr(0,15,val);
    
    $(id).val(val);
}

