var OptionsBuilder = {
    
	init: function(){

        /* initiate select boxes */
        PlatformNav.container.find('select#optionsBuilderSelect').selectbox(
        {
            inputClass: 'selectboxType',
            containerClass: 'selectbox-wrapperType',
            scrollBar: true,
            chainTitle: false,
            onChange: OptionsBuilder.onAssetChange
        });

        PlatformNav.container.find('select[name="riskSelect"]').selectbox(
        {
            inputClass: 'selectboxType',
            containerClass: 'selectbox-wrapperType',
            scrollBar: true,
            chainTitle: false,
            onChange: OptionsBuilder.onRiskChange
        });
        PlatformNav.container.find('#optionsBuilder div.expireyTime div.input > select').selectbox(
        {
            inputClass: 'selectboxSml',
            containerClass: 'selectboxSml-wrapperType',
            scrollBar: true,
            chainTitle: false,
            onChange: OptionsBuilder.onExpireTimeChange
        });
        /* end select boxes initiation */


        /* events in options builder box */
        var optionsBuilderBox = $('div#optionsBuilderBox');

        optionsBuilderBox.find('li.actionButton input.putLong').unbind('click').bind('click',{type:'Put'},OptionsBuilder.switchCallPut);
        optionsBuilderBox.find('li.actionButton input.callLong').unbind('click').bind('click',{type:'Call'},OptionsBuilder.switchCallPut);

        optionsBuilderBox.find('input.positionBtn').unbind('click').bind('click',{},OptionsBuilder.createOption);

        /* end events in options builder box */

        $.each(optionsBuilderBox.find('div#TimeHour_container ul li'),function(index,elem){
            if (index==11)
                return;
            var val = $(this).text();
            if (parseInt(val) < 10)
                $(this).text('0' + val);
        });
        $.each(optionsBuilderBox.find('div#TimeMinute_container ul li'),function(index,elem){
            if (index==11)
                return;
            var val = $(this).text();
            if (parseInt(val) < 10)
                $(this).text('0' + val);
        });

        /* if there are assets in option builder then open first asset found */
        $('div#optionsBuilderSelect_container ul li:not(.title):first').click();

        /* event for amount change - calculate payout */
        optionsBuilderBox.find('div.investment input[name="investment"]').unbind('keyup').bind('keyup',{}, OptionsBuilder.onAmountChange);
        optionsBuilderBox.find('div.investment input[name="investment"]').bind('click', function() {
            $(this).val('');
            OptionsBuilder.onAmountChange(); 
        });
	},

    /* create new option and position by customer`s choice */
    createOption: function(event){
        var optionsBuilderBox = $('div#optionsBuilderBox');
        var assetForm         = $('div.putCallFolder form');
        var amount            = $('div#optionsBuilderBox div.investment input[name="investment"]');
        var position          = optionsBuilderBox.find('input[name="currentPosition"]').val();
        var minInvestment     = assetForm.find('input[name="minInvestment"]');
        var maxInvestment     = assetForm.find('input[name="maxInvestment"]');
        var minOptionTime     = assetForm.find('input[name="minOptionTime"]');
        var expireTime        = assetForm.find('td.date');
        var validAmount       = false;


        if (!$.trim(amount.val()).length) /* required test */
            Position.showPopup(optionsBuilderBox, AppData.langHome.requiredErrorPopupTitle,  AppData.langHome.requiredErrorPopupMessage, '', false);
        else if (!/^-?(?:\d+|\d{1,3}(?:,\d{3})+)(?:\.\d+)?$/.test(amount.val())){ /* number test */
                Position.showPopup(optionsBuilderBox, AppData.langHome.numberErrorPopupTitle,  AppData.langHome.numberErrorPopupMessage, '', false);
                return false;
        }else{
                /* the amount is number */
                /* min value test */
                if (parseFloat(amount.val()) < parseFloat(minInvestment.val())){
                    Position.showPopup(optionsBuilderBox, AppData.langHome.minErrorPopupTitle,  AppData.langHome.minErrorPopupMessage, AppData.accountCurrency + minInvestment.val(), false);
                }else{
                    /* max value test */
                    if (parseFloat(amount.val()) > parseFloat(maxInvestment.val())){
                        Position.showPopup(optionsBuilderBox, AppData.langHome.maxErrorPopupTitle,  AppData.langHome.maxErrorPopupMessage, AppData.accountCurrency + maxInvestment.val(), false);
                    }else{
                        /* the amount value passed all the test */
                        validAmount = true;
                    }
                }
        }

        if (validAmount){
            /* check if the expire time selected */
            if ($.trim(expireTime.html()) == AppData.langHome.chooseExpireTime){
                Position.showPopup(optionsBuilderBox, AppData.langHome.chooseExpireTimePopupTitle,  AppData.langHome.chooseExpireTimePopupMessage, '', false);
                return false;
            }else{
                /* expire time selected - check if the expire time is bigger than now */
                var now = General.dateTime;

                var expireTimeSplitted = expireTime.html().split('&nbsp;');
                
                var date = expireTimeSplitted[0];
                var dateSplitted = date.split('.');

                var day   = dateSplitted[0];
                var month = dateSplitted[1]-1;
                var year  = dateSplitted[2];

                var hours   = optionsBuilderBox.find('div#TimeHour_container   ul li.selected').html();
                var minutes = optionsBuilderBox.find('div#TimeMinute_container ul li.selected').html();

                /* create date object from the expiry date values */
                var expiryTimeSet = new Date(); /* the minimum expire time that can be set */

                expiryTimeSet.setDate(day);
                expiryTimeSet.setMonth(month);
                expiryTimeSet.setFullYear(year);
                expiryTimeSet.setHours(hours);
                expiryTimeSet.setMinutes(parseInt(minutes));

                now.setMinutes(now.getMinutes() + parseInt(minOptionTime.val()));
                
                /* validate expire time */
                /* if the time is 00:00 make the positions on the second day */
                if (expiryTimeSet.valueOf() >= now.valueOf() || (hours == '00' && minutes == '00')){

                    /* the form is validated  - register new option*/
                    var assetId         = $('div#optionsBuilderSelect_container ul li.selected').attr('id').split('_').splice(2,1)[0];
                    var selectedRisk    = $('div#riskSelect_container li.selected');
                    var ruleId = selectedRisk.attr('id').split('_')[4];
                    var optionRegistered = false; /* if true - the option is written  to DB */
                    var optionId         = false; /* keep the option ID that inserted to DB */

                    var expireTime = new Date();
                    expireTime.setHours(hours);
                    expireTime.setMinutes(minutes);
                    expireTime.setSeconds('00');

                    $.ajax({
                        type: "POST",
                        url: 'rpcProxy/newOption',
                        data: 'assetId=' + assetId + '&ruleId=' + ruleId + '&expireHours=' + hours + '&expireMinutes=' + minutes + '&expireTime=' + expireTime.valueOf(),
                        async: false,
                        dataType: 'json',
					error : function() {
                        General.dialog(AppData.langHome.error, AppData.langHome.error);
					},
					success: function(result){
						if (typeof result == 'object') {
                            /* new option saved to the database */
                            optionRegistered = true;
                            optionId = result.optionId;
						} else { 
							switch(result){
								case 'notLoggedIn':
                                        //Position.showPopup(optionsBuilderBox, AppData.langHome.notLoggedInErrorPopupTitle,  AppData.langHome.notLoggedInErrorPopupMessage, '', false);
                                        optionsBuilderBox.find('div.popup')
														 .removeClass('hidden')
														 .find('div.popupTitle span')
														 .text(AppData.langHome.loginPopupTitle)
														 .end()
														 .end()
														 .find('div#notLoggedIn')
														 .removeClass('hidden');
                                        break;
								case 'invalidPositionRate':
										Position.showPopup(optionsBuilderBox, AppData.langHome.invalidPositionRate,  AppData.langHome.positionRateIsInvalid, '', false);
										break;
								case 'suspended':
                                        Position.showPopup(optionsBuilderBox, AppData.langHome.optionSuspendedPopupTitle,  AppData.langHome.optionSuspendedPopupMessage, '', false);
                                        break;
							}
						}
				   }
				});

                /* if option is written to the DB - write the position */
                if (optionRegistered){

                    var formParams = 'amount=' + amount.val() + '&assetId=' + assetId + '&optionId=' + optionId + '&position=' + position;

                    var optionObject   = new Object();
                        optionObject.name  = 'optionId';
                        optionObject.value = optionId;
                    var amountObject   = new Object();
                        amountObject.name  = 'amount';
                        amountObject.value = amount.val();
                    var positionObject = new Object();
                        positionObject.name  = 'position';
                        positionObject.value = position;


                    var params = new Object();
                        params[0] = optionObject;
                        params[1] = amountObject;
                        params[2] = positionObject

                    $.ajax({
                        type: "POST",
                        url: 'rpcProxy/newPosition',
                        data: formParams,
                        async: false,
                        dataType: 'json',
                        error : function() {
                            General.dialog(AppData.langHome.error, AppData.langHome.error);
                        },
                        success: function(result){
                            if (typeof result == 'object') {

                                OptionsBuilder.addOption(optionId);

                                /* add position to my open positions */
                                Position.addPosition(params, result,null);

                            } else {
                               
                                switch(result){
                                    case 'notLoggedIn':
                                                Position.showPopup(optionsBuilderBox, AppData.langHome.notLoggedInErrorPopupTitle,  AppData.langHome.notLoggedInErrorPopupMessage, '', false);
                                                break;
                                    case 'optionIsClosed':
                                                Position.showPopup(optionsBuilderBox, AppData.langHome.optionIsClosedErrorPopupTitle,  AppData.langHome.optionIsClosedErrorPopupMessage, '', false);
                                                break;
                                    case 'insufficientFunds':
                                                Position.showPopup(optionsBuilderBox, AppData.langHome.insufficientFundsErrorPopupTitle,  AppData.langHome.insufficientFundsIsErrorPopupMessage, '', true);
                                                break;
                                    case 'invalidPositionRate':
                                                Position.showPopup(optionsBuilderBox, AppData.langHome.invalidPositionRate,  AppData.langHome.positionRateIsInvalid, '', false);
                                                break;
                                    case 'suspended':
                                                Position.showPopup(optionsBuilderBox, AppData.langHome.optionSuspendedPopupTitle,  AppData.langHome.optionSuspendedPopupMessage, '', false);
                                                break;
                                    case 'riskSuspentionActivated':
                                                Position.showPopup(optionsBuilderBox, AppData.langHome.riskSuspentionPopupTitle,  AppData.langHome.riskSuspentionPopupMessage, '', false);
                                                break;
                                }
                            }
                        }

                    });
                }
                    return false;
                }
                else{
                    Position.showPopup(optionsBuilderBox, AppData.langHome.wrongExpireTimePopupTitle,  AppData.langHome.wrongExpireTimePopupMessage + now.getHours() + ':' + parseInt(now.getMinutes() + 1), '', false);
                    return false;
                }


                return false;
            }
        }else{
            /* not valid amount */
            return false;
        }
    },

    /* add option box to the page */
    addOption: function(optionId){
        var customOption = $('li#customOptionTemplate').clone();
        var form         = customOption.find('form.positionForm');
        customOption.attr('id','');
        customOption.removeClass('hidden');
        customOption.addClass('customOption');

        /* count number of regular and custom options */
        var boxNumber = $('ul#optionsList > li').length + 1;

        $.post('rpcProxy/getOptionInfo/' + optionId,
               {},
               function(data){
                    var endDate = new Date(data.endDate);

                    var hours   = endDate.getHours();
                    var minutes = endDate.getMinutes();
                    var year    = endDate.getFullYear().toString();
                    year = year.substr(2, 2);
                    var month   = endDate.getMonth()+1;
                    var day     = endDate.getDate();

                    if (hours<10)   hours   = '0' + hours;
                    if (minutes<10) minutes = '0' + minutes;
                    if (month<10)   month   = '0' + month;
                    if (day<10)     day     = '0' + day;

                    customOption.find('div.assetName  div.name').html(data.assetName);
                    customOption.find('div.optionMain span#upDownAssetName').html(data.assetName);
                    customOption.find('div.expireTimeContainer div.expireTime').html(hours + ':' + minutes);

                    customOption.find('ul.actions input.callLong').attr('id','Call_position_' + boxNumber).unbind('click').bind('click',{position:'Call'},Position.showCallPut);
                    customOption.find('ul.actions input.putLong').attr('id','Put_position_' + boxNumber).unbind('click').bind('click',{position:'Put'},Position.showCallPut);
                    customOption.find('ul.actions li.currentPosition div.long').attr('id','feed_asset_' + boxNumber);
                    customOption.find('strong.payout').html(data.profit + '%');
                    customOption.find('div.graphContainer').attr('id','graphContainer_' + data.assetId);

                    form.attr('id','positionForm_' + boxNumber);

                    form.find('input.closeCallPutFolder').attr('id','close_position_' + boxNumber);

                    form.find('div.putCallTop td.date').html('<strong>' + day + '.' + month + '.' + year + '</strong>' + '<strong> ' + hours + ':' + minutes   + '</strong>')
                    form.find('div.putCallTop input[name="rate"]').addClass('assetId_' + data.assetId);
                    form.find('input[name="optionId"]').val(optionId);
                    form.find('input[name="assetId"]').val(data.assetId).addClass('asset_' + boxNumber);
                    form.find('input[name="profit"]').val(data.profit);
                    form.find('input[name="loss"]').val(data.loss);

                    /* init the position forms array */
                    Position.init();
                    Graphs.init();
                    
                    $('ul#optionsList').append(customOption);

               },
               'json');

       



    },

    switchCallPut: function(event){
        var type = event.data.type; /* call or put clicked */
        var optionBuilderBox = $('div#optionsBuilderBox');
        var assetForm        = optionBuilderBox.find('div.putCallFolder');
        var prevPosition     = assetForm.find('input[name="currentPosition"]').val();

        var arrowImg = $('<img>').addClass('arrow').attr('src','appProxy/site/home/optionArr' + type + '.jpg').attr('alt','direction');
        
        /* remove current image if found and insert new image */
        assetForm.find('div.assetRate').find('img').remove().end().append(arrowImg);
        /* change apply button */
        assetForm.find('input.positionBtn').removeClass('positionBtnPut')
                                           .removeClass('positionBtnCall')
                                           .addClass('positionBtn' + type);

        assetForm.find('input[name="currentPosition"]').val(type);

        /* if the customer changed from call to put or vice versa */
        if (prevPosition != type){
            var profitElement = assetForm.find('td.rateDirection');
            var lossElement   = assetForm.find('span.otherRateDirection');

            /* switch between profit and loss values */
            var saveProfitElement = profitElement.html();

           // $('div#optionsBuilderBox div.putCallFolder td.profitSum span').css('border','1px solid red').html(lossElement.html());
           // $('div#optionsBuilderBox div.putCallFolder span.otherProfitSum').css('border','1px solid green').html(saveProfitElement);

            
            profitElement.html(lossElement.html());
            lossElement.html(saveProfitElement);
        }else{
            OptionsBuilder.onAmountChange();
        }

        /* if this is the first time customer clicked on call or put then enable form */
        if (assetForm.hasClass('hidden'))
            assetForm.removeClass('hidden');

         
    },

    /* This event occurs when the user change asset in the asset select box in the options builder */
    onAssetChange: function(event){
        var assetId = $('div#optionsBuilderSelect_container ul li.selected').attr('id').split('_').splice(2,1)[0];

        $.post(AppData.url + AppData.pageId + '/loadProfitControlRisk',
               {assetId: assetId},
		       function(data){

                    /* go through the rules and insert profit/loss combinations to the select */
                    var options    = new Array();
                    var riskSelectElem = $('select[name="riskSelect"]')
                    /* remove old options */
                    riskSelectElem.find('option').remove();
                    $.each(data,function(index,rule){

                        rule.loss = parseInt(100 - parseInt(rule.loss));

                        var option = $('<option></option>').val(rule.profit + '_' + rule.loss + '_' + rule.id)
                                                           .text(rule.profit + '% / ' + rule.loss + '%');
                        riskSelectElem.append(option);
                    });

                    /* remove current select with old values */
                    $('div#riskSelect_container').remove();
                    $('input#riskSelect_input').remove();
                    
                    /* init selectbox with the new profit/loss combinations */
                    PlatformNav.container.find('select[name="riskSelect"]').selectbox(
                    {
                        inputClass: 'selectboxType',
                        containerClass: 'selectbox-wrapperType',
                        scrollBar: true,
                        chainTitle: false,
                        onChange: OptionsBuilder.onRiskChange
                    });

                    OptionsBuilder.onRiskChange();

               },
               'json');

          var optionBuilderBox = $('div#optionsBuilderBox');
          var assetForm        = optionBuilderBox.find('div.putCallFolder');
          var selectedAsset    = optionBuilderBox.find('div#optionsBuilderSelect_container ul li.selected');

          /* update asset name */
          assetForm.find('div.assetName').text(selectedAsset.text());

          /* get current rate for selected asset */
          $.post(AppData.url + AppData.pageId + '/loadAssetCurrentRate',
                  {assetId:assetId},
                  function(data){
                    /* if rate is up */
                    if (data.color == 1){
                        assetForm.find('div.assetRate').html(data.rate).css('color','#024301');
                        /* update asset id for live feed */
                        optionBuilderBox.find('li.currentPosition div').attr('id','live_feed_' + assetId).html(data.rate).css('color','#024301');
                    }
                    else if (data.color == 0){
                        assetForm.find('div.assetRate').html(data.rate).css('color','#C30700');
                        /* update asset id for live feed */
                        optionBuilderBox.find('li.currentPosition div').attr('id','live_feed' + assetId).html(data.rate).css('color','#C30700');
                    }

                    optionBuilderBox.find('div.assetGraph').attr('id','assetGraph_' + assetId);

                    /* add graph to the optionsbuilder box */

                    /* the options builder graph is with chart_id 0 */
                    
                    Graphs.graphs['assetChart_0'] = {
                        currRate: null,
                        itemName: null,
                        lastXID: null,
                        flash: null, // This will point to the flash movie, set by amChartInited()
                        container:  optionBuilderBox.find('div.assetGraph')[0]
                    };
                    $('<div/>').attr('id', 'assetChart_0').addClass('assetChart').appendTo(optionBuilderBox.find('div.assetGraph')[0]);

                    swfobject.embedSWF(
                    "sysProxy/amline/amline.swf", 'assetChart_0',
                    "266", "139", "9.0.0", "sysProxy/expressInstall.swf",
                    {path: 'sysProxy/amline/',

                      chart_data: encodeURIComponent(Graphs.emptyData),
                      chart_id: 0,
                      settings_file : encodeURIComponent('appProxy/amline/settings.xml')
                    },
                    {wmode:'opaque'},
                    {'class': 'assetChart'});

                    OptionsBuilder.loadChartData('assetChart_0');

                    //Graphs.startStreaming();

                  },
                  'json');
          
    },

    /* this event occurs when the customers changes the profit/loss combination */
    onRiskChange: function(event){
        /* change the display of the selected profit/loss combination */
        var selectedLi    = $('div#riskSelect_container li.selected');
        var assetForm     = $('div#optionsBuilderBox div.putCallFolder');

        var profitLossCombination = selectedLi.attr('id').split('_');
        var profit = profitLossCombination[2];
        var loss   = profitLossCombination[3];
        var ruleId = profitLossCombination[4];

        $('input#riskSelect_input').val(''); /* clear the current selection */
        $('div.riskSelectOverlay').html(
                                         '<div class="profitTxt">' + profit + '%' + '</div>' +
                                         '<div class="lossTxt">' + loss + '%' + '</div>'
                                       );


        $.post(AppData.url + AppData.pageId + '/getRule',
               {ruleId: ruleId},
		       function(rule){
                    var ruleProps = rule[0];
                    assetForm.find('input[name="minInvestment"]').val(ruleProps.minInvestment);
                    assetForm.find('input[name="maxInvestment"]').val(ruleProps.maxInvestment);
                    assetForm.find('input[name="minOptionTime"]').val(ruleProps.minOptionTime);
               },
               'json');

        assetForm.find('input[name="profit"]').val(profit);
        assetForm.find('input[name="loss"]').val(loss);
    },

    /* this event occurs when the customers changes the expire time */
    onExpireTimeChange: function(event){
        var assetForm     = $('div#optionsBuilderBox div.putCallFolder');

        var hours = $('div#optionsBuilderBox div#TimeHour_container ul li.selected').html();
        var minutes = $('div#optionsBuilderBox div#TimeMinute_container ul li.selected').html();

        if (hours != null && hours!= 'Hour' && minutes != null && minutes!= 'Minute'){

            var day   = General.dateTime.getDate();
            var month = General.dateTime.getMonth()+1;
            var year  = General.dateTime.getFullYear();
            if (day < 10) day = '0' + day;
            if (month < 10) month = '0' + month;
            
            assetForm.find('table td.date').html(day + '.' + month + '.' + year + '&nbsp;&nbsp;<strong>' +  hours + ':' + minutes + '</strong>');
        }
    },

    /* this function is called from graphs.js when item update occurs */
    onItemUpdate: function(item, itemUpdate, itemName) {
         var pricingRate = itemUpdate.getNewValue('pricingRate');
         var rate        = itemUpdate.getNewValue('rate');
         var color = parseInt(itemUpdate.getNewValue('color'));
         var lastUpdated = itemUpdate.getNewValue('lastUpdated');

         var optionBuilderBox = $('div#optionsBuilderBox');
         var assetForm        = optionBuilderBox.find('div.putCallFolder');

         var graphObject = Graphs.graphs['assetChart_0'];

         /* check if this is the item that we need to update
          * assetChart_0  is the id of the graph object
          * */
         if (itemName == graphObject.itemName){

              graphObject.appending =  false;
              if (graphObject.flash)
                  graphObject.flash.getData();

              if (color){
                 assetForm.find('div.assetRate').html(rate).css('color','#024301');
                 /* update asset id for live feed */
                 optionBuilderBox.find('li.currentPosition div').html(rate).css('color','#024301');
              }else{
                  assetForm.find('div.assetRate').html(rate).css('color','#C30700');
                  /* update asset id for live feed */
                  optionBuilderBox.find('li.currentPosition div').html(rate).css('color','#C30700');
              }

                /* add row image to the rate */
                var currentPositionType = assetForm.find('input[name="currentPosition"]').val();
                if (currentPositionType != ''){
                    var arrowImg = $('<img>').addClass('arrow').attr('src','appProxy/site/home/optionArr' + currentPositionType + '.jpg').attr('alt','direction');
                    /* remove current image if found and insert new image */
                    assetForm.find('div.assetRate').find('img').remove().end().append(arrowImg);
                }

         }

    },

    /**
		When the amount is changed, this function is called to re-calculate the profits and loses.
	**/
	onAmountChange : function(event) {

        var optionsBuilderBox = $('div#optionsBuilderBox');
        var assetForm = optionsBuilderBox.find('div.putCallFolder');

		var amount = parseInt(optionsBuilderBox.find('div.investment input[name="investment"]').val());
		var profit = parseInt(assetForm.find('input[name="profit"]').val());
		var loss   = parseInt(assetForm.find('input[name="loss"]').val());

		var profitElement = assetForm.find('td.profitSum span');
		var lossElement   = assetForm.find('span.otherProfitSum');

        var currentPosition = assetForm.find('input[name="currentPosition"]').val();

		if (amount > 0) {
			if (currentPosition == 'Call') {
				var payoutAbove = ((100 + profit) * amount)/100;
				var payoutBelow = ((100-loss) * amount)/100;
			} else { //Put
				var payoutBelow = ((100 - loss) * amount)/100; //This should be above
				var payoutAbove = ((100 + profit) * amount)/100; //This should be Below
			}
		} else { //no valid amount
			var payoutAbove = '0'; //reset both fields to zero
			var payoutBelow = '0';
		}

		profitElement.html(payoutAbove);
		lossElement.html(payoutBelow);
	},

    /* load the graph data into the Options Builder box graph by selected asset */
    loadChartData: function(chart_id){
       var assetId = $('#' + chart_id).parent('div.graphContainer').attr('id').split('_')[1];
       //var boxList = $('#' + chart_id).parent().parent().parent().parent();
       $.get(AppData.url + 'home/getAssetGraphXML/' + assetId, function(chart_id) {
            return function(xml) {
                // For charts showing assets
                if (chart_id.indexOf('assetChart') !== -1) {
                    // Get asset id from its parent container's id'
                    var assetId = $('#' + chart_id).parent('div.graphContainer')
                                    .attr('id').split('_')[1];

                    var itemName = 'asset_' + assetId + '_' + 'undefined' + '_' + AppData.whiteLabelName;
                    Graphs.graphs[chart_id].itemName = itemName;
                }


                if ($.trim(xml) !== '' && xml != 'Not tradeable') {
                    Graphs.graphs[chart_id].lastXID = $(xml).find('series value').size();
                    Graphs.graphs[chart_id].currRate = {lastUpdated:  new Number($(xml).find('graph series:last').html()),
                                                        rate: new Number($(xml).find('graph value:last').html())};

                    if (  Graphs.graphs[chart_id].flash !== null && Graphs.graphs[chart_id].flash.setData) {
                        Graphs.graphs[chart_id].flash.setData(xml);
                    }
                }
                
                Graphs.startStreaming();
            }

        }(chart_id));
    }

}

$(document).ready(function() {
	OptionsBuilder.init();
}); 
