
/*
 * 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 selected value="0"> --- pic one --- </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 callback funcion que se ejecuta luego de carga el carrito
     */
    this.shopcart_add = function(PrID,cant,callback){
        var obj = this;
        var url = '/NebulaMarket/shopcart/add';
        var data = {'ProductsID':PrID,'Units':cant};
        $.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')
    }

    /**
     * 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);
    }

}

var nmc = new nebula_market_client();
