﻿/// <reference path="jquery-1.3.1-vsdoc.js" />
/// <reference path="/templates/services/currencydataservice.svc" />

var Cognifide = Cognifide || {};

Cognifide.UI = Cognifide.UI || {};
/**
* Cognifide
* 
* Cognifide.UI.Tabs module.
* 
* @requires jQuery JavaScript Library v1.3.3 or higher
*/
Cognifide.UI.Tabs = (function ($) {
    var pub = {};

    function register(selector) {
        var $tabModule = $(selector),
        $tabNav = $tabModule.find("ul.tabs li"),
        $tabs = $tabModule.find("div.tabContainer .tab");

        $tabs.hide();

        $tabNav.eq(0).addClass("active").show();
        $tabs.eq(0).show();

        $tabNav.each(function (index) {
            $tabNav.eq(index).click(function (event) {
                $tabNav.removeClass("active");
                $tabs.hide();

                $(this).addClass("active");
                $($tabs.eq(index)).show();

                event.preventDefault();
            });
        });
    }
    pub.register = register;

    return pub;
} (jQuery));

Cognifide.UI.collapsableBoxes = (function ($) {
    var pub = {};

    function init(selector) {
        $("#content .boxHeader .rollDown a[class!='eventAttached']").click(function(){			
            var $this = $(this),
                $row = $this.closest(".contentRow"),
                $boxes = $row.find(".box");
            
            if($row.hasClass("collapsed")) {
                $boxes.each(function(){
                    $(this).animate({ height: $(this).data("orgHeight") || 240}, 200, function(){
                        $(this).children().show();
                    });
                });
                $row.removeClass("collapsed");
            } else {
                $boxes.each(function(){
                    $(this).data("orgHeight", $(this).height());
                })
                $boxes.children(":not(.boxHeader)").hide();
                $boxes.animate({height: 37},200);
                $row.addClass("collapsed");
            }
            return false;
        }).addClass("eventAttached");
    }
    pub.init = init;

    return pub;
} (jQuery));



Cognifide.UI.currencyConverter = (function ($) {
    var pub = {};

    function init(selector) {
		var $currencyConverter = $(".currencyConverter");
		if ( !$currencyConverter.hasClass("eventAttached") )
		{
			$currencyConverter.addClass("eventAttached");
			$(".currencyConverter .currencyActive").click(function(){
				var $dropdown =$(this).next(".currencyDropDown");
				
				// hide others
				$(this).closest(".currencyConverter").find(".currencyDropDown").not($dropdown).removeClass("open").hide();
				
				var $dropdown =$(this).next(".currencyDropDown");
				if($dropdown.hasClass("open")){
					$dropdown.removeClass("open").hide();
				} else {
					$dropdown.addClass("open").show();
				}
				
				return false;
			});
			
			$(".currencyConverter .currencyDropDown a").click(function(){
				var value = $(this).attr("title");
				$(this).closest(".column").find("input[type=hidden]").val(value);
				$(".currencyDropDown").hide();
				__doPostBack('updateButton','');
				return false;
			});

			$(".currencyConverter .updateButton").click(function() {
			    __doPostBack('updateButton', '');
			    return false;
			});			
		}
    }
    pub.init = init;

    return pub;
} (jQuery));


Cognifide.UI.currencyDropdown = (function ($) {
	var pub = {};
	
	function init(selector) {
		if($(selector).length!=0){
			var $selector = $(selector);
			var $dropdown = $selector.next("ul");
			$dropdown.hide();
			$dropdown.css("left",$selector.position().left + "px")
			$dropdown.css("top",$selector.position().top + $selector.height()/2 + "px")

			$(selector).click(function(){
				$dropdown.toggle();
				return false;
			});

			$dropdown.find("a").click(function(){
				var value = $(this).attr("title");
				$selector.siblings("input[type=hidden]").val(value);
				$selector.find(".text").html($(this).html());
				$dropdown.toggle();
				return false;
			});
		}
	}
	pub.init = init;
	return pub;
} (jQuery));

Cognifide.UI.dropdownList = (function ($) {
	var pub = {};
	
	function init(selector) {
		var $list = $(".dropdownList");
		var $dropdowns = $list.find(".dropdownOptions");
		
		$list.find(".dropdownSelector").click(function(){
			$dropdown = $(this).siblings(".dropdownOptions");
			$selector = $dropdown.siblings(".dropdownSelector");
			$dropdown.css("left",$selector.position().left + "px");
			$dropdown.css("top",$selector.position().top + $selector.height() + "px");
			// hide others
			$dropdowns.not($dropdown).hide();
			$dropdown.toggle();
			return false;
		});
		
		$dropdowns.find("a").click(function(){
			var $opt = $(this).parents(".dropdownOptions");
			var $input = $opt.siblings("input[type=hidden]");
			var $selector = $opt.siblings(".dropdownSelector");
			var value = $(this).attr("title");
			
			$opt.fadeOut();
			$selector.find(".text").html($(this).html());
			$input.val(value);
			return false;
		});
	}
	
	pub.init = init;
	return pub;
} (jQuery));

Cognifide.UI.selectionLimit = (function($) {
    var pub = {};

    function init(value) {
        var $mOption = $("select[multiple]");
        var $msg = $(".errorMsg");

        $mOption.change(function(e) {
            var values = $(this).val();
            if (values) {
                if (values.length > value) {
                    $(this).find('option:selected').removeAttr("selected");
                    $msg.text("You can select up to " + value + " currencies only.");
                    // popSelected($mOption, value);
                } else if (values.length < 2) {
                    $msg.text("You have to select minimum 2 currencies.");
                } else {
                    $msg.text("");
                }
            }
        }).trigger('change');
    }

    pub.init = init;
    return pub;
} (jQuery));

Cognifide.UI.tooltipOverlay = (function ($) {
	var pub = {};
	
	function init(selector){
		$selector = $(selector);
		if ($selector.length != 0){
			$(selector).tooltip({
				events: {
					def: "click,keypress",
					tooltip: "mouseenter, mouseleave"
				},
				position: "top center",
				opacity: 0.9,
				offset: [50,0],
				onShow: function(event){
					$("body").append(this.getTip());
					return false;
				},
				onHide: function(event){
					return false;
				}
			});
		}
	}
	
	pub.init = init;
	return pub;
} (jQuery));

function globalInit(){
	Cognifide.UI.collapsableBoxes.init();
	Cognifide.UI.currencyConverter.init();
//	Cognifide.UI.currencyDropdown.init(".dropdownSelector");
	Cognifide.UI.selectionLimit.init(10);
	Cognifide.UI.dropdownList.init();
	Cognifide.UI.tooltipOverlay.init(".help");
	//historicChartInit();
}

//FINAL
$(document).ready(function(){
	globalInit();
	if (typeof(Sys) != "undefined" && Sys.Application != null)
	{
		Sys.Application.add_load(function(){
			globalInit();
		});
	}
});

/**
* Cognifide
* 
* Cognifide.UI.OpenFlashChart module.
*
* 
* @requires jQuery JavaScript Library v1.3.3 or higher
* @requires a JSON (json2.js) JavaScript library (https://github.com/douglascrockford/JSON-js).
*/
Cognifide.UI.OpenFlashChart = (function($) {
    var pub = {},
    defaultData = [],
    timeout = 100;
    var firstCall = true;
    var context = { sourceCurrency: '', targetCurrency: '', period: '' };

    function readCookie(name) {
        var nameEQ = name + "=";
        var ca = document.cookie.split(';');
        for (var i = 0; i < ca.length; i++) {
            var c = ca[i];
            while (c.charAt(0) == ' ') c = c.substring(1, c.length);
            if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length);
        }
        return null;
    }

    function isOldBrowser() {
        return $.browser.msie && $.browser.version < 9;
    }

    function init() {
        Cognifide.UI.OpenFlashChart.setDefaultData('historicChart', getEmptyData('#ffffff'));

        context.period = parseInt($('.historicChart .range a.active').attr('rel') || 1, 10);
        context.sourceCurrency = readCookie('FirstCurrency') || "EUR";
        context.targetCurrency = readCookie('SecondCurrency') || "USD";

        $('.historicChart').append('<div class="loader"></div><div class="mask"></div>');

        $('.historicChart .chart').flash(
        {
            'swf': '/media/open-flash-chart.swf',
            'width': 450,
            'height': 155,
            'flashvars': {
                'get-data': 'Cognifide.UI.OpenFlashChart.getDefaultData',
                'id': 'historicChart',
                'loading': ''
            },
            'hasVersion': 9, // requires Flash 9
            'hasVersionFail': function() {
                return true; // would have let the expressInstaller document be used
            }
        });

        $('.historicChart .chart').append('<div class="error"></div>');

        var $links = $('.historicChart .range a');
        $links.each(function(id) {
            //sample data
            $(this).click(function(event) {
                event.preventDefault();
                $links.removeClass('active');
                $(this).addClass('active');
                if (isOldBrowser()) { $('.historicChart .loader').show(); }
                else { $('.historicChart .loader').fadeIn(); }
                $('.historicChart .mask').fadeIn(function() {
                    context.period = parseInt(event.currentTarget.rel || 1, 10);
                    CognifideServices.CurrencyDataService.
                    GetData(context.sourceCurrency, context.targetCurrency, context.period, historicChartInit, showErrorPanel);
                });
            });
        });

        if (firstCall) {
            firstCall = false;
            if (typeof (Sys) != "undefined" && Sys.Application != null) {
                Sys.Application.add_load(init);
            }
        }
    }

    function showErrorPanel() {
        $('.historicChart .chart object').hide();
        if (isOldBrowser()) { $('.historicChart .loader').hide(); }
        else { $('.historicChart .loader').fadeOut(); }
        $('.historicChart .mask').fadeOut(function() {
            $('.historicChart .chart .error').html('There was an issue with retrieving data from the server').fadeIn();
            $('.historicChart .range').fadeIn();
        });
    };

    function historicChartInit(data, userContext) {
        try {
            if (data) {

                Cognifide.UI.OpenFlashChart.setDataOnReady('.historicChart .chart', data);
                $('.historicChart .chart .error').fadeOut(300, function() {
                    if (isOldBrowser()) { $('.historicChart .loader').hide(); }
                    else { $('.historicChart .loader').fadeOut(); }
                    $('.historicChart .mask').fadeOut(function() {
                        $('.historicChart .range').fadeIn();
                        $('.historicChart .chart object').show();
                    });
                });
            }
            else showErrorPanel();
        }
        catch (e) {
            console.log(e);
            showErrorPanel();
        }
    };

    function getEmptyData(color, options) {
        var empty = {
            'num_decimals': 4,
            'is_fixed_num_decimals_forced': true,
            'elements': [],
            'x_axis': {
                'colour': color,
                'grid-colour': color,
                'steps': 2,
                'labels': {
                    'colour': color
                }
            },
            'y_axis': {
                'colour': color,
                'grid-colour': color,
                'labels': {
                    'colour': color
                }
            },
            'bg_colour': color
        };

        return JSON.stringify($.extend(true, {}, empty, options));
    }
    pub.getEmptyData = getEmptyData;

    function getDefaultData(id) {
        var data = defaultData[id];

        if (data === null || data === undefined) {
            data = getEmptyData('#ffffff');
        }

        CognifideServices.CurrencyDataService.
            GetData(context.sourceCurrency, context.targetCurrency, context.period, historicChartInit, showErrorPanel);

        return data;
    }
    pub.getDefaultData = getDefaultData;

    function setData(selector, data) {
        $(selector).flash(function() {
            this.load(data);
        });
    }
    pub.setData = setData;

    function isReady(selector) {
        var result = false;
        try {
            $(selector).flash(function() {
                if ((this.load !== null) && (this.load !== undefined)) {
                    result = true;
                }
            });
        }
        catch (e) { }

        return result;
    }

    function setDataOnReady(selector, data) {
        var isSet = false;

        if (isReady(selector)) {
            try {
                setData(selector, data);
                isSet = true;
            }
            catch (e) { }
        }

        if (!isSet) {
            setTimeout(function() {
                setDataOnReady(selector, data);
            }, timeout);
        }
    }

    pub.setDataOnReady = setDataOnReady;

    function setDefaultData(id, data) {
        defaultData[id] = data;
    }
    pub.setDefaultData = setDefaultData;

    $(window).load(init);

    return pub;
} (jQuery));
