﻿// adds an onload() func
function addLoadEvent(func)
{
	  var oldonload = window.onload;
	  if (typeof window.onload != 'function') {
	    window.onload = func;
	  } else {
	    window.onload = function() {
	      if (oldonload) {
	        oldonload();
	      }
	      func();
	    }
	  }
}


// Executes an AJAX Request
function MakeHttpRequest(url, callback_function, destination)
{
	var http_request = false;

	if (window.XMLHttpRequest)
	{
		http_request = new XMLHttpRequest();
		if (http_request.overrideMimeType)
		{
			http_request.overrideMimeType('text/xml');
		}
	}
	else if (window.ActiveXObject)
	{
		try
		{
			http_request = new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			try
			{
				http_request = new ActiveXObject("Microsoft.XMLHTTP");
			}
			catch (e) {}
		}
	}

	if (!http_request)
	{
		alert('Dein Browser unterstützt ein verwendetes Feature nicht.');
		return false;
	}

	http_request.onreadystatechange = function()
	{
	    try {
    		if (http_request.readyState == 4)
    		{
    			if (http_request.status == 200)
    			{
    				if (destination)
    				{
    					eval(callback_function + '(http_request.responseText, \'' +destination+ '\')');
    				}
    				else
    				{
    					eval(callback_function + '(http_request.responseText)');
    				}
    			}
    			else if (http_request.status != 0)
    			{
    				alert('Bei einem httpRequest ist ein Fehler aufgetreten (Code: ' + http_request.status + ').');
    			}
    		}
	    }
	    catch(e) { return false; }
	}

	http_request.open('GET', url, true);
	http_request.send(null);
}

// Hides an element, if it exists
function hideDiv(divId) {
    if(document.getElementById(divId)) {
        document.getElementById(divId).style.display = "none";
    }
}

// Shows an element, if it exists
function showDiv(divId) {
    if(document.getElementById(divId)) {
        document.getElementById(divId).style.display = "block";
    }
}

// sets the content (innerHTML) of a div
function setContent(divId, newContent) {
    if(document.getElementById(divId)) {
        document.getElementById(divId).innerHTML = newContent;
    }
}

// gets the content (innerHTML) of a div
function getContent(divId) {
    if(document.getElementById(divId)) {
        return document.getElementById(divId).innerHTML;
    }
}

// returns the value of an element
function getValue(elemId) {
    if(document.getElementById(elemId)) {
        return document.getElementById(elemId).value;
    }
}

// sets the css class of an element
function setClass(elemId, classNames) {
    if(document.getElementById(elemId)) {
        return document.getElementById(elemId).className = classNames;
    }
}

// returns the checked flag of an element
function getChecked(elemId) {
    if(document.getElementById(elemId)) {
        return document.getElementById(elemId).checked;
    }
}


// Adds the Decision Step
function getDomainDesigns(responseText, domainId)
{
    // get the step, or display it?
    if(responseText == null) {

        // build the url
        var url  = "./rptdesignchecker.php?task=getdomaindesigns&id=" + domainId;

        // execute the httpRequest
        MakeHttpRequest(url, "getDomainDesigns");
    }
    else {
        // assign the response text
        document.getElementById("DomainDesigns").innerHTML = responseText;
    }
}
// tries to find a duplicate wm contact
function checkWmContact(responseText, fieldName)
{
    // get the results, or display them?
    if(responseText == null) {
        // get the vields value
        var fieldValue = document.getElementById("inp_" + fieldName).value;

        // build the url
        var url = "./wmcontacts.php?task=check&field=" + escape(fieldName) + "&value=" + escape(fieldValue);

        // execute the httpRequest
        MakeHttpRequest(url, "checkWmContact");
    }
    else {
        // display the results
        alert(responseText);
    }
}

// displays the phrase count for some criterias
function getPhraseCount(responseText)
{
    // get the step, or display it?
    if(responseText == null) {
        // get the vars
        var language = document.getElementById("language").value;
        var phraseType = document.getElementById("phrasetype_id").value;
        var section = document.getElementById("section_id").value;
        var domain = document.getElementById("domain_id").value;
        var design = document.getElementById("design_id").value;

        // build the url
        var url  = "./ks_generator.php?task=getphrasecount&language=" + language + "&phrasetype=" + phraseType
                 + "&section=" + section + "&domain=" + domain + "&design=" + design;

        // execute the httpRequest
        MakeHttpRequest(url, "getPhraseCount");
    }
    else {
        // assign the response text
        document.getElementById("PhraseCount").value = responseText + " Phrasen entsprechen den Kriterien";
    }
}

// updates the domain report
function updateDomainTrafficReport(responseText, dateFrom, dateTo, displayMode, displayStep,
                                   page, sortField, sortOrder, domainId, designId, wmInclude,
                                   prInclude, tsInclude, wmExclude, prExclude, tsExclude,
                                   seInclude, onePage, topResults, onlyActive, ekFrom, ekTo,
                                   csvExport, domainTagsInclude)
{
    // get the step, or display it?
    if(responseText == null) {
        // clean some values
        if(isNaN(ekFrom)) {
            ekFrom = 0;
        }
        if(isNaN(ekTo)) {
            ekTo = 0;
        }
        if(isNaN(csvExport)) {
            csvExport = 0;
        }
        if(typeof(domainTagsInclude) == "undefined") {
            domainTagsInclude = '';
        }

        // build the url
        var url  = "./rptdomaintraffic.php?do=get&displaymode=" + escape(displayMode);
            url += "&displaystep=" + escape(displayStep) + "&date_from=" + escape(dateFrom);
            url += "&date_to=" + escape(dateTo) + "&page=" + escape(page) + "&sortfield=" + escape(sortField);
            url += "&sortorder=" + escape(sortOrder) + "&domain=" + escape(domainId);
            url += "&design=" + escape(designId) + "&wm_include=" + escape(wmInclude);
            url += "&pr_include=" + escape(prInclude) + "&wm_exclude=" + escape(wmExclude);
            url += "&pr_exclude=" + escape(prExclude) + "&one_page=" + escape(onePage);
            url += "&topresults=" + escape(topResults) + "&only_active=" + escape(onlyActive);
            url += "&se_include=" + escape(seInclude) + "&ts_include=" + escape(tsInclude);
            url += "&ts_exclude=" + escape(tsExclude) + "&ek_from=" + escape(ekFrom);
            url += "&ek_to=" + escape(ekTo) + "&csv_export=" + escape(csvExport);
            url += "&domaintags_include=" + escape(domainTagsInclude);

        // csv export?
        if(csvExport == 1) {
            // Create an IFRAME.
              var iframe = document.createElement("iframe");

              // Point the IFRAME to GenerateFile, with the
              //   desired region as a querystring argument.
              iframe.src = url;

              // This makes the IFRAME invisible to the user.
              iframe.style.display = "none";

              // Add the IFRAME to the page.  This will trigger
              //   a request
              document.body.appendChild(iframe);

              // ok
              return;
        }

        // execute the httpRequest
        MakeHttpRequest(url, 'updateDomainTrafficReport');
    }
    else {

        // assign the response text
        setContent("StatisticsResults", responseText);
    }
}

// similar to php - number_format
function my_number_format( number, decimals, dec_point, thousands_sep ) {
    var n = number, prec = decimals;
    n = !isFinite(+n) ? 0 : +n;
    prec = !isFinite(+prec) ? 0 : Math.abs(prec);
    var sep = (typeof thousands_sep == "undefined") ? ',' : thousands_sep;
    var dec = (typeof dec_point == "undefined") ? '.' : dec_point;
    var s = (prec > 0) ? n.toFixed(prec) : Math.round(n).toFixed(prec); //fix for IE parseFloat(0.55).toFixed(0) = 0;
    var abs = Math.abs(n).toFixed(prec);
    var _, i;
    if (abs >= 1000) {
        _ = abs.split(/\D/);
        i = _[0].length % 3 || 3;
        _[0] = s.slice(0,i + (n < 0)) +
        _[0].slice(i).replace(/(\d{3})/g, sep+'$1');
        s = _.join(dec);
    } else {
        s = s.replace('.', dec);
    }
    return s;
}


/**
 * Function : dump()
 * Arguments: The data - array,hash(associative array),object
 *    The level - OPTIONAL
 * Returns  : The textual representation of the array.
 * This function was inspired by the print_r function of PHP.
 * This will accept some data as the argument and return a
 * text that will be a more readable version of the
 * array/hash/object that is given.
 * Docs: http://www.openjs.com/scripts/others/dump_function_php_print_r.php
 */
function dump(arr,level) {
	var dumped_text = "";
	if(!level) level = 0;

	//The padding given at the beginning of the line.
	var level_padding = "";
	for(var j=0;j<level+1;j++) level_padding += "    ";

	if(typeof(arr) == 'object') { //Array/Hashes/Objects
		for(var item in arr) {
			var value = arr[item];

			if(typeof(value) == 'object') { //If it is an array,
				dumped_text += level_padding + "'" + item + "' ...\n";
				dumped_text += dump(value,level+1);
			} else {
				dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
			}
		}
	} else { //Stings/Chars/Numbers etc.
		dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
	}
	return dumped_text;
}


// updates the campaign costs report
function updateCampaignCostsReport(responseText, dateFrom, dateTo, displayMode, displayStep,
                                   page, sortField, sortOrder, apInclude, cgInclude, caInclude,
                                   doInclude, deInclude, prInclude, campaignType, campaignState,
                                   campaignSuccess, onlyNewsletter, onlyBuyrange, onePage, emailInfos, showCashbackdays, showJumpoffrate, showTraffic, showLeads, releaseState)
{
    // get the step, or display it?
    if(responseText == null) {

        // build the url
        var url  = "./rptcampaigncosts.php?do=get&displaymode=" + escape(displayMode);
            url += "&displaystep=" + escape(displayStep) + "&date_from=" + escape(dateFrom);
            url += "&date_to=" + escape(dateTo) + "&page=" + escape(page) + "&sortfield=" + escape(sortField);
            url += "&sortorder=" + escape(sortOrder) + "&ap_include=" + escape(apInclude);
            url += "&cg_include=" + escape(cgInclude) + "&ca_include=" + escape(caInclude);
            url += "&do_include=" + escape(doInclude) + "&de_include=" + escape(deInclude);
            url += "&pr_include=" + escape(prInclude) + "&campaign_type=" + escape(campaignType);
            url += "&campaign_state=" + escape(campaignState) + "&campaign_success=" + escape(campaignSuccess);
            url += "&only_newsletter=" + escape(onlyNewsletter) + "&only_buyrange=" + escape(onlyBuyrange);
            url += "&one_page=" + escape(onePage) + "&email_infos=" + escape(emailInfos);
            url += "&show_cashbackdays=" + escape(showCashbackdays);
            url += "&show_jumpoffrate=" + escape(showJumpoffrate);
            url += "&show_traffic=" + escape(showTraffic);
            url += "&show_leads=" + escape(showLeads);
            url += "&release_state=" + escape(releaseState);

        // execute the httpRequest
        if ( displayMode == 26 ) { // campaigns
            if ( displayStep == 1 ) {
                MakeHttpRequest(url, 'updateCampaignCostsReportCampaignStep1');
            }
            else if ( displayStep == 2) {
                MakeHttpRequest(url, 'updateCampaignCostsReportCampaignStep2');
            }
            else { // default call the same function again
                MakeHttpRequest(url, 'updateCampaignCostsReport');
            }
        }
        else if ( displayMode == 1 ) { // domains
            if ( displayStep == 1 ) {
                MakeHttpRequest(url, 'updateCampaignCostsReportDomainStep1');
            }
            else { // default call the same function again
                MakeHttpRequest(url, 'updateCampaignCostsReport');
            }
        }
        else { // default call the same function again
            MakeHttpRequest(url, 'updateCampaignCostsReport');
        }
    }
    else {
        // assign the response text
        setContent("StatisticsResults", responseText);
    }
}


// updates the campaign costs report
function saveColumnSelection(responseText, displayMode, displayStep)
{
    // get the step, or display it?
    if(responseText == null) {

        // build the url
        // execute the httpRequest
        if ( displayMode == 26 ) { // campaigns
            if ( displayStep == 1 ) {
                var url  = "./rpttpc.php?do=save&report=15&displaymode=" + escape(displayMode) + "&displaystep=" + escape(displayStep);
            }
            else if ( displayStep == 2 ) {
                var url  = "./rpttpc.php?do=save&report=15&displaymode=" + escape(displayMode) + "&displaystep=" + escape(displayStep);
            }
        }

        MakeHttpRequest(url, 'saveColumnSelection');
    }
    else {
        // assign the response text
        setContent("ColumnSelection", responseText);
    }
}


// updates the campaign costs report
function loadColumnSelection(responseText, displayMode, displayStep, columnSelectionId)
{
    // get the step, or display it?
    if(responseText == null) {

        // build the url
        // execute the httpRequest
        if ( displayMode == 26 ) { // campaigns
            if ( displayStep == 1 ) {
                var url  = "./rptcampaigncosts.php?do=load&displaymode=" + escape(displayMode) + "&displaystep=" + escape(displayStep) + "&selectionid=" + escape(columnSelectionId);
            }
            else if ( displayStep == 2 ) {
                var url  = "./rptcampaigncosts.php?do=load&displaymode=" + escape(displayMode) + "&displaystep=" + escape(displayStep) + "&selectionid=" + escape(columnSelectionId);
            }
        }

        MakeHttpRequest(url, 'saveColumnSelection');
    }
    else {
        // assign the response text
        setContent("StatisticsResults", responseText);
    }
}

// update the campaign view
function updateCampaignCostsReportCampaignStep1(responseText)
{
    // assign the response text
    setContent("StatisticsResults", responseText);

    var myDataSource = new YAHOO.util.LocalDataSource(YAHOO.util.Dom.get('existingTable'));

    myDataSource.responseType = YAHOO.util.DataSource.TYPE_HTMLTABLE;

    myDataSource.responseSchema = {
        fields: [{key:'campaign_name'},
                 {key:'campaign_type'},
                 {key:'advertisingplatform_name'},
                 {key:'start_date'},
                 {key:'end_date'},
                 {key:'campaign_state'},
                 {key:'cashbackdays', parser:'number'},
                 {key:'totalcostsplanning', parser:'number'},
                 {key:'campaign_costs', parser:'number'},
                 {key:'jumpoffrate', parser:'number'},
                 {key:'planned_sales', parser:'number'},
                 {key:'buyactionsum', parser:'number'},
                 {key:'guv', parser:'number'},
                 {key:'campaign_views_ap', parser:'number'},
                 {key:'campaign_costsperview_ap', parser:'number'},
                 {key:'campaign_clicks_ap', parser:'number'},
                 {key:'campaign_costsperclick_ap', parser:'number'},
                 {key:'campaign_views_pc', parser:'number'},
                 {key:'campaign_costsperview_pc', parser:'number'},
                 {key:'campaign_views_pc_tkp', parser:'number'},
                 {key:'campaign_clicks_pc', parser:'number'},
                 {key:'campaign_costsperclick_pc', parser:'number'},
                 {key:'campaign_clicks_pc_tkp', parser:'number'},
                 {key:'buyaction1count', parser:'number'},
                 {key:'buyaction1sum', parser:'number'},
                 {key:'cac', parser:'number'},
                 {key:'conversion', parser:'number'},
                 {key:'buyaction2count', parser:'number'},
                 {key:'buyaction2sum', parser:'number'},
                 {key:'buyaction3count', parser:'number'},
                 {key:'buyaction3sum', parser:'number'},
                 {key:'buyaction4count', parser:'number'},
                 {key:'buyaction4sum', parser:'number'},
                 {key:'stornoquote', parser:'number'},
                 {key:'emails', parser:'number'},
                 {key:'cpe', parser:'number'},
                 {key:'freeuser', parser:'number'},
                 {key:'cpf', parser:'number'},
        ]
    };



    // Define a custom format function
    var myFormatPercent = function(elCell, oRecord, oColumn, oData) {

        // number format
        oData = YAHOO.util.Number.format(oData, {decimalPlaces:2, thousandsSeparator:'.', decimalSeparator:',', suffix:'%'});
        elCell.innerHTML = oData;
    };

    // Define a custom format function
    var myFormatConversion = function(elCell, oRecord, oColumn, oData) {

        // add 1: to converion column
        elCell.innerHTML = "1:" + oData;
    };


    var myColumnDefs = [
        {key:'campaign_name',             label:'Kampagne', width:300, sortable:true, resizeable:true},
        {key:'campaign_type',             label:'Typ', width:100, sortable:true, resizeable:true},
        {key:'advertisingplatform_name',  label:'Werbeplattform', sortable:true, resizeable:true},
        {key:'start_date',                label:'Start', formatter:'date', sortable:true, resizeable:true},
        {key:'end_date',                  label:'Ende', formatter:'date', sortable:true, resizeable:true},
        {key:'campaign_state',            label:'Status', sortable:true, resizeable:true},
        {key:'cashbackdays',              label:'Ref.-Tage', sortable:true, resizeable:true},
        {key:'totalcostsplanning',        label:'plan Budget', formatter:'currency', sortable:true, resizeable:true},
        {key:'campaign_costs',            label:'Budget', formatter:'currency', sortable:true, resizeable:true},
        {key:'jumpoffrate',               label:'Absprungrate', formatter:myFormatPercent, sortable:true, resizeable:true},
        {key:'planned_sales',             label:'plan Umsatz', formatter:'currency', sortable:true, resizeable:true},
        {key:'buyactionsum',              label:'Umsatz', formatter:'currency', sortable:true, resizeable:true},
        {key:'guv',                       label:'<abbr title="Gewinn- und Verlustrechnung"><span class="abbr" title="Gewinn- und Verlustrechnung">GuV</span></abbr>', formatter:'currency', sortable:true, resizeable:true},
        {key:'campaign_views_ap',         label:'<abbr title="Werbeplattform"><span class="abbr" title="Werbeplattform">WP</span></abbr>-Views', abbr:'Werbeplattform - Views', sortable:true, resizeable:true},
        {key:'campaign_costsperview_ap',  label:'<abbr title="Werbeplattform"><span class="abbr" title="Werbeplattform">WP</span></abbr>-<abbr title="Kosten pro View"><span class="abbr" title="Kosten pro View">CPV</span></abbr>', abbr:'Werbeplattform - Kosten pro View', formatter:'currency', sortable:true, resizeable:true},
        {key:'campaign_clicks_ap',        label:'<abbr title="Werbeplattform"><span class="abbr" title="Werbeplattform">WP</span></abbr>-Clicks', abbr:'Werbeplattform - Clicks', sortable:true, resizeable:true},
        {key:'campaign_costsperclick_ap', label:'<abbr title="Werbeplattform"><span class="abbr" title="Werbeplattform">WP</span></abbr>-<abbr title="Kosten pro Click"><span class="abbr" title="Kosten pro Click">CPC</span></abbr>', abbr:'Werbeplattform - Kosten pro Click', formatter:'currency', sortable:true, resizeable:true},
        {key:'campaign_views_pc',         label:'<abbr title="Partnercash"><span class="abbr" title="Partnercash">PC</span></abbr>-Views', abbr:'Partnercash - Views', sortable:true, resizeable:true},
        {key:'campaign_costsperview_pc',  label:'<abbr title="Partnercash"><span class="abbr" title="Partnercash">PC</span></abbr>-<abbr title="Kosten pro View"><span class="abbr" title="Kosten pro View">CPV</span></abbr>', abbr:'Partnercash - Kosten pro View', formatter:'currency', sortable:true, resizeable:true},
        {key:'campaign_views_pc_tkp',     label:'<abbr title="Partnercash"><span class="abbr" title="Partnercash">PC</span></abbr>-View <abbr title="Tausenderpreis"><span class="abbr" title="Tausenderpreis">TKP</span></abbr>', abbr:'Partnercash-Views Tausenderpreis', formatter:'currency', sortable:true, resizeable:true},
        {key:'campaign_clicks_pc',        label:'<abbr title="Partnercash"><span class="abbr" title="Partnercash">PC</span></abbr>-Clicks', abbr:'Partnercash - Clicks', sortable:true, resizeable:true},
        {key:'campaign_costsperclick_pc', label:'<abbr title="Partnercash"><span class="abbr" title="Partnercash">PC</span></abbr>-<abbr title="Kosten pro Click"><span class="abbr" title="Kosten pro Click">CPC</span></abbr>', abbr:'Partnercash - Kosten pro Click', formatter:'currency', sortable:true, resizeable:true},
        {key:'campaign_clicks_pc_tkp',    label:'<abbr title="Partnercash"><span class="abbr" title="Partnercash">PC</span></abbr>-Click <abbr title="Tausenderpreis"><span class="abbr" title="Tausenderpreis">TKP</span></abbr>', abbr:'Partnercash-Clicks Tausenderpreis', formatter:'currency', sortable:true, resizeable:true},
        {key:'buyaction1count',           label:'Erstk&auml;ufe', sortable:true, resizeable:true},
        {key:'buyaction1sum',             label:'Erstkauf Summe', formatter:'currency', sortable:true, resizeable:true},
        {key:'cac',                       label:'<abbr title="Kosten pro Kunde"><span class="abbr" title="Kosten pro Kunde">CAC</span></abbr>', abbr:'Kosten pro Kunde', formatter:'currency', sortable:true, resizeable:true},
        {key:'conversion',                label:'Conversion', formatter:myFormatConversion, sortable:true, resizeable:true},
        {key:'buyaction2count',           label:'Nachk&auml;ufe', sortable:true, resizeable:true},
        {key:'buyaction2sum',             label:'Nachkauf Summe', formatter:'currency', sortable:true, resizeable:true},
        {key:'buyaction3count',           label:'Verl&auml;ngerungen', sortable:true, resizeable:true},
        {key:'buyaction3sum',             label:'Verl&auml;ngerung Summe', formatter:'currency', sortable:true, resizeable:true},
        {key:'buyaction4count',           label:'Stornos', sortable:true, resizeable:true},
        {key:'buyaction4sum',             label:'Storno Summe', formatter:'currency', sortable:true, resizeable:true},
        {key:'stornoquote',               label:'Stornoquote', formatter:myFormatPercent, sortable:true, resizeable:true},
        {key:'emails',                    label:'Email-Adressen', sortable:true, resizeable:true},
        {key:'cpe',                       label:'<abbr title="Kosten pro Email-Adresse"><span class="abbr" title="Kosten pro Email-Adresse">CPE</span></abbr>', abbr:'Kosten pro Email-Adresse', formatter:'currency', sortable:true, resizeable:true},
        {key:'freeuser',                  label:'FreeUser', sortable:true, resizeable:true},
        {key:'cpf',                       label:'<abbr title="Kosten pro FreeUser"><span class="abbr" title="Kosten pro FreeUser">CPF</span></abbr>', abbr:'Kosten pro FreeUser', formatter:'currency', sortable:true, resizeable:true},
    ];


    // DataTable configuration
    var myConfigs = {
        draggableColumns : true,  // Drag and Drop columns
        sortedBy : {key:"campaign_name", dir:YAHOO.widget.DataTable.CLASS_ASC}, // Sets UI initial sort arrow
        currencyOptions:{decimalPlaces:2, thousandsSeparator:'.', decimalSeparator:',', suffix:'&euro;'},
        paginator: new YAHOO.widget.Paginator({ rowsPerPage:50,
                                                // Options for FirstPageLink component
                                                firstPageLinkLabel : "<<",
                                                firstPageLinkClass : "yui-pg-first", // default

                                                // Options for LastPageLink component
                                                lastPageLinkLabel : ">>",
                                                lastPageLinkClass : "yui-pg-last", // default

                                                // Options for PreviousPageLink component
                                                previousPageLinkLabel : "< zur&uuml;ck",
                                                previousPageLinkClass : "yui-pg-previous", // default

                                                // Options for NextPageLink component
                                                nextPageLinkLabel : "vorw&auml;rts >", // default
                                                nextPageLinkClass : "yui-pg-next", // default

                                                template: YAHOO.widget.Paginator.TEMPLATE_ROWS_PER_PAGE,
                                                rowsPerPageOptions: [20,50,100],
                                                pageLinks: 10
                                             }) // Enables pagination
    };



    myDataTable = new YAHOO.widget.DataTable('tableContainer', myColumnDefs, myDataSource, myConfigs);

    // Enables single-mode row selection
    myDataTable.set("selectionMode","singlecell");
    myDataTable.subscribe("rowClickEvent",     myDataTable.onEventSelectRow);
    myDataTable.subscribe("rowMouseoverEvent", myDataTable.onEventHighlightRow);
    myDataTable.subscribe("rowMouseoutEvent",  myDataTable.onEventUnhighlightRow);




    // Create the tfoot element, its row, and its cells
    var tbody  = myDataTable.getTbodyEl(),
        tfoot  = document.createElement('tfoot'),
        sumRow = tfoot.appendChild(document.createElement('tr')),
        td,
        sum_campaign_costs = 0,
        sum_buyactionsum = 0,
        sum_guv = 0,
        sum_buyaction1count = 0,
        sum_buyaction1sum = 0,
        sum_buyaction2count = 0,
        sum_buyaction2sum = 0,
        sum_buyaction3count = 0,
        sum_buyaction3sum = 0,
        sum_buyaction4count = 0,
        sum_buyaction4sum = 0,
        sum_emails = 0,
        sum_freeuser = 0,
        i = 0;



    records = myDataTable.getRecordSet().getRecords();

    for (i=0; i < records.length; i++) {
        sum_campaign_costs += records[i].getData("campaign_costs");
        sum_buyactionsum += records[i].getData("buyactionsum");
        sum_guv += records[i].getData("guv");

        sum_buyaction1count += records[i].getData("buyaction1count");
        sum_buyaction1sum   += records[i].getData("buyaction1sum");

        sum_buyaction2count += records[i].getData("buyaction2count");
        sum_buyaction2sum   += records[i].getData("buyaction2sum");

        sum_buyaction3count += records[i].getData("buyaction3count");
        sum_buyaction3sum   += records[i].getData("buyaction3sum");

        sum_buyaction4count += records[i].getData("buyaction4count");
        sum_buyaction4sum   += records[i].getData("buyaction4sum");

        sum_emails   += records[i].getData("emails");
        sum_freeuser += records[i].getData("freeuser");
    }


    // Assign the tfoot row a class for styling
    sumRow.className = 'sum-row';


    // Add the cells and their content
    td = sumRow.appendChild(document.createElement('td'));
    td.colSpan = 50;
    td.innerHTML = '<hr>Gesamtsummen:  &raquo; Budget: ' + my_number_format(sum_campaign_costs, 2, ",", ".") + ' &euro; '
                               + ' &raquo; Umsatz: ' + my_number_format(sum_buyactionsum, 2, ",", ".") + ' &euro; '
                               + ' &raquo; Gewinn/Verlust: ' + my_number_format(sum_guv, 2, ",", ".") + ' &euro; '

                               + '<hr><p style="padding-top:5px; padding-left:5px;">  &raquo; Erstk&auml;ufe: '          + my_number_format(sum_buyaction1count, 0, ",", ".") + '  '
                               + '(Erstkauf Summe: '          + my_number_format(sum_buyaction1sum, 2, ",", ".") + ' &euro;) '
                               + '<br> &raquo; Nachk&auml;ufe: '          + my_number_format(sum_buyaction2count, 0, ",", ".") + '  '
                               + '(Nachkauf Summe: '          + my_number_format(sum_buyaction2sum, 2, ",", ".") + ' &euro;) '
                               + '<br> &raquo; Verl&auml;ngerungen: '     + my_number_format(sum_buyaction3count, 0, ",", ".") + '  '
                               + '(Verl&auml;ngerung Summe: ' + my_number_format(sum_buyaction3sum, 2, ",", ".") + ' &euro;) '
                               + '<br> &raquo; Stornos: '                 + my_number_format(sum_buyaction4count, 0, ",", ".") + '  '
                               + '(Storno Summe: '            + my_number_format(sum_buyaction4sum, 2, ",", ".") + ' &euro;) '
                               + '<br> &raquo; Email-Adressen: '          + my_number_format(sum_emails, 0, ",", ".") + '  '
                               + '<br> &raquo; FreeUser: '                + my_number_format(sum_freeuser, 0, ",", ".") + ' ';

    // Finally, insert the new tfoot before the table's tbody (order is important)
    tbody.parentNode.insertBefore(tfoot,tbody);




    /* save and load all visible and hidden columns */
    var allColumns       = myDataTable.getColumnSet().keys;
    var allColumnsLength = allColumns.length

    var text = "";

    for(var i=0,l=allColumnsLength;i<l;i++) {
        var oColumn = allColumns[i];
        var columnKey = oColumn.getKey();


        // myDataTable.hideColumn(columnKey); // hide all columns
        // myDataTable.showColumn(columnKey); // hide all columns

        /* first hide all columns and then only show the columns which are not hidden */
        // text = text + columnKey + " = " + oColumn.hidden + "\n";
    }

    /* show and hide the loaded columns */

    // Hides a Column
    // myDataTable.hideColumn('guv');
    // Shows a Column
    // myDataTable.showColumn('guv');


    // alert(text);


    // show and hide columns
    // Shows dialog, creating one when necessary
    var newCols = true;
    var showDlg = function(e) {
        YAHOO.util.Event.stopEvent(e);

        if(newCols) {
            // Populate Dialog
            // Using a template to create elements for the SimpleDialog
            var allColumns = myDataTable.getColumnSet().keys;
            var elPicker = YAHOO.util.Dom.get("dt-dlg-picker");
            var elTemplateCol = document.createElement("div");
            YAHOO.util.Dom.addClass(elTemplateCol, "dt-dlg-pickercol");
            var elTemplateKey = elTemplateCol.appendChild(document.createElement("span"));
            YAHOO.util.Dom.addClass(elTemplateKey, "dt-dlg-pickerkey");
            var elTemplateBtns = elTemplateCol.appendChild(document.createElement("span"));
            YAHOO.util.Dom.addClass(elTemplateBtns, "dt-dlg-pickerbtns");
            var onclickObj = {fn:handleButtonClick, obj:this, scope:false };

            // Create one section in the SimpleDialog for each Column
            var elColumn, elKey, elButton, oButtonGrp;
            for(var i=0,l=allColumns.length;i<l;i++) {
                var oColumn = allColumns[i];

                // Use the template
                elColumn = elTemplateCol.cloneNode(true);

                // Write the Column key
                elKey = elColumn.firstChild;

                // add the label for show and hide the column
                var columnObject = oColumn.getDefinition();
                elKey.innerHTML = columnObject.label;

                // Create a ButtonGroup
                oButtonGrp = new YAHOO.widget.ButtonGroup({
                                id: "buttongrp"+i,
                                name: oColumn.getKey(),
                                container: elKey.nextSibling
                });
                oButtonGrp.addButtons([
                    { label: "anzeigen", value: "anzeigen", checked: ((!oColumn.hidden)), onclick: onclickObj},
                    { label: "ausblenden", value: "ausblenden", checked: ((oColumn.hidden)), onclick: onclickObj}
                ]);

                elPicker.appendChild(elColumn);
            }
            newCols = false;
    	}
        myDlg.show();
    };
    var hideDlg = function(e) {
        this.hide();
    };
    var handleButtonClick = function(e, oSelf) {
        var sKey = this.get("name");
        if(this.get("value") === "ausblenden") {
            // Hides a Column
            myDataTable.hideColumn(sKey);
        }
        else {
            // Shows a Column
            myDataTable.showColumn(sKey);
        }
    };

    // Create the SimpleDialog
    YAHOO.util.Dom.removeClass("dt-dlg", "inprogress");
    var myDlg = new YAHOO.widget.SimpleDialog("dt-dlg", {
            width: "50em",
		    visible: false,
		    modal: true,
		    buttons: [
				{ text:"Schlie&szlig;en",  handler:hideDlg }
            ],
            fixedcenter: true,
            constrainToViewport: true
	});
	myDlg.render();

    // Nulls out myDlg to force a new one to be created
    myDataTable.subscribe("columnReorderEvent", function(){
        newCols = true;
        YAHOO.util.Event.purgeElement("dt-dlg-picker", true);
        YAHOO.util.Dom.get("dt-dlg-picker").innerHTML = "";
    }, this, true);

	// Hook up the SimpleDialog to the link
	YAHOO.util.Event.addListener("dt-options-link", "click", showDlg, this, true);

	// show the selected columns
	document.getElementById('ColumnSelection').style.display = "block";
}


// update the promotion view
function updateCampaignCostsReportCampaignStep2(responseText)
{
    // assign the response text
    setContent("StatisticsResults", responseText);

    var myDataSource = new YAHOO.util.LocalDataSource(YAHOO.util.Dom.get('existingTable'));

    myDataSource.responseType = YAHOO.util.DataSource.TYPE_HTMLTABLE;


    myDataSource.responseSchema = {
        fields: [{key:'campaign_name'},
                 {key:'promotionid'},
                 {key:'campaign_type'},
                 {key:'advertisingplatform_name'},
                 {key:'start_date'},
                 {key:'end_date'},
                 {key:'promotion_state'},
                 {key:'cashbackdays', parser:'number'},
                 {key:'campaign_costs', parser:'number'},
                 {key:'planned_sales', parser:'number'},
                 {key:'buyactionsum', parser:'number'},
                 {key:'guv', parser:'number'},
                 {key:'campaign_views_ap', parser:'number'},
                 {key:'campaign_costsperview_ap', parser:'number'},
                 {key:'campaign_clicks_ap', parser:'number'},
                 {key:'campaign_costsperclick_ap', parser:'number'},
                 {key:'campaign_views_pc', parser:'number'},
                 {key:'campaign_costsperview_pc', parser:'number'},
                 {key:'campaign_views_pc_tkp', parser:'number'},
                 {key:'campaign_clicks_pc', parser:'number'},
                 {key:'campaign_costsperclick_pc', parser:'number'},
                 {key:'campaign_clicks_pc_tkp', parser:'number'},
                 {key:'buyaction1count', parser:'number'},
                 {key:'buyaction1sum', parser:'number'},
                 {key:'cac', parser:'number'},
                 {key:'conversion', parser:'number'},
                 {key:'buyaction2count', parser:'number'},
                 {key:'buyaction2sum', parser:'number'},
                 {key:'buyaction3count', parser:'number'},
                 {key:'buyaction3sum', parser:'number'},
                 {key:'buyaction4count', parser:'number'},
                 {key:'buyaction4sum', parser:'number'},
                 {key:'stornoquote', parser:'number'},
                 {key:'emails', parser:'number'},
                 {key:'cpe', parser:'number'},
                 {key:'freeuser', parser:'number'},
                 {key:'cpf', parser:'number'},
        ]
    };



    // Define a custom format function
    var myFormatPercent = function(elCell, oRecord, oColumn, oData) {

        // number format
        oData = YAHOO.util.Number.format(oData, {decimalPlaces:2, thousandsSeparator:'.', decimalSeparator:',', suffix:'%'});
        elCell.innerHTML = oData;
    };

    // Define a custom format function
    var myFormatConversion = function(elCell, oRecord, oColumn, oData) {

        // add euro sign to currency column
        elCell.innerHTML = "1:" + oData;
    };

    var myColumnDefs = [
        {key:'campaign_name',             label:'Kampagne', maxAutoWidth:300, sortable:true, resizeable:true},
        {key:'promotionid',               label:'Promotion-ID', width:300, sortable:true, resizeable:true},
        {key:'campaign_type',             label:'Typ', sortable:true, resizeable:true},
        {key:'advertisingplatform_name',  label:'Werbeplattform', sortable:true, resizeable:true},
        {key:'start_date',                label:'Start', formatter:'date', sortable:true, resizeable:true},
        {key:'end_date',                  label:'Ende', formatter:'date', sortable:true, resizeable:true},
        {key:'promotion_state',           label:'Status', sortable:true, resizeable:true},
        {key:'cashbackdays',              label:'Ref.-Tage', sortable:true, resizeable:true},
        {key:'campaign_costs',            label:'Budget', formatter:'currency', sortable:true, resizeable:true},
        {key:'planned_sales',             label:'plan Umsatz', formatter:'currency', sortable:true, resizeable:true},
        {key:'buyactionsum',              label:'Umsatz', formatter:'currency', sortable:true, resizeable:true},
        {key:'guv',                       label:'<abbr title="Gewinn- und Verlustrechnung"><span class="abbr" title="Gewinn- und Verlustrechnung">GuV</span></abbr>', formatter:'currency', sortable:true, resizeable:true},
        {key:'campaign_views_ap',         label:'<abbr title="Werbeplattform"><span class="abbr" title="Werbeplattform">WP</span></abbr>-Views', abbr:'Werbeplattform - Views', sortable:true, resizeable:true},
        {key:'campaign_costsperview_ap',  label:'<abbr title="Werbeplattform"><span class="abbr" title="Werbeplattform">WP</span></abbr>-<abbr title="Kosten pro View"><span class="abbr" title="Kosten pro View">CPV</span></abbr>', abbr:'Werbeplattform - Kosten pro View', formatter:'currency', sortable:true, resizeable:true},
        {key:'campaign_clicks_ap',        label:'<abbr title="Werbeplattform"><span class="abbr" title="Werbeplattform">WP</span></abbr>-Clicks', abbr:'Werbeplattform - Clicks', sortable:true, resizeable:true},
        {key:'campaign_costsperclick_ap', label:'<abbr title="Werbeplattform"><span class="abbr" title="Werbeplattform">WP</span></abbr>-<abbr title="Kosten pro Click"><span class="abbr" title="Kosten pro Click">CPC</span></abbr>', abbr:'Werbeplattform - Kosten pro Click', formatter:'currency', sortable:true, resizeable:true},
        {key:'campaign_views_pc',         label:'<abbr title="Partnercash"><span class="abbr" title="Partnercash">PC</span></abbr>-Views', abbr:'Partnercash - Views', sortable:true, resizeable:true},
        {key:'campaign_costsperview_pc',  label:'<abbr title="Partnercash"><span class="abbr" title="Partnercash">PC</span></abbr>-<abbr title="Kosten pro View"><span class="abbr" title="Kosten pro View">CPV</span></abbr>', abbr:'Partnercash - Kosten pro View', formatter:'currency', sortable:true, resizeable:true},
        {key:'campaign_views_pc_tkp',     label:'<abbr title="Partnercash"><span class="abbr" title="Partnercash">PC</span></abbr>-View <abbr title="Tausenderpreis"><span class="abbr" title="Tausenderpreis">TKP</span></abbr>', abbr:'Partnercash-Views Tausenderpreis', formatter:'currency', sortable:true, resizeable:true},
        {key:'campaign_clicks_pc',        label:'<abbr title="Partnercash"><span class="abbr" title="Partnercash">PC</span></abbr>-Clicks', abbr:'Partnercash - Clicks', sortable:true, resizeable:true},
        {key:'campaign_costsperclick_pc', label:'<abbr title="Partnercash"><span class="abbr" title="Partnercash">PC</span></abbr>-<abbr title="Kosten pro Click"><span class="abbr" title="Kosten pro Click">CPC</span></abbr>', abbr:'Partnercash - Kosten pro Click', formatter:'currency', sortable:true, resizeable:true},
        {key:'campaign_clicks_pc_tkp',    label:'<abbr title="Partnercash"><span class="abbr" title="Partnercash">PC</span></abbr>-Click <abbr title="Tausenderpreis"><span class="abbr" title="Tausenderpreis">TKP</span></abbr>', abbr:'Partnercash-Clicks Tausenderpreis', formatter:'currency', sortable:true, resizeable:true},
        {key:'buyaction1count',           label:'Erstk&auml;ufe', sortable:true, resizeable:true},
        {key:'buyaction1sum',             label:'Erstkauf Summe', formatter:'currency', sortable:true, resizeable:true},
        {key:'cac',                       label:'<abbr title="Kosten pro Kunde"><span class="abbr" title="Kosten pro Kunde">CAC</span></abbr>', abbr:'Kosten pro Kunde', formatter:'currency', sortable:true, resizeable:true},
        {key:'conversion',                label:'Conversion', formatter:myFormatConversion, sortable:true, resizeable:true},
        {key:'buyaction2count',           label:'Nachk&auml;ufe', sortable:true, resizeable:true},
        {key:'buyaction2sum',             label:'Nachkauf Summe', formatter:'currency', sortable:true, resizeable:true},
        {key:'buyaction3count',           label:'Verl&auml;ngerungen', sortable:true, resizeable:true},
        {key:'buyaction3sum',             label:'Verl&auml;ngerung Summe', formatter:'currency', sortable:true, resizeable:true},
        {key:'buyaction4count',           label:'Stornos', sortable:true, resizeable:true},
        {key:'buyaction4sum',             label:'Storno Summe', formatter:'currency', sortable:true, resizeable:true},
        {key:'stornoquote',               label:'Stornoquote', formatter:myFormatPercent, sortable:true, resizeable:true},
        {key:'emails',                    label:'Email-Adressen', sortable:true, resizeable:true},
        {key:'cpe',                       label:'<abbr title="Kosten pro Email-Adresse"><span class="abbr" title="Kosten pro Email-Adresse">CPE</span></abbr>', abbr:'Kosten pro Email-Adresse', formatter:'currency', sortable:true, resizeable:true},
        {key:'freeuser',                  label:'FreeUser', sortable:true, resizeable:true},
        {key:'cpf',                       label:'<abbr title="Kosten pro FreeUser"><span class="abbr" title="Kosten pro FreeUser">CPF</span></abbr>', abbr:'Kosten pro FreeUser', formatter:'currency', sortable:true, resizeable:true},
    ];


    // DataTable configuration
    var myConfigs = {
        draggableColumns : true,  // Drag and Drop columns
        sortedBy : {key:"campaign_name", dir:YAHOO.widget.DataTable.CLASS_ASC}, // Sets UI initial sort arrow
        currencyOptions:{decimalPlaces:2, thousandsSeparator:'.', decimalSeparator:',', suffix:'&euro;'},
        paginator: new YAHOO.widget.Paginator({ rowsPerPage:50,
                                                // Options for FirstPageLink component
                                                firstPageLinkLabel : "<<",
                                                firstPageLinkClass : "yui-pg-first", // default

                                                // Options for LastPageLink component
                                                lastPageLinkLabel : ">>",
                                                lastPageLinkClass : "yui-pg-last", // default

                                                // Options for PreviousPageLink component
                                                previousPageLinkLabel : "< zur&uuml;ck",
                                                previousPageLinkClass : "yui-pg-previous", // default

                                                // Options for NextPageLink component
                                                nextPageLinkLabel : "vorw&auml;rts >", // default
                                                nextPageLinkClass : "yui-pg-next", // default

                                                template: YAHOO.widget.Paginator.TEMPLATE_ROWS_PER_PAGE,
                                                rowsPerPageOptions: [20,50,100],
                                                pageLinks: 10
                                             }) // Enables pagination
    };



    myDataTable = new YAHOO.widget.DataTable('tableContainer', myColumnDefs, myDataSource, myConfigs);

    // Enables single-mode row selection
    myDataTable.set("selectionMode","singlecell");
    myDataTable.subscribe("rowClickEvent",     myDataTable.onEventSelectRow);
    myDataTable.subscribe("rowMouseoverEvent", myDataTable.onEventHighlightRow);
    myDataTable.subscribe("rowMouseoutEvent",  myDataTable.onEventUnhighlightRow);



    // Create the tfoot element, its row, and its cells
    var tbody  = myDataTable.getTbodyEl(),
        tfoot  = document.createElement('tfoot'),
        sumRow = tfoot.appendChild(document.createElement('tr')),
        td,
        sum_campaign_costs = 0,
        sum_buyactionsum = 0,
        sum_guv = 0,
        sum_buyaction1count = 0,
        sum_buyaction1sum = 0,
        sum_buyaction2count = 0,
        sum_buyaction2sum = 0,
        sum_buyaction3count = 0,
        sum_buyaction3sum = 0,
        sum_buyaction4count = 0,
        sum_buyaction4sum = 0,
        sum_emails = 0,
        sum_freeuser = 0,
        i = 0;



    records = myDataTable.getRecordSet().getRecords();

    for (i=0; i < records.length; i++) {
        sum_campaign_costs += records[i].getData("campaign_costs");
        sum_buyactionsum += records[i].getData("buyactionsum");
        sum_guv += records[i].getData("guv");

        sum_buyaction1count += records[i].getData("buyaction1count");
        sum_buyaction1sum   += records[i].getData("buyaction1sum");

        sum_buyaction2count += records[i].getData("buyaction2count");
        sum_buyaction2sum   += records[i].getData("buyaction2sum");

        sum_buyaction3count += records[i].getData("buyaction3count");
        sum_buyaction3sum   += records[i].getData("buyaction3sum");

        sum_buyaction4count += records[i].getData("buyaction4count");
        sum_buyaction4sum   += records[i].getData("buyaction4sum");

        sum_emails   += records[i].getData("emails");
        sum_freeuser += records[i].getData("freeuser");
    }


    // Assign the tfoot row a class for styling
    sumRow.className = 'sum-row';


    // Add the cells and their content
    td = sumRow.appendChild(document.createElement('td'));
    td.colSpan = 50;
    td.innerHTML = '<hr>Gesamtsummen:  &raquo; Budget: ' + my_number_format(sum_campaign_costs, 2, ",", ".") + ' &euro; '
                               + ' &raquo; Umsatz: ' + my_number_format(sum_buyactionsum, 2, ",", ".") + ' &euro; '
                               + ' &raquo; Gewinn/Verlust: ' + my_number_format(sum_guv, 2, ",", ".") + ' &euro; '

                               + '<hr><p style="padding-top:5px; padding-left:5px;">  &raquo; Erstk&auml;ufe: '          + my_number_format(sum_buyaction1count, 0, ",", ".") + '  '
                               + '(Erstkauf Summe: '          + my_number_format(sum_buyaction1sum, 2, ",", ".") + ' &euro;) '
                               + '<br> &raquo; Nachk&auml;ufe: '          + my_number_format(sum_buyaction2count, 0, ",", ".") + '  '
                               + '(Nachkauf Summe: '          + my_number_format(sum_buyaction2sum, 2, ",", ".") + ' &euro;) '
                               + '<br> &raquo; Verl&auml;ngerungen: '     + my_number_format(sum_buyaction3count, 0, ",", ".") + '  '
                               + '(Verl&auml;ngerung Summe: ' + my_number_format(sum_buyaction3sum, 2, ",", ".") + ' &euro;) '
                               + '<br> &raquo; Stornos: '                 + my_number_format(sum_buyaction4count, 0, ",", ".") + '  '
                               + '(Storno Summe: '            + my_number_format(sum_buyaction4sum, 2, ",", ".") + ' &euro;) '
                               + '<br> &raquo; Email-Adressen: '          + my_number_format(sum_emails, 0, ",", ".") + '  '
                               + '<br> &raquo; FreeUser: '                + my_number_format(sum_freeuser, 0, ",", ".") + ' ';

    // Finally, insert the new tfoot before the table's tbody (order is important)
    tbody.parentNode.insertBefore(tfoot,tbody);



    // show and hide columns
    // Shows dialog, creating one when necessary
    var newCols = true;
    var showDlg = function(e) {
        YAHOO.util.Event.stopEvent(e);

        if(newCols) {
            // Populate Dialog
            // Using a template to create elements for the SimpleDialog
            var allColumns = myDataTable.getColumnSet().keys;
            var elPicker = YAHOO.util.Dom.get("dt-dlg-picker");
            var elTemplateCol = document.createElement("div");
            YAHOO.util.Dom.addClass(elTemplateCol, "dt-dlg-pickercol");
            var elTemplateKey = elTemplateCol.appendChild(document.createElement("span"));
            YAHOO.util.Dom.addClass(elTemplateKey, "dt-dlg-pickerkey");
            var elTemplateBtns = elTemplateCol.appendChild(document.createElement("span"));
            YAHOO.util.Dom.addClass(elTemplateBtns, "dt-dlg-pickerbtns");
            var onclickObj = {fn:handleButtonClick, obj:this, scope:false };

            // Create one section in the SimpleDialog for each Column
            var elColumn, elKey, elButton, oButtonGrp;
            for(var i=0,l=allColumns.length;i<l;i++) {
                var oColumn = allColumns[i];

                // Use the template
                elColumn = elTemplateCol.cloneNode(true);

                // Write the Column key
                elKey = elColumn.firstChild;

                // add the label for show and hide the column
                var columnObject = oColumn.getDefinition();
                elKey.innerHTML = columnObject.label;

                // Create a ButtonGroup
                oButtonGrp = new YAHOO.widget.ButtonGroup({
                                id: "buttongrp"+i,
                                name: oColumn.getKey(),
                                container: elKey.nextSibling
                });
                oButtonGrp.addButtons([
                    { label: "anzeigen", value: "anzeigen", checked: ((!oColumn.hidden)), onclick: onclickObj},
                    { label: "ausblenden", value: "ausblenden", checked: ((oColumn.hidden)), onclick: onclickObj}
                ]);

                elPicker.appendChild(elColumn);
            }
            newCols = false;
    	}
        myDlg.show();
    };
    var hideDlg = function(e) {
        this.hide();
    };
    var handleButtonClick = function(e, oSelf) {
        var sKey = this.get("name");
        if(this.get("value") === "ausblenden") {
            // Hides a Column
            myDataTable.hideColumn(sKey);
        }
        else {
            // Shows a Column
            myDataTable.showColumn(sKey);
        }
    };

    // Create the SimpleDialog
    YAHOO.util.Dom.removeClass("dt-dlg", "inprogress");
    var myDlg = new YAHOO.widget.SimpleDialog("dt-dlg", {
            width: "50em",
		    visible: false,
		    modal: true,
		    buttons: [
				{ text:"Schlie&szlig;en",  handler:hideDlg }
            ],
            fixedcenter: true,
            constrainToViewport: true
	});
	myDlg.render();

    // Nulls out myDlg to force a new one to be created
    myDataTable.subscribe("columnReorderEvent", function(){
        newCols = true;
        YAHOO.util.Event.purgeElement("dt-dlg-picker", true);
        YAHOO.util.Dom.get("dt-dlg-picker").innerHTML = "";
    }, this, true);

	// Hook up the SimpleDialog to the link
	YAHOO.util.Event.addListener("dt-options-link", "click", showDlg, this, true);

	// show the selected columns
	document.getElementById('ColumnSelection').style.display = "block";
}




// updates the campaign costs report
function loadColumnSelection(responseText, displayMode, displayStep, columnSelectionId)
{
    // get the step, or display it?
    if(responseText == null) {

        // build the url
        // execute the httpRequest
        if ( displayMode == 26 ) { // campaigns
            if ( displayStep == 1 ) {
                var url  = "./rptcampaigncosts.php?do=load&displaymode=" + escape(displayMode) + "&displaystep=" + escape(displayStep) + "&selectionid=" + escape(columnSelectionId);
            }
            else if ( displayStep == 2 ) {
                var url  = "./rptcampaigncosts.php?do=load&displaymode=" + escape(displayMode) + "&displaystep=" + escape(displayStep) + "&selectionid=" + escape(columnSelectionId);
            }
        }

        MakeHttpRequest(url, 'saveColumnSelection');
    }
    else {
        // assign the response text
        setContent("StatisticsResults", responseText);
    }
}

// update the campaign view
function updateCampaignCostsReportDomainStep1(responseText)
{
    // assign the response text
    setContent("StatisticsResults", responseText);

    var myDataSource = new YAHOO.util.LocalDataSource(YAHOO.util.Dom.get('existingTable'));

    myDataSource.responseType = YAHOO.util.DataSource.TYPE_HTMLTABLE;

    myDataSource.responseSchema = {
        fields: [{key:'domain_name'},
                 {key:'cashbackdays', parser:'number'},
                 {key:'totalcostsplanning', parser:'number'},
                 {key:'campaign_costs', parser:'number'},
                 {key:'planned_sales', parser:'number'},
                 {key:'buyactionsum', parser:'number'},
                 {key:'guv', parser:'number'},
                 {key:'campaign_views_ap', parser:'number'},
                 {key:'campaign_costsperview_ap', parser:'number'},
                 {key:'campaign_clicks_ap', parser:'number'},
                 {key:'campaign_costsperclick_ap', parser:'number'},
                 {key:'campaign_views_pc', parser:'number'},
                 {key:'campaign_costsperview_pc', parser:'number'},
                 {key:'campaign_views_pc_tkp', parser:'number'},
                 {key:'campaign_clicks_pc', parser:'number'},
                 {key:'campaign_costsperclick_pc', parser:'number'},
                 {key:'campaign_clicks_pc_tkp', parser:'number'},
                 {key:'buyaction1count', parser:'number'},
                 {key:'buyaction1sum', parser:'number'},
                 {key:'cac', parser:'number'},
                 {key:'conversion', parser:'number'},
                 {key:'buyaction2count', parser:'number'},
                 {key:'buyaction2sum', parser:'number'},
                 {key:'buyaction3count', parser:'number'},
                 {key:'buyaction3sum', parser:'number'},
                 {key:'buyaction4count', parser:'number'},
                 {key:'buyaction4sum', parser:'number'},
                 {key:'stornoquote', parser:'number'},
                 {key:'emails', parser:'number'},
                 {key:'cpe', parser:'number'},
                 {key:'freeuser', parser:'number'},
                 {key:'cpf', parser:'number'},
        ]
    };



    // Define a custom format function
    var myFormatPercent = function(elCell, oRecord, oColumn, oData) {

        // number format
        oData = YAHOO.util.Number.format(oData, {decimalPlaces:2, thousandsSeparator:'.', decimalSeparator:',', suffix:'%'});
        elCell.innerHTML = oData;
    };

    // Define a custom format function
    var myFormatConversion = function(elCell, oRecord, oColumn, oData) {

        // add 1: to converion column
        elCell.innerHTML = "1:" + oData;
    };


    var myColumnDefs = [
        {key:'domain_name',               label:'Domain', width:200, sortable:true, resizeable:true},
        {key:'cashbackdays',              label:'Ref.-Tage', sortable:true, resizeable:true},
        {key:'totalcostsplanning',        label:'plan Budget', formatter:'currency', sortable:true, resizeable:true},
        {key:'campaign_costs',            label:'Budget', formatter:'currency', sortable:true, resizeable:true},
        {key:'planned_sales',             label:'plan Umsatz', formatter:'currency', sortable:true, resizeable:true},
        {key:'buyactionsum',              label:'Umsatz', formatter:'currency', sortable:true, resizeable:true},
        {key:'guv',                       label:'<abbr title="Gewinn- und Verlustrechnung"><span class="abbr" title="Gewinn- und Verlustrechnung">GuV</span></abbr>', formatter:'currency', sortable:true, resizeable:true},
        {key:'campaign_views_ap',         label:'<abbr title="Werbeplattform"><span class="abbr" title="Werbeplattform">WP</span></abbr>-Views', abbr:'Werbeplattform - Views', sortable:true, resizeable:true},
        {key:'campaign_costsperview_ap',  label:'<abbr title="Werbeplattform"><span class="abbr" title="Werbeplattform">WP</span></abbr>-<abbr title="Kosten pro View"><span class="abbr" title="Kosten pro View">CPV</span></abbr>', abbr:'Werbeplattform - Kosten pro View', formatter:'currency', sortable:true, resizeable:true},
        {key:'campaign_clicks_ap',        label:'<abbr title="Werbeplattform"><span class="abbr" title="Werbeplattform">WP</span></abbr>-Clicks', abbr:'Werbeplattform - Clicks', sortable:true, resizeable:true},
        {key:'campaign_costsperclick_ap', label:'<abbr title="Werbeplattform"><span class="abbr" title="Werbeplattform">WP</span></abbr>-<abbr title="Kosten pro Click"><span class="abbr" title="Kosten pro Click">CPC</span></abbr>', abbr:'Werbeplattform - Kosten pro Click', formatter:'currency', sortable:true, resizeable:true},
        {key:'campaign_views_pc',         label:'<abbr title="Partnercash"><span class="abbr" title="Partnercash">PC</span></abbr>-Views', abbr:'Partnercash - Views', sortable:true, resizeable:true},
        {key:'campaign_costsperview_pc',  label:'<abbr title="Partnercash"><span class="abbr" title="Partnercash">PC</span></abbr>-<abbr title="Kosten pro View"><span class="abbr" title="Kosten pro View">CPV</span></abbr>', abbr:'Partnercash - Kosten pro View', formatter:'currency', sortable:true, resizeable:true},
        {key:'campaign_views_pc_tkp',     label:'<abbr title="Partnercash"><span class="abbr" title="Partnercash">PC</span></abbr>-View <abbr title="Tausenderpreis"><span class="abbr" title="Tausenderpreis">TKP</span></abbr>', abbr:'Partnercash-Views Tausenderpreis', formatter:'currency', sortable:true, resizeable:true},
        {key:'campaign_clicks_pc',        label:'<abbr title="Partnercash"><span class="abbr" title="Partnercash">PC</span></abbr>-Clicks', abbr:'Partnercash - Clicks', sortable:true, resizeable:true},
        {key:'campaign_costsperclick_pc', label:'<abbr title="Partnercash"><span class="abbr" title="Partnercash">PC</span></abbr>-<abbr title="Kosten pro Click"><span class="abbr" title="Kosten pro Click">CPC</span></abbr>', abbr:'Partnercash - Kosten pro Click', formatter:'currency', sortable:true, resizeable:true},
        {key:'campaign_clicks_pc_tkp',    label:'<abbr title="Partnercash"><span class="abbr" title="Partnercash">PC</span></abbr>-Click <abbr title="Tausenderpreis"><span class="abbr" title="Tausenderpreis">TKP</span></abbr>', abbr:'Partnercash-Clicks Tausenderpreis', formatter:'currency', sortable:true, resizeable:true},
        {key:'buyaction1count',           label:'Erstk&auml;ufe', sortable:true, resizeable:true},
        {key:'buyaction1sum',             label:'Erstkauf Summe', formatter:'currency', sortable:true, resizeable:true},
        {key:'cac',                       label:'<abbr title="Kosten pro Kunde"><span class="abbr" title="Kosten pro Kunde">CAC</span></abbr>', abbr:'Kosten pro Kunde', formatter:'currency', sortable:true, resizeable:true},
        {key:'conversion',                label:'Conversion', formatter:myFormatConversion, sortable:true, resizeable:true},
        {key:'buyaction2count',           label:'Nachk&auml;ufe', sortable:true, resizeable:true},
        {key:'buyaction2sum',             label:'Nachkauf Summe', formatter:'currency', sortable:true, resizeable:true},
        {key:'buyaction3count',           label:'Verl&auml;ngerungen', sortable:true, resizeable:true},
        {key:'buyaction3sum',             label:'Verl&auml;ngerung Summe', formatter:'currency', sortable:true, resizeable:true},
        {key:'buyaction4count',           label:'Stornos', sortable:true, resizeable:true},
        {key:'buyaction4sum',             label:'Storno Summe', formatter:'currency', sortable:true, resizeable:true},
        {key:'stornoquote',               label:'Stornoquote', formatter:myFormatPercent, sortable:true, resizeable:true},
        {key:'emails',                    label:'Email-Adressen', sortable:true, resizeable:true},
        {key:'cpe',                       label:'<abbr title="Kosten pro Email-Adresse"><span class="abbr" title="Kosten pro Email-Adresse">CPE</span></abbr>', abbr:'Kosten pro Email-Adresse', formatter:'currency', sortable:true, resizeable:true},
        {key:'freeuser',                  label:'FreeUser', sortable:true, resizeable:true},
        {key:'cpf',                       label:'<abbr title="Kosten pro FreeUser"><span class="abbr" title="Kosten pro FreeUser">CPF</span></abbr>', abbr:'Kosten pro FreeUser', formatter:'currency', sortable:true, resizeable:true},
    ];


    // DataTable configuration
    var myConfigs = {
        draggableColumns : true,  // Drag and Drop columns
        sortedBy : {key:"domain_name", dir:YAHOO.widget.DataTable.CLASS_ASC}, // Sets UI initial sort arrow
        currencyOptions:{decimalPlaces:2, thousandsSeparator:'.', decimalSeparator:',', suffix:'&euro;'},
        paginator: new YAHOO.widget.Paginator({ rowsPerPage:50,
                                                // Options for FirstPageLink component
                                                firstPageLinkLabel : "<<",
                                                firstPageLinkClass : "yui-pg-first", // default

                                                // Options for LastPageLink component
                                                lastPageLinkLabel : ">>",
                                                lastPageLinkClass : "yui-pg-last", // default

                                                // Options for PreviousPageLink component
                                                previousPageLinkLabel : "< zur&uuml;ck",
                                                previousPageLinkClass : "yui-pg-previous", // default

                                                // Options for NextPageLink component
                                                nextPageLinkLabel : "vorw&auml;rts >", // default
                                                nextPageLinkClass : "yui-pg-next", // default

                                                template: YAHOO.widget.Paginator.TEMPLATE_ROWS_PER_PAGE,
                                                rowsPerPageOptions: [20,50,100],
                                                pageLinks: 10
                                             }) // Enables pagination
    };



    myDataTable = new YAHOO.widget.DataTable('tableContainer', myColumnDefs, myDataSource, myConfigs);

    // Enables single-mode row selection
    myDataTable.set("selectionMode","singlecell");
    myDataTable.subscribe("rowClickEvent",     myDataTable.onEventSelectRow);
    myDataTable.subscribe("rowMouseoverEvent", myDataTable.onEventHighlightRow);
    myDataTable.subscribe("rowMouseoutEvent",  myDataTable.onEventUnhighlightRow);




    // Create the tfoot element, its row, and its cells
    var tbody  = myDataTable.getTbodyEl(),
        tfoot  = document.createElement('tfoot'),
        sumRow = tfoot.appendChild(document.createElement('tr')),
        td,
        sum_campaign_costs = 0,
        sum_buyactionsum = 0,
        sum_guv = 0,
        i = 0;



    records = myDataTable.getRecordSet().getRecords();

    for (i=0; i < records.length; i++) {
        sum_campaign_costs += records[i].getData("campaign_costs");
        sum_buyactionsum += records[i].getData("buyactionsum");
        sum_guv += records[i].getData("guv");
    }


    // Assign the tfoot row a class for styling
    sumRow.className = 'sum-row';


    // Add the cells and their content
    td = sumRow.appendChild(document.createElement('td'));
    td.colSpan = 50;
    td.innerHTML = 'Gesamtsummen:  &raquo; Budget: ' + my_number_format(sum_campaign_costs, 2, ",", ".") + ' &euro; &raquo; Umsatz: ' + my_number_format(sum_buyactionsum, 2, ",", ".") + ' &euro; &raquo; Gewinn/Verlust: ' + my_number_format(sum_guv, 2, ",", ".") + ' &euro; ' ;

    // Finally, insert the new tfoot before the table's tbody (order is important)
    tbody.parentNode.insertBefore(tfoot,tbody);




    /* save and load all visible and hidden columns */
    var allColumns       = myDataTable.getColumnSet().keys;
    var allColumnsLength = allColumns.length

    var text = "";

    for(var i=0,l=allColumnsLength;i<l;i++) {
        var oColumn = allColumns[i];
        var columnKey = oColumn.getKey();


        // myDataTable.hideColumn(columnKey); // hide all columns
        // myDataTable.showColumn(columnKey); // hide all columns

        /* first hide all columns and then only show the columns which are not hidden */
        // text = text + columnKey + " = " + oColumn.hidden + "\n";
    }

    /* show and hide the loaded columns */

    // Hides a Column
    // myDataTable.hideColumn('guv');
    // Shows a Column
    // myDataTable.showColumn('guv');



    // show and hide columns
    // Shows dialog, creating one when necessary
    var newCols = true;
    var showDlg = function(e) {
        YAHOO.util.Event.stopEvent(e);

        if(newCols) {
            // Populate Dialog
            // Using a template to create elements for the SimpleDialog
            var allColumns = myDataTable.getColumnSet().keys;
            var elPicker = YAHOO.util.Dom.get("dt-dlg-picker");
            var elTemplateCol = document.createElement("div");
            YAHOO.util.Dom.addClass(elTemplateCol, "dt-dlg-pickercol");
            var elTemplateKey = elTemplateCol.appendChild(document.createElement("span"));
            YAHOO.util.Dom.addClass(elTemplateKey, "dt-dlg-pickerkey");
            var elTemplateBtns = elTemplateCol.appendChild(document.createElement("span"));
            YAHOO.util.Dom.addClass(elTemplateBtns, "dt-dlg-pickerbtns");
            var onclickObj = {fn:handleButtonClick, obj:this, scope:false };

            // Create one section in the SimpleDialog for each Column
            var elColumn, elKey, elButton, oButtonGrp;
            for(var i=0,l=allColumns.length;i<l;i++) {
                var oColumn = allColumns[i];

                // Use the template
                elColumn = elTemplateCol.cloneNode(true);

                // Write the Column key
                elKey = elColumn.firstChild;

                // add the label for show and hide the column
                var columnObject = oColumn.getDefinition();
                elKey.innerHTML = columnObject.label;

                // Create a ButtonGroup
                oButtonGrp = new YAHOO.widget.ButtonGroup({
                                id: "buttongrp"+i,
                                name: oColumn.getKey(),
                                container: elKey.nextSibling
                });
                oButtonGrp.addButtons([
                    { label: "anzeigen", value: "anzeigen", checked: ((!oColumn.hidden)), onclick: onclickObj},
                    { label: "ausblenden", value: "ausblenden", checked: ((oColumn.hidden)), onclick: onclickObj}
                ]);

                elPicker.appendChild(elColumn);
            }
            newCols = false;
    	}
        myDlg.show();
    };
    var hideDlg = function(e) {
        this.hide();
    };
    var handleButtonClick = function(e, oSelf) {
        var sKey = this.get("name");
        if(this.get("value") === "ausblenden") {
            // Hides a Column
            myDataTable.hideColumn(sKey);
        }
        else {
            // Shows a Column
            myDataTable.showColumn(sKey);
        }
    };

    // Create the SimpleDialog
    YAHOO.util.Dom.removeClass("dt-dlg", "inprogress");
    var myDlg = new YAHOO.widget.SimpleDialog("dt-dlg", {
            width: "50em",
		    visible: false,
		    modal: true,
		    buttons: [
				{ text:"Schlie&szlig;en",  handler:hideDlg }
            ],
            fixedcenter: true,
            constrainToViewport: true
	});
	myDlg.render();

    // Nulls out myDlg to force a new one to be created
    myDataTable.subscribe("columnReorderEvent", function(){
        newCols = true;
        YAHOO.util.Event.purgeElement("dt-dlg-picker", true);
        YAHOO.util.Dom.get("dt-dlg-picker").innerHTML = "";
    }, this, true);

	// Hook up the SimpleDialog to the link
	YAHOO.util.Event.addListener("dt-options-link", "click", showDlg, this, true);

	// show the selected columns
	document.getElementById('ColumnSelection').style.display = "block";
}

// updates the graph report
function updateGraphTrafficReport(responseText, dateFrom, dateTo, displayMode, displayStep,
                                  groupBy, domainId, designId, wmInclude, prInclude, tsInclude,
                                  wmExclude, prExclude, tsExclude, prdInclude, tsdInclude,
                                  prdExclude, tsdExclude, tagsInclude, supporter, wmGroup,
                                  carrierId, showLeads, trafficType, domainTagsInclude, country,
                                  language, device, deviceType)
{
    // get the step, or display it?
    if(responseText == null) {

        // build the url
        var url  = "./rptgraphtraffic.php?do=get&displaymode=" + escape(displayMode);
            url += "&displaystep=" + escape(displayStep) + "&date_from=" + escape(dateFrom);
            url += "&date_to=" + escape(dateTo) + "&groupby=" + escape(groupBy);
            url += "&domain=" + escape(domainId);
            url += "&design=" + escape(designId) + "&wm_include=" + escape(wmInclude);
            url += "&pr_include=" + escape(prInclude) + "&wm_exclude=" + escape(wmExclude);
            url += "&pr_exclude=" + escape(prExclude) + "&ts_include=" + escape(tsInclude);
            url += "&ts_exclude=" + escape(tsExclude) + "&prd_include=" + escape(prdInclude);
            url += "&tsd_include=" + escape(tsdInclude) + "&prd_exclude=" + escape(prdExclude);
            url += "&tsd_exclude=" + escape(tsdExclude) + "&tags_include=" + escape(tagsInclude);
            url += "&supporter=" + escape(supporter) + "&wmgroup=" + escape(wmGroup);
            url += "&carrier=" + escape(carrierId) + "&show_leads=" + escape(showLeads);
            url += "&traffic_type=" + escape(trafficType) + "&domaintags_include=" + escape(domainTagsInclude);
            url += "&country=" + escape(country) + "&language=" + escape(language);
            url += "&device=" + escape(device) + "&device_type=" + escape(deviceType);

        // execute the httpRequest
        MakeHttpRequest(url, 'updateGraphTrafficReport');
    }
    else {
        // assign the response text
        setContent("StatisticsResults", responseText);
        myCode = getContent("CodeDiv");
        eval(myCode);
        setContent("CodeDiv", "&nbsp;");
    }
}


// updates the extra traffic source selection for the graph traffic report
function updateGraphTrafficReportExtraTs(xmlUrl)
{
    // get the checkboxes
    var cbList = document.getElementById("TrafficsourceExclude").getElementsByTagName("input");

    // loop through each
    var extraTs = '';
    for(i=0;i<cbList.length;i++) {
        // only checkboxes
        if(cbList[i].type == "checkbox" && cbList[i].checked) {
            extraTs += cbList[i].value + ",";
        }
    }

    // get div 1, reload
    myChart1 = getChartFromId("myChartId1");
    myChart1.setDataURL(xmlUrl + "{%26xml=1&extra_ts=" + escape(extraTs));

    // get div 2, reload
    myChart2 = getChartFromId("myChartId2");
    myChart2.setDataURL(xmlUrl + "%26xml=2&extra_ts=" + escape(extraTs));
}

// updates the extra webmaster selection for the graph traffic report
function updateGraphTrafficReportExtraWm(xmlUrl)
{
    // get the checkboxes
    var cbList = document.getElementById("WmExclude").getElementsByTagName("input");

    // loop through each
    var extraTs = '';
    for(i=0;i<cbList.length;i++) {
        // only checkboxes
        if(cbList[i].type == "checkbox" && cbList[i].checked) {
            extraTs += cbList[i].value + ",";
        }
    }

    // get div 1, reload
    myChart1 = getChartFromId("myChartId1");
    myChart1.setDataURL(xmlUrl + "{%26xml=1&extra_ts=" + escape(extraTs));

    // get div 2, reload
    myChart2 = getChartFromId("myChartId2");
    myChart2.setDataURL(xmlUrl + "%26xml=2&extra_ts=" + escape(extraTs));
}


// updates the webalyzer report
function updateWebalyzerTrafficReport(responseText, dateFrom, dateTo, displayMode, displayStep,
                                      domainName)
{
    // get the step, or display it?
    if(responseText == null) {

        // build the url
        var url  = "./rptwebalyzertraffic.php?do=get&displaymode=" + escape(displayMode);
            url += "&displaystep=" + escape(displayStep) + "&date_from=" + escape(dateFrom);
            url += "&date_to=" + escape(dateTo) + "&domain=" + escape(domainName);

        // execute the httpRequest
        MakeHttpRequest(url, 'updateWebalyzerTrafficReport');
    }
    else {
        // assign the response text
        setContent("StatisticsResults", responseText);
        myCode = getContent("CodeDiv");
        eval(myCode);
        setContent("CodeDiv", "&nbsp;");
    }
}

// updates the graph login report
function updateGraphLoginReport(responseText, dateFrom, dateTo, displayMode, displayStep,
                                  groupBy, domainId, designId, wmInclude, prInclude, tsInclude,
                                  wmExclude, prExclude, tsExclude)
{
    // get the step, or display it?
    if(responseText == null) {

        // build the url
        var url  = "./rptgraphlogin.php?do=get&displaymode=" + escape(displayMode);
            url += "&displaystep=" + escape(displayStep) + "&date_from=" + escape(dateFrom);
            url += "&date_to=" + escape(dateTo) + "&groupby=" + escape(groupBy);
            url += "&domain=" + escape(domainId);
            url += "&design=" + escape(designId) + "&wm_include=" + escape(wmInclude);
            url += "&pr_include=" + escape(prInclude) + "&wm_exclude=" + escape(wmExclude);
            url += "&pr_exclude=" + escape(prExclude) + "&ts_include=" + escape(tsInclude);
            url += "&ts_exclude=" + escape(tsExclude);

        // execute the httpRequest
        MakeHttpRequest(url, 'updateGraphLoginReport');
    }
    else {
        // assign the response text (execute the javascript code for diagramm)
        setContent("StatisticsResults", responseText);
        myCode = getContent("CodeDiv");
        eval(myCode);
        setContent("CodeDiv", "&nbsp;");
    }
}

// Guesses a phrase
function getGuessPhrase(responseText, language, phrase, section, domain, design)
{
    // get the step, or display it?
    if(responseText == null) {

        // build the url
        var url  = "./ks_guess_phrase.php?language=" + escape(language) + "&section=" + escape(section);
            url += "&domain=" + escape(domain) + "&design=" + escape(design) + "&phrase=" + escape(phrase);

        // execute the httpRequest
        MakeHttpRequest(url, "getGuessPhrase");
    }
    else {
        // assign the response text
        document.getElementById("inp_phrase").value = responseText;
    }
}


// updates the banner traffic report
function updateBannerTrafficReport(responseText, dateFrom, dateTo, displayMode, displayStep,
                                   page, sortField, sortOrder, domainId, designId, wmInclude,
                                   prInclude, tsInclude, wmExclude, prExclude, tsExclude, visitsFrom,
                                   visitsTo, clicksFrom, clicksTo, clickRateFrom, clickRateTo, onePage)
{
    // get the step, or display it?
    if(responseText == null) {

        // build the url
        var url  = "./rptbannertraffic.php?do=get&displaymode=" + escape(displayMode);
            url += "&displaystep=" + escape(displayStep) + "&date_from=" + escape(dateFrom);
            url += "&date_to=" + escape(dateTo) + "&page=" + escape(page) + "&sortfield=" + escape(sortField);
            url += "&sortorder=" + escape(sortOrder) +  "&domain=" + escape(domainId);
            url += "&design=" + escape(designId) + "&wm_include=" + escape(wmInclude);
            url += "&pr_include=" + escape(prInclude) + "&wm_exclude=" + escape(wmExclude);
            url += "&pr_exclude=" + escape(prExclude) + "&one_page=" + escape(onePage);
            url += "&ts_include=" + escape(tsInclude) + "&ts_exclude=" + escape(tsExclude);
            url += "&visits_from=" + escape(visitsFrom) + "&visits_to=" + escape(visitsTo);
            url += "&clicks_from=" + escape(clicksFrom) + "&clicks_to=" + escape(clicksTo);
            url += "&clickrate_from=" + escape(clickRateFrom) + "&clickrate_to=" + escape(clickRateTo);

        // execute the httpRequest
        MakeHttpRequest(url, 'updateBannerTrafficReport');
    }
    else {

        // assign the response text
        setContent("StatisticsResults", responseText);
    }
}

// updates the 6month report
function update6MonthTrafficReport(responseText, dateFrom, displayMode, displayStep,
                                   page, sortField, sortOrder, domainId, designId, wmInclude,
                                   prInclude, wmExclude, prExclude)
{
    // get the step, or display it?
    if(responseText == null) {

        // build the url
        var url  = "./rpt6monthtraffic.php?do=get&displaymode=" + escape(displayMode);
            url += "&displaystep=" + escape(displayStep) + "&date_from=" + escape(dateFrom);
            url += "&page=" + escape(page) + "&sortfield=" + escape(sortField);
            url += "&sortorder=" + escape(sortOrder) + "&domain=" + escape(domainId);
            url += "&design=" + escape(designId) + "&wm_include=" + escape(wmInclude);
            url += "&pr_include=" + escape(prInclude) + "&wm_exclude=" + escape(wmExclude);
            url += "&pr_exclude=" + escape(prExclude);

        // execute the httpRequest
        MakeHttpRequest(url, 'update6MonthTrafficReport');
    }
    else {

        // assign the response text
        setContent("StatisticsResults", responseText);
    }
}

// hides the sections form
function hideSectionsForm() {
    // hide the divs
    hideDiv("PageDark");
    hideDiv("SectionsForm");
}

// shows the sections form
function showSectionsForm() {
    // hide the divs
    showDiv("PageDark");
    showDiv("SectionsForm");
}

//hides the DomainTags form
function hideDomainTagsForm() {
    // hide the divs
    hideDiv("PageDark");
    hideDiv("DomainTagsForm");
}

// shows the DomainTags form
function showDomainTagsForm() {
    // hide the divs
    showDiv("PageDark");
    showDiv("DomainTagsForm");
}

// updates the marketing traffic report
function updateMarketingTrafficReport(responseText, dateFrom, dateTo, displayMode, displayStep,
                                      page, sortField, sortOrder, marketingId, marketingSource, wmInclude,
                                      wmExclude, dateMode, onePage, scriptName)
{
    // get the step, or display it?
    if(responseText == null) {

        // build the url
        var url  = "./rptmarketingtraffic.php?do=get&displaymode=" + escape(displayMode);
            url += "&displaystep=" + escape(displayStep) + "&date_from=" + escape(dateFrom);
            url += "&date_to=" + escape(dateTo) + "&page=" + escape(page) + "&sortfield=" + escape(sortField);
            url += "&sortorder=" + escape(sortOrder) + "&marketing_id=" + escape(marketingId);
            url += "&marketing_source=" + escape(marketingSource) + "&wm_include=" + escape(wmInclude);
            url += "&wm_exclude=" + escape(wmExclude) + "&datemode=" + escape(dateMode);
            url += "&one_page=" + escape(onePage);

        // script name is optional
        if(null != scriptName) {
            url += "&script=" + escape(scriptName);
        }

        // execute the httpRequest
        MakeHttpRequest(url, 'updateMarketingTrafficReport');
    }
    else {

        // assign the response text
        setContent("StatisticsResults", responseText);
    }
}

// updates the marketing ids list
function updateMarketingIdsSelection(responseText, categoryId)
{
    // get the step, or display it?
    if(responseText == null) {
        if(isNaN(categoryId)) {
            return;
        }
        // build the url
        var url  = "./rptmarketingtraffic.php?do=rpcgetmids&category=" + escape(categoryId);

        // execute the httpRequest
        MakeHttpRequest(url, 'updateMarketingIdsSelection');
    }
    else {
        // assign the response text
        setContent("MarketingIdsList", responseText);
    }
}

// updates the marketing ids list
function updateMarketingSubCategoriesSelection(responseText, categoryId)
{
    // get the step, or display it?
    if(responseText == null) {
        if(isNaN(categoryId)) {
            return;
        }
        // build the url
        var url  = "./rptmarketingtraffic.php?do=rpcgetsubcategories&category=" + escape(categoryId);

        // execute the httpRequest
        MakeHttpRequest(url, 'updateMarketingSubCategoriesSelection');
    }
    else {
        // assign the response text
        setContent("SubcategoriesList", responseText);
    }
}

// chooses / unchooses a click item
function chooseClickItem(classId)
{
    // reverse the checkbox checked flag
    document.getElementById('clickitem_' + classId).checked = !document.getElementById('clickitem_' + classId).checked;

    // checked?
    if(document.getElementById('clickitem_' + classId).checked) {
        // paint it green
        document.getElementById('clickitem_box_' + classId).style.backgroundColor = '#D0E6B9';
    }
    else {
        // return to grey
        document.getElementById('clickitem_box_' + classId).style.backgroundColor = '#EFEFEF';
    }
}

// prepares the dragdrop stuff before saving
function prepareDragDrop()
{
     // get the list with the assigned webmasters
    var addedList = document.getElementById("ExistingList");

    // get the elements in there
    listElements = addedList.getElementsByTagName("li");

    // holds the webmaster list
    var hiddenString = '';

    // loop through all elements
    for(i=0; i< listElements.length; i++) {
        // assign the element to the webmaster list
        hiddenString = hiddenString + listElements[i].id + ";";
    }

    // assign the string to the hidden input field
    document.getElementById("HiddenDragDrop").value = hiddenString;
}

// updates the tag selection list for a webmaster
function getWmTagSelection(responseText)
{
    // get the step, or display it?
    if(responseText == null) {
        // get the webmasters id
        var wmId = document.getElementById("wmid").value;

        // check
        if(wmId.length <= 0  || isNaN(wmId)) {
            return;
        }
        // build the url
        var url  = "./wmtagging.php?task=rpcgettagselection&id=" + escape(wmId);

        // execute the httpRequest
        MakeHttpRequest(url, 'getWmTagSelection');
    }
    else {
        // assign the response text
        setContent("TagList", responseText);

        var list = document.getElementById("ExistingList");
		DragDrop.makeListContainer( list );
		list.onDragOver = function() { this.style["border"] = "1px dashed #CCCCCC"; };
		list.onDragOut = function() { this.style["border"] = "1px solid #CCCCCC"; };

		list = document.getElementById("NewList");
		DragDrop.makeListContainer( list );
    }
}

// updates the tag selection list for a domain
function getDomainTagSelection(responseText)
{
    // get the step, or display it?
    if(responseText == null) {
        // get the domain id
        var domainId = document.getElementById("domainid").value;

        // check
        if(domainId.length <= 0  || isNaN(domainId)) {
            return;
        }
        // build the url
        var url  = "./domaintagging.php?task=rpcgettagselection&id=" + escape(domainId);

        // execute the httpRequest
        MakeHttpRequest(url, 'getDomainTagSelection');
    }
    else {
        // assign the response text
        setContent("TagList", responseText);

        var list = document.getElementById("ExistingList");
		DragDrop.makeListContainer( list );
		list.onDragOver = function() { this.style["border"] = "1px dashed #CCCCCC"; };
		list.onDragOut = function() { this.style["border"] = "1px solid #CCCCCC"; };

		list = document.getElementById("NewList");
		DragDrop.makeListContainer( list );
    }
}

// updates the tag selection list for a contact
function getContactTagSelection(responseText)
{
    // get the step, or display it?
    if(responseText == null) {
        // get the contacts id
        var contactId = document.getElementById("contactid").value;

        // check
        if(contactId.length <= 0  || isNaN(contactId)) {
            return;
        }
        // build the url
        var url  = "./contacttagging.php?task=rpcgettagselection&id=" + escape(contactId);

        // execute the httpRequest
        MakeHttpRequest(url, 'getContactTagSelection');
    }
    else {
        // assign the response text
        setContent("TagList", responseText);

        var list = document.getElementById("ExistingList");
		DragDrop.makeListContainer( list );
		list.onDragOver = function() { this.style["border"] = "1px dashed #CCCCCC"; };
		list.onDragOut = function() { this.style["border"] = "1px solid #CCCCCC"; };

		list = document.getElementById("NewList");
		DragDrop.makeListContainer( list );
    }
}

// updates the tag selection list for an employee
function getEmployeeTagSelection(responseText)
{
    // get the step, or display it?
    if(responseText == null) {
        // get the employees id
        var employeeId = document.getElementById("employeeid").value;

        // check
        if(employeeId.length <= 0  || isNaN(employeeId)) {
            return;
        }
        // build the url
        var url  = "./employeetagging.php?task=rpcgettagselection&id=" + escape(employeeId);

        // execute the httpRequest
        MakeHttpRequest(url, 'getEmployeeTagSelection');
    }
    else {
        // assign the response text
        setContent("TagList", responseText);

        var list = document.getElementById("ExistingList");
		DragDrop.makeListContainer( list );
		list.onDragOver = function() { this.style["border"] = "1px dashed #CCCCCC"; };
		list.onDragOut = function() { this.style["border"] = "1px solid #CCCCCC"; };

		list = document.getElementById("NewList");
		DragDrop.makeListContainer( list );
    }
}

// get a list of webmasters with a specific tag
function getTaggedWebmasters(responseText, tagId, tagName) {
    // get the step, or display it?
    if(responseText == null) {
        // build the url
        var url  = "./wmtagcloud.php?task=rpcgettaggedwebmasters&id=" + escape(tagId) + "&tag=" + escape(tagName);

        // execute the httpRequest
        MakeHttpRequest(url, 'getTaggedWebmasters');
    }
    else {
        // assign the response text
        setContent("TaggedWebmasters", responseText);
    }
}

// get a list of domains with a specific tag
function getTaggedDomains(responseText, tagId, tagName) {
    // get the step, or display it?
    if(responseText == null) {
        // build the url
        var url  = "./domaintagcloud.php?task=rpcgettaggeddomains&id=" + escape(tagId) + "&tag=" + escape(tagName);

        // execute the httpRequest
        MakeHttpRequest(url, 'getTaggedDomains');
    }
    else {
        // assign the response text
        setContent("TaggedDomains", responseText);
    }
}

// get a list of contacts with a specific tag
function getTaggedContacts(responseText, tagId, tagName) {
    // get the step, or display it?
    if(responseText == null) {
        // build the url
        var url  = "./contacttagcloud.php?task=rpcgettaggedcontacts&id=" + escape(tagId) + "&tag=" + escape(tagName);

        // execute the httpRequest
        MakeHttpRequest(url, 'getTaggedContacts');
    }
    else {
        // assign the response text
        setContent("TaggedContacts", responseText);
    }
}

// updates the contact logging report
function updateContactLoggingReport(responseText, dateFrom, dateTo, displayMode, displayStep,
                                    page, sortField, sortOrder, contactType, employeeId, wmInclude,
                                    wmExclude, onePage, marketingId, marketingSource, direction,
                                    rating, reachability)
{
    // get the step, or display it?
    if(responseText == null) {

        // build the url
        var url  = "./rptcontactlogging.php?do=get&displaymode=" + escape(displayMode);
            url += "&displaystep=" + escape(displayStep) + "&date_from=" + escape(dateFrom);
            url += "&date_to=" + escape(dateTo) + "&page=" + escape(page) + "&sortfield=" + escape(sortField);
            url += "&sortorder=" + escape(sortOrder) + "&contacttype=" + escape(contactType);
            url += "&employee=" + escape(employeeId) + "&wm_include=" + escape(wmInclude);
            url += "&wm_exclude=" + escape(wmExclude) + "&one_page=" + escape(onePage);
            url += "&marketing_id=" + escape(marketingId) + "&marketing_source=" + escape(marketingSource);
            url += "&direction=" + escape(direction) + "&rating=" + escape(rating);
            url += "&reachability=" + escape(reachability);

        // execute the httpRequest
        MakeHttpRequest(url, 'updateContactLoggingReport');
    }
    else {

        // assign the response text
        setContent("StatisticsResults", responseText);
    }
}

// updates the webmaster progress report
function updateWebmasterProgressReport(responseText, displayMode, displayStep,
                                       page, sortField, sortOrder, cacheId)
{
    // get the step, or display it?
    if(responseText == null) {

        // build the url
        var url  = "./rptwmprogress.php?do=get&displaymode=" + escape(displayMode);
            url += "&displaystep=" + escape(displayStep);
            url += "&page=" + escape(page) + "&sortfield=" + escape(sortField);
            url += "&sortorder=" + escape(sortOrder) + "&cache_id=" + escape(cacheId);

        // execute the httpRequest
        MakeHttpRequest(url, 'updateWebmasterProgressReport');
    }
    else {

        // assign the response text
        setContent("StatisticsResults", responseText);
    }
}


// updates the php portals report
function updatePortalsReport(responseText, displayMode, displayStep,
                                       page, sortField, sortOrder, cacheId)
{
    // get the step, or display it?
    if(responseText == null) {

        // build the url
        var url  = "./rptportals.php?do=get&displaymode=" + escape(displayMode);
            url += "&displaystep=" + escape(displayStep);
            url += "&page=" + escape(page) + "&sortfield=" + escape(sortField);
            url += "&sortorder=" + escape(sortOrder) + "&cache_id=" + escape(cacheId);

        // execute the httpRequest
        MakeHttpRequest(url, 'updatePortalsReport');
    }
    else {

        // assign the response text
        setContent("StatisticsResults", responseText);
    }
}


// loads a wizard
function loadWizard(responseText, wizardName) {
    // get the step, or display it?
    if(responseText == null) {
        // get input
        var sectionId = getValue("inp_section");
        var domainId  = getValue("inp_domain");
        var language  = getValue("inp_language");

        // build the url
        var url  = "./ks_wizards.php?wizard=" + escape(wizardName) + "&section=" + escape(sectionId);
            url += "&domain=" + escape(domainId) + "&language=" + escape(language);

        // execute the httpRequest
        MakeHttpRequest(url, "loadWizard");
    }
    else {
        // assign the response text
        setContent("WizardContainer", responseText);
        showDiv("WizardContainer");
    }
}

// updates a wizard
function updateWizard(responseText, wizardName) {
    // get the step, or display it?
    if(responseText == null) {
        // get input basics
        var sectionId = getValue("inp_section");
        var domainId = getValue("inp_domain");
        var language  = getValue("inp_language");

        // get input for inline_medium
        var mediumCategory = getValue("medium_category");
        var mediumId = getValue("medium_id");
        var mediumFormat = getValue("medium_format");

        // get input for rnumber
        var minimum = getValue("minimum");
        var maximum = getValue("maximum");

        // get input for keyword
        var gender = getValue("gender");
        var numerus = getValue("numerus");
        var article = getValue("article");
        var placeholder = getValue("placeholder");

        // get input for phrase
        var phraseType = getValue("phrase_type");
        var phraseLanguage = getValue("phrase_language");
        var phraseTarget = getValue("phrase_target");
        var phraseSection = getValue("phrase_section");
        var phraseDomain = getValue("phrase_domain");
        var phraseDesign = getValue("phrase_design");

        // modifiers
        var useAutoHref = getChecked("use_autohref");
        var useBold = getChecked("use_bold");
        var useRepeat = getChecked("use_repeat");
        var repeat = getValue("repeat");

        // build the url
        var url  = "./ks_wizards.php?wizard=" + escape(wizardName) + "&section=" + escape(sectionId);
            url += "&domain=" + escape(domainId) + "&medium_category=" + escape(mediumCategory);
            url += "&medium=" + escape(mediumId) + "&medium_format=" + escape(mediumFormat);
            url += "&language=" + escape(language) + "&gender=" + escape(gender);
            url += "&numerus=" + escape(numerus) + "&article=" + escape(article);
            url += "&placeholder=" + escape(placeholder) + "&phrase_type=" + escape(phraseType);
            url += "&phrase_language=" + escape(phraseLanguage) + "&phrase_target=" + escape(phraseTarget);
            url += "&phrase_section=" + escape(phraseSection) + "&phrase_domain=" + escape(phraseDomain);
            url += "&phrase_design=" + escape(phraseDesign) + "&minimum=" +  escape(minimum);
            url += "&maximum=" + escape(maximum);

        // modifiers
        url += "&use_autohref=" + escape(useAutoHref) + "&use_bold=" + escape(useBold);
        url += "&use_repeat=" + escape(useRepeat) + "&repeat=" + escape(repeat);

        // execute the httpRequest
        MakeHttpRequest(url, "updateWizard");
    }
    else {
        // assign the response text
        setContent("WizardContainer", responseText);
        showDiv("WizardContainer");
    }
}

function closeWizard() {
    hideDiv("WizardContainer");
}

// adds a medium from the wizard
function addWizardMedium() {
    // get the input
    var mediumId = getValue("medium_id");
    var mediumFormat= getValue("medium_format");

    if(mediumId <= 0 || isNaN(mediumId) || mediumFormat.length <= 0) {
        alert("Fehler bei der Medium Auswahl");
        return;
    }

    // create the string
    var finalString = "%I:MEDIUM:[MEDIUM=" + mediumId + ",MEDIUMFORMAT=" + mediumFormat + "]%";

    // store it
    insertAtCursor(document.getElementById("inp_phrase"), finalString);
}

// adds a random number from the wizard
function addWizardRNumber() {
    // get the input
    var minimum = parseInt(getValue("minimum"));
    var maximum = parseInt(getValue("maximum"));
    var useAutoHref = getChecked("use_autohref");
    var useBold = getChecked("use_bold");

    if(minimum < 0 || isNaN(minimum) || maximum <= 0 || isNaN(maximum) || maximum <= minimum) {
        alert("Minimum und Maximum müssen Dezimalzahlen > 0 sein.");
        return;
    }

    // create the string
    var finalString = "%N:" + minimum + "-" + maximum;

    // modifiers
    numModifiers = 0;
    if(useAutoHref || useBold) {
        // start
        finalString += ":[";

        // autohref
        if(useAutoHref) {
            finalString += "AUTOHREF=1";
            numModifiers++;
        }

        if(useBold) {
            // ,?
            if(numModifiers > 0) {
                finalString += ",";
            }

            finalString += "BOLD=1";

            numModifiers++;
        }

        // start
        finalString += "]";
    }

    // end
    finalString += "%";

    // store it
    insertAtCursor(document.getElementById("inp_phrase"), finalString);
}

// modified version of http://www.webmasterworld.com/forum91/4686.htm
// myField accepts an object reference, myValue accepts the text string to add
function insertAtCursor(myField, myValue) {
    //IE support
    if (document.selection) {
        myField.focus();

        //in effect we are creating a text range with zero
        //length at the cursor location and replacing it
        //with myValue
        sel = document.selection.createRange();
        sel.text = myValue;

    //Mozilla/Firefox/Netscape 7+ support
    } else if (myField.selectionStart || myField.selectionStart == '0') {

        myField.focus();
        //Here we get the start and end points of the
        //selection. Then we create substrings up to the
        //start of the selection and from the end point
        //of the selection to the end of the field value.
        //Then we concatenate the first substring, myValue,
        //and the second substring to get the new value.
        var startPos = myField.selectionStart;
        var endPos = myField.selectionEnd;
        myField.value = myField.value.substring(0, startPos) + myValue + myField.value.substring(endPos, myField.value.length);
        myField.setSelectionRange(endPos+myValue.length, endPos+myValue.length);
    } else {
        myField.value += myValue;
    }
}



// adds a keyword from the wizard
function addWizardKeyword() {
    // get the input
    var gender = getValue("gender");
    var numerus = getValue("numerus");
    var article = getValue("article");
    var placeholder = getValue("placeholder");
    var useAutoHref = getChecked("use_autohref");
    var useBold = getChecked("use_bold");
    var useRepeat = getChecked("use_repeat");
    var repeat = getValue("repeat");

    if(placeholder.length <= 0) {
        alert("Zuerst muss ein Platzhalter ausgewählt werden.");
        return;
    }

    // create the string
    var finalString = "%K:" + placeholder;

    // start
    finalString += ":[";

    // gender?
    if(gender >= 0 && numerus >= 0 && article >= 0) {
        finalString += "GENDER=" + gender + ",NUMERUS=" + numerus + ",ARTICLE=" + article;
    }
    else if(gender >= 0 && numerus >= 0) {
        finalString += "GENDER=" + gender + ",NUMERUS=" + numerus;
    }
    else if(article >= 0 && numerus >= 0) {
        finalString += "NUMERUS=" + numerus + ",ARTICLE=" + article;
    }
    else if(gender >= 0 && article >= 0) {
        finalString += "GENDER=" + gender + ",ARTICLE=" + article;
    }
    else if(gender >= 0) {
        finalString += "GENDER=" + gender;
    }
    else if(numerus >= 0) {
        finalString += "NUMERUS=" + numerus;
    }
    else if(article >= 0) {
        finalString += "ARTICLE=" + article;
    }

    // use auto href?
    if(useAutoHref) {
        finalString += ",AUTOHREF=1";
    }

    // use bold?
    if(useBold) {
        finalString += ",BOLD=1";
    }

    // use repeat
    if(useRepeat && repeat > 0 && repeat < 100) {
        finalString += ",REPEAT=" + repeat;
    }

    // end
    finalString += "]";

    // end
    finalString += "%";

    // store it
    insertAtCursor(document.getElementById("inp_phrase"), finalString);
}

// adds a random image from the wizard
function addWizardImage() {
    // get the input
    var source = getValue("source");

    if(source.length <= 0) {
        alert("Bitte eine gültige Quelle eingeben.");
        return;
    }

    // create the string
    var finalString = "%I:IMAGE:[SRC=" + source + "]%";

    // store it
    insertAtCursor(document.getElementById("inp_phrase"), finalString);
}

// adds a phrase from the wizard
function addWizardPhrase() {
    // get the input
    var phraseType = getValue("phrase_type");
    var phraseLanguage = getValue("phrase_language");
    var phraseTarget = getValue("phrase_target");
    var phraseSection = getValue("phrase_section");
    var phraseDomain = getValue("phrase_domain");
    var phraseDesign = getValue("phrase_design");

    if(phraseType <= 0 || phraseLanguage.length <= 0 || phraseTarget <= 0 ||
       (phraseSection == 0 && phraseDomain == 0 && phraseDesign == 0)) {
        alert("Fehler bei der Phrasen Auswahl");
        return;
    }

    // determine the target id
    var targetId = 0;
    if(phraseTarget == 1) {
        targetId = phraseSection;
    }
    else if(phraseTarget == 2) {
        targetId = phraseDomain;
    }
    else if(phraseTarget == 3) {
        targetId = phraseDesign;
    }

    // create the string
    var finalString = "%P:PHRASE:[";

    // modifiers
    finalString += "PHRASETYPE=" + phraseType;
    finalString += ",LANG=" + phraseLanguage;
    finalString += ",PHRASETARGET=" + phraseTarget;
    finalString += ",TARGETID=" + targetId;

    // end
    finalString += "]%";

    // store it
    insertAtCursor(document.getElementById("inp_phrase"), finalString);
}

// adds a random hosted gallery from the wizard
function addWizardFhg() {
    // create the string
    var finalString = "%I:FHG%";

    // store it
    insertAtCursor(document.getElementById("inp_phrase"), finalString);
}

// adds [TITLE] tags around a text selection
function addWizardTitle() {
    // put the text around the selection
    insertAroundCursor(document.getElementById("inp_phrase"), "[TITEL]", "[/TITEL]");
}

// modified version of insertAtCursor
function insertAroundCursor(myField, startValue, endValue) {
    //IE support
    if (document.selection) {
        myField.focus();

        //in effect we are creating a text range with zero
        //length at the cursor location and replacing it
        //with myValue
        sel = document.selection.createRange();
        sel.text = startValue + sel.text + endValue;

    //Mozilla/Firefox/Netscape 7+ support
    } else if (myField.selectionStart || myField.selectionStart == '0') {

        myField.focus();
        //Here we get the start and end points of the
        //selection. Then we create substrings up to the
        //start of the selection and from the end point
        //of the selection to the end of the field value.
        //Then we concatenate the first substring, myValue,
        //and the second substring to get the new value.
        var startPos = myField.selectionStart;
        var endPos = myField.selectionEnd;
        myField.value = myField.value.substring(0, startPos) + startValue + myField.value.substring(startPos, endPos) + endValue + myField.value.substring(endPos, myField.value.length);
        myField.setSelectionRange(endPos+startValue.length, endPos+startValue.length);
    } else {
        myField.value += startValue + endValue;
    }
}


// Updates the Designs of the Sections
function updateSectionDesigns(responseText, fieldName)
{
    // get the results, or display them?
    if(responseText == null) {

        var theSel = document.getElementById('selected_design_sections');

        var selLength = theSel.length;
        var allSections = "";

        for(var i=0; i<selLength; i++)
        {
            if (allSections == "")
            {
                allSections += "sections[]=" + escape(theSel.options[i].value);
            }
            else
            {
                allSections += "&sections[]=" + escape(theSel.options[i].value);
            }
        }

        // build the url
        var url = "./exitconfig_massupdate.php?task=check&" + allSections;

        // execute the httpRequest
        MakeHttpRequest(url, "updateSectionDesigns");
    }
    else {
        // display the results
        setContent("designs_select", responseText);
    }
}

// Updates the Designs of the Sections
function updateProgramSections(responseText, fieldName)
{
    // get the results, or display them?
    if(responseText == null) {

        var theSel = document.getElementById('selected_programs');

        var selLength = theSel.length;
        var allPrograms = "";

        for(var i=0; i<selLength; i++)
        {
            if (allPrograms == "")
            {
                allPrograms += "programs[]=" + escape(theSel.options[i].value);
            }
            else
            {
                allPrograms += "&programs[]=" + escape(theSel.options[i].value);
            }
        }

        // build the url
        var url = "./exitconfig_massupdate.php?task=getsections&" + allPrograms;

        // execute the httpRequest
        MakeHttpRequest(url, "updateProgramSections");
    }
    else {
        // display the results
        setContent("sections_select", responseText);
    }
}

// updates the keyword / phrase system report
function updatePhrasesReport(responseText, type)
{
    // get the step, or display it?
    if(responseText == null) {
        // get the input
        var phraseType = getValue("phrasetype");

        // build the url
        var url  = "./rptphrases.php?do=get&type=" + escape(type) + "&phrasetype=" + escape(phraseType);

        // execute the httpRequest
        MakeHttpRequest(url, 'updatePhrasesReport');
    }
    else {
        // assign the response text
        setContent("StatisticsResults", responseText);
    }
}

// updates the contacts list
function updateContactsList(responseText)
{
    // get the step, or display it?
    if(responseText == null) {
        // get the input
        var tags = getValue("tags");
        var lastX = getValue("last_x_month");


        // build the url
        var url  = "./ma_queueing.php?process=2&tag=" + escape(tags) + "&campaign=" + escape(activeCampaign);

        // last x?
        if(document.getElementById("last_x").checked && lastX > 0) {
            url += "&last_x=" + escape(lastX);
        }

        // execute the httpRequest
        MakeHttpRequest(url, 'updateContactsList');
    }
    else {
        // assign the response text
        setContent("contactscontainer", responseText);
    }
}

function updateReasonsList(responseText)
{
    // get the step, or display it?
    if(responseText == null) {
        // get the input
        var reasons = getValue("reasons");
        var lastX = getValue("last_x_month");


        // build the url
        var url  = "./ma_queueing.php?process=3&reason=" + escape(reasons) + "&campaign=" + escape(activeCampaign);

        // last x?
        if(document.getElementById("last_x").checked && lastX > 0) {
            url += "&last_x=" + escape(lastX);
        }

        // execute the httpRequest
        MakeHttpRequest(url, 'updateReasonsList');
    }
    else {
        // assign the response text
        setContent("reasonscontainer", responseText);
    }
}

// updates the client traffic report
function updateClientTrafficReport(responseText, dateFrom, dateTo, displayMode, displayStep,
                                   page, sortField, sortOrder, onePage, country, language, browser,
                                   browserEngine, os, osEngine, wmInclude, prInclude, tsInclude,
                                   wmExclude, prExclude, tsExclude, prdInclude, tsdInclude,
                                   prdExclude, tsdExclude, domainId)
{
    // get the step, or display it?
    if(responseText == null) {

        // build the url
        var url  = "./rptclienttraffic.php?do=get&displaymode=" + escape(displayMode);
            url += "&displaystep=" + escape(displayStep) + "&date_from=" + escape(dateFrom);
            url += "&date_to=" + escape(dateTo) + "&page=" + escape(page) + "&sortfield=" + escape(sortField);
            url += "&sortorder=" + escape(sortOrder) + "&one_page=" + escape(onePage);
            url += "&country=" + escape(country) + "&language=" + escape(language);
            url += "&browser=" + escape(browser) + "&browser_engine=" + escape(browserEngine);
            url += "&os=" + escape(os) + "&os_engine=" + escape(osEngine);
            url += "&wm_include=" + escape(wmInclude);
            url += "&pr_include=" + escape(prInclude) + "&wm_exclude=" + escape(wmExclude);
            url += "&pr_exclude=" + escape(prExclude) + "&ts_include=" + escape(tsInclude);
            url += "&ts_exclude=" + escape(tsExclude) + "&prd_include=" + escape(prdInclude);
            url += "&tsd_include=" + escape(tsdInclude) + "&prd_exclude=" + escape(prdExclude);
            url += "&tsd_exclude=" + escape(tsdExclude) + "&domain=" + escape(domainId);

        // execute the httpRequest
        MakeHttpRequest(url, 'updateClientTrafficReport');
    }
    else {

        // assign the response text
        setContent("StatisticsResults", responseText);
    }
}

// get the medium
function getMediumIDs(responseText)
{
	// get the step, or display it?
	if(responseText == null) {

		var section   = document.getElementById("inp_section").value;

		var url  = "./copykeywords.php?task=getMedium&section=" + escape(section);

        // execute the httpRequest
        MakeHttpRequest(url, 'getMediumIDs');
	}
	else {
        // assign the response text
        setContent("MediumResults", responseText);
	}
}

// get the medium
function copyKeywords(responseText)
{
	// get the step, or display it?
	if(responseText == null) {
		document.getElementById("UpdateResults").innerHTML = "";
		document.getElementById("Loader").style.display = "block";
		var mediumIdFrom = document.getElementById("inp_medium_from").value;
		var mediumIdTo   = document.getElementById("inp_medium_to").value;
		var chgDesign = document.getElementById("chgdesign");

		chgDesign = chgDesign.checked ? 1 : 0;

		var url  = "./copykeywords.php?task=update&mediumidfrom=" + escape(mediumIdFrom);
		    url += "&mediumidto=" + escape(mediumIdTo);
		    url += "&chgdesign=" + escape(chgDesign);

        // execute the httpRequest
        MakeHttpRequest(url, 'copyKeywords');
	}
	else {
		document.getElementById("Loader").style.display = "none";
        // assign the response text
        setContent("UpdateResults", responseText);
	}
}

// Adds a element to a list
function moveTagging(fromId, toId) {
    // get the list length
    var fromListLen = document.getElementById(fromId).length;

    // get the element handles
    var fromElement = document.getElementById(fromId);

    var toElement = document.getElementById(toId);

    // loop  through all elements from the "from" list
    for(i=fromListLen-1; i>=0; i--) {
        // shortcut to the selected item
        var selectedItem = document.getElementById(fromId).options[i];

        // just elements that are selected
        if (selectedItem.selected == true ) {
            // get the values of the selected item
            var theVal = selectedItem.value;
            var theText = selectedItem.innerHTML;

            // create the new option
            var newOption = document.createElement('OPTION');

            // assign the values
            newOption.innerHTML = theText;
            newOption.value = theVal;

            // append the new option
            toElement.appendChild(newOption);

            // remove the old option
            fromElement.removeChild(selectedItem);
        }
    }
}


// Adds a element to a list (with parent tag support)
function removeParentTagging(fromId, toId) {
    // get the list length
    var fromListLen = document.getElementById(fromId).length;

    // get the element handles
    var fromElement = document.getElementById(fromId);

    // loop  through all elements from the "from" list
    for(i=fromListLen-1; i>=0; i--) {
        // shortcut to the selected item
        var selectedItem = document.getElementById(fromId).options[i];

        // just elements that are selected
        if (selectedItem.selected == true ) {
            // get the values of the selected item
            var theVal = selectedItem.value;
            var theText = selectedItem.innerHTML;

            // create the new option
            var newOption = document.createElement('OPTION');

            // assign the values
            newOption.innerHTML = theText;
            newOption.value = theVal;

            // get the target element
            var toElement = document.getElementById(toId + "_" +  theVal.split(":", 1));

            // append the new option
            toElement.appendChild(newOption);

            // remove the old option
            fromElement.removeChild(selectedItem);
        }
    }
}

// prepares the webmasters before saving
function prepareTagging(hiddenField)
{
     // get the list with the assigned tags
    var addedList = document.getElementById("ExistingList");

    // get the elements in there
    listElements = addedList.getElementsByTagName("option");

    // holds the tags list
    var tagsString = '';

    // loop through all elements
    for(i=0; i< listElements.length; i++) {

        // assign the element to the tags list
        tagsString = tagsString + listElements[i].value + ";";
    }

    // assign the string to the hidden input field
    document.getElementById(hiddenField).value = tagsString;
}

// shows the tags for a selected tag parent
function showTagging(selectId)
{
    // get the elements in there
    listElements = document.getElementsByTagName("select");

    // loop through all elements
    for(i=0; i< listElements.length; i++) {
        if(listElements[i].getAttribute("rel") != "NewList") {
            continue;
        }

        listElements[i].style.display = "none";
    }

    document.getElementById("NewList_" + selectId).style.display = "inline";
}

// updates the domain report
function updateRefererTrafficReport(responseText, dateFrom, dateTo, displayMode, displayStep,
                                   page, sortField, sortOrder, domainId, designId, wmInclude,
                                   prInclude, tsInclude, wmExclude, prExclude, tsExclude,
                                   seInclude, kwInclude, kwExclude, onePage, csvExport)
{
    // get the step, or display it?
    if(responseText == null) {
        if(isNaN(csvExport)) {
            csvExport = 0;
        }

        // build the url
        var url  = "./rptreferertraffic.php?do=get&displaymode=" + escape(displayMode);
            url += "&displaystep=" + escape(displayStep) + "&date_from=" + escape(dateFrom);
            url += "&date_to=" + escape(dateTo) + "&page=" + escape(page) + "&sortfield=" + escape(sortField);
            url += "&sortorder=" + escape(sortOrder) + "&domain=" + escape(domainId);
            url += "&design=" + escape(designId) + "&wm_include=" + escape(wmInclude);
            url += "&pr_include=" + escape(prInclude) + "&wm_exclude=" + escape(wmExclude);
            url += "&pr_exclude=" + escape(prExclude) + "&one_page=" + escape(onePage);
            url += "&se_include=" + escape(seInclude) + "&ts_include=" + escape(tsInclude);
            url += "&ts_exclude=" + escape(tsExclude) + "&kw_include=" + escape(kwInclude);
            url += "&kw_exclude=" + escape(kwExclude) + "&csv_export=" + escape(csvExport);

        // csv export?
        if(csvExport == 1) {
            // Create an IFRAME.
              var iframe = document.createElement("iframe");

              // Point the IFRAME to GenerateFile, with the
              //   desired region as a querystring argument.
              iframe.src = url;

              // This makes the IFRAME invisible to the user.
              iframe.style.display = "none";

              // Add the IFRAME to the page.  This will trigger
              //   a request
              document.body.appendChild(iframe);

              // ok
              return;
        }

        // execute the httpRequest
        MakeHttpRequest(url, 'updateRefererTrafficReport');
    }
    else {

        // assign the response text
        setContent("StatisticsResults", responseText);
    }
}

// prepares the hidden tags field in graph traffic report, if tags are selected
function prepareGraphTrafficTags()
{
    var elem = document.getElementById("TagsIncludeList");

    var tagsList = '';
    for(i=0;i<elem.length;i++) {
        // only checkboxes
        if(elem[i].selected) {
            tagsList += elem[i].value + ",";
        }
    }

    document.getElementById("tags_include").value =  tagsList;
}

// returns the fields + values from a form as string
function getReportFormFields()
{
    // get the form fields
    var inputFields  = document.getElementById("ReportForm").getElementsByTagName("input");
    var selectFields = document.getElementById("ReportForm").getElementsByTagName("select");

    // loop through each field
    var fieldsString = '';
    for(i=0; i<inputFields.length; i++) {
        // skip fields without id
        if(!inputFields[i].id) {
            continue;
        }

        // skip date fields
        if(inputFields[i].id == "date_from" || inputFields[i].id == "date_to") {
            continue;
        }



        // only selected fields
        switch(inputFields[i].type) {
            default: break;
            case 'hidden':
            case 'text':
                // skip empty
                if(inputFields[i].value.length <=0 ) { break; }

                // store
                fieldsString += inputFields[i].type + "::" + inputFields[i].id + "::" + inputFields[i].value + "||";
                break;
            case 'radio':
            case 'checkbox':
                // store
                fieldsString += inputFields[i].type + "::" + inputFields[i].id + "::" + inputFields[i].checked + "||";
                break;
        }
    }

    // loop through each select
    for(i=0; i<selectFields.length; i++) {
        // skip fields without id
        if(!selectFields[i].id) {
            continue;
        }

        // multiple field?
        if(selectFields[i].multiple == false) {
            // normal select - store
            fieldsString += "select::" + selectFields[i].id + "::" + selectFields[i].value + "||";
        }
        else{
            // multiple select
            var selectedOptions = '';
            for(j=0;j<selectFields[i].options.length;j++) {
                // selected?
                if(selectFields[i].options[j].selected == true) {
                    selectedOptions += selectFields[i].options[j].value + ",";
                }
            }

            // if we have fields, add them
            if(selectedOptions.length) {
                // store
                fieldsString += "select_multiple::" + selectFields[i].id + "::" + selectedOptions + "||";
            }
        }
    }

    // return it
    return fieldsString;
}

// shows the form for adding a report pattern
function addReportPatternForm(reportType)
{
    // show Div
    showDiv("PageDark");

    // update the list
    updateReportPatternForm(null, reportType);
}

// shows the form for adding a report column pattern
function addReportColumnPatternForm(reportType, displayMode, displayStep)
{
    // show Div
    showDiv("PageDark");

    // update the list
    updateReportColumnPatternForm(null, reportType, displayMode, displayStep);
}

// get the medium
function updateReportPatternForm(responseText, reportType)
{
	// get the step, or display it?
	if(responseText == null) {
		var url  = "./rptrpc.php?task=addpatternform&report=" + escape(reportType);

        // execute the httpRequest
        MakeHttpRequest(url, 'updateReportPatternForm');
	}
	else {
        // assign the response text
        setContent("OverlayContainer", responseText);

        // show the container
        showDiv("OverlayContainer");

        // set focus
        document.getElementById("pattern_name").focus();
	}
}

// get the medium
function updateReportColumnPatternForm(responseText, reportType, displayMode, displayStep)
{
	// get the step, or display it?
	if(responseText == null) {
		var url  = "./rptrpc.php?task=addcolumnpatternform&report=" + escape(reportType) + "&displaymode=" + escape(displayMode) + "&displaystep=" + escape(displayStep);

        // execute the httpRequest
        MakeHttpRequest(url, 'updateReportColumnPatternForm');
	}
	else {
        // assign the response text
        setContent("OverlayContainer", responseText);

        // show the container
        showDiv("OverlayContainer");

        // set focus
        document.getElementById("pattern_name").focus();
	}
}

// closes the form for adding a new report pattern
function closeReportPatternForm()
{
    // end darkness
    hideDiv("OverlayContainer");
    hideDiv("PageDark");
}

// get the medium
function addReportPattern(responseText)
{
	// get the step, or display it?
	if(responseText == null) {
	    // get values
	    var reportType = getValue("pattern_report");
	    var patternName = getValue("pattern_name");
	    var patternFields = getReportFormFields();

	    // build url
		var url  = "./rptrpc.php?task=addpattern&report=" + escape(reportType) + "&name=" + escape(patternName);
		    url += "&fields=" + escape(patternFields);

        // execute the httpRequest
        MakeHttpRequest(url, 'addReportPattern');
	}
	else {
        // assign the response text
        setContent("ReportPatterns", responseText);

        // close the form
        closeReportPatternForm();

        // sick loading
        eval(getContent('CodeDiv'));
	}
}


// get the medium
function addReportColumnPattern(responseText)
{
	// get the step, or display it?
	if(responseText == null) {
	    // get values
	    var reportType    = getValue("pattern_report");
	    var displayMode   = getValue("pattern_display_mode");
	    var displayStep   = getValue("pattern_display_step");
	    var patternName   = getValue("pattern_name");
	    var columns = "";


	    // get all hidden-states of the columns
        var allColumns       = myDataTable.getColumnSet().keys;
        var allColumnsLength = allColumns.length

        // get all column-hidden-states
        for(var i=0,l=allColumnsLength;i<l;i++) {
            var oColumn = allColumns[i];
            var columnKey = oColumn.getKey();
            var columnKeyIndex = oColumn.getKeyIndex();

            columns += columnKey + "::" + oColumn.hidden + "::" + columnKeyIndex + "||";
        }


	    // build url
		var url  = "./rptrpc.php?task=addcolumnpattern&report=" + escape(reportType) + "&name=" + escape(patternName);
		    url += "&displaymode=" + escape(displayMode);
		    url += "&displaystep=" + escape(displayStep);
		    url += "&columns=" + escape(columns);

        // execute the httpRequest
        MakeHttpRequest(url, 'addReportColumnPattern');
	}
	else {
        // assign the response text
        setContent("ReportColumnPatterns", responseText);

        // close the form
        closeReportPatternForm();

        // sick loading
        eval(getContent('CodeDiv'));
	}
}

// loads a report pattern
function loadReportPattern(patternArray)
{
    /*
        p[0] = type
        p[1] = name
        p[2] = value (on type select_multiple -> array with values)

    */

    // save the dates
    var dateFrom = getValue("date_from");
    var dateTo   = getValue("date_to");

    // reset the whole form
    document.getElementById("ReportForm").reset();

    // restore the dates
    document.getElementById("date_from").value = dateFrom;
    document.getElementById("date_to").value   = dateTo;

    // loop
    for(p in patternArray) {
        // which type
        switch(patternArray[p][0]) {
            default: break;
            case 'hidden':
            case 'text':
            case 'select':
                // set value
                document.getElementById(patternArray[p][1]).value = patternArray[p][2];
                break;
            case 'radio':
            case 'checkbox':
                // check true/false
                if(patternArray[p][2] == 'true') {
                    document.getElementById(patternArray[p][1]).checked = true;
                }
                else {
                    document.getElementById(patternArray[p][1]).checked = false;
                }
                break;
            case 'select_multiple':
                // get the select
                var optionsList = document.getElementById(patternArray[p][1]).options;

                // go through each value
                for(v in patternArray[p][2]) {
                    // go through each option
                    for(i=0;i<optionsList.length;i++) {
                        // same option?
                        if(patternArray[p][2][v] == optionsList[i].value) {
                            optionsList[i].selected = true;
                            break;
                        }
                    }
                }
        }
    }
}

// loads a report pattern
function loadReportColumnPattern(patternArray)
{
    /*
        p[1] = name
        p[2] = value
        p[2] = sortindex
    */

    /* get all columns */
    // var allColumns       = myDataTable.getColumnSet().keys;
    // var allColumnsLength = allColumns.length

    /*
    // loop at all columns
    for(var i=0,l=allColumnsLength;i<l;i++) {
        var oColumn = allColumns[i];
        var columnKey = oColumn.getKey();

        // show column
        myDataTable.showColumn(columnKey);
    }
    */

    // hide this columns
    for(p in patternArray) {

        patternArray[p][1]; // name
        patternArray[p][2]; // value
        patternArray[p][3]; // sortindex


        // Insert the removed Column into the right position
        if ( patternArray[p][2] == "true" ) {  // hidden
            myDataTable.hideColumn(patternArray[p][1]);
        }
        else if ( patternArray[p][2] == "false" ) {

            myDataTable.showColumn(patternArray[p][1]); // get the column
            myDataTable.reorderColumn(myDataTable.getColumn(patternArray[p][1]), patternArray[p][3]); // reorder the columns
        }
    }
}

// hides the custom box
function hideMyBox(boxName) {
    // hide the divs
    hideDiv("PageDark");
    hideDiv(boxName + "_box");
}

// shows a custom box
function showMyBox(boxName) {
    // hide the divs
    showDiv("PageDark");
    showDiv(boxName + "_box");
}

// prepares the hidden tags field in graph traffic report, if tags are selected
function prepareMyBox(boxName)
{
    var elem = document.getElementById(boxName + "_list");

    var theList = '';
    for(i=0;i<elem.length;i++) {
        // only checked ones
        if(elem[i].selected) {
            theList += elem[i].value + ",";
        }
    }

    document.getElementById(boxName).value =  theList;
}

// updates the ratio report
function updateRatiosReport(responseText, dateFrom, dateTo, displayMode, displayStep,
                            page, sortField, sortOrder, groupBy, compareX, compareY, designedBy,
                            caInclude, caExclude, pgInclude, pgExclude, doInclude, doExclude,
                            deInclude, deExclude, taInclude, taExclude, wmInclude, wmExclude,
                            prInclude, prExclude, tsInclude, tsExclude, prdInclude, prdExclude,
                            tsdInclude, tsdExclude, seInclude, seExclude
                            )
{
    // get the step, or display it?
    if(responseText == null) {

        // build the url
        var url  = "./rptratios.php?do=get&displaymode=" + escape(displayMode);
            url += "&displaystep=" + escape(displayStep) + "&date_from=" + escape(dateFrom);
            url += "&date_to=" + escape(dateTo) + "&groupby=" + escape(groupBy);
            url += "&page=" + escape(page) + "&sortfield=" + escape(sortField);
            url += "&sortorder=" + escape(sortOrder);
            url += "&compare_x=" + escape(compareX) + "&compare_y=" + escape(compareY);
            url += "&designed_by=" + escape(designedBy);
            url += "&ca_include=" + escape(caInclude) + "&ca_exclude=" + escape(caExclude);
            url += "&pg_include=" + escape(pgInclude) + "&pg_exclude=" + escape(pgExclude);
            url += "&do_include=" + escape(doInclude) + "&do_exclude=" + escape(doExclude);
            url += "&de_include=" + escape(deInclude) + "&de_exclude=" + escape(deExclude);
            url += "&ta_include=" + escape(taInclude) + "&ta_exclude=" + escape(taExclude);
            url += "&wm_include=" + escape(wmInclude) + "&wm_exclude=" + escape(wmExclude);
            url += "&pr_include=" + escape(prInclude) + "&pr_exclude=" + escape(prExclude);
            url += "&ts_include=" + escape(tsInclude) + "&ts_exclude=" + escape(tsExclude);
            url += "&prd_include=" + escape(prdInclude) + "&prd_exclude=" + escape(prdExclude);
            url += "&tsd_include=" + escape(tsdInclude) + "&tsd_exclude=" + escape(tsdExclude);
            url += "&se_include=" + escape(seInclude) + "&se_exclude=" + escape(seExclude);

        // execute the httpRequest
        MakeHttpRequest(url, 'updateRatiosReport');
    }
    else {
        // assign the response text
        setContent("StatisticsResults", responseText);

        // there is a code div
        if(document.getElementById('CodeDiv')) {
            myCode = getContent("CodeDiv");
            eval(myCode);
            setContent("CodeDiv", "&nbsp;");
        }
    }
}

// updates the bad traffic report
function updateBadTrafficReport(responseText, dateFrom, dateTo, displayMode, displayStep,
                            page, sortField, sortOrder,
                            caInclude, caExclude, pgInclude, pgExclude, doInclude, doExclude,
                            deInclude, deExclude, taInclude, taExclude, wmInclude, wmExclude,
                            prInclude, prExclude, tsInclude, tsExclude, prdInclude, prdExclude,
                            tsdInclude, tsdExclude, seInclude, seExclude, onePage, visitsFrom,
                            visitsTo
                            )
{
    // get the step, or display it?
    if(responseText == null) {

        // build the url
        var url  = "./rptbadtraffic.php?do=get&displaymode=" + escape(displayMode);
            url += "&displaystep=" + escape(displayStep) + "&date_from=" + escape(dateFrom);
            url += "&date_to=" + escape(dateTo) + "&one_page=" + escape(onePage);
            url += "&page=" + escape(page) + "&sortfield=" + escape(sortField);
            url += "&sortorder=" + escape(sortOrder);
            url += "&ca_include=" + escape(caInclude) + "&ca_exclude=" + escape(caExclude);
            url += "&pg_include=" + escape(pgInclude) + "&pg_exclude=" + escape(pgExclude);
            url += "&do_include=" + escape(doInclude) + "&do_exclude=" + escape(doExclude);
            url += "&de_include=" + escape(deInclude) + "&de_exclude=" + escape(deExclude);
            url += "&ta_include=" + escape(taInclude) + "&ta_exclude=" + escape(taExclude);
            url += "&wm_include=" + escape(wmInclude) + "&wm_exclude=" + escape(wmExclude);
            url += "&pr_include=" + escape(prInclude) + "&pr_exclude=" + escape(prExclude);
            url += "&ts_include=" + escape(tsInclude) + "&ts_exclude=" + escape(tsExclude);
            url += "&prd_include=" + escape(prdInclude) + "&prd_exclude=" + escape(prdExclude);
            url += "&tsd_include=" + escape(tsdInclude) + "&tsd_exclude=" + escape(tsdExclude);
            url += "&se_include=" + escape(seInclude) + "&se_exclude=" + escape(seExclude);
            url += "&visits_from=" + escape(visitsFrom) + "&visits_to=" + escape(visitsTo);

        // execute the httpRequest
        MakeHttpRequest(url, 'updateBadTrafficReport');
    }
    else {
        // assign the response text
        setContent("StatisticsResults", responseText);
    }
}

// updates the traffic conversion report
function updateTrafficConversionReport(responseText, dateFrom, dateTo, displayMode, displayStep,
                            page, sortField, sortOrder,
                            caInclude, caExclude, pgInclude, pgExclude, doInclude, doExclude,
                            deInclude, deExclude, taInclude, taExclude, wmInclude, wmExclude,
                            prInclude, prExclude, tsInclude, tsExclude, prdInclude, prdExclude,
                            tsdInclude, tsdExclude, seInclude, seExclude, onePage, dateExclude
                            )
{
    // get the step, or display it?
    if(responseText == null) {

        // build the url
        var url  = "./rpttrafficconversion.php?do=get&displaymode=" + escape(displayMode);
            url += "&displaystep=" + escape(displayStep) + "&date_from=" + escape(dateFrom);
            url += "&date_to=" + escape(dateTo) + "&one_page=" + escape(onePage);
            url += "&page=" + escape(page) + "&sortfield=" + escape(sortField);
            url += "&sortorder=" + escape(sortOrder);
            url += "&ca_include=" + escape(caInclude) + "&ca_exclude=" + escape(caExclude);
            url += "&pg_include=" + escape(pgInclude) + "&pg_exclude=" + escape(pgExclude);
            url += "&do_include=" + escape(doInclude) + "&do_exclude=" + escape(doExclude);
            url += "&de_include=" + escape(deInclude) + "&de_exclude=" + escape(deExclude);
            url += "&ta_include=" + escape(taInclude) + "&ta_exclude=" + escape(taExclude);
            url += "&wm_include=" + escape(wmInclude) + "&wm_exclude=" + escape(wmExclude);
            url += "&pr_include=" + escape(prInclude) + "&pr_exclude=" + escape(prExclude);
            url += "&ts_include=" + escape(tsInclude) + "&ts_exclude=" + escape(tsExclude);
            url += "&prd_include=" + escape(prdInclude) + "&prd_exclude=" + escape(prdExclude);
            url += "&tsd_include=" + escape(tsdInclude) + "&tsd_exclude=" + escape(tsdExclude);
            url += "&se_include=" + escape(seInclude) + "&se_exclude=" + escape(seExclude);
            url += "&date_exclude=" + escape(dateExclude);

        // execute the httpRequest
        MakeHttpRequest(url, 'updateBadTrafficReport');
    }
    else {
        // assign the response text
        setContent("StatisticsResults", responseText);
    }
}

// find selected domains, and forward to step 2 of traffic conversion report for domains (comparison)
function doTrafficConversionComparison(compareUrl, compareField)
{
    // get elems
    elemsList = document.getElementsByTagName("input");
    selElems = '';
    for(i=0;i<elemsList.length;i++) {
        if(elemsList[i].getAttribute("rel") == "compare" && elemsList[i].checked == true) {
            selElems += elemsList[i].value + ", ";
        }
    }

    // append
    compareUrl += "&" + compareField + "=" + selElems;
    document.location = compareUrl;
}

// updates the traffic details report
function updateTrafficDetails(responseText, targetDiv, dateFrom, dateTo, displayMode, displayStep,
                            page, sortField, sortOrder,
                            caInclude, caExclude, pgInclude, pgExclude, doInclude, doExclude,
                            deInclude, deExclude, taInclude, taExclude, wmInclude, wmExclude,
                            prInclude, prExclude, tsInclude, tsExclude, prdInclude, prdExclude,
                            tsdInclude, tsdExclude, seInclude, seExclude, onePage, compare,
                            designedBy, dateExclude
                            )
{
    // get the step, or display it?
    if(responseText == null) {
        // no compare?
        if(compare == null) {
            compare = 0;
        }

        // build the url
        var url  = "./rpttrafficdetail.php?do=get&displaymode=" + escape(displayMode);
            url += "&displaystep=" + escape(displayStep) + "&date_from=" + escape(dateFrom);
            url += "&date_to=" + escape(dateTo) + "&one_page=" + escape(onePage);
            url += "&page=" + escape(page) + "&sortfield=" + escape(sortField);
            url += "&sortorder=" + escape(sortOrder) + "&compare=" + escape(compare);
            url += "&ca_include=" + escape(caInclude) + "&ca_exclude=" + escape(caExclude);
            url += "&pg_include=" + escape(pgInclude) + "&pg_exclude=" + escape(pgExclude);
            url += "&do_include=" + escape(doInclude) + "&do_exclude=" + escape(doExclude);
            url += "&de_include=" + escape(deInclude) + "&de_exclude=" + escape(deExclude);
            url += "&ta_include=" + escape(taInclude) + "&ta_exclude=" + escape(taExclude);
            url += "&wm_include=" + escape(wmInclude) + "&wm_exclude=" + escape(wmExclude);
            url += "&pr_include=" + escape(prInclude) + "&pr_exclude=" + escape(prExclude);
            url += "&ts_include=" + escape(tsInclude) + "&ts_exclude=" + escape(tsExclude);
            url += "&prd_include=" + escape(prdInclude) + "&prd_exclude=" + escape(prdExclude);
            url += "&tsd_include=" + escape(tsdInclude) + "&tsd_exclude=" + escape(tsdExclude);
            url += "&se_include=" + escape(seInclude) + "&se_exclude=" + escape(seExclude);
            url += "&designed_by=" + escape(designedBy) + "&date_exclude=" + escape(dateExclude);

        // execute the httpRequest
        MakeHttpRequest(url, 'updateTrafficDetails', targetDiv);
    }
    else {
        // assign the response text
        setContent(targetDiv, responseText);
    }
}

// updates the traffic quality report
function updateTrafficQuality(responseText, targetDiv, dateFrom, dateTo, displayMode, displayStep,
                            page, sortField, sortOrder,
                            caInclude, caExclude, pgInclude, pgExclude, doInclude, doExclude,
                            deInclude, deExclude, taInclude, taExclude, wmInclude, wmExclude,
                            prInclude, prExclude, tsInclude, tsExclude, prdInclude, prdExclude,
                            tsdInclude, tsdExclude, seInclude, seExclude, onePage
                            )
{
    // get the step, or display it?
    if(responseText == null) {
        // build the url
        var url  = "./rpttrafficquality.php?do=get&displaymode=" + escape(displayMode);
            url += "&displaystep=" + escape(displayStep) + "&date_from=" + escape(dateFrom);
            url += "&date_to=" + escape(dateTo) + "&one_page=" + escape(onePage);
            url += "&page=" + escape(page) + "&sortfield=" + escape(sortField);
            url += "&sortorder=" + escape(sortOrder);
            url += "&ca_include=" + escape(caInclude) + "&ca_exclude=" + escape(caExclude);
            url += "&pg_include=" + escape(pgInclude) + "&pg_exclude=" + escape(pgExclude);
            url += "&do_include=" + escape(doInclude) + "&do_exclude=" + escape(doExclude);
            url += "&de_include=" + escape(deInclude) + "&de_exclude=" + escape(deExclude);
            url += "&ta_include=" + escape(taInclude) + "&ta_exclude=" + escape(taExclude);
            url += "&wm_include=" + escape(wmInclude) + "&wm_exclude=" + escape(wmExclude);
            url += "&pr_include=" + escape(prInclude) + "&pr_exclude=" + escape(prExclude);
            url += "&ts_include=" + escape(tsInclude) + "&ts_exclude=" + escape(tsExclude);
            url += "&prd_include=" + escape(prdInclude) + "&prd_exclude=" + escape(prdExclude);
            url += "&tsd_include=" + escape(tsdInclude) + "&tsd_exclude=" + escape(tsdExclude);
            url += "&se_include=" + escape(seInclude) + "&se_exclude=" + escape(seExclude);
            
        // execute the httpRequest
        MakeHttpRequest(url, 'updateTrafficQuality', targetDiv);
    }
    else {
        // assign the response text
        setContent(targetDiv, responseText);
    }
}


// updates the cronjobs report
function updateCronJobs(responseText, targetDiv, displayStep, page, sortField, sortOrder, onePage)
{
    // get the step, or display it?
    if(responseText == null) {

        // build the url
        var url  = "./rptcronjobs.php?do=get";
            url += "&displaystep=" + escape(displayStep);
            url += "&page=" + escape(page) + "&sortfield=" + escape(sortField);
            url += "&sortorder=" + escape(sortOrder) + "&one_page=" + escape(onePage);

        // execute the httpRequest
        MakeHttpRequest(url, 'updateCronJobs', targetDiv);
    }
    else {
        // assign the response text
        setContent(targetDiv, responseText);
    }
}

function updateErrors(responseText, targetDiv, action, msg, severitylimit, exceptionclass, file, code, created, page, pagination)
{
    if (responseText == null) {

        var url = '';
        switch (action) {

            case "getLatestErrors":
                url = "./statusmonitor.php?do="+action+"&msg=" + msg + "&severitylimit="+severitylimit + "&exceptionclass="+exceptionclass+"&file="+file+"&code="+code+"&created="+created+"&page="+page+"&pagination="+pagination;
            break;

            default:
                url = "./statusmonitor.php?do="+action;
            break;

        }

        MakeHttpRequest(url, 'updateErrors', targetDiv);
    }
    else {
        setContent(targetDiv, responseText);
    }
}

// updates the promotion conversion report
function updatePromotionConversionReport(responseText, dateFrom, dateTo, displayMode, displayStep,
                                        page, sortField, sortOrder, onePage, csvExport,
                                        doInclude, doExclude, pcInclude, pcExclude,
                                        taInclude, taExclude, wmInclude, wmExclude,
                                        prInclude, prExclude, seInclude, seExclude,
                                        prdInclude, prdExclude, tsdInclude, tsdExclude)
{
    // get the step, or display it?
    if(responseText == null) {

        // build the url
        var url  = "./rptpromotionconversion.php?do=get&displaymode=" + escape(displayMode);
            url += "&displaystep=" + escape(displayStep) + "&date_from=" + escape(dateFrom);
            url += "&date_to=" + escape(dateTo);
            url += "&page=" + escape(page) + "&sortfield=" + escape(sortField);
            url += "&sortorder=" + escape(sortOrder);
            url += "&one_page=" + escape(onePage) + "&export_csv=" + escape(csvExport);
            url += "&do_include=" + escape(doInclude) + "&do_exclude=" + escape(doExclude);
            url += "&pc_include=" + escape(pcInclude) + "&pc_exclude=" + escape(pcExclude);
            url += "&ta_include=" + escape(taInclude) + "&ta_exclude=" + escape(taExclude);
            url += "&wm_include=" + escape(wmInclude) + "&wm_exclude=" + escape(wmExclude);
            url += "&pr_include=" + escape(prInclude) + "&pr_exclude=" + escape(prExclude);
            url += "&se_include=" + escape(seInclude) + "&se_exclude=" + escape(seExclude);
            url += "&prd_include=" + escape(prdInclude) + "&prd_exclude=" + escape(prdExclude);
            url += "&tsd_include=" + escape(tsdInclude) + "&tsd_exclude=" + escape(tsdExclude);

        // csv export?
        if(csvExport == 1) {
            // Create an IFRAME.
              var iframe = document.createElement("iframe");

              // Point the IFRAME to GenerateFile, with the
              //   desired region as a querystring argument.
              iframe.src = url;

              // This makes the IFRAME invisible to the user.
              iframe.style.display = "none";

              // Add the IFRAME to the page.  This will trigger
              //   a request
              document.body.appendChild(iframe);

              // ok
              return;
        }


        // execute the httpRequest
        MakeHttpRequest(url, 'updatePromotionConversionReport');
    }
    else {
        // assign the response text
        setContent("StatisticsResults", responseText);
    }
}

// loads the ks2 properties list
function updateKS2PropertiesList(responseText, phraseId)
{
    // get the step, or display it?
    if(responseText == null) {

        // build the url
        var url  = "./ks2_property_configurator.php?action=getPropertiesList";
            url += "&phrase=" + escape(phraseId);

        // execute the httpRequest
        MakeHttpRequest(url, 'updateKS2PropertiesList');
    }
    else {
        // assign the response text
        setContent("KS2PropertiesList", responseText);
    }
}

// loads the ks2 _phrase_ properties list
function updateKS2PhrasePropertiesList(responseText, phraseId)
{
    // get the step, or display it?
    if(responseText == null) {

        // build the url
        var url  = "./ks2_property_configurator.php?action=getPhrasePropertiesList";
            url += "&phrase=" + escape(phraseId);

        // execute the httpRequest
        MakeHttpRequest(url, 'updateKS2PhrasePropertiesList');
    }
    else {
        // assign the response text
        setContent("KS2PhrasePropertiesList", responseText);
    }
}

// loads a wizard
function loadKS2PropertyForm(responseText, propertyId) {
    // get the step, or display it?
    if(responseText == null) {

        // build the url
        var url  = "./ks2_property_configurator.php?action=getPropertyForm";
            url += "&property=" + escape(propertyId);

        // execute the httpRequest
        MakeHttpRequest(url, "loadWizard");
    }
    else {
        // assign the response text
        setContent("WizardContainer", responseText);
        showDiv("WizardContainer");
    }
}

// adds a new ks2 property to the list
propCounter = 0;
function addKS2Property(propertyId) {
    // next id
    propCounter++;

    // get the name
    var propName = document.getElementById("PropertyName").innerHTML;

    // get the value
    var propValue = document.getElementById("PropertyValue").value;

    // get the value as nice string
    if(document.getElementById("PropertyValue").selectedIndex) {
        var propValueString = document.getElementById("PropertyValue").options[document.getElementById("PropertyValue").selectedIndex].innerHTML;
    }
    else {
        var propValueString = propValue;
    }

    // get the <ul> element
    var propContainer = document.getElementById("KS2PhraseProperties");

    // create new list element
    var containerElem = document.createElement("li");

    // create the span for the properties name
    var propTitle = document.createTextNode(propName + ": " + propValueString);

    // create the field for the propertys id
    var hidden1 = document.createElement("input");
    hidden1.type = "hidden";
    hidden1.value = propertyId;
    hidden1.name = "properties[" + propCounter + "][property]";

    // create the field for the propertys value
    var hidden2 = document.createElement("input");
    hidden2.type = "hidden";
    hidden2.value = propValue;
    hidden2.name = "properties[" + propCounter + "][value]";

    // append fields to the container
    containerElem.appendChild(propTitle);
    containerElem.appendChild(hidden1);
    containerElem.appendChild(hidden2);

    // delete link
    containerElem.innerHTML += ' <a href="javascript:void(0);" onclick="removeKS2Property(this.parentNode);" class="removeKS2Property" title="Eigenschaft entfernen">x</a>';

    // append
    propContainer.appendChild(containerElem);

    // close the wizard
    closeWizard();
}

// removes a new ks2 property to the list
function removeKS2Property(liObj) {
    // get the <ul> element
    var propContainer = document.getElementById("KS2PhraseProperties");

    // remove the li obj
    propContainer.removeChild(liObj);
}

// updates the wm overview report
function updateWmOverviewReport(responseText, dateFrom, dateTo, report, displayMode, displayStep,
                               page, sortField, sortOrder, sectionId, domainId, designId, prInclude,
                               tsGroup, exitInclude)
{
    // get the step, or display it?
    if(responseText == null) {
        // build the url
        var url  = "./wmtrafficstatsrpc.php?do=get&report=" + escape(report) + "&displaymode=" + escape(displayMode);
            url += "&displaystep=" + escape(displayStep) + "&date_from=" + escape(dateFrom);
            url += "&date_to=" + escape(dateTo) + "&page=" + escape(page) + "&sortfield=" + escape(sortField);
            url += "&sortorder=" + escape(sortOrder) + "&section=" + escape(sectionId) + "&domain=" + escape(domainId);
            url += "&design=" + escape(designId) + "&pr_include=" + escape(prInclude);
            url += "&tsgroup=" + escape(tsGroup) + "&exit_include=" + escape(exitInclude);

        // execute the httpRequest
        MakeHttpRequest(url, 'updateWmOverviewReport');
    }
    else {
        // assign the response text
        setContent("StatisticsResults", responseText);

        // show footer
        document.getElementById("StatisticsFooter").style.visibility = "visible";
    }
}

// updates the form for reports
function updateReportForm(reportType)
{
    // show all
    enableReportFormField("sel_section");
    enableReportFormField("sel_domain");
    enableReportFormField("sel_design");
    enableReportFormField("exit_include", true);
    enableReportFormField("referers_fast", true);
    enableReportFormField("group_1", true);
    enableReportFormField("group_2", true);
    enableReportFormField("group_3", true);
    enableReportFormField("group_4", true);
    enableReportFormField("group_5", true);
    enableReportFormField("group_6", true);
    enableReportFormField("group_7", true);
    enableReportFormField("group_8", true);

    // which report?
    if(reportType == 1) { // overview
        // disable some
        disableReportFormField("group_8", true);
        disableReportFormField("referers_fast", true);

        // check default
        document.getElementById("group_1").checked = true;
    }
    else if(reportType == 3) { // paysites
        // disable some
        disableReportFormField("group_8", true);
        disableReportFormField("referers_fast", true);

        // check default
        document.getElementById("group_1").checked = true;
    }
    else if(reportType == 4) { // freesites
        // disable some
        disableReportFormField("group_8", true);
        disableReportFormField("referers_fast", true);

        // check default
        document.getElementById("group_1").checked = true;

    }
    else if(reportType == 5) { // emails
        // disable some
        disableReportFormField("sel_domain");
        disableReportFormField("sel_design");
        disableReportFormField("group_3", true);
        disableReportFormField("group_4", true);
        disableReportFormField("group_8", true);
        disableReportFormField("referers_fast", true);

        // check default
        document.getElementById("group_1").checked = true;
    }
    else if(reportType == 6) { // referrers
        // disable some
        disableReportFormField("group_1", true);
        disableReportFormField("group_2", true);
        disableReportFormField("group_3", true);
        disableReportFormField("group_4", true);
        disableReportFormField("group_5", true);
        disableReportFormField("group_6", true);
        disableReportFormField("group_7", true);

        // check default
        document.getElementById("group_8").checked = true;
    }
}

// enables a report form field
function enableReportFormField(fieldId, noStyle)
{
    if(!noStyle) {
        document.getElementById(fieldId).className = "input3";
    }
    document.getElementById(fieldId).disabled = false;

    if(document.getElementById(fieldId + "_label")) {
        document.getElementById(fieldId + "_label").className = '';
    }
}

// disables a report form field
function disableReportFormField(fieldId, noStyle)
{
    if(!noStyle) {
        document.getElementById(fieldId).className = "input3 fdisabled";
    }
    document.getElementById(fieldId).disabled = true;

    if(document.getElementById(fieldId + "_label")) {
        document.getElementById(fieldId + "_label").className = "fdisabled";
    }
}

// updates the wm emails report
function updateWmEmailsReport(responseText, dateFrom, dateTo, report, displayMode, displayStep,
                              page, sortField, sortOrder, sectionId, prInclude,
                              tsGroup, exitInclude)
{
    // get the step, or display it?
    if(responseText == null) {
        // build the url
        var url  = "./wmtrafficstatsrpc.php?do=get&report=" + escape(report) + "&displaymode=" + escape(displayMode);
            url += "&displaystep=" + escape(displayStep) + "&date_from=" + escape(dateFrom);
            url += "&date_to=" + escape(dateTo) + "&page=" + escape(page) + "&sortfield=" + escape(sortField);
            url += "&sortorder=" + escape(sortOrder) + "&section=" + escape(sectionId) + "&pr_include=" + escape(prInclude);
            url += "&tsgroup=" + escape(tsGroup) + "&exit_include=" + escape(exitInclude);

        // execute the httpRequest
        MakeHttpRequest(url, 'updateWmEmailsReport');
    }
    else {
        // assign the response text
        setContent("StatisticsResults", responseText);

        // show footer
        document.getElementById("StatisticsFooter").style.visibility = "visible";
    }
}

// updates the wm paysites report
function updateWmPaysitesReport(responseText, dateFrom, dateTo, report, displayMode, displayStep,
                               page, sortField, sortOrder, sectionId, domainId, designId, prInclude,
                               tsGroup, exitInclude)
{
    // get the step, or display it?
    if(responseText == null) {
        // build the url
        var url  = "./wmtrafficstatsrpc.php?do=get&report=" + escape(report) + "&displaymode=" + escape(displayMode);
            url += "&displaystep=" + escape(displayStep) + "&date_from=" + escape(dateFrom);
            url += "&date_to=" + escape(dateTo) + "&page=" + escape(page) + "&sortfield=" + escape(sortField);
            url += "&sortorder=" + escape(sortOrder) + "&section=" + escape(sectionId) + "&domain=" + escape(domainId);
            url += "&design=" + escape(designId) + "&pr_include=" + escape(prInclude);
            url += "&tsgroup=" + escape(tsGroup) + "&exit_include=" + escape(exitInclude);

        // execute the httpRequest
        MakeHttpRequest(url, 'updateWmPaysitesReport');
    }
    else {
        // assign the response text
        setContent("StatisticsResults", responseText);

        // show footer
        document.getElementById("StatisticsFooter").style.visibility = "visible";
    }
}

// updates the wm freesites report
function updateWmFreesitesReport(responseText, dateFrom, dateTo, report, displayMode, displayStep,
                               page, sortField, sortOrder, sectionId, domainId, designId, prInclude,
                               tsGroup, exitInclude)
{
    // get the step, or display it?
    if(responseText == null) {
        // build the url
        var url  = "./wmtrafficstatsrpc.php?do=get&report=" + escape(report) + "&displaymode=" + escape(displayMode);
            url += "&displaystep=" + escape(displayStep) + "&date_from=" + escape(dateFrom);
            url += "&date_to=" + escape(dateTo) + "&page=" + escape(page) + "&sortfield=" + escape(sortField);
            url += "&sortorder=" + escape(sortOrder) + "&section=" + escape(sectionId) + "&domain=" + escape(domainId);
            url += "&design=" + escape(designId) + "&pr_include=" + escape(prInclude);
            url += "&tsgroup=" + escape(tsGroup) + "&exit_include=" + escape(exitInclude);

        // execute the httpRequest
        MakeHttpRequest(url, 'updateWmFreesitesReport');
    }
    else {
        // assign the response text
        setContent("StatisticsResults", responseText);

        // show footer
        document.getElementById("StatisticsFooter").style.visibility = "visible";
    }
}

// updates the wm referer report
function updateWmReferersReport(responseText, dateFrom, dateTo, report, displayMode, displayStep,
                               page, sortField, sortOrder, sectionId, domainId, designId, prInclude,
                               tsGroup, exitInclude, referersFast)
{
    // get the step, or display it?
    if(responseText == null) {
        // build the url
        var url  = "./wmtrafficstatsrpc.php?do=get&report=" + escape(report) + "&displaymode=" + escape(displayMode);
            url += "&displaystep=" + escape(displayStep) + "&date_from=" + escape(dateFrom);
            url += "&date_to=" + escape(dateTo) + "&page=" + escape(page) + "&sortfield=" + escape(sortField);
            url += "&sortorder=" + escape(sortOrder) + "&section=" + escape(sectionId) + "&domain=" + escape(domainId);
            url += "&design=" + escape(designId) + "&pr_include=" + escape(prInclude);
            url += "&tsgroup=" + escape(tsGroup) + "&exit_include=" + escape(exitInclude);
            url += "&referers_fast=" + escape(referersFast);

        // execute the httpRequest
        MakeHttpRequest(url, 'updateWmReferersReport');

        // show footer
        document.getElementById("StatisticsFooter").style.visibility = "visible";
    }
    else {
        // assign the response text
        setContent("StatisticsResults", responseText);
    }
}

// updates the wm traffic report mini graph view
function updateWmMiniGraphReport(responseText, dateFrom, dateTo, report)
{
    // get the step, or display it?
    if(responseText == null) {
        // build the url
        var url  = "./wmtrafficstatsrpc.php?do=get&report=2&displaymode=1";
            url += "&displaystep=1" + "&date_from=" + escape(dateFrom);
            url += "&date_to=" + escape(dateTo) + "&page=0&sortfield=groupfield";
            url += "&sortorder=asc";

        // execute the httpRequest
        MakeHttpRequest(url, 'updateWmMiniGraphReport');
    }
    else {
        // assign the response text
        setContent("StatisticsResults", responseText);

        // create the graph
        myCode = getContent("CodeDiv");
        eval(myCode);
        setContent("CodeDiv", "&nbsp;");
    }
}

function updateRadios(arrayData)
{
    // get opts div
    var viewOpts = document.getElementById("viewopts");
    // clear old
    viewOpts.innerHTML = " ";

    for (var k = 0; k < arrayData.length; ++k) {
         try{
             viewRadio = document.createElement('<input type="radio" name="cview" id="' + 'cview.' + arrayData[k][1] +  '" />');
         }catch(err){
          viewRadio = document.createElement('input');
         }

        // create radio
        viewRadio.setAttribute("type", "radio");
        viewRadio.setAttribute("id", "cview." + arrayData[k][1]);
        viewRadio.setAttribute("name", "cview");
        viewRadio.setAttribute("value", arrayData[k][1]);
        viewRadio.className = "radio";

        // create label
        var viewLabel = document.createElement("label");
        viewLabel.setAttribute("for", "cview." + arrayData[k][1]);
        viewLabel.innerHTML = arrayData[k][0];

        // append
        viewOpts.appendChild(viewRadio);
        viewOpts.appendChild(viewLabel);
        viewOpts.appendChild(document.createElement("br"));

        // select first
        if(k == 0) {
            viewRadio.checked = true;
        }
  }
}

// updates the apis report
function updateApis(responseText, targetDiv, displayStep, page, sortField, sortOrder, onePage)
{
    // get the step, or display it?
    if(responseText == null) {

        // build the url
        var url  = "./rptapis.php?do=get";
            url += "&displaystep=" + escape(displayStep);
            url += "&page=" + escape(page) + "&sortfield=" + escape(sortField);
            url += "&sortorder=" + escape(sortOrder) + "&one_page=" + escape(onePage);

        // execute the httpRequest
        MakeHttpRequest(url, 'updateApis', targetDiv);
    }
    else {
        // assign the response text
        setContent(targetDiv, responseText);
    }
}

// updates transaction simulator
function updateTransSimulator(responseText)
{
    // get the step, or display it?
    if(responseText == null) {
        // get the input
        var webmasterId = getValue("webmaster");
        var domainId = getValue("domain");
        var paymethodId = getValue("paymethod");
        var countryId = getValue("country");
        var buyactionId = getValue("buyaction");
        var tariffId = getValue("tariff");
        var payproviderId = getValue("payprovider");
        var date = getValue("date");
        var membershipDate = getValue("membership_date");

        // build the url
        var url  = "./rpttranssimulator.php?do=get&domain=" + escape(domainId) + "&webmaster=" + escape(webmasterId);
            url += "&paymethod=" + escape(paymethodId) + "&country=" + escape(countryId);
            url += "&buyaction=" + escape(buyactionId) + "&tariff=" + escape(tariffId);
            url += "&payprovider=" + escape(payproviderId);
            url += "&date=" + escape(date) + "&membership_date=" + escape(membershipDate);

        // hide results
        hideDiv("resultsDiv");

        // execute the httpRequest
        MakeHttpRequest(url, 'updateTransSimulator');
    }
    else {
        // assign the response text
        setContent("StatisticsResults", responseText);

        // show results
        showDiv("resultsDiv");
    }
}

