(function(cloudStack, $) {
  cloudStack.uiCustom.physicalResources = function(args) {
    var listView = function() {
      return $('
').listView(args);
    };
    var $dashboard = $('#template').find('.system-dashboard-view').clone();
    var getData = function() {
      // Populate data
      $dashboard.find('[data-item]').hide();
      cloudStack.sections.system.dashboard.dataProvider({
        response: {
          success: function(args) {
            var data = args.data;
            $.each(data, function(key, value) {
              var $elem = $dashboard.find('[data-item=' + key + ']');
              $elem.hide().html(value).fadeIn();
            });
          }
        }
      });
    };
    var resourceChart = function(args) {
      getData();
      
      return $dashboard
        .click(function(event) {
          var $target = $(event.target);
          if ($target.closest('.view-more').size()) {
            args.$browser.cloudBrowser('addPanel', {
              title: 'Zones',
              data: '',
              noSelectPanel: true,
              maximizeIfSelected: true,
              complete: function($newPanel) {
                listView().appendTo($newPanel);
              }
            });
          }
        });
    };
    $(window).bind('cloudStack.fullRefresh cloudStack.updateResources', function() {
      if ($dashboard.is(':visible')) {
        getData();
      }
    });
    return function(args) {
      $dashboard.find('#update_ssl_button').click(function() {   	
				cloudStack.dialog.createForm({
					form: {
						title: 'label.update.ssl',	
            desc: 'message.update.ssl',						
						fields: {
							certificate: { label: 'label.certificate', isTextarea: true },
							privatekey: { label: 'label.privatekey', isTextarea: true },
							domainsuffix: { label: 'label.domain.suffix' }
						}
					},
					after: function(args) {
						$.ajax({
						  url: createURL('uploadCustomCertificate'),
							data: {
							  certificate: args.data.certificate,
								privatekey: args.data.privatekey,
								domainsuffix: args.data.domainsuffix
							},
							dataType: 'json',
							success: function(json) {							  				
								var jid = json.uploadcustomcertificateresponse.jobid;								
								var timerKey = "uploadcustomcertificatejob_" + jid;
								$("body").everyTime(2000, timerKey, function() {								  
									$.ajax({
										url: createURL("queryAsyncJobResult&jobId=" + jid),
										dataType: "json",
										success: function(json) {
										  
											var result = json.queryasyncjobresultresponse;
											if (result.jobstatus == 0) {
												return; //Job has not completed
											}
											else {
												$("body").stopTime(timerKey);
												if (result.jobstatus == 1) {
													cloudStack.dialog.notice({ message: 'Update SSL Certiciate succeeded'	});
												}
												else if (result.jobstatus == 2) {
													cloudStack.dialog.notice({ message: 'Failed to update SSL Certificate. ' + fromdb(result.jobresult.errortext) });													
												}
											}
										},
										error: function(XMLHttpResponse) {											
											cloudStack.dialog.notice({ message: 'Failed to update SSL Certificate. ' + parseXMLHttpResponse(XMLHttpResponse) });
										}
									});
								});				
							}			
						});								 
					},				
					context: {}
				});				
                
        return false;
      });
			$dashboard.find('#refresh_button').click(function() {    	  
        getData();
        
        return false;
      });
      return resourceChart(args);
    };
  };
}(cloudStack, jQuery));