function setPreload(selector,isMini){ 
    var gif = isMini ? '/img/miniload.gif' : '/img/mwait2.gif';
    jQuery(selector).html('<img src="' + gif + '"/>').show(); 
}
function setTheme(val)
{
    jQuery.ajax({url: "/index/settheme",
                 cache: false,
                 type: "POST",
                 data: {theme: val},   
                 async: false,
                 success: function(data, textStatus, XMLHttpRequest)
                 {     
                     eval("var state = " + XMLHttpRequest.getResponseHeader("STATUS"));
                     if(parseInt(state) == 1)
                     {
                             setTimeout('window.location.reload()', 500)
                     }
                     
                 }
              });
}

function getLoginForm()
{
   jQuery("#loginform").dialog("open");
}

function doLogin()
{
    jQuery.ajax({url: "/login/login",
                 cache: false,
                 type: "POST",
                 data: jQuery(".login_form").serialize(),
                 async: false,
                 success: function(data, textStatus, XMLHttpRequest)
                 {
                     eval("var state = " + XMLHttpRequest.getResponseHeader("STATUS"));
                     if(parseInt(state) == 1)
                     {
                         setTimeout('window.location.reload()', 500)
                     }
                     else
                     {
                         jQuery(".login_form input").addClass("error").attr("title","Пара логин/пароль не найдена");
                     }
                 }
              });
}

function getLogout()
{
   jQuery.ajax({url: "/login/logout",
                 cache: false,
                 type: "POST",
                 async: false,
                 success: function(data, textStatus, XMLHttpRequest)
                 {
                    eval("var state = " + XMLHttpRequest.getResponseHeader("STATUS"));
                    if(parseInt(state) == 1)
                    {
                        setTimeout('window.location.reload()', 500)
                    }                 
                 }
              }); 
}

function setWaitButton(box)
{
    var text = jQuery(box).val();
    //jQuery(box).val("");
    jQuery(box).addClass("wait");
    jQuery(box).attr("disabled","disabled"); 
    return text;
}

function setWaitBox(box, text)
{    
    jQuery(box).html(text); 
    jQuery(box).addClass("wait");        
}

function removeWaitButton(box,text)
{
    jQuery(box).val(text);
    jQuery(box).removeClass("wait");
    jQuery(box).removeAttr("disabled");     
}

function removeWaitBox(box,text)
{
    jQuery(box).html(text);
    jQuery(box).removeClass("wait");    
}



function doGenerateUrl(from, to)
{
    var text = jQuery(from).val();
    if(!text) return false;
    jQuery.post("/staticpages/transliterate", {val : text}, function(r, s, xhr){ eval("var xJSON = " + xhr.getResponseHeader("X-JSON")); jQuery(to).val(xJSON.data);});
}
   
jQuery(document).ready(function(){
    
    jQuery("#loginform").dialog({modal: true, resizable: false, width: 230, height: 140, autoOpen: false});
    jQuery('.fg-button').hover(
            function(){ jQuery(this).removeClass('ui-state-default').addClass('ui-state-focus'); },
            function(){ jQuery(this).removeClass('ui-state-focus').addClass('ui-state-default'); }
        );

    jQuery('#menu_theme_button').menuUI({
            content: jQuery('#menu_theme').html(),
            crumbDefaultText: "Выберите тему",
            backLink: false,
            maxHeight: 500
    });
/*
    jQuery('#menu_button').menuUI({
            content: jQuery('#menu_content').html(),
            backLink: false,
            crumbDefaultText: "Выберите раздел",
            topLinkText: "Меню",
            maxHeight: 500
        });
*/
    jQuery('#menu_button').menuUI({
            content: jQuery('#menu_content').html(),
            backLink: false,
            crumbDefaultText: "Выберите раздел",
            topLinkText: "Меню",
            flyOut: true
        });
   


    


});


handlerForm = function(selector,selectorMessage,selectorData,isMini) {
   this.selector = selector;   
   this.selectorMessage = selectorMessage || '';
   this.selectorData = selectorData || '';
   this.isMini = isMini || false;    
   this.getRedirect = false;  
}
handlerForm.init = function(selector,selectorMessage,selectorData,isMini){
    var obj = new handlerForm(selector,selectorMessage,selectorData,isMini);
    return obj;
}
handlerForm.prototype = {        
    $ : function(selector) { 
        if (typeof selector != 'undefined')
            return jQuery(selector);
        return jQuery; 
        
    },
    serialize : function ()
    {
        return this.$(this.selector).serialize();
    },
    confirm: function (dlog) {
        var self = this;
        self.$(dlog).dialog({
            resizable: false,
            height:140,
            modal: true,
            buttons: {                
                "Отмена": function() {
                    jQuery( this ).dialog( "close" );
                },
                "Выполнить": function() {
                    jQuery( this ).dialog( "close" );
                    self.ajax();                    
                }
            }
        });
    },
    ajax : function(onSuccess) {         
        
        var self = this;
        self.setPreload()                              
        this.$(this.selector).find('*').removeClass("ui-state-error");
        if(!self.formValidate()) {
            self.setMsg(self.getErrorMsg('Необходимо правильно заполнить поля формы'));
            return false;   
        }
        
        this.$().ajax({url: this.$(this.selector).attr('action'),
                  cache: false,type: "POST",
                  data: self.serialize(),
                  async: false,
                  success: function(data,status,xhr)
                  {
                      self.onSuccessReq(self,data,status,xhr);
                      if (typeof onSuccess == 'function') {
                          onSuccess(self);
                      }
                  }
              });
    },
    getInfoMsg : function(message) {
            var msg = '';
            msg += '<div style="margin-top: 5px;" class="ui-state-highlight ui-corner-all">';
            msg += '<p><span style="float: left; margin-right: 0.3em;" class="ui-icon ui-icon-info"></span>';
            msg += '<strong style="display: block;">Инфо</strong>' + message + '</p></div>';
            return msg;
    },
    getErrorMsg : function(message) {
            var msg = '';
            msg += '<div style="margin-top: 5px;" class="ui-state-error ui-corner-all">';
            msg += '<p><span style="float: left; margin-right: 0.3em;" class="ui-icon ui-icon-alert"></span>';
            msg += '<strong style="display: block;">Ошибка</strong>' + message + '</p></div>';
            return msg;
    },
    setMsg : function(message) {
         this.$(this.selectorMessage).html(message);         
    },
    setData : function(data) {
        this.$(this.selectorData).html(data);         
    },
    setValidationResult : function(elem,is_valid,message)
    {
        if(is_valid) {
            jQuery(elem).removeClass("ui-state-error");
            jQuery(elem).attr("title","");
        } else {
            jQuery(elem).addClass("ui-state-error");
            jQuery(elem).attr("title",message);
        }    
        return is_valid;    
    },
    onSuccessReq : function (self,data,status,xhr) {
         
         var exception = typeof xhr.getResponseHeader('exception') == "string" ? eval(xhr.getResponseHeader('exception')) : '';
         var message = typeof xhr.getResponseHeader('message') == "string" ? eval (xhr.getResponseHeader('message')) : '';
         self.getLocation = typeof xhr.getResponseHeader('getLocation') == "string" ? eval (xhr.getResponseHeader('getLocation')) : '';
         var validation =  '';
         if (typeof xhr.getResponseHeader('validation') == "string" && xhr.getResponseHeader('validation').length > 0) {
             eval('validation = ' + xhr.getResponseHeader('validation'));
         }         
         var redirect = typeof xhr.getResponseHeader('redirect') == "string" ? eval(xhr.getResponseHeader('redirect')) : '';
         
         if(validation != '') {
            for(var i in validation) {
                this.setValidationResult('#'+i, false, validation[i]);                             
            }
         }
         
         var msg = '';
         if (message != '' && typeof message != 'undefined') {
            msg += this.getInfoMsg(message);
         }
         if (exception != '' && typeof exception != 'undefined') {
            msg += this.getErrorMsg(exception);
         }
         if (redirect != '' && typeof redirect != 'undefined') {
             window.location.href = redirect;
             self.getRedirect = redirect;
         }
         this.setMsg(msg);
         this.setData(data);         
    },
    setPreload : function(){ 
        
        var gif = this.isMini ? '/img/miniload.gif' : '/img/mwait2.gif';
        this.$(this.selectorMessage).html('<img src="' + gif + '"/>').show(); 
    },
    formValidate: function()
    {
        var self = this;
        var valid = true;
        
        /**placeholder go to trash*/
        self.$(self.selector).find(".placeholder").each(function(){
                var o = jQuery(this);
                if( o.val() == o.attr( 'alt' ) )   
                    o.val('');    
        });
        
        self.$(self.selector).find(".notEmpty").removeAttr("title");
        self.$(self.selector).find(".notEmpty").removeClass("ui-state-error");
         
        self.$(self.selector).find(".notEmpty").each(function(){
            if(self.$(this).is('input'))
                if(self.$(this).val().length <= 0)
                {
                    self.$(this).addClass("ui-state-error");                    
                    self.$(this).attr("title", "Это поле обязательно для заполнения");
                    valid = false;
                }            
            if(self.$(this).is('textarea'))
                if(self.$(this).val() <= 0)
                {
                    self.$(this).addClass("ui-state-error");
                    self.$(this).attr("title", "Это поле обязательно для заполнения");
                    valid = false;
                }
            if(self.$(this).hasClass('isEmail'))            
            {
                var email = self.$(this).val();                
                    var re = new RegExp('[a-z0-9\.\-_]+@[a-z0-9\.\-_]+\.[a-z0-9]{2,4}');
                    if(!re.exec(email))
                    {
                        self.$(this).addClass("ui-state-error");                    
                        self.$(this).attr("title", "Это поле должно содержать email. Например, login@domain.com");
                        valid = false;
                    }                                
            }
        });
        self.$(self.selector).find(".isEmail").each(function(){            
            
                var email = self.$(this).val();
                if (email.length > 0) {
                    var re = new RegExp('[a-z0-9\.\-_]+@[a-z0-9\.\-_]+\.[a-z0-9]{2,4}');
                    if(!re.exec(email))
                    {
                        self.$(this).addClass("ui-state-error");                    
                        self.$(this).attr("title", "Это поле должно содержать email. Например, login@domain.com");
                        valid = false;
                    }                
                }
            });
        self.$(self.selector).find(".isInn").each(function(){  
                var inn = self.$(this).val();
                var re = new RegExp('[0-9]{1,9}');
                if(inn && !re.exec(inn))
                {
                    self.$(this).addClass("ui-state-error");                    
                    self.$(this).attr("title", "Поле должно содержать цифры");
                    valid = false;
                } 
        });
        return valid;
    }
    
}

Online = function()
{
    var self = this;
}
Online.prototype = 
{
    module: '',
    getOnline: function()
    {
       var self = this; 
       jQuery.post('/'+self.module+'/getonline', function(r,s,xhr){
           self.showDialog(r);
       }); 
    },
    getHistory: function(date)
    {
        var self = this;
        self.showLoad(true);
        jQuery.post('/'+self.module+'/gethistory', {date:date}, function(r,s,xhr){
            self.showLoad(false);
            jQuery("#box_day_history").html(r);
        });          
    },
    showDialog: function(html)
    {
        jQuery("<div title='Статистика онлайн'>" + html + "</div>").appendTo("body").dialog({
            modal:true,
            width:600,
            height:600,
            resizable: false,
            close: function(){jQuery(this).remove()}
        });
    }, 
    initDate: function(box)
    {
        var self = this;
        jQuery(box).datepicker({
            dateFormat: 'dd.mm.yy',
            maxDate: "+1D",
            showAnim: "clip",
            onSelect:  function(dateText, inst)
            {
                self.getHistory(dateText);
            }
        })
    },
    showLoad: function(trigger)
    {
        if(trigger)
            jQuery("#box_day_history").html("<img id='loadTrig' src='/img/mwait2.gif' />");
        else {
            jQuery("#loadTrig").remove();
        }
    },
    viewMore: function(id, a)
    {
        jQuery(".view_more_info_" + id).slideToggle('slow', function(){
        if(jQuery(".view_more_info_" + id).css('display') == 'block')
            jQuery(a).text("Скрыть");
        if(jQuery(".view_more_info_" + id).css('display') == 'none')
            jQuery(a).text("Подробнее...");
        });
    },
    getCountOnline: function()
    {
        var self = this;
        jQuery.post('/' + self.module + '/getcountonline', function(r,s,xhr){
           eval('var count = ' + xhr.getResponseHeader('countOnline') );
           count = typeof count != 'undefined' ? count : 0;
           jQuery("#linkUserCount").html("Пользователей онлайн: " + count); 
        });
    }
}

_online = new Online();



//Сохранение данных по аяксу
(function($) {
    $.fn.formAjax = function(options) {

        var defaults = {
            callback: function(){ window.location.href="/order/"; }
        };

        var opts = $.extend(defaults, options);

        this.find( "input, textarea" ).focus(function(){
            $(this).removeClass( "error" ).attr({title: ''});
        });

        this.submit(function(){
            var iForm = jQuery( this );

            jQuery.ajax({
                url: iForm.attr( 'action' ),
                type: iForm.attr( 'method' ),
                data: iForm.serialize(),
                success: function( data, status, xhr )
                {
                    try
                    {
                        iForm.find( ".error" ).removeClass( "error" );

                        var h = jQuery.parseJSON( xhr.getResponseHeader( "actionmessage" ) );
                        if ( h.type == "error" )
                            {
                            var v = jQuery.parseJSON( xhr.getResponseHeader( "X-JSON" )  );
                            for ( var field in v  )
                                {
                                iForm.find( "#"+field ).addClass( "error" ).attr({ title: v[field] });
                            }

                            jQuery( "<p>" + h.message + "</p>" ).splash({header: "Ошибка"});
                        }
                        else
                            {
                            jQuery( "<p>" + h.message + "</p>" ).splash({header: "Сохранено", callback: opts.callback( iForm ) });
                        }
                    }
                    catch( e )
                    {
                        jQuery( "<p>Во время выполнения возникла ошибка.</p>" ).splash({header: "Ошибка"});   
                    }
                    $( "form#subscribe-form .placeholder" ).placeholder();  
                }
            });

            return false;
        });
    };    
})(jQuery); 

//Всплывающее окошко
(function($) {
    $.fn.splash = function(options) {

        var defaults = {
            header: "",
            callback: function(){}
        };

        var opts = $.extend(defaults, options);
        var self = this;

        var wrapper = jQuery( "<div class='splash'><p>"+opts.header+"</p><p>"+this.html()+"</p><a class='close' href='javascript:void(0)'>Закрыть</a></div>" );
        wrapper.find( "a.close" )
        .click(function(){
            jQuery(this).parents( "div.splash" ).fadeOut( "300", function(){
                $(this).remove();  
            })
            opts.callback();
        });

        wrapper.appendTo( jQuery( "body" ) ).fadeIn( "200" );
        window.setTimeout( function(){
            if (wrapper)
                {
                wrapper.fadeOut( "300", function(){
                    $(this).remove();
                    opts.callback();    
                });
            }
        }, 5000 );

    };    
})(jQuery);

//Рыбина для тектовых полей
  (function($) {
    $.fn.placeholder = function(options) {

        var defaults = {
        };

        var opts = $.extend(defaults, options);
        this.each(function(){
            var o = $(this);
            
            $(this).focus(function(){
                if( $(this).val() == $(this).attr( 'alt' ) )   
                    $(this).val('').removeClass( "inactive" );
            });

            $(this).blur(function(){
                if ($(this).val() == null || $(this).val().length == 0 )
                    $(this).val( $(this).attr( 'alt' ) ).addClass( "inactive" );    
            });

            $(this).parents("form").eq(0).submit(function(){
                if( o.val() == o.attr( 'alt' ) )   
                    o.val('');    
            });
            
            $(this).parents("form").eq(0).find(".doSubmit").click(function(){
                if( o.val() == o.attr( 'alt' ) )   
                    o.val('');    
            });

            $(this).blur();
        });

        return this;

    };    
})(jQuery);  


jQuery(function($){
    // Ставим первым, чтобы при отправке сначала срабатывало очищение {{
    $( "form#subscribe-form .placeholder" ).placeholder();  
    $( "form#subscribe-form input#phone" ).placeholder().mask("+38 (099) 999-99-99").placeholder();

    // }}

    $( "form#subscribe-form" ).formAjax({
        callback: function()
        { 
            $( "#email" ).val("").blur(); 
            $( "#phone" ).val("").blur(); 
        }
    });

    $( "form#subscribe-form a#subscribe-form-submit" ).click(function(){
        $( "#subscribe-form" ).submit();    
    });

});


function setWait(elementId)
{
    var self = this;    
    if (jQuery.isFunction(elementId)) return;
    var el = jQuery("#"+elementId);
    if(el.size() == 0) return;
    var ht = document.getElementById(elementId).offsetHeight + 20;
    el.attr("ht", ht);
    var ht = el.attr("ht");    
    var html = "<div class='subwait' style='width:100%; height:"+ht+"px; margin-top:-"+ht+"px;'><div style='width:100%; height:"+ht+"px;' class='wait'></div></div>";
    el.append(html);
}
function removeWait(elementId)
{
    jQuery("#" + elementId + " div.subwait").remove();
}


ImageSelector = function( callback, caller ){
    var self = this;
    self.callback = callback;
    self.caller = caller;
}

ImageSelector.prototype = {
    dialogWrapper: null,
    contentWrapper: null,
    
    caller: jQuery(document),
    callback: 'alert',
    
    show: function( )
    {
        var self = this;
        jQuery( "<div id='selectPhoto'></div>" ).appendTo('body');
        
        self.dialogWrapper = jQuery( "#selectPhoto" );
        jQuery( "<form id='selectImageForm'></form>" ).appendTo( self.dialogWrapper );
        jQuery( "<input type='hidden' id='selectImagePage' name='page' value='0'>" ).appendTo( "#selectImageForm" );
        jQuery( "<input type='hidden' id='selectImageSearch' name='search' value=''>" ).appendTo( "#selectImageForm" );
        jQuery( "<div id='selectImageContentWrapper'></div>" ).appendTo( self.dialogWrapper );
        
        self.contentWrapper = jQuery("#selectImageContentWrapper");
        
        self.dialogWrapper.dialog({
                                   modal: true, 
                                   resizable: false, 
                                   width: 750, 
                                   height: 400, 
                                   autoOpen: true,
                                   title: "Выбор фотографии из фотобанка",
                                   show: 'drop',
                                   hide: 'drop',
                                   close: function(event, ui) 
                                   { 
                                        jQuery( this ).remove(); 
                                   },
                                   open: function(event, ui) 
                                   {
                                        self.getPage();     
                                   }
                                 });
    },
    
    getPage: function()
    {
        var self = this;
        var data = jQuery("#selectImageForm").serialize();
        jQuery.ajax({url: "/photobank/select/",
                 cache: false,
                 type: "POST",
                 async: true,
                 data: data, 
                 success: function(data, textStatus, XMLHttpRequest)
                 {
                    self.dialogWrapper.effect( 'drop', false, 'slow', function(){
                        self.contentWrapper.html( data );
                        jQuery(this).show( 'drop', false, 'slow' );
                        
                        jQuery("#searchGo").click(function(){
                            jQuery( "#selectImagePage" ).val( 0 );
                            jQuery( "#selectImageSearch" ).val( jQuery( "#qSearch" ).val() );
                            self.getPage();
                            return;    
                        });
                        
                        self.contentWrapper.find( "ul li a.ui-icon-zoomin" ).click(function(){
                            var preview = jQuery('<div></div>').appendTo('body');
                            jQuery("<img src='" + jQuery(this).attr('href') + "' style='max-width:500px;' />").appendTo( preview );    
                            
                            preview.dialog({
                                   modal: true, 
                                   resizable: false, 
                                   width: 530, 
                                   height: 300, 
                                   autoOpen: true,
                                   title: "Просмотр увеличенного изображения",
                                   show: 'drop',
                                   hide: 'drop',
                                   close: function(event, ui) 
                                   { 
                                        jQuery( this ).remove(); 
                                   },
                        });
                    })
                    
                        self.contentWrapper.find( "ul li a.ui-icon-link" ).click(function(){
                            self.dialogWrapper.dialog('close');
                            var image = jQuery(this).parent().find("a.originalSize").eq(0);
                            eval( 'self.caller.'+ self.callback+"('" + image.attr( 'href' ) + "', " + image.attr( 'id' ) + ");" );
                            return;
                        })
                 });
                 }    
        });    
    } ,
    
    getPhotoPage: function( page )
    {
        var self = this;
        jQuery( "#selectImagePage" ).val( page ); 
        self.getPage();  
    },
    
}

Selector = function(selector, input, init){
    
    var self = this;    
    self.logo = jQuery(selector);                
    self.input = jQuery(input);
    
    jQuery(init).click(function(){
        currentSelector = new ImageSelector( 'paste', self );
        currentSelector.show();    
        });    
}
                
Selector.prototype = {
    logo: null,
    input: null,
    select: function()
    {
        currentSelector = new ImageSelector( 'paste', self );
        currentSelector.show();    
    }, 
    paste: function( src )
    {
        this.logo.attr( 'src', src ).show('drop');
        this.input.val( src );
        return;    
    }   
}


idSelector = function(selector, input, init){
    
    var self = this;    
    self.logo = jQuery(selector);                
    self.input = jQuery(input);
    
    jQuery(init).click(function(){
        currentSelector = new ImageSelector( 'paste', self );
        currentSelector.show();    
        });    
}
                
idSelector.prototype = {
    logo: null,
    input: null,
    select: function()
    {
        currentSelector = new ImageSelector( 'paste', self );
        imageDialog.show();    
    }, 
    paste: function( src, id )
    {
        this.logo.attr( 'src', src ).show('drop');
        this.input.val( id );
        return;    
    }   
}

