text: /*global _, Backbone, WpmlTmEditorModel, tmEditorStrings, jQuery, tmEditor, document */
  
  var WPML_TM = WPML_TM || {};
  
  (function () {
  	"use strict";
  
  	WPML_TM.editorMainView = Backbone.View.extend({
  		events: {
  			'change .icl_tm_finished': 'updateState'
  		},
  		updateState: function () {
  			var self = this;
  			self.footerView.showProgressBar().setCompleteCheckBox();
  		},
  		render: function () {
  			var self = this;
  			var job_type = jQuery('input[name="job_post_type"]').val();
  			self.fieldViews = [];
  
  			self.translationMemory = null;
  
  			if ( WpmlTmEditorModel.translation_memory && tmEditorStrings.translationMemoryNonce ) {
  				self.translationMemory = new WPML_TM.translationMemory( WpmlTmEditorModel.languages );
  			}
  
  			jQuery('#screen-meta-links').hide();
  
  			jQuery(document).trigger('WPML_TM.editor.before_render', [job_type] );
  
  			self.addHeaderView();
  			self.addNoteView();
  			self.addLanguagesView();
  
  			self.model.fetch(function () {
  				self.addFields(self.model.get('layout'), self.$el.find('#wpml-translation-editor-wrapper'));
  				self.addFooterView();
  
  				jQuery(document).trigger('WPML_TM.editor.ready', [job_type, self.fieldViews, self.footerView]);
  			});
  			self.updateState();
  
  			if ( self.translationMemory ) {
  				self.translationMemory.fetch();
  			}
  
  			return self;
  		},
  		addFields: function (fields, $location) {
  			var self = this;
  			_.each(fields, function (field) {
  				if (typeof field == 'string') {
  					self.fieldViews.push(self.createFieldView(field, $location));
  				} else if (field.field_type == 'tm-section') {
  					self.createSection(field, $location);
  				} else if (field.field_type == 'tm-group') {
  					self.createGroup(field, $location);
  				} else if (field.field_type == 'wcml-image') {
  					self.createImage(field, $location);
  				}
  			});
  
  		},
  		createFieldView: function (field, $location) {
  			var self = this;
  			field = self.model.get(field + '_raw');
  			var view = WPML_TM.fieldViewFactory.create(field, {
  				id: 'job_field_' + field.field_type,
  				job_id: self.model.get('job_id')
  			});
  			view.render(self.model.get(field.field_type + '_raw'), tmEditorStrings);
  			$location.last().append(view.$el);
  			view.setup();
  
  			if ( self.translationMemory ) {
  				self.translationMemory.addField( field, view );
  			}
  
  			return view;
  		},
  		createSection: function (field, $location) {
  			var self = this;
  			var view = new WPML_TM.editorSectionView({
  				job_id: self.model.get('job_id')
  			});
  			view.render(field);
  			$location.last().append(view.$el);
  			self.addFields(field.fields, view.$el.find('.inside'));
  		},
  		createGroup: function (field, $location) {
  			var self = this;
  			var view = new WPML_TM.editorGroupView({
  				job_id: self.model.get('job_id')
  			});
  			view.render(field);
  			$location.last().append(view.$el);
  			self.addFields(field.fields, view.$el.find('.inside'));
  			view.setup();
  		},
  		createImage: function (field, $location) {
  			var self = this;
  			var view = new WPML_TM.editorImageView({
  				job_id: self.model.get('job_id')
  			});
  			view.render(field);
  			$location.last().append(view.$el);
  			self.addFields(field.fields, view.$el.find('.inside'));
  			view.setup();
  		},
  		addHeaderView: function () {
  			var self = this;
  			var headerView = new WPML_TM.editorHeaderView({
  				model: WpmlTmEditorModel.header
  			});
  			headerView.render();
  			self.appendToDom(headerView);
  		},
  		addNoteView: function () {
  			var self = this;
  			if (WpmlTmEditorModel.note) {
  				var noteView = new WPML_TM.editorNoteView({
  					model: WpmlTmEditorModel
  				});
  				noteView.render();
  				self.appendToDom(noteView);
  			}
  		},
  		addLanguagesView: function () {
  			var self = this;
  			self.languagesView = new WPML_TM.editorLanguagesView({
  				model: {
  					language: WpmlTmEditorModel.languages,
  					labels: tmEditorStrings
  				},
  				mainView: self
  			});
  			self.languagesView.render();
  			self.appendToDom(self.languagesView);
  		},
  		addFooterView: function () {
  			var self = this;
  			self.footerView = new WPML_TM.editorFooterView({
  				model: tmEditor.model
  			});
  			self.footerView.render();
  			self.appendToDom(self.footerView);
  		},
  		appendToDom: function (view) {
  			var self = this;
  			if (view instanceof WPML_TM.editorHeaderView) {
  				self.$el.find('#wpml-translation-editor-header').last().append(view.$el);
  			} else {
  				self.$el.find('#wpml-translation-editor-wrapper').last().append(view.$el);
  			}
  		},
  		hasTranslations: function () {
  			var self = this;
  			var hasTranslation = false;
  			_.each( self.fieldViews, function ( view ) {
  				if ( ! hasTranslation) {
  					if ( view.getTranslation() !== '' && view.getTranslation() !== view.getOriginal() ) {
  						hasTranslation = true;
  					}
  				}
  			});
  			return hasTranslation;
  		},
  		copyOriginalOverwrite: function () {
  			var self = this;
  			_.each(self.fieldViews, function (view) {
  				view.copyField();
  			});
  		},
  		copyOriginalDontOverwrite: function () {
  			var self = this;
  			_.each(self.fieldViews, function (view) {
  				if (view.getTranslation() === '') {
  					view.copyField();
  				}
  			});
  		}
  	});
  }());
  	