jQuery.preloadImage = function() {
    jQuery("<img>").attr('src', arguments[0]);
}

jQuery.preloadImages = function() {
    for(var i=0;i<arguments.length;i++) {$.preloadImage(arguments[i]);}
}

jQuery.setRollOverForClass = function() {
    $('.'+arguments[0]).each(function(i) {
        var ext = this.src.split('.')[this.src.split('.').length-1];
        var f1 = this.src, f2 = this.src.replace('.'+ext,'_o.'+ext);
        $.preloadImage(f2);
        $(this).hover(function(){this.src = f2},function(){this.src = f1});
    });
}


var siteObj = {

    initImgPreview : function() {
        $(document).ready(function() {
            var objs= $('.imgPrev');
            if(objs.length) {
                objs.imgPreview({containerID: 'imgPreviewWithStyles'});
            }
        });
    },

    showIndexSwf : function(swf) {
        $('body').animate({scrollTop:0}, 'slow');
        swfobject.embedSWF(swf, "swfObj", "300", "300", "9.0.0", null, null, {wmode:'transparent', quality:'high'});
        return false;
    },

    showPopupSwf : function(el) {
        return hs.htmlExpand(el, {
            headingText:el.title,
            creditsPosition:'center',
            objectType:'swf',
            width:300,
            objectWidth:300,
            objectHeight:300,
            preserveContent:false
        });
    },

    cart : null,

    cartDialogButtons : {
        'Закрыть': function() {
            $(this).dialog('close');
        },
        'Перейти в корзину': function() {
            location.href = baseUrl+'cart';
        }
    },

    previewDialogButtons : {
        'Закрыть': function() {
            $(this).dialog('close');
        },
        'Оформить заказ': function() {
            siteObj.submitOrder(true);
        }
    },

    showMessage : function(message, options) {

        var buttons = null;
        if((options && !options.noButtons) || !options) {
            buttons = {
                    'Закрыть': function() {
                    $(this).dialog('close');
                }
            };
        }
        if(options && options.cart) {
            buttons = this.cartDialogButtons;
        }
        if(options && options.preview) {
            buttons = this.previewDialogButtons;
        }
        $("#messageContainer").html('<p>'+message+'</p>');
        $("#messageContainer").dialog({
            autoOpen:false,
            bgiframe: true,
            resizable:false,
            modal: true,
            title: 'Сообщение'
        });
        $("#messageContainer").dialog('option' , 'buttons' , buttons);
        $("#messageContainer").dialog('option' , 'width' , options && options.width ? options.width : '300');
        $("#messageContainer").dialog("close");
        $("#messageContainer").dialog("open");
    },

    showWaitMessage : function() {
        siteObj.showMessage('<p align="center"><img src="img/loader.gif" /><br /><br />пожалуйста подождите...</p>', {noButtons : true});
    },

    hideWaitMessage : function() {
        $("#messageContainer").dialog("close");
    },

    addToCart : function(id) {
        this.showWaitMessage();
        $.post("ajax.php", {method:'addToCart', id:id}, function(data){
            try {
                data = eval(data);
                $("#cartTotCount").html(data[0]);
                $("#cartTotPrice").html(data[1]);
            }
            catch(e) {}
            siteObj.showMessage('Позиция успешно добавлена в корзину.', {cart : true})
        });
        return false;
    },

    removeFromCart : function(id) {
        this.showWaitMessage();
        $.post("ajax.php", {method:'removeFromCart', id:id}, function(data){
            $("#cartItem"+id).hide();
            try {
                eval('siteObj.cart='+data);
                siteObj.updateCart();
            }
            catch(e) {}
            siteObj.hideWaitMessage();
        });
        return false;
    },

    updateCart : function() {
        if(!this.cart.details.totalCount) {
            $("#cartEmpty").show();
            $("#cartReg").hide();
            $("#cartDel").hide();
            return;
        }

        $("#cartTotalPrice").html(this.cart.details.totalPrice);
        $("#cartInvoicePrice").html(this.cart.details.invoicePrice);

        if(this.cart.details.deliveryPrice > 0) {
            $("#cartInvoicePriceBlock").show()
            $("#cartInvoicePriceNoBlock").hide()
        }
        else {
            $("#cartInvoicePriceBlock").hide()
            $("#cartInvoicePriceNoBlock").show()
        }
    },

    changeCartQty : function(id, cnt) {
        this.showWaitMessage();
        var qty = parseInt(cnt.value);
        qty = isNaN(qty) || qty < 1 ? 1 : Math.round(qty);
        cnt.value = qty;
        $.post("ajax.php", {method:'updateQtyInCart', id:id, qty:qty}, function(data){
            try {
                siteObj.hideWaitMessage();
                eval('siteObj.cart='+data);
                cnt.value = siteObj.cart.items[id]; 
                siteObj.updateCart();
            }
            catch(e) {}
        });
    },

    auth : function(l, p) {

        if(l == '' || p == '') {
            siteObj.showMessage('Укажите e-mail и пароль.');
            return;
        }

        this.showWaitMessage();

        $.post("ajax.php", {method:'auth', login:l, password:p}, function(data){
            try {
                siteObj.hideWaitMessage();
                eval('var data='+data);

                if(data.error) {
                    siteObj.showMessage(data.error);
                    return;
                }

                siteObj.fillUserData(data.user);
                siteObj.cart=data.cart;
                siteObj.updateCart();
            }
            catch(e) {}
        });

    },

    fillUserData : function(user) {
        for(var i in user) {
            if(i == 'issame') {
                $("#"+i)[0].checked = user[i] != 0;
                this.isSameAddress(true);
            }
            else {
                $("#"+i).val(user[i]);
            }
        }
    },

    isSameAddress : function(noAjax) {
        if($("#issame")[0].checked) {
            $("#deliveryAddr").hide();
            if(noAjax !== true && ($("#region").val() != $("#bregion").val() || $("#zip").val() != $("#bzip").val())) {
                this.changeDeliveryLoc($("#region").val(), $("#zip").val(), 0);
            }
        }
        else {
            $("#deliveryAddr").show();
            if(noAjax !== true && ($("#region").val() != $("#bregion").val() || $("#zip").val() != $("#bzip").val())) {
                this.changeDeliveryLoc($("#bregion").val(), $("#bzip").val(), 1);
            }
        }
    },

    updateCity : function(field, cnt) {
        if(cnt.value.substr(0,4) == 'city') {
            $("#"+field).val(cnt.options[cnt.selectedIndex].innerHTML);
        }
    },

    changeDeliveryType : function(dt) {
        this.showWaitMessage();
        $.post("ajax.php", {method:'changeDeliveryType', id:dt}, function(data){
            try {
                siteObj.hideWaitMessage();
                eval('siteObj.cart='+data);
                siteObj.updateCart();
            }
            catch(e) {}
        });
    },

    changeDeliveryLoc : function(dl, dz, ltype) {
        if(!$("#issame")[0].checked && !ltype) {
            return;    
        }

        this.showWaitMessage();
        $.post("ajax.php", {method:'changeDeliveryLoc', loc:dl, zip: dz, cnttype: ltype}, function(data){
            try {
                siteObj.hideWaitMessage();
                eval('siteObj.cart='+data);
                siteObj.updateCart();
            }
            catch(e) {}
        });
    },

    saveComment : function(id) {

        var name = $.trim($("#reviewName").val());
        var email = $.trim($("#reviewEmail").val());
        var text = $.trim($("#reviewText").val());
        var digit = $.trim($("#reviewDigit").val());
        
        if(name == '') {
            siteObj.showMessage('Укажите ваше имя.');
            return;
        }
        if(text == '') {
            siteObj.showMessage('Отзыв пустой.');
            return;
        }
        if(digit == '' || digit.length != 6) {
            siteObj.showMessage('Укажите число.');
            return;
        }

        this.showWaitMessage();

        $.post("ajax.php", {method:'addComment', id:id, name:name, email:email, text:text, digit:digit}, function(data){
            try {
                siteObj.hideWaitMessage();
                eval('var data='+data);
                if(data.error && data.error != '') {
                    siteObj.showMessage(data.error);
                    return;
                }
                $("#reviewForm").hide();
                $("#reviewsBlock").html(data);
                siteObj.showMessage('Ваш отзыв добавлен.');
            }
            catch(e) {}
        });
    },

    savePerson : function() {
        this.showWaitMessage();
        $.post("ajax.php", {method:'savePerson',
            firstname:$("#firstname").val(),
            lastname:$("#lastname").val(),
            middlename:$("#middlename").val(),
            email:$("#email").val(),
            phone1:$("#phone1").val(),
            phone2:$("#phone2").val(),
            street:$("#street").val(),
            region:$("#region").val(),
            city:$("#city").val(),
            zip:$("#zip").val(),
            bstreet:$("#bstreet").val(),
            bregion:$("#bregion").val(),
            bcity:$("#bcity").val(),
            bzip:$("#bzip").val(),
            issame:$("#issame")[0].checked
        }, function(data){
            try {
                siteObj.hideWaitMessage();
            }
            catch(e) {}
        });
    },
    
    submitOrder : function(noPreview) {
        if(!siteObj.cart.details.deliveryPrice) {
            siteObj.showMessage('Не возможно рассчитать стоимость доставки в данном направлении через выбранную службу.');
            return;
        }

        var i, f = ['orderDigit', 'firstname','lastname', 'middlename', 'email', 'phone2', 'street', 'city', 'region', 'city', 'zip', 'bstreet', 'bcity', 'bregion', 'bcity', 'bzip'];
        for(i=0;i<f.length;i++) {
            $("#"+f[i]).val($.trim($("#"+f[i]).val()));
            if((i<6 && $("#"+f[i]).val() == '') || (i>5 && !$("#issame")[0].checked && $("#"+f[i]).val() == '')) {
                $("#"+f[i]).addClass('notFill');
            }
            else {
                $("#"+f[i]).removeClass('notFill');
            }
        }
        if($(".notFill").length) {
            siteObj.showMessage('Не заполненны все требуемые поля.');
            return;
        }

        if(!$("#terms")[0].checked) {
            siteObj.showMessage('Пожалуйста, отметьте флажок, что вы ознакомлены с условиями оплаты и доставки и согласны с ними.');
            return;
        }

        this.showWaitMessage();
        $.post("ajax.php", {method:'submitOrder',
            firstname:$("#firstname").val(),
            lastname:$("#lastname").val(),
            middlename:$("#middlename").val(),
            email:$("#email").val(),
            phone1:$("#phone1").val(),
            phone2:$("#phone2").val(),
            street:$("#street").val(),
            region:$("#region").val(),
            city:$("#city").val(),
            zip:$("#zip").val(),
            bstreet:$("#bstreet").val(),
            bregion:$("#bregion").val(),
            bcity:$("#bcity").val(),
            bzip:$("#bzip").val(),
            issame:$("#issame")[0].checked,
            digit:$("#orderDigit").val(),
            preview:noPreview !== true
        }, function(data){
            try {
                siteObj.hideWaitMessage();
                eval('var data='+data);
                if(data.error && data.error != '') {
                    siteObj.showMessage(data.error);
                    return;
                }
                if(noPreview === true) {

                    location.href = data.redirect;
                    return;
                }
                siteObj.showMessage(data, {width:600,preview:true});
            }
            catch(e) {}
        });
    }
};
