text: /*
   * Jsonix is a JavaScript library which allows you to convert between XML
   * and JavaScript object structures.
   *
   * Copyright (c) 2010 - 2014, Alexey Valikov, Highsource.org
   * All rights reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions are met:
   *     * Redistributions of source code must retain the above copyright
   *       notice, this list of conditions and the following disclaimer.
   *     * Redistributions in binary form must reproduce the above copyright
   *       notice, this list of conditions and the following disclaimer in the
   *       documentation and/or other materials provided with the distribution.
   *     * Neither the name of the Alexey Valikov nor the
   *       names of contributors may be used to endorse or promote products
   *       derived from this software without specific prior written permission.
   *
   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED. IN NO EVENT SHALL ALEXEY VALIKOV BE LIABLE FOR ANY
   * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
   * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   */
  
  Jsonix.Schema.XSD.List = Jsonix
  		.Class(
  				Jsonix.Schema.XSD.AnySimpleType,
  				{
  					name : null,
  					typeName : null,
  					typeInfo : null,
  					separator : ' ',
  					trimmedSeparator : Jsonix.Util.StringUtils.whitespaceCharacters,
  					simpleType : true,
  					built : false,
  					initialize : function(typeInfo, typeName, separator) {
  						Jsonix.Util.Ensure.ensureExists(typeInfo);
  						// TODO Ensure correct argument
  						this.typeInfo = typeInfo;
  						if (!Jsonix.Util.Type.exists(this.name)) {
  							this.name = typeInfo.name + "*";
  						}
  						if (Jsonix.Util.Type.exists(typeName)) {
  							// TODO Ensure correct argument
  							this.typeName = typeName;
  						}
  
  						if (Jsonix.Util.Type.isString(separator)) {
  							// TODO Ensure correct argument
  							this.separator = separator;
  						} else {
  							this.separator = ' ';
  						}
  
  						var trimmedSeparator = Jsonix.Util.StringUtils
  								.trim(this.separator);
  						if (trimmedSeparator.length === 0) {
  							this.trimmedSeparator = Jsonix.Util.StringUtils.whitespaceCharacters;
  						} else {
  							this.trimmedSeparator = trimmedSeparator;
  						}
  					},
  					build : function(context, module) {
  						if (!this.built) {
  							this.typeInfo = context.resolveTypeInfo(
  									this.typeInfo, module);
  							this.built = true;
  						}
  					},
  					print : function(value, context) {
  						if (!Jsonix.Util.Type.exists(value)) {
  							return null;
  						}
  						// TODO Exception if not an array
  						Jsonix.Util.Ensure.ensureArray(value);
  						var result = '';
  						for ( var index = 0; index < value.length; index++) {
  							if (index > 0) {
  								result = result + this.separator;
  							}
  							result = result + this.typeInfo.print(value[index], context);
  						}
  						return result;
  					},
  					parse : function(text, context) {
  						Jsonix.Util.Ensure.ensureString(text);
  						var items = Jsonix.Util.StringUtils
  								.splitBySeparatorChars(text,
  										this.trimmedSeparator);
  						var result = [];
  						for ( var index = 0; index < items.length; index++) {
  							result.push(this.typeInfo
  									.parse(Jsonix.Util.StringUtils
  											.trim(items[index]), context));
  						}
  						return result;
  					},
  					CLASS_NAME : 'Jsonix.Schema.XSD.List'
  				});
  