
/*
 * clase cliente interface para obtener datos de Nebula
 * presentaciones, spots, ... etc
 */
function nebula_market_client(){

    /**
     * genero un select con las secciones de la SubCategoria
     * para luego hacer un append al formulario
     * @param appendTo objeto del DOM al cual sera adjuntado
     * @param SubID SubCategoriesID para la busqueda
     * @param callback function
     */
    this.sub_sections_selector = function(appendTo,SubID,callback){
        // SubCategoriesID, secciones
        $.getJSON('/NebulaMarket/api/subcat_sections_get', {
            SubCategoriesID: SubID
        }, function(data){
                    var msg = '';

                    msg += '<select id="SectionID" name="FORMDATA[SectionID]">' + "\n";
                    msg += '<option selected value="0"> --- </option>' + "\n";
                	for(var i=0;i<data.length;i++){
                    msg += '<option value="'+ data[i].SectionID +'">' +data[i].SectionName + '</option>' + "\n";
                    }
                    msg += '</select>';

                    $('#SectionID').remove();

                    if(i > 0)
                    $(appendTo).after(msg);

                    // callback
                    if(typeof callback == 'function'){
                        callback.call();
                    }
            });
    }

    /**
     * genera los options para el select de categorias
     * @param appendTo Objeto select al cual agregarle los options
     */
    this.categories_optselector = function(appendTo){
        // CategoriesID
        var ret = '';
        $.getJSON('/NebulaMarket/api/categories_get', {
            CategoriesID: 0
        }, function(data){
                    var msg = '';

                    msg += '<option selected value="0"> --- pic one --- </option>' + "\n";
                	for(var i=0;i<data.length;i++){
                    msg += '<option value="'+ data[i].CategoriesID +'">' +data[i].CategoriesName + '</option>' + "\n";
                    }

                    if(i > 0)
                    $(appendTo).html(msg);

                    ret = msg;
                    //alert(msg);
            });

            return ret;
    }

    /**
     * genera los options para el select de subcategorias
     * @param appendTo Objeto select al cual agregarle los options
     * @param CatID CategoriesID para obtener el listado
     */
    this.sub_categories_optselector = function(appendTo,CatID){
        // CategoriesID
        var ret = '';
        $.getJSON('/NebulaMarket/api/subcategories_get', {
            CategoriesID: CatID
        }, function(data){
                    var msg = '';

                    msg += '<option value="0"> --- Elegir --- </option>' + "\n";
                    for(var i=0;i<data.length;i++){
                            msg += '<option value="'+ data[i].SubCategoriesID +'">' +data[i].SubCategoriesName + '</option>' + "\n";
                    }

                    /*if(i > 0)*/
                        $(appendTo).html(msg);
               
                    ret = msg;
                    //alert(msg);
            });

            return ret;
    }

    /**
     * genero los options para el selector de secciones
     * @param appendTo Objeto select del DOM al cual agregarle los options
     * @param SubID SubCategoriesID para obtener el listado
     */
    this.sub_sections_optselector = function(appendTo,SubID){
        var ret = '';
        $.getJSON('/NebulaMarket/api/subcat_sections_get', {
            SubCategoriesID: SubID
        }, function(data){
                    var msg = '';

                    msg += '<option selected value="0"> --- pic one --- </option>' + "\n";
                	for(var i=0;i<data.length;i++){
                    msg += '<option value="'+ data[i].SectionID +'">' +data[i].SectionName + '</option>' + "\n";
                    }

                    if(i > 0)
                    $(appendTo).html(msg);

                    ret = msg;
                    //alert(msg);
            });

            return ret;
    }

    /**
     * agregado de categorias
     * @param CatName CategoriesName
     * @param callback callback function
     */
    this.categories_add = function(CatName,callback){
        if(CatName){
            $.get('/NebulaMarket/api/categories_add', {CategoriesName: CatName}, function(){
                alert('agregado correcto');
                callback();
            });
        }
    }

    this.categories_del = function(CatID){
        if(CatID > 0){
            $.get('/NebulaMarket/api/categories_del', {CategoriesID: CatID}, function(){
                alert('borrado correcto');
            });
        }
    }

    this.subcategories_del = function(CatID){
        if(CatID > 0){
            $.get('/NebulaMarket/api/subcategories_del', {SubCategoriesID: CatID}, function(){
                alert('borrado correcto');
            });
        }
    }

    /**
     * agrego una subcategoria a la categoria
     * @param CatID CategoriesID, categoria madre
     * @param SubCatName SubCategoriesName, nueva sub categoria
     * @param callback callback function
     */
    this.subcategories_add = function(CatID,SubCatName,callback){
        if(CatID > 0){
            $.get('/NebulaMarket/api/subcategories_add', {CategoriesID: CatID, SubCategoriesName: SubCatName}, function(){
                alert(CatID + 'agregado correcto de ' + SubCatName);
                callback();
            });
        }
    }

    this.subsections_del = function(CatID){
        if(CatID > 0){
            $.get('/NebulaMarket/api/subsections_del', {SectionID: CatID}, function(){
                alert('borrado correcto');
            });
        }
    }

    /**
     * agrego una subcategoria a la categoria
     * @param CatID SubCategoriesID, categoria madre
     * @param SubName SubCategoriesName, nueva sub categoria
     * @param callback callback function
     */
    this.subsections_add = function(CatID,SubName,callback){
        if(CatID > 0){
            $.get('/NebulaMarket/api/subsections_add', {SubCategoriesID: CatID, SectionName: SubName}, function(){
                alert(CatID + 'agregado correcto de ' + SubName);
                callback();
            });
        }
    }

    /**
     * borrado de productos
     * @param PrID ProductsID
     * @param callback callback function
     */
    this.products_del = function(PrID,callback){
            $.get('/NebulaMarket/api/products_del', {ProductsID: PrID}, function(retorno){
                //alert('borrado correcto');
                if(retorno.length > 0)
                callback(retorno);
            });
    }

    /**
     * borrado de imagenes de productos
     * @param ImgID ImgID id de la imagen a borrar
     * @param ConfirmMessage mensaje de confirmacion, sino se especifica se borra sin aviso
     * @param callback callback function
     */
    this.Image_del = function(ImgID,ConfirmMessage,callback){

            if(typeof ConfirmMessage == 'undefined'){
                ConfirmMessage = 'Confirm Delete';
            }

            if(confirm(ConfirmMessage)){
                $.get('/NebulaMarket/api/products_images_delete', {'ImgID': ImgID}, callback);
            }
    }

    /**
     * marco una imagen como primaria para el producto
     * @param ImgID ID del recurso imagen a activar
     * como primaria del producto padre
     * @param callback Callback function
     */
    this.Image_primary = function(ImgID,callback){
        $.get('/NebulaMarket/api/products_images_primary', {'ImgID': ImgID}, callback);
    }

    /**
     * elimino un fabricante.
     * Es importante destacar que solo se puede eliminar un fabricante
     * si no esta siendo utilizado por ningun producto
     */
    this.manufacturers_delete = function(ManufId,ConfirmMessage,callback){
        if(typeof ConfirmMessage == 'undefined'){
            ConfirmMessage = 'Confirm Delete';
        }

        if(confirm(ConfirmMessage)){
            $.getJSON('/NebulaMarket/manufacturers/delete', {
                'ManufId': ManufId
            }, callback);
        }
    }

    /**
     * agrega un elemento al carro de compras y lo muestra
     * @param PrID ProductsID
     * @param cant cantidad a agregar al carro
     * @param code codigo del producto variante
     * @param callback funcion que se ejecuta luego de carga el carrito
     */
    this.shopcart_add = function(PrID,cant,code,callback){
        var obj = this;
        var url = '/NebulaMarket/shopcart/add';
        var data = {'ProductsID':PrID,'Units':cant,'code':code};
        $.post(url, data, function(response){
            if(typeof callback == 'function'){
                callback.call(response,response);
            }
        }, 'json')

    }
    
    /*
     * controla que cuando agregue al carro la cantidad este en stock
     **/
    this.shopcart_stockControl=function(PrID,cant,code,callback){
        var obj = this;
        var url = '/NebulaMarket/shopcart/stockControl';
        var data = {'ProductsID':PrID,'Units':cant,'code':code};
        $.post(url, data, function(response){
            if(typeof callback == 'function'){
                callback.call(response,response);
            }
        }, 'json')
    }
    
    
    /**
     * agrega un elemento oferta al carro de compras y lo muestra
     * @param PrID ProductsID
     * @param cant cantidad a agregar al carro
     * @param code codigo de la variante
     * @param callback funcion que se ejecuta luego de carga el carrito
     */
    this.shopcart_addOffer = function(PrID,cant,code,callback){
        var obj = this;
        var url = '/NebulaMarket/shopcart/addOffer';
        var data = {'ProductsID':PrID,'Units':cant,'code':code};
        $.post(url, data, function(response){
            if(typeof callback == 'function'){
                callback.call(response,response);
            }
        }, 'json')

    }

    /*
     * altero las unidades de un item del carro de compras
     */
    this.shopcart_units = function(itemKey,units,callback){
        var obj = this;
        var url = '/NebulaMarket/shopcart/units';
        var data = {'itemKey':itemKey,'units':units};
        $.post(url, data, function(response){
            if(typeof callback == 'function'){
                callback.call(response,response);
            }
        }, 'json')
    }
    
    /*
     * altero las unidades de un item del carro de compras controlando que no se pase del stock
     */
    this.shopcart_units2 = function(PrID,code,itemKey,units,callback){
        nmc.shopcart_stockControl(PrID,units,code,function(response){
            var errores=false;
            if(response.ok==true && units>0){
                $('#units'+itemKey).removeClass('error_field'); 
                $("#tip"+itemKey).remove();
                var obj = this;
                var url = '/NebulaMarket/shopcart/units';
                var data = {'itemKey':itemKey,'units':units};
                $.post(url, data, function(response){
                    if(typeof callback == 'function'){
                        callback.call(response,response);
                    }
                }, 'json')
                actualizarCarro();
            }
            else{
                errores=true;
                if(units<=0){
                   $("#tip"+itemKey).remove();
                   $("#tool"+itemKey).append("<span class=\"tip\" id=\"tip"+itemKey+"\">Ingrese valor mayor a 0. Pedido maximo: "+response.stock+" unidad(es)</span>");  
                }
                else
                {
                   $("#tip"+itemKey).remove();
                   $("#tool"+itemKey).append("<span class=\"tip\" id=\"tip"+itemKey+"\">Pedido maximo: "+response.stock+" unidad(es)</span>");
                }
                
                $('#units'+itemKey).addClass('error_field');
                
            }
            if(errores){
                //boton realizar comprar
                $('#link_abonar').attr('onclick',"alert('Hay Productos que no tienen stock suficiente')")
                $('#link_abonar').attr('href',"javascript:;");
                $('#link_abonar').attr('target','_top');
                $('#link_abonar').attr('rel','');
                //boton actualizar carrito
                $('#link_actualizar').attr('onclick',"alert('Hay Productos que no tienen stock suficiente')")
                $('#link_actualizar').attr('href',"javascript:;");
                $('#link_actualizar').attr('target','_top');
                $('#link_actualizar').attr('rel','');   
            }
            else
            {
                var noerrores=true;
                var tips=$("span[id^='tip']");
                $(tips).each(function(i,e){
                    if(e.innerHTML=="")
                        noerrores=noerrores&&true;
                    else
                        noerrores=false;
                 })
                 
                 if(noerrores==true){
                    //boton realizar comprar
                    $('#link_abonar').attr('href','Productos/Finalizar_Compra1');
                    $('#link_abonar').attr('target',"content");
                    $('#link_abonar').attr('rel',"xhr");
                    //boton actualizar carrito
                    $('#link_actualizar').attr('href','/Productos/Editar_Compra');
                    $('#link_actualizar').attr('target',"content");
                    $('#link_actualizar').attr('rel',"xhr");  
                 }
             
            }
                
        })
        /*var obj = this;
        var url = '/NebulaMarket/shopcart/units';
        var data = {'itemKey':itemKey,'units':units};
        $.post(url, data, function(response){
            if(typeof callback == 'function'){
                callback.call(response,response);
            }
        }, 'json')*/
    }

    /**
     * elimino un periodo de compra para un cliente
     */
    this.shopcart_del = function(itemKey,ConfirmMessage,callback){
        if(typeof ConfirmMessage == 'undefined'){
            ConfirmMessage = 'Confirm Delete';
        }

        if(confirm(ConfirmMessage)){
            $.post('/NebulaMarket/shopcart/delete', {
                'itemKey': itemKey
            }, callback,'json');
        }
    }

    /**
     * muestra el carro de compras
     * de forma elemental en un box
     */
    this.shopcart_box = function(){
        var src = '/NebulaMarket/shopcart/index?show=1';
        var height = 400;
        var width = 400;

        orion_box.xhrpost(src, width, height,{'Action':'get'});
    }

    /**
     * vacia el carro de compras actual
     */
    this.shopcart_clear = function(callback){
        var url = '/NebulaMarket/shopcart/clear';
        $.getJSON(url, {'Action':'clear'}, function(data){
            //alert('clear');
            if(typeof callback != 'undefined')
                callback;
        });
    }

     /**
     * elimino un periodo de compra para un cliente
     */
    this.delete_peridodocompra = function(id,ConfirmMessage,callback){
        if(typeof ConfirmMessage == 'undefined'){
            ConfirmMessage = 'Confirm Delete';
        }

        if(confirm(ConfirmMessage)){
            $.getJSON('/NebulaMarket/api/deleteperidodocompra', {
                'id': id
            }, callback);
        }
    }

     /**
     * cancelo un invoice a un cliente
     */
    this.cancel_invoice = function(id,ConfirmMessage,callback){
        if(typeof ConfirmMessage == 'undefined'){
            ConfirmMessage = 'Confirm Cancel';
        }

        if(confirm(ConfirmMessage)){
            $.getJSON('/NebulaMarket/invoices/cancel', {
                'invoice': id
            }, callback);
        }
    }

     /**
     * cancelo una venta.
     * solo si no ha sido expedida
     */
    this.cancel_sale = function(saleId,ConfirmMessage,callback){
        if(typeof ConfirmMessage == 'undefined'){
            ConfirmMessage = 'Confirm Cancel';
        }

        if(confirm(ConfirmMessage)){
            $.getJSON('/NebulaMarket/sales/cancel', {
                'saleId': saleId
            }, callback);
        }
    }

     /**
     * confirmacion de una transaccion
     */
    this.confirm_invoice = function(id,callback){
        $.getJSON('/NebulaMarket/invoices/confirm', {
            'invoice': id
        }, callback);
    }

     /**
     * finaliza la transaccion, cerrando invoice y venta
     */
    this.close_invoice = function(id,saleId,callback){
        $.getJSON('/NebulaMarket/invoices/confirm', {
            'invoice': id,'saleId':saleId
        }, callback);
    }
    
    /*
     * devuelve los talles disponibles para un color dado
     */
    this.tallesporcolor=function(prodId,colorCode,idSelect){
        var url = '/NebulaMarket/products_variants/tallesporcolor';
        var data = {'prodId':prodId,'colorCode':colorCode};
        $.post(url, data, function(response){
            if(response.error==0){
                if(response.talles!=false){
                    var talles=response.talles;
                    var msg='';
                    for(clave in talles){
                        msg+='<option value='+talles[clave]+'>'+talles[clave]+'</option>'+'\n';
                    }
                    $('#'+idSelect).html(msg);
                    var talle=talles[0];
                    nmc.preciovariante(prodId, colorCode, talle,'precio','precioviejo');
                    nmc.carritoVariante(prodId, colorCode, talle,'btn_comprarVariante');
                }
                else
                    alert('no existen talles disponibles para el color seleccionado');
            }
            else
                alert(response.error);
        }, 'json')
    }
    
    /**
     * refrescar una url, se hizo para poder refrescar cuando no se carga una pagina previamente con ajax
     **/
    /*this.refrescarUrl=function refrescarUrl(url){
        setTimeout(function(){
            orion.xhr.load(url,'content')
        }, 1000);
        
    }*/

    
    /**
     * devuelve el precio para un color y talle dado
     */
    this.preciovariante=function(prodId,colorCode,talle,idPrecio,idPrecioViejo){
        var url = '/NebulaMarket/products_variants/preciovariante';
        var data = {'prodId':prodId,'colorCode':colorCode,'talle':talle};
        $.post(url, data, function(response){
            if(response.error==0){
                if(response.precioOferta==false){
                    $("#"+idPrecio).html("$"+response.precio+" <span class=\"ivainc\">Iva.inc</span>");
                    $("#"+idPrecioViejo).html("");
                }
                else
                {
                    $("#"+idPrecio).html("$"+response.precioOferta+" <span class=\"ivainc\">Iva.inc</span>");
                    $("#"+idPrecioViejo).html("$"+response.precio);
                }
            }
            else
            {
                $("#"+idPrecio).html("");
                $("#"+idPrecioViejo).html("");
                alert(response.message);
            }
        }, 'json')
    }
    this.carritoVariante=function(prodId,colorCode,talle,linkcomprar) {
        var url = '/NebulaMarket/products_variants/codigoVariante';
        var data = {'prodId':prodId,'colorCode':colorCode,'talle':talle};
        $.post(url, data, function(response){
            if(response.error==0){
                var link="";
                if(response.code!=false){
                    if(response.oferta!=false){
                        if(response.encarro==true)
                            link="<a onclick=\"orion.xhr.directload('/Productos/Editar_Compra', 'content')\" href=\"javascript:;\"><div class=\"btn_actualizar_carro_detalle\"></div></a>";
                        else
                            link="<a href=\"javascript:;\" onclick=\"agregarOfertaAlcarro(0,$('#cant').val(),'"+response.code+"');orion.xhr.refresh()\"><div class=\"btn_comprar\"></div></a>";    
                    }
                    else
                    {
                        if(response.encarro==true)
                            link="<a onclick=\"orion.xhr.directload('/Productos/Editar_Compra', 'content')\" href=\"javascript:;\"><div class=\"btn_actualizar_carro_detalle\"></div></a>";
                        else
                             link="<a href=\"javascript:;\" onclick=\"agregarAlcarro(0,$('#cant').val(),'"+response.code+"');orion.xhr.refresh()\"><div class=\"btn_comprar\"></div></a>"; 
                    }
                       
                }
                else
                {
                    link="";
                    alert("codigo invalido");
                }
                $("#"+linkcomprar).html(link);
                $("#stock").val(response.stock);
            }
            else
            {
                $("#"+linkcomprar).html("");
                alert(response.message);
            }
           
        }, 'json')
    }

}


var nmc = new nebula_market_client();

