var WebCom_Components_Form_Element_TYPE = {
  TEXTBOX: "TextBox",
  TEXTAREA: "TextArea",
  DROPDOWN: "DropDown",
  MULTISELECT: "MultiSelect",
  RADIOBUTTON: "RadioButton",
  CHECKBOX: "Checkbox",
  EMAIL: "Email",
  PERSON_NAME: "PersonName",
  ADDRESS: "Address",
	PARAGRAPH: "Paragraph",
  SUBMIT: "Submit"
};

var WebCom_Components_Form_Element_LAYOUT = {
  ONE_COLUMN: "onecolumn",
  TWO_COLUMN: "twocolumns",
  THREE_COLUMN: "threecolumns"
};

var WebCom_Components_Form_Element_LABEL_POSITION = {
  TOP: "top",
  BOTTOM: "bottom",
  LEFT: "left",
  RIGHT: "right"
};

var WebCom_Components_Form_Element_SCHEMA = {
  US: "us",
  INTERNATIONAL: "international"
};

var WebCom_Components_Form_Element_OPTION_TYPE = {
  US: "usastates",
  US_ABBREV: "usastates_abbrev",
  COUNTRIES: "countries",
  CURRENCIES: "currencies",
  CREDITCARDS: "creditcards",
  HOURS: "hours"
};

var WebCom_Components_Form_Element_OPTION_PREDEFINED = {
  days: [
    { value: "Monday" },
    { value: "Tuesday" },
    { value: "Wednesday" },
    { value: "Thursday" },
    { value: "Friday" },
    { value: "Saturday" },
    { value: "Sunday" }  
  ],
  hours: [
  { value: "1:00 AM" },
  { value: "2:00 AM" },
  { value: "3:00 AM" },
  { value: "4:00 AM" },
  { value: "5:00 AM" },
  { value: "6:00 AM" },
  { value: "7:00 AM" },
  { value: "8:00 AM" },
  { value: "9:00 AM" },
  { value: "10:00 AM" },
  { value: "11:00 AM" },
  { value: "12:00 AM" },
  { value: "1:00 PM" },
  { value: "2:00 PM" },
  { value: "3:00 PM" },
  { value: "4:00 PM" },
  { value: "5:00 PM" },
  { value: "6:00 PM" },
  { value: "7:00 PM" },
  { value: "8:00 PM" },
  { value: "9:00 PM" },
  { value: "10:00 PM" },
  { value: "11:00 PM" },
  { value: "12:00 PM" }
  ],
  usastates: [
    { value: "Alabama" },
    { value: "Alaska" },
    { value: "Arizona" },
    { value: "Arkansas" },
    { value: "California" },
    { value: "Colorado" },
    { value: "Connecticut" },
    { value: "Delaware" },
    { value: "District Of Columbia" },
    { value: "Florida" },
    { value: "Georgia" },
    { value: "Hawaii" },
    { value: "Idaho" },
    { value: "Illinois" },
    { value: "Indiana" },
    { value: "Iowa" },
    { value: "Kansas" },
    { value: "Kentucky" },
    { value: "Louisiana" },
    { value: "Maine" },
    { value: "Maryland" },
    { value: "Massachusetts" },
    { value: "Michigan" },
    { value: "Minnesota" },
    { value: "Mississippi" },
    { value: "Missouri" },
    { value: "Montana" },
    { value: "Nebraska" },
    { value: "Nevada" },
    { value: "New Hampshire" },
    { value: "New Jersey" },
    { value: "New Mexico" },
    { value: "New York" },
    { value: "North Carolina" },
    { value: "North Dakota" },
    { value: "Ohio" },
    { value: "Oklahoma" },
    { value: "Oregon" },
    { value: "Pennsylvania" },
    { value: "Rhode Island" },
    { value: "South Carolina" },
    { value: "South Dakota" },
    { value: "Tennessee" },
    { value: "Texas" },
    { value: "Utah" },
    { value: "Vermont" },
    { value: "Virginia" },
    { value: "Washington" },
    { value: "West Virginia" },
    { value: "Wisconsin" },
    { value: "Wyoming" }],
  usastates_abbrev: [
    { value: "Alaska", label: "AK" },
    { value: "Alabama", label: "AL" },
    { value: "Arkansas", label: "AR" },
    { value: "Arizona", label: "AZ" },
    { value: "California", label: "CA" },
    { value: "Colorado", label: "CO" },
    { value: "Connecticut", label: "CT" },
    { value: "District Of Columbia", label: "DC" },
    { value: "Delaware", label: "DE" },
    { value: "Florida", label: "FL" },
    { value: "Georgia", label: "GA" },
    { value: "Hawaii", label: "HI" },
    { value: "Iowa", label: "IA" },
    { value: "Idaho", label: "ID" },
    { value: "Illinois", label: "IL" },
    { value: "Indiana", label: "IN" },
    { value: "Kansas", label: "KS" },
    { value: "Kentucky", label: "KY" },
    { value: "Louisiana", label: "LA" },
    { value: "Massachusetts", label: "MA" },
    { value: "Maryland", label: "MD" },
    { value: "Maine", label: "ME" },
    { value: "Michigan", label: "MI" },
    { value: "Minnesota", label: "MN" },
    { value: "Missouri", label: "MO" },
    { value: "Mississippi", label: "MS" },
    { value: "Montana", label: "MT" },
    { value: "North Carolina", label: "NC" },
    { value: "North Dakota", label: "ND" },
    { value: "Nebraska", label: "NE" },
    { value: "New Hampshire", label: "NH" },
    { value: "New Jersey", label: "NJ" },
    { value: "New Mexico", label: "NM" },
    { value: "Nevada", label: "NV" },
    { value: "New York", label: "NY" },
    { value: "Ohio", label: "OH" },
    { value: "Oklahoma", label: "OK" },
    { value: "Oregon", label: "OR" },
    { value: "Pennsylvania", label: "PA" },
    { value: "Rhode Island", label: "RI" },
    { value: "South Carolina", label: "SC" },
    { value: "South Dakota", label: "SD" },
    { value: "Tennessee", label: "TN" },
    { value: "Texas", label: "TX" },
    { value: "Utah", label: "UT" },
    { value: "Virginia", label: "VA" },
    { value: "Vermont", label: "VT" },
    { value: "Washington", label: "WA" },
    { value: "Wisconsin", label: "WI" },
    { value: "West Virginia", label: "WV" },
    { value: "Wyoming", label: "WY" }],
  countries: [
    { value: "United States" },
    { value: "Afghanistan" },
    { value: "Albania" },
    { value: "Algeria" },
    { value: "American Samoa" },
    { value: "Andorra" },
    { value: "Angola" },
    { value: "Anguilla" },
    { value: "Antarctica" },
    { value: "Antigua and Barbuda" },
    { value: "Argentina" },
    { value: "Armenia" },
    { value: "Aruba" },
    { value: "Australia" },
    { value: "Austria" },
    { value: "Azerbaijan" },
    { value: "Bahamas" },
    { value: "Bahrain" },
    { value: "Bangladesh" },
    { value: "Barbados" },
    { value: "Belarus" },
    { value: "Belgium" },
    { value: "Belize" },
    { value: "Benin" },
    { value: "Bermuda" },
    { value: "Bhutan" },
    { value: "Bolivia" },
    { value: "Bosnia and Herzegovina" },
    { value: "Botswana" },
    { value: "Bouvet Island" },
    { value: "Brazil" },
    { value: "British Indian Ocean Territory" },
    { value: "Brunei Darussalam" },
    { value: "Bulgaria" },
    { value: "Burkina Faso" },
    { value: "Burundi" },
    { value: "Cambodia" },
    { value: "Cameroon" },
    { value: "Canada" },
    { value: "Cape Verde" },
    { value: "Cayman Islands" },
    { value: "Central African Republic" },
    { value: "Chad" },
    { value: "Chile" },
    { value: "China" },
    { value: "Christmas Island" },
    { value: "Cocos (Keeling) Islands" },
    { value: "Colombia" },
    { value: "Comoros" },
    { value: "Congo" },
    { value: "Congo" },
    { value: "Cook Islands" },
    { value: "Costa Rica" },
    { value: "Cote D'ivoire" },
    { value: "Croatia" },
    { value: "Cuba" },
    { value: "Cyprus" },
    { value: "Czech Republic" },
    { value: "Denmark" },
    { value: "Djibouti" },
    { value: "Dominica" },
    { value: "Dominican Republic" },
    { value: "Ecuador"},
    { value: "Egypt" },
    { value: "El Salvador" },
    { value: "Equatorial Guinea" },
    { value: "Eritrea" },
    { value: "Estonia" },
    { value: "Ethiopia" },
    { value: "Falkland Islands (Malvinas)" },
    { value: "Faroe Islands" },
    { value: "Fiji" },
    { value: "Finland" },
    { value: "France" },
    { value: "French Guiana" },
    { value: "French Polynesia" },
    { value: "French Southern Territories" },
    { value: "Gabon" },
    { value: "Gambia" },
    { value: "Georgia" },
    { value: "Germany" },
    { value: "Ghana" },
    { value: "Gibraltar" },
    { value: "Greece" },
    { value: "Greenland" },
    { value: "Grenada" },
    { value: "Guadeloupe" },
    { value: "Guam" },
    { value: "Guatemala" },
    { value: "Guinea" },
    { value: "Guinea-bissau" },
    { value: "Guyana" },
    { value: "Haiti" },
    { value: "Heard Island and Mcdonald Islands" },
    { value: "Holy See (Vatican City State)" },
    { value: "Honduras" },
    { value: "Hong Kong" },
    { value: "Hungary" },
    { value: "Iceland" },
    { value: "India" },
    { value: "Indonesia" },
    { value: "Iran" },
    { value: "Iraq" },
    { value: "Ireland" },
    { value: "Israel" },
    { value: "Italy" },
    { value: "Jamaica" },
    { value: "Japan" },
    { value: "Jordan" },
    { value: "Kazakhstan" },
    { value: "Kenya" },
    { value: "Kiribati" },
    { value: "Korea, (DPR)" },
    { value: "Korea (Republic)" },
    { value: "Kuwait" },
    { value: "Kyrgyzstan" },
    { value: "Lao People's Democratic Republic" },
    { value: "Latvia" },
    { value: "Lebanon" },
    { value: "Lesotho" },
    { value: "Liberia" },
    { value: "Libyan Arab Jamahiriya" },
    { value: "Liechtenstein" },
    { value: "Lithuania" },
    { value: "Luxembourg" },
    { value: "Macao" },
    { value: "Macedonia" },
    { value: "Madagascar" },
    { value: "Malawi" },
    { value: "Malaysia" },
    { value: "Maldives" },
    { value: "Mali" },
    { value: "Malta" },
    { value: "Marshall Islands" },
    { value: "Martinique" },
    { value: "Mauritania" },
    { value: "Mauritius" },
    { value: "Mayotte" },
    { value: "Mexico" },
    { value: "Micronesia" },
    { value: "Moldova" },
    { value: "Monaco" },
    { value: "Mongolia" },
    { value: "Montserrat" },
    { value: "Morocco" },
    { value: "Mozambique" },
    { value: "Myanmar" },
    { value: "Namibia" },
    { value: "Nauru" },
    { value: "Nepal" },
    { value: "Netherlands" },
    { value: "Netherlands Antilles" },
    { value: "New Caledonia" },
    { value: "New Zealand" },
    { value: "Nicaragua" },
    { value: "Niger" },
    { value: "Nigeria" },
    { value: "Niue" },
    { value: "Norfolk Island" },
    { value: "Northern Mariana Islands" },
    { value: "Norway" },
    { value: "Oman" },
    { value: "Pakistan" },
    { value: "Palau" },
    { value: "Palestinian Territory" },
    { value: "Panama" },
    { value: "Papua New Guinea" },
    { value: "Paraguay" },
    { value: "Peru" },
    { value: "Philippines" },
    { value: "Pitcairn" },
    { value: "Poland" },
    { value: "Portugal" },
    { value: "Puerto Rico" },
    { value: "Qatar" },
    { value: "Reunion" },
    { value: "Romania" },
    { value: "Russian Federation" },
    { value: "Rwanda" },
    { value: "Saint Helena" },
    { value: "Saint Kitts and Nevis" },
    { value: "Saint Lucia" },
    { value: "Saint Pierre and Miquelon" },
    { value: "Saint Vincent and The Grenadines" },
    { value: "Samoa" },
    { value: "San Marino" },
    { value: "Sao Tome and Principe" },
    { value: "Saudi Arabia" },
    { value: "Senegal" },
    { value: "Serbia and Montenegro" },
    { value: "Seychelles" },
    { value: "Sierra Leone" },
    { value: "Singapore" },
    { value: "Slovakia" },
    { value: "Slovenia" },
    { value: "Solomon Islands" },
    { value: "Somalia" },
    { value: "South Africa" },
    { value: "South Georgia and The South Sandwich Islands" },
    { value: "Spain" },
    { value: "Sri Lanka" },
    { value: "Sudan" },
    { value: "Suriname" },
    { value: "Svalbard and Jan Mayen" },
    { value: "Swaziland" },
    { value: "Sweden" },
    { value: "Switzerland" },
    { value: "Syrian Arab Republic" },
    { value: "Taiwan" },
    { value: "Tajikistan" },
    { value: "Tanzania" },
    { value: "Thailand" },
    { value: "Timor-leste" },
    { value: "Togo" },
    { value: "Tokelau" },
    { value: "Tonga" },
    { value: "Trinidad and Tobago" },
    { value: "Tunisia" },
    { value: "Turkey" },
    { value: "Turkmenistan" },
    { value: "Turks and Caicos Islands" },
    { value: "Tuvalu" },
    { value: "Uganda" },
    { value: "Ukraine" },
    { value: "United Arab Emirates" },
    { value: "United Kingdom" },
    { value: "United States Minor Outlying Islands" },
    { value: "Uruguay" },
    { value: "Uzbekistan" },
    { value: "Vanuatu" },
    { value: "Venezuela" },
    { value: "Vietnam" },
    { value: "Virgin Islands, British" },
    { value: "Virgin Islands, U.S." },
    { value: "Wallis and Futuna" },
    { value: "Western Sahara" },
    { value: "Yemen" },
    { value: "Zambia" },
    { value: "Zimbabwe"}],
  currencies: [
    { value: 'United States Dollar' },
    { value: 'Euro' },
    { value: 'Pound Sterling' },
    { value: 'Australian Dollar' },
    { value: 'Brazilian Real' },
    { value: 'Argentine Peso' },
    { value: 'Bulgarian Lev' },
    { value: 'Canadian Dollar' },
    { value: 'Chilean Peso' },
    { value: 'Chinese Yuan' },
    { value: 'Colombian Peso' },
    { value: 'Croatian Kuna' },
    { value: 'Czech Koruna' },
    { value: 'Danish Krone' },
    { value: 'Estonian Kroon' },
    { value: 'Honduran Lempira' },
    { value: 'Hong Kong Dollar' },
    { value: 'Hungarian Forint' },
    { value: 'Icelandic Krona' },
    { value: 'Indian Rupee' },
    { value: 'Jamaican Dollar' },
    { value: 'Japanese Yen' },
    { value: 'Korea Won' },
    { value: 'Lithuanian Litas' },
    { value: 'Latvian Lats' },
    { value: 'Malasian Ringgit' },
    { value: 'Mexican Peso' },
    { value: 'Moroccan Dirham' },
    { value: 'New Romanian Leu' },
    { value: 'New Turkish Lira' },
    { value: 'New Zealand Dollar' },
    { value: 'Norwegian Krone' },
    { value: 'Paraguay Guarani' },
    { value: 'Philippine Peso' },
    { value: 'Polish Zloty' },
    { value: 'Qatari Riyal' },
    { value: 'Russian Rouble' },
    { value: 'Salvadoran Colon' },
    { value: 'Saudi Arabian Riyal' },
    { value: 'Singapore Dollar' },
    { value: 'Slovak Koruna' },
    { value: 'South African Rand' },
    { value: 'Sri Lanka Rupee' },
    { value: 'Swedish Krona' },
    { value: 'Swiss Franc' },
    { value: 'Taiwan Dollar' },
    { value: 'Thai Baht' },
    { value: 'Tunisian Dinar' },
    { value: 'Venezuelan Bolivar' }],
  creditcards: [
    { value: "Visa" },
    { value: "MasterCard" },
    { value: "American Express" },
    { value: "Discover"}]
};
var WebCom_Components_Form_Element_WIDTH = {
  SMALL: "small",
  MEDIUM: "medium",
  LARGE: "large",
  FULL: "full"
};

var WebCom_Components_Form_Element_HEIGHT = {
  SMALL: "small",
  MEDIUM: "medium",
  LARGE: "large"
};

//note: this constructor is used for a new form
//existing form will simply by deserialized
var WebCom_Forms_Beans_Form_Defaults = {
  id: "",
  name: "",
  title: "",  
  description: "",  
  elements: [],
  settings: {},
  template: ""
};

function /* public class */ WebCom_Forms_Beans_Form(id, config) /* implements Model */{
   jQuery.extend(true, this, {creationTime: new Date()}, WebCom_Forms_Beans_Form_Defaults, config);
  this.id = id;
  
//  Ext.apply(this, config, WebCom_Forms_Beans_Form_Defaults);
//  Ext.applyIf(this, {creationTime: new Date()});
  
  for (var i=0; i < this.elements.length; i++) {
    this.elements[i] = new WebCom_Components_Form_Element(this.elements[i]);   
  };
  
  this.getElements = function getElements() {
    return this.elements;
  };
  
  this.setElements = function setElements(elements) {
    this.elements = elements;
  };
  
  return this;
};

//note: this constructor is used for a new element
//existing elements will simply by deserialized
var WebCom_Components_Form_Element_Defaults =  {
  name: "",
  label: "",
  type: WebCom_Components_Form_Element_TYPE.TEXTBOX,
  isRequired: false,
  width: WebCom_Components_Form_Element_WIDTH.MEDIUM,
  height: WebCom_Components_Form_Element_HEIGHT.MEDIUM,
  defaultValue: "",
  options: {},
  validators: [],
  children: []
};

function /* public class */ WebCom_Components_Form_Element(config) /* implements ModelElement */ {
  jQuery.extend(true, this, WebCom_Components_Form_Element_Defaults, config);  
  
  this.getId = function () {
    return (this.id != undefined) ? this.id : this.name + "-id";
  };
	
		this.clone = function () {
    var clone = new WebCom_Components_Form_Element(this);
    clone.name = "rename-me-excl-excl"; //reset name to empty to avoid collisions
    clone.id = undefined;

		return clone;  
	};
	
  this.assign = function (config) {
    jQuery.extend(true, this, config);    
    return this;  
  };
	
  
  return this;
};


