YAHOO.namespace( 'YAHOO.Hack' ).FixIESelectWidth = new function()
 {
 var oSelf = this; 
 var YUE = YAHOO.util.Event;
 var YUD = YAHOO.util.Dom;
 var oTimer = {};
 var oAnim = {};
 var nTimerId = 0 ;
 var dLastFocalItem;
 var ie7 = !!(document.uniqueID && typeof(XMLHttpRequest)!='undefined' )
 function init(el)
 {
 
 
 el = el || this;
 
 
 
 if( el.tagName.toLowerCase() != 'select')
 {
 throw Error('element [' + el.id + '] is not <select>');
 return;
 }; 
 
 if(!YUD.hasClass( el.parentNode, 'select-box'))
 {
 throw Error('className select-box is not included for element [' + el.id + ']');
 return;
 }; 
 
 var oRs = el.runtimeStyle;
 var oPRs = el.parentNode.runtimeStyle;
 
 
 oPRs.fonSize = 0;
 
 
 var sDisplay = el.parentNode.currentStyle.display.toLowerCase() ;
 if( sDisplay=='' || sDisplay=='inline' || sDisplay=='inline-block' )
 {
 oPRs.display = 'inline-block';
 oPRs.width = el.offsetWidth + 'px';
 oPRs.height =el.offsetHeight + 'px';
 oPRs.position = 'relative';
 oRs.position = 'absolute';
 oRs.top = 0;
 oRs.left = 0;
 };
 
 
 
 el._timerId = ( nTimerId+=1 );
 
 el.selectedIndex = Math.max( 0 , el.selectedIndex );
 
 oTimer[ '_' + el._timerId ] = setTimeout('void(0)',0);
 oAnim [ 'A' + el._timerId ] = setTimeout('void(0)',0);
 
 YUE.on( el, 'mouseover' , onMouseOver);
 YUE.on( document, 'mousedown' ,onMouseDown , el, true);
 YUE.on( el, 'change' ,collapseSelect , el, true);
 }
 
 
 function collapseSelect(e)
 {
 status++;
 this.runtimeStyle.width = ''; 
 }
 
 function onMouseOver(e )
 {
 
 var el = this; 
 if(dLastFocalItem && dLastFocalItem !=el)
 {
 onMouseDown.call( dLastFocalItem , e );
 };
 
 var sTimerId ='_' + el._timerId ;
 var sAniId = 'A' + el._timerId ;
 clearTimeout( oTimer[ sTimerId ] );
 
 
 
 var onTween = function()
 {
 clearTimeout( oAnim [ sAniId ] );
 if( Math.abs( nEndWidth - nStartWidth ) > 3 )
 {
 nStartWidth += (nEndWidth - nStartWidth ) /3;
 el.runtimeStyle.width = nStartWidth + 'px';
 oAnim [ sAniId ] = setTimeout( onTween ,0 );
 }
 else
 {
 el.runtimeStyle.width = 'auto';
 el.selectedIndex = Math.max( 0 , el.selectedIndex );
 }
 }
 
 var nStartWidth = el.offsetWidth ;
 el.runtimeStyle.width = 'auto';
 var nEndWidth = el.offsetWidth;
 
 
 clearTimeout( oAnim [ sAniId ] );
 onTween();
 
 el.focus(); 
 dLastFocalItem = el;
 }
 
 function onMouseDown(e , el )
 {
 el = ( e.srcElement || e.target );
 
 
 
 if( el == this && e.type!='mouseover' )
 {
 status++;
 YUE.stopEvent(e);
 return false;
 };
 
 
 el = this;
 
 clearTimeout( oAnim [ 'A' + el._timerId ] );
 
 
 var sTimerId ='_' + el._timerId ;
 var doItLater = function()
 {
 el.runtimeStyle.width = ''; 
 };
 if( e.type=='mouseover')
 { doItLater();}
 else{
 oTimer[ sTimerId ] = setTimeout(doItLater,100);
 }
 }
 
 
 
 function constructor(sId)
 {
 sId = [ sId , ''].join('');
 //Only fix for IE55 ~ IE7
 
 if(document.uniqueID && window.createPopup )
 { 
 YUE.onAvailable(sId ,init );
 return true;
 
 }else{return false};
 };
 
 return constructor;
 }
 
