/*
 * IE Select width Fix
 * Taken from http://www.hedgerwow.com/360/dhtml/ui_select_with_fixed_width/ie-select-width-fix.js
 * This function uses YUI to fix the IE select boxes width problem
 */
 
 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;
 }

