JAME.Package('JAME.CSS');

JAME.CSS={
   setOpacity : function (obj,amount) {
      JAME.CSS.setOpacity=(window.attachEvent)
        ? function (obj,amount) {

            obj.style.zoom = 1;
            obj.style.filter = "alpha(opacity=" + amount*100 + ")";
			obj.style.opacity = amount;
          }
        : function (obj,amount) {

            obj.style.opacity = amount;
          }
       JAME.CSS.setOpacity(obj,amount);
   },
   _float : function() {
      var prop = (window.attachEvent) ? 'styleFloat' : 'cssFloat';
      JAME.CSS._float=function() { return prop; };
      return prop;
   },
   setStyle : function (elm,prop,val) {

      elm = (elm.constructor===Array) ? elm : [elm];
      for(var i=0;i<elm.length;i++) {
        if(prop=='opacity') { 
           JAME.CSS.setOpacity(elm[i],parseFloat(val));
           continue;
         }
         if(prop=='float')   prop = JAME.CSS._float();
         prop = JAME.Util.String.camelize(prop);
         unit=(prop=='zIndex'||prop=='zoom'||/olor/.test(prop)) ? '':'px';
		 if(prop=='zIndex') {
			elm[i].style[prop] = parseInt(val);
		 }
		 else {
         	try  { elm[i].style[prop] = (typeof val=='string') ? val : val+unit; }
			catch(e) {}
		}
      }
   },

   setStyles : function (elm,props) {
      for(var prop in props) {
        JAME.CSS.setStyle(elm,prop,props[prop]);
      }
   },

	_hasGetStyleProperParams :function(elm, style) {
		return true;
	},

	_compliantGetStyle : function(elm, style,option){

	    if(!JAME.CSS._hasGetStyleProperParams(elm,style)) return;

		style = JAME.Util.String.camelize(style);

        if(elm.style && elm.style[style]) {
			return elm.style[style];
		}

		style = JAME.Util.String.hyphenize(style);

		var oldPosition = undefined;
        var computed    = document.defaultView.getComputedStyle(elm, "");
		if(style==="margin-right"){
			oldPosition =computed.getPropertyValue("position");
			elm.style.position="absolute";
		}

		var val = computed.getPropertyValue(style);
		if(oldPosition)
			elm.style.position=oldPosition;
        if (style == 'height' || style == 'width') {
           val = JAME.CSS._getXorY(elm, style,option);
        }

        return val;
   },
	_ieGetStyle : function(elm, style,option){

	   	if(!JAME.CSS._hasGetStyleProperParams(elm,style)) return;

		style = JAME.Util.String.camelize(style);

         if(style=='float')   style = 'styleFloat';	
         if(elm.style && elm.style[style]) return elm.style[style];
         var val= elm.currentStyle[style];
         if (style == 'height' || style == 'width') {
               val = JAME.CSS._getXorY(elm, style,option);
         }
         return val;
   },

   getStyle : function (elm,style,option) {
        if (document.defaultView && document.defaultView.getComputedStyle) {
            JAME.CSS.getStyle = JAME.CSS._compliantGetStyle;
        }
        else if (elm.currentStyle) {
            JAME.CSS.getStyle = JAME.CSS._ieGetStyle;
		}
        return JAME.CSS.getStyle(elm,style,option);
    },
	_forceLayout:{
		display:'',
		visibility:'hidden',
		position:'absolute',
		zooom:1
	},
    _getXorY : function(elm,XY,option) {

        var mXY = XY=='height' ? 'Height' : 'Width';
        var TL  = XY=='height' ? ['Top','Bottom'] : ['Left','Right'];
		var val = 0;

		if(option) {
			option      = option.replace(/ +/," ");
			var options = option.split(/ /);
			options = options.constructor===Array ? options :[option];

			JAME.each(options,function(op) {
				var pair = op.match(/-/) ? '-' : '+';
				if(op.match(/border|padding/) && pair=='+') return;
				if(op.match(/margin/) && pair=='-') return;
				op = op.replace(/-|\+/,"");
				var suf = op==="border" ? 'Width':'';
				JAME.each(TL,function(pos){
					if(pair==='+')
						val+= parseInt(JAME.CSS.getStyle(elm,op+pos+suf));
					if(pair==='-')
						val-= parseInt(JAME.CSS.getStyle(elm,op+pos+suf));
				});
			});

		}

		var display =JAME.CSS.getStyle(elm,'display');
        if(display!='none') {
            return val + elm["offset"+mXY];
		}
        var oldStyle = {
            display    : display,
            visibility : JAME.CSS.getStyle(elm,'visibility'),
            position   : JAME.CSS.getStyle(elm,'position')
        };
        JAME.CSS.setStyles(elm,JAME.CSS._forceLayout);
        var offset = elm["offset"+mXY];
        JAME.CSS.setStyles(elm,oldStyle);
        return val+offset;
    },
    Export : function() {
        JAME.Exporter(this);
    }
};

