/*****************************\
  GSSI framework Style Info
  Requires: Base, Environment
\*****************************/

if (! GSSI) { alert("gssi.dom.js: gssi.base.js not loaded") };
if (! GSSI.Environment ) { alert("gssi.dom.js: gssi.environment.js not loaded") };
GSSI.Styles = {};

GSSI.Styles._css2js = {
	'background-attachment':'backgroundAttachment', 'background-color':'backgroundColor', 'background-image':'backgroundImage',
	'background-position':'backgroundPosition', 'background-repeat':'backgroundRepeat', 'border-bottom':'borderBottom',
	'border-bottom-color':'borderBottomColor', 'border-bottom-style':'borderBottomStyle', 'border-bottom-width':'borderBottomWidth',
	'border-collapse':'borderCollapse', 'border-color':'borderColor', 'border-left':'borderLeft', 'border-left-color':'borderLeftColor',
	'border-left-style':'borderLeftStyle', 'border-left-width':'borderLeftWidth', 'border-right':'borderRight',
	'border-right-color':'borderRightColor', 'border-right-style':'borderRightStyle', 'border-right-width':'borderRightWidth',
	'border-style':'borderStyle', 'border-top':'borderTop', 'border-top-color':'borderTopColor',
	'border-top-style':'borderTopStyle', 'border-top-width':'borderTopWidth', 'border-width':'borderWidth', 'empty-cells':'emptyCells',
	'font-family':'fontFamily', 'font-size':'fontSize', 'font-style':'fontStyle',
	'font-variant':'fontVariant', 'font-weight':'fontWeight', 'letter-spacing':'letterSpacing', 
	'line-height':'lineHeight', 'list-style':'listStyle', 'list-style-image':'listStyleImage', 'list-style-position':'listStylePosition',
	'list-style-type':'listStyleType', 'margin-bottom':'marginBottom', 'margin-left':'marginLeft', 'margin-right':'marginRight',
	'margin-top':'marginTop', 'max-height':'maxHeight', 'max-width':'maxWidth', 'min-height':'minHeight',
	'min-width':'minWidth', 'padding-bottom':'paddingBottom', 'padding-left':'paddingLeft', 'padding-right':'paddingRight',
	'padding-top':'paddingTop', 'table-layout':'tableLayout', 'text-align':'textAlign', 'text-decoration':'textDecoration',
	'text-indent':'textIndent', 'text-transform':'textTransform', 'vertical-align':'verticalAlign', 'white-space':'whiteSpace',
	'word-spacing':'wordSpacing', 'z-index':'zIndex'
};

GSSI.Styles._types = { // 's'tring, 'u'rl, 'c'olor, 'l'ength, 'n'umber
	'background': 's', 'backgroundAttachment': 's', 'backgroundColor': 'c', 'backgroundImage': 'u', 'backgroundPosition': 's', 'backgroundRepeat': 's',
	'border': 's', 'borderBottom': 's', 'borderBottomColor': 'c', 'borderBottomStyle': 's', 'borderBottomWidth': 'l', 'borderCollapse': 's',
	'borderColor': 'c', 'borderLeft': 's', 'borderLeftColor': 'c', 'borderLeftStyle': 's', 'borderLeftWidth': 'l', 'borderRight': 's',
	'borderRightColor': 'c', 'borderRightStyle': 's', 'borderRightWidth': 'l', 'borderStyle': 's', 'borderTop': 's', 'borderTopColor': 'c',
	'borderTopStyle': 's', 'borderTopWidth': 'l', 'borderWidth': 'l', 'bottom': 'l', 'clear': 's', 'color': 'c', 'cursor': 's', 'direction': 's',
	'display': 's', 'emptyCells': 's', 'float': 's', 'font': 's', 'fontFamily': 's', 'fontSize': 'l', 'fontStyle': 's', 'fontVariant': 's',
	'fontWeight': 's', 'height': 'l', 'left': 'l', 'letterSpacing': 'l', 'lineHeight': 'l', 'listStyle': 's', 'listStyleImage': 'u',
	'listStylePosition': 's', 'listStyleType': 's', 'margin': 's', 'marginBottom': 's', 'marginLeft': 's', 'marginRight': 's', 'marginTop': 's',
	'maxHeight': 'l', 'maxWidth': 'l', 'minHeight': 'l', 'minWidth': 'l', 'opacity': 'n', 'overflow': 's', 'padding': 's', 'paddingBottom': 'l',
	'paddingLeft': 'l', 'paddingRight': 'l', 'paddingTop': 'l', 'position': 's', 'right': 'l', 'tableLayout': 's', 'textAlign': 's',
	'textDecoration': 's', 'textIndent': 'l', 'textTransform': 's', 'top': 'l', 'verticalAlign': 's', 'visibility': 's', 'whiteSpace': 's',
	'width': 'l', 'wordSpacing': 'l', 'zIndex': 'n'
};

GSSI.Styles._colornames = {
	aliceblue:'f0f8ff',antiquewhite:'faebd7',aqua:'00ffff',aquamarine:'7fffd4',azure:'f0ffff',beige:'f5f5dc',bisque:'ffe4c4',
	black:'000000',blanchedalmond:'ffebcd',blue:'0000ff',blueviolet:'8a2be2',brown:'a52a2a',burlywood:'deb887',cadetblue:'5f9ea0',
	chartreuse:'7fff00',chocolate:'d2691e',coral:'ff7f50',cornflowerblue:'6495ed',cornsilk:'fff8dc',crimson:'dc143c',cyan:'00ffff',
	darkblue:'00008b',darkcyan:'008b8b',darkgoldenrod:'b8860b',darkgray:'a9a9a9',darkgreen:'006400',darkkhaki:'bdb76b',
	darkmagenta:'8b008b',darkolivegreen:'556b2f',darkorange:'ff8c00',darkorchid:'9932cc',darkred:'8b0000',darksalmon:'e9967a',
	darkseagreen:'8fbc8f',darkslateblue:'483d8b',darkslategray:'2f4f4f',darkturquoise:'00ced1',darkviolet:'9400d3',
	deeppink:'ff1493',deepskyblue:'00bfff',dimgray:'696969',dodgerblue:'1e90ff',feldspar:'d19275',firebrick:'b22222',
	floralwhite:'fffaf0',forestgreen:'228b22',fuchsia:'ff00ff',gainsboro:'dcdcdc',ghostwhite:'f8f8ff',gold:'ffd700',
	goldenrod:'daa520',gray:'808080',green:'008000',greenyellow:'adff2f',honeydew:'f0fff0',hotpink:'ff69b4',indianred:'cd5c5c',
	indigo:'4b0082',ivory:'fffff0',khaki:'f0e68c',lavender:'e6e6fa',lavenderblush:'fff0f5',lawngreen:'7cfc00',lemonchiffon:'fffacd',
	lightblue:'add8e6',lightcoral:'f08080',lightcyan:'e0ffff',lightgoldenrodyellow:'fafad2',lightgrey:'d3d3d3',lightgreen:'90ee90',
	lightpink:'ffb6c1',lightsalmon:'ffa07a',lightseagreen:'20b2aa',lightskyblue:'87cefa',lightslateblue:'8470ff',
	lightslategray:'778899',lightsteelblue:'b0c4de',lightyellow:'ffffe0',lime:'00ff00',limegreen:'32cd32',linen:'faf0e6',
	magenta:'ff00ff',maroon:'800000',mediumaquamarine:'66cdaa',mediumblue:'0000cd',mediumorchid:'ba55d3',mediumpurple:'9370d8',
	mediumseagreen:'3cb371',mediumslateblue:'7b68ee',mediumspringgreen:'00fa9a',mediumturquoise:'48d1cc',mediumvioletred:'c71585',
	midnightblue:'191970',mintcream:'f5fffa',mistyrose:'ffe4e1',moccasin:'ffe4b5',navajowhite:'ffdead',navy:'000080',
	oldlace:'fdf5e6',olive:'808000',olivedrab:'6b8e23',orange:'ffa500',orangered:'ff4500',orchid:'da70d6',palegoldenrod:'eee8aa',
	palegreen:'98fb98',paleturquoise:'afeeee',palevioletred:'d87093',papayawhip:'ffefd5',peachpuff:'ffdab9',peru:'cd853f',
	pink:'ffc0cb',plum:'dda0dd',powderblue:'b0e0e6',purple:'800080',red:'ff0000',rosybrown:'bc8f8f',royalblue:'4169e1',
	saddlebrown:'8b4513',salmon:'fa8072',sandybrown:'f4a460',seagreen:'2e8b57',seashell:'fff5ee',sienna:'a0522d',silver:'c0c0c0',
	skyblue:'87ceeb',slateblue:'6a5acd',slategray:'708090',snow:'fffafa',springgreen:'00ff7f',steelblue:'4682b4',tan:'d2b48c',
	teal:'008080',thistle:'d8bfd8',tomato:'ff6347',turquoise:'40e0d0',violet:'ee82ee',violetred:'d02090',wheat:'f5deb3',
	white:'ffffff',whitesmoke:'f5f5f5',yellow:'ffff00',yellowgreen:'9acd32',
	transparent:'ffffff'
};

GSSI.Styles.Accessors = {
	opacity: {
		get: function (e) { return e.getOpacity(); },
		set: function (e, v) { return e.setOpacity(v); }
	}
};

GSSI.Styles.isSupported = GSSI.Styles.typeChar = function(s) {
	var t = GSSI.Styles._types[GSSI.Styles.normalizeName(s)];
	return t ? t : false;
};

GSSI.Styles.normalizeName = function(s) { return GSSI.Styles._css2js[s] || s; }

GSSI.Styles.normalizeColor = function(c) {
	c = c.toLowerCase();
	if (c.charAt(0) == '#') { return GSSI.Styles._normalizeHexColor(c); }
	if (c.substring(0,4) == 'rgb(') { return GSSI.Styles._normalizeRGBColor(c); };
	if ( GSSI.Styles._colornames[c] ) { return '#' + GSSI.Styles._colornames[c]; };
	return GSSI.Styles._normalizeHexColor(c);
};

GSSI.Styles._normalizedHexRE = /^[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]$/;
GSSI.Styles._normalizeHexColor = function(c) {
	if (c.charAt(0)=='#') { c = c.substring(1); };
	if (c.length == 3) {
		var r = c.charAt(0);
		var g = c.charAt(1);
		var b = c.charAt(2);
		c = r+r+g+g+b+b;
	}
	if (GSSI.Styles._normalizedHexRE.test(c)) {
		return ('#' + c);
	} else {
		return '#000000';
	}
};

GSSI.Styles._normalizeRGBColor = function(c) {
	var n = c.substring(4).split(',');
	var r = (n[0]===undefined)? '00' : '' + parseInt(n[0]).toString(16); if (r.length<2) { r ='0'+r; }; if (r.length>2) { r ='00'; };
	var g = (n[1]===undefined)? '00' : '' + parseInt(n[1]).toString(16); if (g.length<2) { g ='0'+g; }; if (g.length>2) { g ='00'; };
	var b = (n[2]===undefined)? '00' : '' + parseInt(n[2]).toString(16); if (b.length<2) { b ='0'+b; }; if (b.length>2) { b ='00'; };
	return '#' + r + g + b;
};

GSSI.Base.Extend( GSSI.ElementPrototype,  {
	_gssistyle: {},
				 
	getComputedStyle: function( s ) {
		var v = this.style[s];
		if ((v === null) || (v === undefined)) {
			if (document.defaultView && document.defaultView.getComputedStyle) {
				var css = document.defaultView.getComputedStyle(this, null);
				v = css ? css.getPropertyValue(s) : null;
			} else if (this.currentStyle) {
				v = this.currentStyle[s];
			}
		}
		if (window.opera && GSSI.DOM.isPositionStyle(s)) {
			if (this.computedStyle('position') == 'static') { value = 'auto'; };
		};		
		return v == 'auto' ? null : v;
	},
	
	getStyle: function( s ) {
		var a;
		s = GSSI.Styles._css2js[s] || s;
		if( a = GSSI.Styles.Accessors[s] ) {
			return a.get( this );
		} else {
			return this.style[s];
		}
	},
	
	setStyle: function( s, v ) {
		s = GSSI.Styles._css2js[s] || s;
		var a;
		if( a = GSSI.Styles.Accessors[s] ) {
			a.set( this, v );
		} else {
			this.style[s] = v;
		}
	},
	
	getOpacity: function() {
		var o = this._gssistyle.opacity || this.style.opacity;
		if ((o === null) || (o === undefined)) { return 1.0; }
		return o;
	},
	
	setOpacity: function( v ) {
		this.style.opacity = v;
		this.style.filter = 'alpha(opacity=' + (v*100) + ')';
		this.style.zoom = this.style.zoom || '1';
		this.style.MozOpacity = v;
		this._gssistyle.opacity = v;
	}
});

