/*global define */
define(['jquery',
        'jqueryui',
		'underscore',
		'backbone'
		],
	function($, $ui, _, Backbone) {
	'use strict';

  /**
  * @class ScienceMetadataView
  * @classdesc The ScienceMetadataView renders the content of a ScienceMetadata model
  * @classcategory Views/Metadata
  * @extends Backbone.View
  */
	var ScienceMetadataView = Backbone.View.extend(
    /** @lends ScienceMetadataView.prototype */{

    /**
    * The ScienceMetadata model to render
    * @type {ScienceMetadata}
    */
		type: "ScienceMetadata",

		initialize: function(){

		},

		render: function(){

		},

		/**
		 * Takes the text object from a metadata model and returns it as HTML formatted with paragraph elements
		 */
		formatParagraphs: function(text, edit){
			//Get the abstract text
	    	var paragraphs = [],
	    		formattedText = "";

	    	//Get the text from the content attribute is it exists
	    	if(text) text = text;

	    	//Put the abstract in an array format to seperate out paragraphs
	    	if(typeof text.para == "string")
	    		paragraphs.push(text.para);
	    	else if(typeof text == "string")
	    		paragraphs.push(text || text);
	    	else if(Array.isArray(text.para)){
	    		paragraphs = text.para;
	    	}

	    	//For each paragraph, insert a new line
	    	_.each(paragraphs, function(p){
	    		if(edit)
	    			formattedText += p + "\n";
	    		else
	    			formattedText += "<p>" + p + "</p>";
	    	});

	    	return formattedText;
		},

		unformatParagraphs: function(htmlText){
			var paragraphs = htmlText.trim().split("\n"),
				paragraphsJSON = [];

			_.each(paragraphs, function(p){
				paragraphsJSON.push(p);
			});

			return paragraphsJSON;
		},

	    /**
	     * When a text element is changed, update the attribute in the model
	     */
	    updateText: function(e){
	    	var textEl = e.target;

	    	//Get the new abstract text
	    	var newAttr = this.unformatParagraphs($(textEl).val());

	    	//Update the model
	    	this.model.set($(textEl).attr("data-category"), newAttr);
	    }
	});

	return ScienceMetadataView;
});
