﻿// ==Calc Drop Down==
function customDropdown(ctrlId, width, keyVlauePairs, onChanged) {

    this.setValue = setValue;

    function setValue(value) {
        change(valuesList, displayMember, valueMember, keyVlauePairs[value], value, false)
    }
    
    function toggle(listCtrl){        
        if(listCtrl.className == "")
            listCtrl.className = "hidden";            
        else
            listCtrl.className = "";       
    }

    function change(listCtrl, displayMemberCtrl, valueMemberCtrl, displayValue, value, invokeEvent) {               
        listCtrl.className = "hidden";            
        displayMemberCtrl.innerHTML = displayValue;
        valueMemberCtrl.value = value;
        if (invokeEvent)
            return onChanged(value);
    }

    function init(listCtrl, displayMemberCtrl, valueMemberCtrl) {       
        
        for (var i = 0; i < listCtrl.childNodes.length; i++) {            
            listCtrl.childNodes[i].onclick = function(){ change(listCtrl, displayMemberCtrl, valueMemberCtrl, this.innerHTML, this.value, true ); };
        }            
        displayMemberCtrl.onclick = function(){ toggle(listCtrl); };
    }   
    
    var dropDownPlaceholder = document.getElementById(ctrlId);
    
    if(dropDownPlaceholder != null){   
        dropDownPlaceholder.style.width = width + 'px';
        dropDownPlaceholder.className = "customDropDownContainer";
        
        var initialDisplayMember;
        var initialValueMember;
        
        for(key in keyVlauePairs){   
            initialDisplayMember = keyVlauePairs[key];
            initialValueMember = key;
            break;                
        }
        
        var customDropDown = document.createElement("div");
        customDropDown.className = "customDropDown";
        customDropDown.style.width = width - 18 + 'px';
        
        var dropwdownBorder = document.createElement("div");
        dropwdownBorder.className = "customDropDownBorder";
        customDropDown.appendChild(dropwdownBorder);        
               
        var valueMember = document.createElement("input");
        valueMember.type = "hidden";
        valueMember.value = initialValueMember;
        customDropDown.appendChild(valueMember);
        
        var displayMember = document.createElement("div");
        displayMember.className = "customDropDownSelected";
        displayMember.innerHTML = initialDisplayMember;
        customDropDown.appendChild(displayMember);
        
        dropDownPlaceholder.appendChild(customDropDown);
        
        var valuesList = document.createElement("ul");
        valuesList.className = "hidden";
        valuesList.style.width = width + 'px';
        
        for(key in keyVlauePairs)
            valuesList.appendChild(document.createElement("li"));
        
        var i = 0;
        for(key in keyVlauePairs){
            valuesList.childNodes[i].value = key;
            valuesList.childNodes[i].innerHTML = keyVlauePairs[key];
            i += 1;
        }
        
        customDropDown.appendChild(valuesList);
        
        init(valuesList, displayMember, valueMember);
        
        var customDropDownButton = document.createElement("div");
        customDropDownButton.className = "customDropDownButton";
        customDropDownButton.innerHTML = "&nbsp;";
        customDropDownButton.onclick = function() { toggle(valuesList); };            
        dropDownPlaceholder.appendChild(customDropDownButton);
    }       
} 

// ==FAZNUM==
var FazNum = {
    // Settings
    positiveClass: "numPositive",
    negativeClass: "numNegative",
    currency: "&euro;",
    dateExceptionMessage: "Das Datum (%1) hat nicht das richtige Format (TT.MM.JJJJ)",
    numberExceptionMessage: "Der eingegebene Wert (%1) muss eine Zahl sein.",
    onlyPositiveMessage: "Der eingegebene Wert (%1) muss größer als 0 sein.",
    notNegativeMessage: "Der eingegebene Wert (%1) darf nicht kleiner als 0 sein.",

    // Functions
    Format: function(value, format, returnVal) {
        if (format.length == 0)
            return value;

        if (value == null || value == undefined || value.length == 0) {
            return (returnVal == undefined) ? "" : returnVal;
        }

        if (format.substr(0, 1) == 'n') {
            var decimals = format.substr(1, 1);
            var showPlus = format.indexOf('+') > -1;
            var wrapInColor = format.indexOf('col') > -1;
            var postfix = '';
            if (format.length > 2 && format.substr(2, 1) == 'c')
                postfix = " " + FazNum.currency;

            return FazNum.FormatNumber(value, decimals, postfix, showPlus, wrapInColor);
        }
        if (format.substr(0, 1) == '%') {
            var decimals = format.substr(1, 1);
            var showPlus = format.indexOf('+') > -1;
            var wrapInColor = format.indexOf('col') > -1;
            var postfix = ' %';

            return FazNum.FormatNumber(value, decimals, postfix, showPlus, wrapInColor);
        }
        if (format.substr(0, 1) == 'd') {
            var time = getDateFromFormat(value, 'M/d/yyyy H:mm:ss a');
            if (format.length > 1 && format.substr(1, 1) == '2')
                return formatDate(new Date(time), 'dd.MM.yy');
            else
                return formatDate(new Date(time), 'dd.MM.yyyy');
        }
        if (format.substr(0, 1) == 't') {
            var time = getDateFromFormat(value, 'M/d/yyyy H:mm:ss a');
            if (format.length > 1 && format.substr(1, 1) == 's')
                return formatDate(new Date(time), 'HH:mm:ss');
            else
                return formatDate(new Date(time), 'HH:mm');
        }
        if (format.substr(0, 1) == 'k') {
            var decimals = format.substr(1, 1);
            var showPlus = format.indexOf('+') > -1;
            var wrapInColor = format.indexOf('col') > -1;
            var postfix = '';
            if (format.length > 2) {
                if (format.substr(2, 1) == 'c')
                    postfix = " " + FazNum.currency;
                else if (format.substr(2, 1) == '%')
                    postfix = " %";
            }

            if (value < 1000000 && value > -1000000) {
                return FazNum.FormatNumber(value, decimals, postfix, showPlus, wrapInColor);
            }
            else if (value < 1000000000 && value > -1000000000) {
                postfix = " Mio" + postfix;
                if (decimals > 1)
                    decimals = 1;
                return FazNum.FormatNumber(value / 1000000, decimals, postfix, showPlus, wrapInColor);
            }
            else {
                postfix = " Mrd" + postfix;
                if (decimals > 1)
                    decimals = 1;
                return FazNum.FormatNumber(value / 1000000000, decimals, postfix, showPlus, wrapInColor);
            }
        }
        if (format.substr(0, 1) == 'm') {
            var decimals = format.substr(1, 1);
            var showPlus = format.indexOf('+') > -1;
            var wrapInColor = format.indexOf('col') > -1;
            var postfix = '';
            if (format.length > 2) {
                if (format.substr(2, 1) == 'c')
                    postfix = " " + FazNum.currency;
                else if (format.substr(2, 1) == '%')
                    postfix = " %";
            }

            if (value < 1000000000 && value > -1000000000) {
                return FazNum.FormatNumber(value, decimals, postfix, showPlus, wrapInColor);
            }
            else {
                postfix = " Mrd" + postfix;
                if (decimals > 1)
                    decimals = 1;
                return FazNum.FormatNumber(value / 1000000000, decimals, postfix, showPlus, wrapInColor);
            }
        }
    },
    FormatNumber: function(value, decimals, postfix, showPlus, wrapInColor) {
        var fullNumber = FazNum.ToFixed(value, decimals);
        var numAndDec = fullNumber.split(".");
        var output = numAndDec[0];
        var k = output.length;
        for (var i = k - 3; i > 0; i = i - 3)
            output = output.substr(0, i) + "." + output.substr(i, output.length);
        output = output.replace("-.", "-");

        if (numAndDec.length > 1)
            output += "," + numAndDec[1];
        if (fullNumber > 0 && showPlus)
            output = '+' + output;
        if (wrapInColor && fullNumber != 0)
            if (fullNumber > 0)
            return "<span class='" + FazNum.positiveClass + "'>" + output + postfix + "</span>";
        else
            return "<span class='" + FazNum.negativeClass + "'>" + output + postfix + "</span>";
        else
            return output + postfix;
    },
    FormatFigures: function(value, decimals, postfix, showPlus, wrapInColor) {
    },
    Parse: function(value, format) {

        if (format.substr(0, 1) == 'n') {
            if (typeof (value) == 'number') {
                return value;
            }
            var number = value.replace(/\./g, "");
            number = number.replace(/,/g, ".");
            var numRegex = /(^\-?\d+$)|(^\-?\d+\.\d+$)/;
            if (format.length > 1 && format.substr(1, 1) == '0') {
                var numRegex = /(^\-?\d+$)/;
            }
            if (numRegex.test(number)) {
                if (format.indexOf('>=0') > -1 && number < 0) {
                    throw FazNum.notNegativeMessage.replace('%1', value);
                } else if (format.indexOf('>0') > -1 && number <= 0) {
                    throw FazNum.onlyPositiveMessage.replace('%1', value);
                } else {
                    return number;
                }
            }
            else
                throw FazNum.numberExceptionMessage.replace('%1', value);
        }
        if (format.substr(0, 1) == 'd') {
            if (format.length > 1 && format.substr(1, 1) == 't') {
                if (isDate(value, 'd.M.y HH:mm:ss')) {
                    var time = getDateFromFormat(value, 'd.M.y HH:mm:ss');
                    return formatDate(new Date(time), 'M/d/yyyy H:mm:ss a');
                }
                else
                    throw FazNum.dateExceptionMessage.replace('%1', value);
            }
            else {
                if (isDate(value, 'd.M.y')) {
                    var time = getDateFromFormat(value + ' 00:00:00', 'd.M.y HH:mm:ss');
                    return formatDate(new Date(time), 'M/d/yyyy H:mm:ss a');
                }
                else
                    throw FazNum.dateExceptionMessage.replace('%1', value);
            }
        }

    },
    // Will parse given number and if its correct will return in provided format
    FormatParsedNumber: function(value, format) {
        return (FazNum.Format(FazNum.Parse(value, 'n').replace(',', '.'), format));
    },
    // Will parse given number and return it in JavaScript number format.
    ParsedNumber: function(value) {
        return FazNum.Parse(value, "n").replace(",", ".");
    },
    ToFixed: function(num, decimals) {
        var amp = 1;
        var zeros = '';
        for (var i = 0; i < decimals; i++) {
            zeros += '0';
            amp = amp * 10;
        }
        num = Math.round(num * amp);
        num = (num / amp + '.').split('.');
        if (decimals > 0)
            return num[0] + '.' + (num[1] + zeros).substr(0, decimals);
        else
            return num[0];
    },
    CurrencySymbol: function(name) {
        switch (name) {
            case "USD":
                return "$";
            case "EUR":
                return "&euro;"
            case "YEN":
                return "&yen;"
            case "GBP":
                return "&pound;"
            case null:
                return "";
            default:
                return name;
        }
    }
}

var PortfolioPopUp = {
    timeout: null,
    Show: function(ref, itemsCallback, params) {
        jQuery(".PortfolioPopUp").remove();
        var itemsHtml = itemsCallback(params);
        var html = "<div class='PortfolioPopUp' onmouseover='PortfolioPopUp.PopUpEnter(this)' onmouseout='PortfolioPopUp.MoveOut()'>\
        " + itemsHtml + "<div class='Footer'></div></div>";
        jQuery(ref).before(html);
        clearTimeout(PortfolioPopUp.timeout);
    },
    RemoveAll: function() {
        jQuery(".PortfolioPopUp").remove();
        clearTimeout(PortfolioPopUp.timeout);
    },
    MoveOut: function() {
        PortfolioPopUp.timeout = setTimeout('PortfolioPopUp.RemoveAll()', 1000);
    },
    PopUpEnter: function(ref) {
        clearTimeout(PortfolioPopUp.timeout);
        var allPopups = jQuery(".PortfolioPopUp");
        for (var i = 0; i < allPopups.length; i++) {
            if (allPopups[i] === ref) {
                // chill
            } else {
                jQuery(allPopups[i]).remove();
            }
        }
    }
}