
// FILE DOWNLOAD DIALOGS

function getFile(content, format, filename, hash) {
    form = $('<form action="/file.php?format='+format+'&filename='+filename+'" method="post" target="_blank"></form>').append($('<input name="data" />').val(content), $('<input name="hash" />').val(hash));
    form.appendTo('body').submit().remove();
}

function getFileInvoicePDF(id) {
    file = rpc('getInvoicePDF', [{"type":"var","name":"invoiceID","data":JSON.stringify(id)}]);
    getFile(file.data, 'pdf', id+'.pdf', file.hash);
}

function getFileInvoiceCSV(id) {
    file = rpc('getInvoiceCSV', [{"type":"var","name":"invoiceID","data":JSON.stringify(id)}]);
    getFile(file.data, 'csv', id+'.csv', file.hash);
}

// INFO, EDIT, INSERT DIALOGS

function showCampaign(campaignID) {
    dialogInfoCampaign(getCampaign(campaignID));
}

function getBanner(bannerID) {
    param = getDBO('ParamGetBanner');
    param.bannerID = bannerID;
    return rpc('getBanner', [{"type":"object","name":"ParamGetBanner","data":JSON.stringify(param)}]);
}

function getCampaign(campaignID) {
    param = getDBO('ParamGetCampaign');
    param.campaignID = campaignID;
    return rpc('getCampaign', [{"type":"object","name":"ParamGetCampaign","data":JSON.stringify(param)}]);
}

function getCampaignTimeFrameList(campaignID) {
    param = getDBO('ParamGetCampaignTimeFrame');
    param.campaignID = campaignID;
    return rpc('getCampaignTimeFrame', [{"type":"object","name":"ParamGetCampaignTimeFrame","data":JSON.stringify(param)}]);
}

function autoAssign(dlg, data) {
	for (var prop in data) {
		$('td.val_'+prop, dlg).text(data[prop]); 
		$('span.val_'+prop, dlg).text(data[prop]);
		$('textarea.val_'+prop, dlg).text(data[prop]);
		$('input[type="text"].val_'+prop, dlg).val(data[prop]).attr('name', prop);
		$('textarea.val_'+prop, dlg).val(data[prop]).attr('name', prop);
		$('select.val_'+prop+' option', dlg).each(function () {
		    if ($(this).attr('value') == data[prop]) {
		        $(this).attr('selected', 'selected').parent().attr('name', prop);
		    }
		});
	}
	return dlg;
}

function serializeForm(jq_context) {
    inpData = $(':input', jq_context).serializeArray();
    var newData = {};
    for (var prop in inpData) {
        newData[inpData[prop]["name"]] = inpData[prop]["value"];
    }
    return newData;
}

// AFFILIATE

function dialogEditAffiliate(dataIn) {
    var data = dataIn;
    title = (data.company.length) ? data.company : data.firstname+' '+data.lastname;
	dlg = $('#editAffiliate').clone(true).attr("id", 'editAffiliateRun');
	dlg = autoAssign(dlg, data);
	dlg.dialog({
		modal:true
		, width:640
	    , buttons: {
	        "abbrechen": function() { $(this).dialog("close"); } 
            , "speichern": function() { 
                newData = serializeForm(this); 
                foo2 = rpc('updateAffiliate', [
                    {"type":"object", "name":"Affiliate", "data":JSON.stringify($.extend({}, data, newData)) } 
                ]);
                dgAffiliates.fnDraw();
                $(this).dialog("close");
            }
	    }
	    , title:title 
	});
}

function dialogInfoAffiliate(dataIn) {
    var data = dataIn;
    title = (data.company.length) ? data.company : data.firstname+' '+data.lastname;
    dlg = $('#infoAffiliate').clone(true).attr("id", 'infoAffiliateRun');
    dlg = autoAssign(dlg, data);
    if (data.sex == 'm') $('td.val_sex', dlg).text('Herr');
    else if (data.sex == 'f') $('td.val_sex', dlg).text('Frau');
    if (data.stateID == 1) $('td.val_state', dlg).text('aktiv');
    else if (data.stateID == 0) $('td.val_state', dlg).text('inaktiv');
    dlg.dialog({
        modal:true
        , width:640
        , title:title 
    });
}

function dialogInsertAffiliate() {
    title = 'Neuer Affiliate';
    data = getDBO('Affiliate');
    dlg = $('#insertAffiliate').clone(true).attr("id", 'insertAffiliateRun');
    dlg = autoAssign(dlg, data);
    dlg.dialog({
        modal:true
        , width:640
        , buttons: {
            "abbrechen": function() { $(this).dialog("close"); } 
            , "speichern": function() { 
                newData = serializeForm(this); 
                foo2 = rpc('addAffiliate', [
                    {"type":"object", "name":"Affiliate", "data":JSON.stringify($.extend({}, data, newData)) } 
                ]);
                dgAffiliates.fnDraw();
                $(this).dialog("close");
            }
        }
        , title:title
    });
}

// MERCHANT

function dialogEditMerchant(dataIn) {
    var data = dataIn;
    title = (data.company.length) ? data.company : data.firstname+' '+data.lastname;
    dlg = $('#editMerchant').clone(true).attr("id", 'editMerchantRun');
    dlg = autoAssign(dlg, data);
    dlg.dialog({
        modal:true
        , width:640
        , buttons: {
            "abbrechen": function() { $(this).dialog("close"); } 
            , "speichern": function() { 
                newData = serializeForm(this); 
                foo2 = rpc('updateMerchant', [
                    {"type":"object", "name":"Merchant", "data":JSON.stringify($.extend({}, data, newData)) } 
                ]);
                dgMerchants.fnDraw();
                $(this).dialog("close");
            }
        }
        , title:title 
    });
}

function dialogInfoMerchant(dataIn) {
    var data = dataIn;
    title = (data.company.length) ? data.company : data.firstname+' '+data.lastname;
    dlg = $('#infoMerchant').clone(true).attr("id", 'infoMerchantRun');
    dlg = autoAssign(dlg, data);
    if (data.sex == 'm') $('td.val_sex', dlg).text('Herr');
    else if (data.sex == 'f') $('td.val_sex', dlg).text('Frau');
    if (data.stateID == 1) $('td.val_state', dlg).text('aktiv');
    else if (data.stateID == 0) $('td.val_state', dlg).text('inaktiv');
    dlg.dialog({
        modal:true
        , width:640
        , title:title 
    });
}

function dialogInsertMerchant() {
    title = 'Neuer Merchant';
    data = getDBO('Merchant');
    dlg = $('#insertMerchant').clone(true).attr("id", 'insertMerchantRun');
    dlg = autoAssign(dlg, data);
    dlg.dialog({
        modal:true
        , width:640
        , buttons: {
            "abbrechen": function() { $(this).dialog("close"); } 
            , "speichern": function() { 
                newData = serializeForm(this); 
                foo2 = rpc('addMerchant', [
                    {"type":"object", "name":"Merchant", "data":JSON.stringify($.extend({}, data, newData)) } 
                ]);
                dgMerchants.fnDraw();
                $(this).dialog("close");
            }
        }
        , title:title
    });
}

// BANNER

function dialogInfoBanner(id) {
    var data = getBanner(id);
    title = data.name;
    dlg = $('#infoBanner').clone(true).attr("id", 'infoBannerRun');
    dlg = autoAssign(dlg, data);
    if (data.stateID == 1) $('td.val_state', dlg).text('aktiv');
    else if (data.stateID == 0) $('td.val_state', dlg).text('inaktiv');
    dlg.dialog({modal:true, width:400, title:title});
}

function dialogEditBanner(id) {
    var data = getBanner(id);
    title = data.name;
    dlg = $('#editBanner').clone(true).attr("id", 'editBannerRun');
    dlg = autoAssign(dlg, data);
    if (data.stateID == 1) $('td.val_state', dlg).text('aktiv');
    else if (data.stateID == 0) $('td.val_state', dlg).text('inaktiv');
    dlg.dialog({modal:true, width:400, title:title, buttons: {
        "abbrechen": function() { $(this).dialog("close"); } 
        , "speichern": function() { 
            newData = serializeForm(this); 
            foo2 = rpc('updateBanner', [
                {"type":"object", "name":"Banner", "data":JSON.stringify($.extend({}, data, newData)) } 
            ]);
            dgBanner.fnDraw();
            $(this).dialog("close");
        }
    }});
}


function dialogInsertBanner() {
    title = 'Neues Werbemittel';
    data = getDBO('Banner');
    dlg = $('#insertBanner').clone(true).attr("id", 'insertBannerRun');
    dlg = autoAssign(dlg, data);
    ParamGetCampaign = getDBO('ParamGetCampaign');
    ParamGetCampaign.orderBy = 1;
    campaigns = rpc('getCampaign', [{"type":"object", "name":"paramGetCampaign", "data":JSON.stringify(ParamGetCampaign)}]);
    select = $('<select name="campaignID"></select>').css('width', '150px');
    for (i = 0; i < campaigns.length; i++) {
        select.append($('<option></option>').text(campaigns[i].name).attr('value', campaigns[i].campaignID));
    }
    $('td.model_campaign', dlg).append(select);
    dlg.dialog({
        modal:true
        , width:640
        , buttons: {
            "abbrechen": function() { $(this).dialog("close"); } 
            , "speichern": function() { 
                newData = serializeForm(this); 
                foo2 = rpc('addBanner', [
                    {"type":"object", "name":"Banner", "data":JSON.stringify($.extend({}, data, newData)) } 
                ]);
                dgBanner.fnDraw();
                $(this).dialog("close");
            }
        }
        , title:title
    });
}

// LEAD

function dialogInfoLead(dataIn) {
    var data = dataIn;
    title = (data.company.length) ? data.company : data.firstname+' '+data.lastname;
    dlg = $('#infoLead').clone(true).attr("id", 'infoLeadRun');
    dlg = autoAssign(dlg, data);
    if (data.sex == 'm') $('td.val_sex', dlg).text('Herr');
    else if (data.sex == 'f') $('td.val_sex', dlg).text('Frau');
    
    stateText = ['unbekannt', 'storniert', 'gut'];
    
    state = 0;
    if (data.stateIDAffiliate == 1) state = 2;
    else if (data.stateIDAffiliate === null || data.stateIDAffiliate === '')  state = 0;
    else if (data.stateIDAffiliate == 0)  state = 1;
    $('td.val_stateAffiliate', dlg).text(stateText[state]);
    
    state = 0;
    if (data.stateIDMerchant == 1) state = 2;
    else if (data.stateIDMerchant === null || data.stateIDMerchant === '')  state = 0;
    else if (data.stateIDMerchant == 0)  state = 1;
    $('td.val_stateMerchant', dlg).text(stateText[state]);
    
    dlg.dialog({
        modal:true
        , width:640
        , title:title 
    });
}

// CAMPAIGN

function dialogEditCampaign(dataIn) {
    var data = dataIn;
    title = data.name;
    dlg = $('#editCampaign').clone(true).attr("id", 'editCampaignRun');
    dlg = autoAssign(dlg, data);
    dlg.dialog({
        modal:true
        , width:400
        , buttons: {
            "abbrechen": function() { $(this).dialog("close"); } 
            , "speichern": function() { 
                newData = serializeForm(this); 
                foo2 = rpc('updateCampaign', [
                    {"type":"object", "name":"Campaign", "data":JSON.stringify($.extend({}, data, newData)) } 
                ]);
                dgCampaigns.fnDraw();
                $(this).dialog("close");
            }
        }
        , title:title 
    });
}

function dialogInfoCampaign(dataIn) {
    var data = dataIn;
    title = data.name;
    dlg = $('#infoCampaign').clone(true).attr("id", 'infoCampaignRun');
    dlg = autoAssign(dlg, data);
    if (data.stateID == 1) $('td.val_state', dlg).text('aktiv');
    else if (data.stateID == 0) $('td.val_state', dlg).text('inaktiv');
    dlg.dialog({
        modal:true
        , width:400
        , title:title 
    });
}

function dialogInsertCampaign() {
    title = 'Neue Kampagne';
    data = getDBO('Campaign');
    dlg = $('#insertCampaign').clone(true).attr("id", 'insertCampaignRun');
    dlg = autoAssign(dlg, data);
    ParamGetMerchant = getDBO('ParamGetMerchant');
    ParamGetMerchant.orderBy = 1;
    merchants = rpc('getMerchant', [{"type":"object", "name":"paramGetMerchant", "data":JSON.stringify(ParamGetMerchant)}]);
    select = $('<select name="merchantID"></select>').css('width', '150px');
    for (i = 0; i < merchants.length; i++) {
        name = (merchants[i].company.length) ? merchants[i].company : merchants[i].firstname+' '+merchants[i].lastname;
        select.append($('<option></option>').text(name).attr('value', merchants[i].merchantID));
    }
    $('td.model_merchant', dlg).append(select);
    dlg.dialog({
        modal:true
        , width:400
        , buttons: {
            "abbrechen": function() { $(this).dialog("close"); } 
            , "speichern": function() { 
                newData = serializeForm(this); 
                foo2 = rpc('addCampaign', [
                    {"type":"object", "name":"Campaign", "data":JSON.stringify($.extend({}, data, newData)) } 
                ]);
                dgCampaigns.fnDraw();
                $(this).dialog("close");
            }
        }
        , title:title
    });
}

function dialogEditCampaignTimeFrame(id) {
    var data = getCampaign(id);
    var tfdata = getCampaignTimeFrameList(id);
    var tfparam = getDBO('CampaignTimeFrame');
    tfparam.campaignID = id;
    var remove_tf = [];
    title = data.name;
    var dlg = $('#editCampaignTimeFrame').clone(true).attr("id", 'editCampaignTimeFrameRun');
    if (tfdata.length == 0) $('.timeframes', dlg).remove();
    else {
        for (i = 0; i < tfdata.length; i++) {
            opt = $('<option></option>').attr('value', tfdata[i].campaignTimeFrameID).text(tfdata[i].dateStart+' bis '+tfdata[i].dateEnd);
            $('.custom_timeframe', dlg).append(opt);
        }
    }
    $('.val_dateStart', dlg).datepicker({minDate: new Date(),onSelect:function(dateText, inst) {$('.val_dateEnd', dlg).datepicker("option", "minDate", dateText);}});
    $('.val_dateEnd', dlg).datepicker({minDate: new Date(),onSelect:function(dateText, inst) {$('.val_dateStart', dlg).datepicker("option", "maxDate", dateText);}});
    $('.delTimeFrame', dlg).click(function () {
        remove_tf.push($('.custom_timeframe',dlg).val());
        $('.custom_timeframe option:selected',dlg).remove();
        if ($('.custom_timeframe option',dlg).size() == 0) $('.timeframes', dlg).remove();
    });
    dlg = autoAssign(dlg, data);
    dlg.dialog({modal:true, width:400, title:title, buttons: {
        "abbrechen": function() { $(this).dialog("close"); } 
        , "speichern": function() { 
            newData = serializeForm(this);
            error = false;
            if ($('.val_dateStart', dlg).val() && $('.val_dateEnd', dlg).val()) {
                foo2 = rpc('addCampaignTimeFrame', [{"type":"object", "name":"CampaignTimeFrame", "data":JSON.stringify($.extend({}, tfparam, newData)) }]);
            }
            else if ($('.val_dateStart', dlg).val() || $('.val_dateEnd', dlg).val()) {
                error = true;
                alert('Bitte Start- und Enddatum angeben.');
            }
            if (remove_tf.length) {
                for (i=0; i < remove_tf.length; i++) {
                    foo2 = rpc('removeCampaignTimeFrame', [{"type":"var", "name":"CampaignTimeFrameID", "data":remove_tf[i] }]);
                }
            }
            if (error == false) {
                dgCampaigns.fnDraw();
                $(this).dialog("close");
            }
        }
    }});
}

// COMMISSION

function dialogInsertCommission() {
    title = 'Neue Vergütung';
    data = getDBO('Commission');
    
    dlg = $('#insertCommission').clone(true).attr("id", 'insertCommission');
    dlg = autoAssign(dlg, data);
    
    ParamGetAffiliate = getDBO('ParamGetAffiliate');
    ParamGetAffiliate.orderBy = 1;
    affiliates = rpc('getAffiliate', [{"type":"object", "name":"paramGetMerchant", "data":JSON.stringify(ParamGetAffiliate)}]);
    select = $('<select name="affiliateID"></select>').css('width', '150px');
    for (i = 0; i < affiliates.length; i++) {
        name = (affiliates[i].company.length) ? affiliates[i].company : affiliates[i].firstname+' '+affiliates[i].lastname;
        select.append($('<option></option>').text(name).attr('value', affiliates[i].affiliateID));
    }
    $('td.model_affiliate', dlg).append(select);
    
    ParamGetCampaign = getDBO('ParamGetCampaign');
    ParamGetCampaign.orderBy = 1;
    campaigns = rpc('getCampaign', [{"type":"object", "name":"paramGetCampaign", "data":JSON.stringify(ParamGetCampaign)}]);
    select = $('<select name="campaignID"></select>').css('width', '150px');
    for (i = 0; i < campaigns.length; i++) {
        select.append($('<option></option>').text(campaigns[i].name).attr('value', campaigns[i].campaignID));
    }
    $('td.model_campaign', dlg).append(select);
    
    dlg.dialog({
        modal:true
        , width:400
        , buttons: {
            "abbrechen": function() { $(this).dialog("close"); } 
            , "speichern": function() { 
                
                newData = serializeForm(this);
                
                ParamGetCommission = getDBO('ParamGetCommission');
                ParamGetCommission.campaignID = newData.campaignID;                
                ParamGetCommission.affiliateID = newData.affiliateID;
                commissions = rpc('getCommission', [{"type":"object", "name":"paramGetCommission", "data":JSON.stringify(ParamGetCommission)}]);
                console.log(commissions.length);
                if (commissions.length) {
                    alert('Es ist für den Affiliate bereits eine Vergütung für die Kampagne hinterlegt');
                }
                else {
                    foo2 = rpc('addCommission', [
                                                 {"type":"object", "name":"Campaign", "data":JSON.stringify($.extend({}, data, newData)) } 
                                                 ]);
                    dgCommissions.fnDraw();
                    dgAffiliates.fnDraw();
                    $(this).dialog("close");
                }
            }
        }
        , title:title
    });
}

// INVOICE

function dialogInsertInvoice(recipient, recipientID, dateCreationEnd, recipientName) {
    title = 'Neue Rechnung für '+recipientName;
    dlg = $('#insertInvoice').clone(true).attr("id", 'insertInvoiceRun');
    $('.val_recipientType', dlg).val(recipient);
    $('.val_recipientID', dlg).val(recipientID);
    $('.val_dateCreationEnd', dlg).val(dateCreationEnd);
    //dlg = autoAssign(dlg, data);
    dlg.dialog({
        modal:true
        , width:400
        , buttons: {
            "abbrechen": function() { $(this).dialog("close"); } 
            , "ansehen": function() { 
                newData = serializeForm(this); 
                dateEnd = ($('.val_dateCreationEnd', dlg).val()) ? $('.val_dateCreationEnd', dlg).val() : null;
                foo2 = rpc('generateInvoice', [
                    {"type":"var", "name":"recipientType", "data":JSON.stringify($('.val_recipientType', dlg).val())} 
                    , {"type":"var", "name":"recipientID", "data":JSON.stringify($('.val_recipientID', dlg).val())} 
                    , {"type":"var", "name":"intro", "data":JSON.stringify($('.val_intro', dlg).val())} 
                    , {"type":"var", "name":"outro", "data":JSON.stringify($('.val_outro', dlg).val())}
                    , {"type":"var", "name":"dateCreationEnd", "data":JSON.stringify(dateEnd)}
                    , {"type":"var", "name":"preview", "data":JSON.stringify(1)}    
                ]);
                getFile(foo2.data, 'pdf', 'preview.pdf', foo2.hash);
            } 
            , "speichern": function() { 
                newData = serializeForm(this); 
                dateEnd = ($('.val_dateCreationEnd', dlg).val()) ? $('.val_dateCreationEnd', dlg).val() : null;
                foo2 = rpc('generateInvoice', [
                    {"type":"var", "name":"recipientType", "data":JSON.stringify($('.val_recipientType', dlg).val())} 
                    , {"type":"var", "name":"recipientID", "data":JSON.stringify($('.val_recipientID', dlg).val())} 
                    , {"type":"var", "name":"intro", "data":JSON.stringify($('.val_intro', dlg).val())} 
                    , {"type":"var", "name":"outro", "data":JSON.stringify($('.val_outro', dlg).val())}
                    , {"type":"var", "name":"dateCreationEnd", "data":JSON.stringify(dateEnd)}  
                ]);
                getFileInvoicePDF(foo2.invoiceID);
                dgInvoicesOpen.fnDraw();
                dgInvoices.fnDraw();
                dgLeads.fnDraw();
                dgMerchants.fnDraw();
                dgAffiliates.fnDraw();
                $(this).dialog("close");
            }
        }
        , title:title
    });
}

