var setGradient = (function(){
   
  //private variables;
  var p_dCanvas = document.createElement('canvas');
  var p_useCanvas =  !!( typeof(p_dCanvas.getContext) == 'function');
  var p_dCtx = p_useCanvas?p_dCanvas.getContext('2d'):null;
  var p_isIE = /*@cc_on!@*/false;
   
  //test if toDataURL() is supported by Canvas since Safari may not support it
  
  try{   p_dCtx.canvas.toDataURL() }catch(err){
         p_useCanvas = false ;
  };
         
  if(p_useCanvas){
     
     return function (dEl , sColor1 , sColor2 , bRepeatY , nH){
      
      if(typeof(dEl) == 'string') dEl =  document.getElementById(dEl);
      if(!dEl) return false;
      var nW = dEl.offsetWidth;
      if (!nH) nH = dEl.offsetHeight;
      p_dCanvas.width = bRepeatY ? nW : 8;
      p_dCanvas.height = bRepeatY ? 8 : nH;

      var dGradient;
      var sRepeat;
      // Create gradients
      if(bRepeatY){
        dGradient = p_dCtx.createLinearGradient(0,0,nW,0);
        sRepeat = 'repeat-y';
      }else{
        dGradient = p_dCtx.createLinearGradient(0,0,0,nH);
        sRepeat = 'repeat-x';
      }   
      
      dGradient.addColorStop(0,sColor1);
      dGradient.addColorStop(1,sColor2);        
      
      p_dCtx.fillStyle = dGradient ; 
      p_dCtx.fillRect(0,0,p_dCanvas.width, p_dCanvas.height);
      var sDataUrl = p_dCtx.canvas.toDataURL('image/png');
      
      with(dEl.style){
        backgroundRepeat = sRepeat;
        backgroundImage = 'url(' + sDataUrl + ')';
        backgroundColor = sColor2;    
      };
     }
  }else if(p_isIE){
    
    p_dCanvas = p_useCanvas = p_dCtx =  null;   
    return function (dEl , sColor1 , sColor2 , bRepeatY){
      if(typeof(dEl) == 'string') dEl =  document.getElementById(dEl);
      if(!dEl) return false;
      dEl.style.zoom = 1;
      var sF = dEl.currentStyle.filter;
      dEl.style.filter += ' ' + ['progid:DXImageTransform.Microsoft.gradient( GradientType=',  +(!!bRepeatY ),',enabled=true,startColorstr=',sColor1,', endColorstr=',sColor2,')'].join('');
        
    };
  
  }else{
    
    p_dCanvas = p_useCanvas = p_dCtx =  null;
    return function(dEl , sColor1 , sColor2  ){
      
      if(typeof(dEl) == 'string') dEl =  document.getElementById(dEl);
      if(!dEl) return false;
      with(dEl.style){
         backgroundColor = sColor2; 
      };
      //alert('your browser does not support gradient effet');
    }
  }
})();

