aboutsummaryrefslogtreecommitdiff
path: root/js/panels/_color/colorchippopup.reel/colorchippopup.js
blob: 05bcb4473485c08cb102763d6bd3ef007da31d16 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
/* <copyright>
This file contains proprietary software owned by Motorola Mobility, Inc.<br/>
No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/>
(c) Copyright 2011 Motorola Mobility, Inc.  All Rights Reserved.
</copyright> */

////////////////////////////////////////////////////////////////////////
//
var Montage = 			require("montage/core/core").Montage,
	Component = 		require("montage/ui/component").Component,
	Slider = 			require("js/components/slider.reel").Slider,
	Button = 			require("js/components/button.reel").Button,
	HotText = 			require("js/components/hottext.reel").HotText,
	ColorWheel = 		require("js/components/colorwheel.reel").ColorWheel,
	GradientPicker = 	require("js/components/gradientpicker.reel").GradientPicker;
////////////////////////////////////////////////////////////////////////
//Exporting as ColorPanelPopup
exports.ColorChipPopup = Montage.create(Component, {
	////////////////////////////////////////////////////////////////////
	//
	hasTemplate: {
        value: true
    },
    ////////////////////////////////////////////////////////////////////
    //Storing color manager
    _colorManager: {
        enumerable: false,
        value: false
    },
    ////////////////////////////////////////////////////////////////////
    //Color manager
    colorManager: {
    	enumerable: true,
        get: function() {
            return this._colorManager;
        },
        set: function(value) {
        	if (value !== this._colorManager) {
        		this._colorManager = value;
        	}
        }
    },
    ////////////////////////////////////////////////////////////////////
    //
    setNoColor: {
    	enumerable: true,
    	value: function (e) {
    		this.colorManager.applyNoColor();
    	}
    },
    ////////////////////////////////////////////////////////////////////
    //
    _colorChipWheel: {
    	enumerable: false,
    	value: null
    },
    ////////////////////////////////////////////////////////////////////
    //
    popupContainers: {
    	enumerable: true,
    	value: {wheel: null, palette: null, gradient: null, image: null}
    },
   	////////////////////////////////////////////////////////////////////
    //
    popupModes: {
    	enumerable: true,
    	value: {wheel: true, palette: true, gradient: true, image: true, nocolor: true}
    },
    ////////////////////////////////////////////////////////////////////
    //
    hexInput: {
    	enumerable: true,
    	value: null
    },
    ////////////////////////////////////////////////////////////////////
    //
    prepareForDraw: {
    	enumerable: false,
    	value: function () {
    		//Storing containers for reference
    		this.popupContainers.wheel = document.getElementById('cc_pu_wheel_container');
    		this.popupContainers.palette = document.getElementById("cc_pu_palette_container");
    		this.popupContainers.gradient = document.getElementById("cc_pu_gradient_container");
    		this.popupContainers.image = document.getElementById("cc_pu_image_container");
    		this.popupContainers.alpha = document.getElementById("cc_pu_alpha");
    		//
    		
    		this.colorManager.addEventListener('change', function (e) {
    			//
    		}.bind(this));
    	}
    },
    ////////////////////////////////////////////////////////////////////
    //
    willDraw: {
    	enumerable: false,
    	value: function() {
    		//
    		this.element.style.opacity = 0;
    		//
    		this.combo = {};
    		this.combo.slider = Slider.create();
	   		this.combo.hottext = HotText.create();
    		this.combo.slider.element = document.getElementById('cc_pu_a_slider');
   			this.combo.hottext.element = document.getElementById('cc_pu_a_hottext');
   			//
   			this.cc_hexinput = HotText.create();
   			this.cc_hexinput.element = document.getElementById('cc_pu_hottext_hex');
   			this.cc_hexinput.labelFunction = this._hexLabel.bind(this);
    		this.cc_hexinput.inputFunction = this._hexInput.bind(this);
   			//
   			if (this.application.ninja.colorController.colorView.currentChip && this.application.ninja.colorController.colorView.currentChip.colorValue && this.application.ninja.colorController.colorView.currentChip.colorValue.a) {
   				this.combo.slider.value = Math.round(this.application.ninja.colorController.colorView.currentChip.colorValue.a*100);
   			} else {
   				this.combo.slider.value = 100;
   			}
   			this.application.ninja.colorController.colorModel._alpha = {value: this.combo.slider.value/100, wasSetByCode: true, type: 'change'};
   			//
    		Object.defineBinding(this.combo.hottext, "value", {
   				boundObject: this.combo.slider,
       		    boundObjectPropertyPath: "value",
       		    oneway: false,
               	boundValueMutator: function(value) {
                   	return Math.round(value);
                }
   			});
	       	//
	       	this.combo.slider.maxValue = this.combo.hottext.maxValue = 100;
    		this.combo.slider.customBackground = this.application.ninja.colorController.colorView._slider3Background.bind(this.application.ninja.colorController.colorView);
    		//
   			this.combo.slider.addEventListener('change', this.alphaChange.bind(this));
   			this.combo.hottext.addEventListener('change', this.alphaChange.bind(this));
   			//
   			this._colorChipWheel = ColorWheel.create();
		    this._colorChipWheel.element = this.popupContainers.wheel;
	        this._colorChipWheel.element.style.display = 'block';
	        this._colorChipWheel.rimWidth = 14;
		    this._colorChipWheel.strokeWidth = 2;
		    //
	        this._colorChipWheel.addEventListener('firstDraw', this, false);
		    this._colorChipWheel.addEventListener('change', this, false);
		    this._colorChipWheel.addEventListener('changing', this, false);
    	}
    },
    ////////////////////////////////////////////////////////////////////
    //
    draw: {
    	enumerable: false,
    	value: function() {
    		//
    		this.drawPalette(this.defaultPalette);
    		//
    		//this.cc_hexinput = this.application.ninja.colorController.colorView.addButton('hexinput', document.getElementById('cc_pu_hottext_hex'));
	       	//
	       	this.combo.slider.needsDraw = true;
	       	this.combo.hottext.needsDraw = true;
	       	this.cc_hexinput.needsDraw = true;
    		//
    		var ncButton = document.getElementById('cc_pu_nocolor'),
    			plButton = document.getElementById('cc_pu_palettes'),
    			wlButton = document.getElementById('cc_pu_wheel'),
    			gdButton = document.getElementById('cc_pu_gradients'),
    			imButton = document.getElementById('cc_pu_images');
   			//
   			if (this.popupModes.nocolor) {
   				ncButton.addEventListener('click', function () {
   					this.setNoColor();
	    		}.bind(this));
    		} else {
    			ncButton.style.display = 'none';
    		}
    		//
    		if (this.popupModes.palette) {
    			plButton.addEventListener('click', function () {
   					this.popupSwitchInputTo(this.popupContainers.palette);
    			}.bind(this));
    		} else {
    			plButton.style.display = 'none';
    		}
    		//
    		if (this.popupModes.wheel) {
	    		wlButton.addEventListener('click', function () {
   					this.popupSwitchInputTo(this.popupContainers.wheel);
    			}.bind(this));
    		} else {
    			wlButton.style.display = 'none';
    		}
    		//
    		if (this.popupModes.gradient) {
    			gdButton.addEventListener('click', function () {
   					this.popupSwitchInputTo(this.popupContainers.gradient);
	    		}.bind(this));
    		} else {
    			gdButton.style.display = 'none';
    		}
    		//
    		if (this.popupModes.image) {
    			imButton.style.opacity = .2;//TODO: Remove, visual feedback for disable button
    			imButton.addEventListener('click', function () {
   					//this.popupSwitchInputTo(this.popupContainers.image);
	    		}.bind(this));
    		} else {
    			imButton.style.display = 'none';
    		}
    		//
    		this.element.style.opacity = 1;
    		//
    		this._colorChipWheel.needsDraw = true;
    	}
    },
    ////////////////////////////////////////////////////////////////////
    //
    didDraw: {
    	enumerable: false,
    	value: function() {
    		//
    	}
    },
    ////////////////////////////////////////////////////////////////////
    //
    popupSwitchInputTo: {
    	enumerable: true,
    	value: function (tab) {
    		//
    		if (tab !== this.popupContainers.palette) {
    			this.popupContainers.palette.style.display = 'none';
    		} else {
    			this.popupContainers.palette.style.display = 'block';
    			this.popupContainers.alpha.style.display = 'block';
    			//
    			this.application.ninja.colorController.popupTab = 'palette';
    		}
    		//
    		if (tab !== this.popupContainers.wheel && this._colorChipWheel.element) {
    			this._colorChipWheel.element.style.display = 'none';
    		} else if (this._colorChipWheel.element && this._colorChipWheel.element.style.display !== 'block'){
    			this._colorChipWheel.element.style.display = 'block';
    			this.popupContainers.alpha.style.display = 'block';
    			//
    			this.application.ninja.colorController.popupTab = 'wheel';
    		}
    		//
    		if (tab !== this.popupContainers.image) {
    			this.popupContainers.image.style.display = 'none';
    		} else {
    			this.popupContainers.image.style.display = 'block';
    			this.popupContainers.alpha.style.display = 'block';
    			//
    			this.application.ninja.colorController.popupTab = 'image';
    		}
    		//
    		if (tab !== this.popupContainers.gradient) {
    			this.popupContainers.gradient.style.display = 'none';
    		} else {
    			this.popupContainers.gradient.style.display = 'block';
    			//TODO: Add fixed size to avoid jump
    			//this.popupContainers.alpha.style.display = 'none';
    			//
    			this.application.ninja.colorController.popupTab = 'gradient';
    		}
    	}
    },
    ////////////////////////////////////////////////////////////////////
    //
    drawPalette: {
    	enumerable: true,
    	value: function (c) {
    		var i, button;
    		//
    		this.popupContainers.palette.style.display = 'block';
    		//
    		for (i in c) {
    			button = document.createElement('button');
    			button.style.background = c[i].css;
    			button.title = c[i].css.toUpperCase();
    			button.colorMode = c[i].mode;
    			button.colorValue = c[i].value;
    			this.popupContainers.palette.appendChild(button);
    			button.addEventListener('click', function (b) {
    				var rgb, color, hex;
    				//
    				if (b._event.srcElement.colorMode !== 'hex') {
    					//TODO: Add logic to update hex input field for non-hex values
    					color = b._event.srcElement.colorValue;
	    				color.wasSetByCode = false;
    					color.type = 'change';
    					this.colorManager[b._event.srcElement.colorMode] = color;
    				} else {
    					if (this.colorManager.mode === 'hsl') {
    						rgb = this.colorManager.hexToRgb(b._event.srcElement.colorValue);
    						if (rgb) {
			    				color = this.colorManager.rgbToHsl(rgb.r, rgb.g, rgb.b);
    							color.wasSetByCode = false;
			    				color.type = 'change';
    							//
    							hex = b._event.srcElement.colorValue;
    							if (this.popupModes.wheel) {
    								this._colorChipWheel.value = this.colorManager.rgbToHsv(color.r, color.g, color.b);
			    				} else {
			    					this.colorManager.hsl = color;
			    				}
    						} else {
			    				this.setNoColor();
			    				hex = '------';
    						}
			    		} else {
    						color = this.colorManager.hexToRgb(b._event.srcElement.colorValue);
			    			if (color) {
    							color.wasSetByCode = false;
    							color.type = 'change';
			    				//
			    				hex = b._event.srcElement.colorValue;
			    				if (this.popupModes.wheel) {
    								this._colorChipWheel.value = this.colorManager.rgbToHsv(color.r, color.g, color.b);
			    				} else {
			    					this.colorManager.rgb = color;
			    				}
    						} else {
    							this.setNoColor();
    							hex = '------';
			    			}
    					}
    				}
    				if (hex) {
    					this._hexString = hex;
    					this.updateHex();
    				}
    			}.bind(this));
    		}
    		this.popupContainers.palette.style.display = 'none';
    	}
    },
    ////////////////////////////////////////////////////////////////////
    //
    _hexLabel: {
    	enumerable: false,
    	value: function (v) {
    		return this._hexString;
    	}
    },
    ////////////////////////////////////////////////////////////////////
    //
    _hexString: {
    	enumerable: false,
    	value: '000000'
    },
    ////////////////////////////////////////////////////////////////////
    //
    updateHex: {
    	value: function (e) {
    		//
    		this.cc_hexinput._valueSyncedWithInputField = false;
			this.cc_hexinput.needsDraw = true;
    	}
    },
    ////////////////////////////////////////////////////////////////////
    //
    _hexInput: {
    	enumerable: false,
    	value: function (color) {
    		//If invalid input, no color will be applied
    		var update, rgb, hex;
    		//Allowing multiple hex mode inputs (3 and 6 characters)
    		switch (color.length) {
    			case 3:
    				color = color[0]+color[0]+color[1]+color[1]+color[2]+color[2];
    				break;
    			case 6:
    				//Nothing
    				break;
    			default:
    				//this._colorManager.applyNoColor();
    				return;
    				break;
    		}
    		//Checking for panel mode and converting the color to the panel mode
    		if (this.colorManager.mode === 'hsl') {
    			rgb = this.colorManager.hexToRgb(color);
    			if (rgb) {
    				update = this.colorManager.rgbToHsl(rgb.r, rgb.g, rgb.b);
    				update.wasSetByCode = false;
    				update.type = 'change';
    				//
    				hex = color;
    				//
    				if (this.popupModes.wheel) {
    					this._colorChipWheel.value = this.colorManager.rgbToHsv(update.r, update.g, update.b);
    				} else {
    					this.colorManager.hsl = update;
    				}
    			} else {
    				//this.colorManager.applyNoColor();
    				hex = '------';
    			}
    		} else {
    			update = this.colorManager.hexToRgb(color);
    			if (update) {
    				update.wasSetByCode = false;
    				update.type = 'change';
    				//
    				hex = color;
    				//
    				if (this.popupModes.wheel) {
		    			this._colorChipWheel.value = this.colorManager.rgbToHsv(update.r, update.g, update.b);
    				} else {
    					this.colorManager.rgb = update;
    				}
    			} else {
    				//this.colorManager.applyNoColor();
    				hex = '------';
    			}
    		}
    		//
    		if (hex) {
	    		this._hexString = hex;
    			this.updateHex();
    		}
    	}
    },
    ////////////////////////////////////////////////////////////////////
    //
    defaultPalette: {
    	enumerable: true,
    	value: [{mode: 'hex', value: '000000', css: '#000000'}, {mode: 'hex', value: '808080', css: '#808080'}, {mode: 'hex', value: '000000', css: '#000000'}, {mode: 'hex', value: '003300', css: '#003300'}, {mode: 'hex', value: '006600', css: '#006600'}, {mode: 'hex', value: '009900', css: '#009900'}, {mode: 'hex', value: '00cc00', css: '#00cc00'}, {mode: 'hex', value: '00ff00', css: '#00ff00'}, {mode: 'hex', value: '330000', css: '#330000'}, {mode: 'hex', value: '333300', css: '#333300'}, {mode: 'hex', value: '336600', css: '#336600'}, {mode: 'hex', value: '339900', css: '#339900'}, {mode: 'hex', value: '33cc00', css: '#33cc00'}, {mode: 'hex', value: '33ff00', css: '#33ff00'}, {mode: 'hex', value: '660000', css: '#660000'}, {mode: 'hex', value: '663300', css: '#663300'}, {mode: 'hex', value: '666600', css: '#666600'}, {mode: 'hex', value: '669900', css: '#669900'}, {mode: 'hex', value: '66cc00', css: '#66cc00'}, {mode: 'hex', value: '66ff00', css: '#66ff00'},
    			{mode: 'hex', value: '333333', css: '#333333'}, {mode: 'hex', value: '808080', css: '#808080'}, {mode: 'hex', value: '000033', css: '#000033'}, {mode: 'hex', value: '003333', css: '#003333'}, {mode: 'hex', value: '006633', css: '#006633'}, {mode: 'hex', value: '009933', css: '#009933'}, {mode: 'hex', value: '00cc33', css: '#00cc33'}, {mode: 'hex', value: '00ff33', css: '#00ff33'}, {mode: 'hex', value: '330033', css: '#330033'}, {mode: 'hex', value: '333333', css: '#333333'}, {mode: 'hex', value: '336633', css: '#336633'}, {mode: 'hex', value: '339933', css: '#339933'}, {mode: 'hex', value: '33cc33', css: '#33cc33'}, {mode: 'hex', value: '33ff33', css: '#33ff33'}, {mode: 'hex', value: '660033', css: '#660033'}, {mode: 'hex', value: '663333', css: '#663333'}, {mode: 'hex', value: '666633', css: '#666633'}, {mode: 'hex', value: '669933', css: '#669933'}, {mode: 'hex', value: '66cc33', css: '#66cc33'}, {mode: 'hex', value: '66ff33', css: '#66ff33'},
    			{mode: 'hex', value: '666666', css: '#666666'}, {mode: 'hex', value: '808080', css: '#808080'}, {mode: 'hex', value: '000066', css: '#000066'}, {mode: 'hex', value: '003366', css: '#003366'}, {mode: 'hex', value: '006666', css: '#006666'}, {mode: 'hex', value: '009966', css: '#009966'}, {mode: 'hex', value: '00cc66', css: '#00cc66'}, {mode: 'hex', value: '00ff66', css: '#00ff66'}, {mode: 'hex', value: '330066', css: '#330066'}, {mode: 'hex', value: '333366', css: '#333366'}, {mode: 'hex', value: '336666', css: '#336666'}, {mode: 'hex', value: '339966', css: '#339966'}, {mode: 'hex', value: '33cc66', css: '#33cc66'}, {mode: 'hex', value: '33ff66', css: '#33ff66'}, {mode: 'hex', value: '660066', css: '#660066'}, {mode: 'hex', value: '663366', css: '#663366'}, {mode: 'hex', value: '666666', css: '#666666'}, {mode: 'hex', value: '669966', css: '#669966'}, {mode: 'hex', value: '66cc66', css: '#66cc66'}, {mode: 'hex', value: '66ff66', css: '#66ff66'},
    			{mode: 'hex', value: '999999', css: '#999999'}, {mode: 'hex', value: '808080', css: '#808080'}, {mode: 'hex', value: '000099', css: '#000099'}, {mode: 'hex', value: '003399', css: '#003399'}, {mode: 'hex', value: '006699', css: '#006699'}, {mode: 'hex', value: '009999', css: '#009999'}, {mode: 'hex', value: '00cc99', css: '#00cc99'}, {mode: 'hex', value: '00ff99', css: '#00ff99'}, {mode: 'hex', value: '330099', css: '#330099'}, {mode: 'hex', value: '333399', css: '#333399'}, {mode: 'hex', value: '336699', css: '#336699'}, {mode: 'hex', value: '339999', css: '#339999'}, {mode: 'hex', value: '33cc99', css: '#33cc99'}, {mode: 'hex', value: '33ff99', css: '#33ff99'}, {mode: 'hex', value: '660099', css: '#660099'}, {mode: 'hex', value: '663399', css: '#663399'}, {mode: 'hex', value: '666699', css: '#666699'}, {mode: 'hex', value: '669999', css: '#669999'}, {mode: 'hex', value: '66cc99', css: '#66cc99'}, {mode: 'hex', value: '66ff99', css: '#66ff99'},
    			{mode: 'hex', value: 'cccccc', css: '#cccccc'}, {mode: 'hex', value: '808080', css: '#808080'}, {mode: 'hex', value: '0000cc', css: '#0000cc'}, {mode: 'hex', value: '0033cc', css: '#0033cc'}, {mode: 'hex', value: '0066cc', css: '#0066cc'}, {mode: 'hex', value: '0099cc', css: '#0099cc'}, {mode: 'hex', value: '00cccc', css: '#00cccc'}, {mode: 'hex', value: '00ffcc', css: '#00ffcc'}, {mode: 'hex', value: '3300cc', css: '#3300cc'}, {mode: 'hex', value: '3333cc', css: '#3333cc'}, {mode: 'hex', value: '3366cc', css: '#3366cc'}, {mode: 'hex', value: '3399cc', css: '#3399cc'}, {mode: 'hex', value: '33cccc', css: '#33cccc'}, {mode: 'hex', value: '33ffcc', css: '#33ffcc'}, {mode: 'hex', value: '6600cc', css: '#6600cc'}, {mode: 'hex', value: '6633cc', css: '#6633cc'}, {mode: 'hex', value: '6666cc', css: '#6666cc'}, {mode: 'hex', value: '6699cc', css: '#6699cc'}, {mode: 'hex', value: '66cccc', css: '#66cccc'}, {mode: 'hex', value: '66ffcc', css: '#66ffcc'},
    			{mode: 'hex', value: 'ffffff', css: '#ffffff'}, {mode: 'hex', value: '808080', css: '#808080'}, {mode: 'hex', value: '0000ff', css: '#0000ff'}, {mode: 'hex', value: '0033ff', css: '#0033ff'}, {mode: 'hex', value: '0066ff', css: '#0066ff'}, {mode: 'hex', value: '0099ff', css: '#0099ff'}, {mode: 'hex', value: '00ccff', css: '#00ccff'}, {mode: 'hex', value: '00ffff', css: '#00ffff'}, {mode: 'hex', value: '3300ff', css: '#3300ff'}, {mode: 'hex', value: '3333ff', css: '#3333ff'}, {mode: 'hex', value: '3366ff', css: '#3366ff'}, {mode: 'hex', value: '3399ff', css: '#3399ff'}, {mode: 'hex', value: '33ccff', css: '#33ccff'}, {mode: 'hex', value: '33ffff', css: '#33ffff'}, {mode: 'hex', value: '6600ff', css: '#6600ff'}, {mode: 'hex', value: '6633ff', css: '#6633ff'}, {mode: 'hex', value: '6666ff', css: '#6666ff'}, {mode: 'hex', value: '6699ff', css: '#6699ff'}, {mode: 'hex', value: '66ccff', css: '#66ccff'}, {mode: 'hex', value: '66ffff', css: '#66ffff'},
    			{mode: 'hex', value: 'ff0000', css: '#ff0000'}, {mode: 'hex', value: '808080', css: '#808080'}, {mode: 'hex', value: '990000', css: '#990000'}, {mode: 'hex', value: '993300', css: '#993300'}, {mode: 'hex', value: '996600', css: '#996600'}, {mode: 'hex', value: '999900', css: '#999900'}, {mode: 'hex', value: '99cc00', css: '#99cc00'}, {mode: 'hex', value: '99ff00', css: '#99ff00'}, {mode: 'hex', value: 'cc0000', css: '#cc0000'}, {mode: 'hex', value: 'cc3300', css: '#cc3300'}, {mode: 'hex', value: 'cc6600', css: '#cc6600'}, {mode: 'hex', value: 'cc9900', css: '#cc9900'}, {mode: 'hex', value: 'cccc00', css: '#cccc00'}, {mode: 'hex', value: 'ccff00', css: '#ccff00'}, {mode: 'hex', value: 'ff0000', css: '#ff0000'}, {mode: 'hex', value: 'ff3300', css: '#ff3300'}, {mode: 'hex', value: 'ff6600', css: '#ff6600'}, {mode: 'hex', value: 'ff9900', css: '#ff9900'}, {mode: 'hex', value: 'ffcc00', css: '#ffcc00'}, {mode: 'hex', value: 'ffff00', css: '#ffff00'},
    			{mode: 'hex', value: '00ff00', css: '#00ff00'}, {mode: 'hex', value: '808080', css: '#808080'}, {mode: 'hex', value: '990033', css: '#990033'}, {mode: 'hex', value: '993333', css: '#993333'}, {mode: 'hex', value: '996633', css: '#996633'}, {mode: 'hex', value: '999933', css: '#999933'}, {mode: 'hex', value: '99cc33', css: '#99cc33'}, {mode: 'hex', value: '99ff33', css: '#99ff33'}, {mode: 'hex', value: 'cc0033', css: '#cc0033'}, {mode: 'hex', value: 'cc3333', css: '#cc3333'}, {mode: 'hex', value: 'cc6633', css: '#cc6633'}, {mode: 'hex', value: 'cc9933', css: '#cc9933'}, {mode: 'hex', value: 'cccc33', css: '#cccc33'}, {mode: 'hex', value: 'ccff33', css: '#ccff33'}, {mode: 'hex', value: 'ff0033', css: '#ff0033'}, {mode: 'hex', value: 'ff3333', css: '#ff3333'}, {mode: 'hex', value: 'ff6633', css: '#ff6633'}, {mode: 'hex', value: 'ff9933', css: '#ff9933'}, {mode: 'hex', value: 'ffcc33', css: '#ffcc33'}, {mode: 'hex', value: 'ffff33', css: '#ffff33'},
    			{mode: 'hex', value: '0000ff', css: '#0000ff'}, {mode: 'hex', value: '808080', css: '#808080'}, {mode: 'hex', value: '990066', css: '#990066'}, {mode: 'hex', value: '993366', css: '#993366'}, {mode: 'hex', value: '996666', css: '#996666'}, {mode: 'hex', value: '999966', css: '#999966'}, {mode: 'hex', value: '99cc66', css: '#99cc66'}, {mode: 'hex', value: '99ff66', css: '#99ff66'}, {mode: 'hex', value: 'cc0066', css: '#cc0066'}, {mode: 'hex', value: 'cc3366', css: '#cc3366'}, {mode: 'hex', value: 'cc6666', css: '#cc6666'}, {mode: 'hex', value: 'cc9966', css: '#cc9966'}, {mode: 'hex', value: 'cccc66', css: '#cccc66'}, {mode: 'hex', value: 'ccff66', css: '#ccff66'}, {mode: 'hex', value: 'ff0066', css: '#ff0066'}, {mode: 'hex', value: 'ff3366', css: '#ff3366'}, {mode: 'hex', value: 'ff6666', css: '#ff6666'}, {mode: 'hex', value: 'ff9966', css: '#ff9966'}, {mode: 'hex', value: 'ffcc66', css: '#ffcc66'}, {mode: 'hex', value: 'ffff66', css: '#ffff66'},
    			{mode: 'hex', value: 'ffff00', css: '#ffff00'}, {mode: 'hex', value: '808080', css: '#808080'}, {mode: 'hex', value: '990099', css: '#990099'}, {mode: 'hex', value: '993399', css: '#993399'}, {mode: 'hex', value: '996699', css: '#996699'}, {mode: 'hex', value: '999999', css: '#999999'}, {mode: 'hex', value: '99cc99', css: '#99cc99'}, {mode: 'hex', value: '99ff99', css: '#99ff99'}, {mode: 'hex', value: 'cc0099', css: '#cc0099'}, {mode: 'hex', value: 'cc3399', css: '#cc3399'}, {mode: 'hex', value: 'cc6699', css: '#cc6699'}, {mode: 'hex', value: 'cc9999', css: '#cc9999'}, {mode: 'hex', value: 'cccc99', css: '#cccc99'}, {mode: 'hex', value: 'ccff99', css: '#ccff99'}, {mode: 'hex', value: 'ff0099', css: '#ff0099'}, {mode: 'hex', value: 'ff3399', css: '#ff3399'}, {mode: 'hex', value: 'ff6699', css: '#ff6699'}, {mode: 'hex', value: 'ff9999', css: '#ff9999'}, {mode: 'hex', value: 'ffcc99', css: '#ffcc99'}, {mode: 'hex', value: 'ffff99', css: '#ffff99'},
    			{mode: 'hex', value: '00ffff', css: '#00ffff'}, {mode: 'hex', value: '808080', css: '#808080'}, {mode: 'hex', value: '9900cc', css: '#9900cc'}, {mode: 'hex', value: '9933cc', css: '#9933cc'}, {mode: 'hex', value: '9966cc', css: '#9966cc'}, {mode: 'hex', value: '9999cc', css: '#9999cc'}, {mode: 'hex', value: '99cccc', css: '#99cccc'}, {mode: 'hex', value: '99ffcc', css: '#99ffcc'}, {mode: 'hex', value: 'cc00cc', css: '#cc00cc'}, {mode: 'hex', value: 'cc33cc', css: '#cc33cc'}, {mode: 'hex', value: 'cc66cc', css: '#cc66cc'}, {mode: 'hex', value: 'cc99cc', css: '#cc99cc'}, {mode: 'hex', value: 'cccccc', css: '#cccccc'}, {mode: 'hex', value: 'ccffcc', css: '#ccffcc'}, {mode: 'hex', value: 'ff00cc', css: '#ff00cc'}, {mode: 'hex', value: 'ff33cc', css: '#ff33cc'}, {mode: 'hex', value: 'ff66cc', css: '#ff66cc'}, {mode: 'hex', value: 'ff99cc', css: '#ff99cc'}, {mode: 'hex', value: 'ffcccc', css: '#ffcccc'}, {mode: 'hex', value: 'ffffcc', css: '#ffffcc'},
    			{mode: 'hex', value: 'ff00ff', css: '#ff00ff'}, {mode: 'hex', value: '808080', css: '#808080'}, {mode: 'hex', value: '9900ff', css: '#9900ff'}, {mode: 'hex', value: '9933ff', css: '#9933ff'}, {mode: 'hex', value: '9966ff', css: '#9966ff'}, {mode: 'hex', value: '9999ff', css: '#9999ff'}, {mode: 'hex', value: '99ccff', css: '#99ccff'}, {mode: 'hex', value: '99ffff', css: '#99ffff'}, {mode: 'hex', value: 'cc00ff', css: '#cc00ff'}, {mode: 'hex', value: 'cc33ff', css: '#cc33ff'}, {mode: 'hex', value: 'cc66ff', css: '#cc66ff'}, {mode: 'hex', value: 'cc99ff', css: '#cc99ff'}, {mode: 'hex', value: 'ccccff', css: '#ccccff'}, {mode: 'hex', value: 'ccffff', css: '#ccffff'}, {mode: 'hex', value: 'ff00ff', css: '#ff00ff'}, {mode: 'hex', value: 'ff33ff', css: '#ff33ff'}, {mode: 'hex', value: 'ff66ff', css: '#ff66ff'}, {mode: 'hex', value: 'ff99ff', css: '#ff99ff'}, {mode: 'hex', value: 'ffccff', css: '#ffccff'}, {mode: 'hex', value: 'ffffff', css: '#ffffff'}]
    },
    ////////////////////////////////////////////////////////////////////
    //
    drawGradient: {
    	enumerable: true,
    	value: function (g) {
    		//
    	}
    },
     ////////////////////////////////////////////////////////////////////
    //
    defaultGradient: {
    	enumerable: true,
    	value: []
    },
    ////////////////////////////////////////////////////////////////////
    //
    alphaChange: {
    	enumerable: false,
    	value: function (e) {
	    	if (!e._event.wasSetByCode) {
    			var update = {value: this.combo.slider.value/100, wasSetByCode: false, type: 'change'};
    			this.colorManager.alpha = update;
    			//TODO: Remove, temp fix
    			if (this.application.ninja.colorController.colorView.currentChip.colorValue && this.application.ninja.colorController.colorView.currentChip.colorValue.r) {
    				this.application.ninja.colorController.colorView.currentChip.colorValue.a = this.combo.slider.value/100;
    				this.application.ninja.colorController.colorView.currentChip.colorValue.wasSetByCode = false;
    				this.application.ninja.colorController.colorView.currentChip.colorValue.type = 'change';
    				this.colorManager.rgb = this.application.ninja.colorController.colorView.currentChip.colorValue;
    			}
    		}
    	}
    },
    ////////////////////////////////////////////////////////////////////
    //Reworking logic, firstDraw bubbles up, so target must be checked
    handleFirstDraw: {
    	enumerable: false,
    	value: function (e) {
    		//
    		var modeSet = false;
    		//
    		if (this._colorChipWheel) {
	    		//Only using it for one instance, no need to check target
    			this._colorChipWheel.removeEventListener('firstDraw', this, false);
    		}
    		//
    		switch (this.application.ninja.colorController.popupTab) {
	   			case 'wheel':
    				if (this.popupModes.wheel) {
    					this.popupSwitchInputTo(this.popupContainers.wheel);
    					modeSet = true;
   					}
   					break;
	   			case 'palette':
   					if (this.popupModes.palette) {
    					this.popupSwitchInputTo(this.popupContainers.palette);
    					modeSet = true;
    				}
    				break;
	    		case 'image':
    				if (this.popupModes.image) {
    					this.popupSwitchInputTo(this.popupContainers.image);
    					modeSet = true;
    				}
   					break;
	    		default:
    				if (this.popupModes.wheel) {
    					this.popupSwitchInputTo(this.popupContainers.wheel);
   						modeSet = true;
   					}
   					break;
   			}
    		//
	   		if (!modeSet) {
   				if (this.popupModes.wheel) {
   					this.popupSwitchInputTo(this.popupContainers.wheel);
   				} else if (this.popupModes.palette) {
    				this.popupSwitchInputTo(this.popupContainers.palette);
	    		} else if (this.popupModes.gradient) {
    				this.popupSwitchInputTo(this.popupContainers.gradient);
   				} else if (this.popupModes.gradient) {
    				this.popupSwitchInputTo(this.popupContainers.image);
   				} else {
   					console.log("Error: No mode is available in the color popup!");
   				}
    		}
    		//Checking for a gradient to be current color
    		if (this.colorManager.gradient && this.popupModes.gradient) {
    			if (this.colorManager.colorHistory[this.colorManager.input] && this.colorManager.colorHistory[this.colorManager.input][this.colorManager.colorHistory[this.colorManager.input].length-1].m !== 'gradient') {
    				//If no gradient set, using default
    				this.drawGradient(this.defaultGradient);
    			} else {
    				//Gradient has been set, so opening gradient tab with gradient
	   				this.drawGradient(this.colorManager.gradient);
   					//this.popupSwitchInputTo(this.popupContainers.gradient);
   				}
    		} else {
    			
    		}
    		//Displaying element once it's been drawn
	   		this.element.style.opacity = 1;
    	}
    },
    ////////////////////////////////////////////////////////////////////
    //
    handleChange: {
    	enumerable: false,
    	value: function (e) {
    		//
    		if (e._event.hsv) {
    			var temp;
	    		this.colorManager.hsv = {h: e._event.hsv.h, s: e._event.hsv.s, v: e._event.hsv.v, wasSetByCode: true, type: 'change'};
	    		temp = this.colorManager.hsvToRgb(e._event.hsv.h, e._event.hsv.s, e._event.hsv.v);
	    		this._hexString = this.colorManager.rgbToHex(temp.r, temp.g, temp.b);
	    		this.updateHex();
	    	}
    	}
    },
    ////////////////////////////////////////////////////////////////////
    //
    handleChanging: {
    	enumerable: false,
    	value: function (e) {
    		//
    		this.dispatchEvent(e._event);
    	}
    },
    ////////////////////////////////////////////////////////////////////
    //
    _handleWheelEvent: {
    	enumerable: false,
    	value: function (e) {
    		if (!e._event.wasSetByCode) {
    			//
    			this.dispatchEvent(e);
    		}
    	}
    },
    ////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////
    //Garbage collection (Manual method)
    destroy: {
    	enumerable: false,
    	value: function() {
    		//
    		/* this.application.ninja.colorController.colorView.removeButton('hexinput', document.getElementById('cc_pu_hottext_hex')); */
    		Object.deleteBinding(this.combo.hottext, "value");
    		this._colorChipWheel = null;
    	}
    }
    ////////////////////////////////////////////////////////////////////
    ////////////////////////////////////////////////////////////////////
});
////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////