var	defaultBGM = 0 ;
var	bgmControlOptions = '' ;
var	noBgmControlText = '' ;
var	bgmControlOptSelect = '' ;
var	defaultBgmFormName = 'bgmSelectForm' ;
var	paddingChar = ' ' ;
var	widePaddingChar = '　' ;
var	bgmTitleScrollInitWait = 3000 ;

function	bgmChange( formObj )
{
	if ( !formObj ) formObj = document.forms[defaultBgmFormName] ;
	var	bgmSelected = formObj.bgmSelected ;
	var	bgmId = bgmSelected.selectedIndex ;
	
	if ( !bgmId && formObj == document.forms[defaultBgmFormName] ) bgmId = defaultBGM ;
	for ( var ci=0; ci < document.forms.length; ci++ ) {
		if ( document.forms[ci] == formObj ) continue ;
		if ( document.forms[ci].className != 'bgmSelectForm' ) continue ;
		if ( !document.forms[ci].bgmSelected.options[0].selected ) {
			document.forms[ci].bgmSelected.options[0].selected = true ;
		}
	}
	var	bgmControl = document.getElementById('bgmControlWindow') ;
	var	bgmUrl = bgmSelected.options[bgmId].value ;
	if ( bgmId && bgmId < bgmSelected.options.length && bgmUrl != "" ) {
		if ( !bgmSelected.options[bgmId].selected ) {
			bgmSelected.options[bgmId].selected = true ;
		}
		var	optSelect = bgmSelected.options[bgmId].getAttribute('optval') ;
		if ( !optSelect ) optSelect = formObj.getAttribute('optval') ;
		var	bgmOpt = ( optSelect && optSelect != "" && bgmControlOptSelect[optSelect] ) ? bgmControlOptSelect[optSelect] : bgmControlOptions ;
		var	optTitle = bgmSelected.options[bgmId].getAttribute('showtitle') ;
		if ( !optTitle ) optTitle = formObj.getAttribute('showtitle') ;
		
		var		checkopt = false ;
		
		if ( !optTitle || optTitle == '0' ) {
			var	bgmTitle = '' ;
		}
		else if ( optTitle == '1' ) {
			var	bgmTitle = '<div class="bgmTitle">' + bgmSelected.options[bgmId].text + '</div>' ;
		}
		else {
			var	bgmTitleId = 'bgmTitle' + (new Date).getTime() ;
			var	bgmTitle = '<form style="margin:0px;padding:0px;"><input type="text" readonly id="' + bgmTitleId + '" class="bgmTitle" value="' + bgmSelected.options[bgmId].text + '" /></form>' ;
			checkopt = true ;
		}
//		bgmControl.innerHTML = '<div class="bgmControl">' + bgmTitle + '<embed ' + bgmOpt + ' src="' + bgmUrl + '" /></div>' ;
		bgmControl.innerHTML = bgmTitle ;
		
		if ( checkopt ) {
			var	opts = optTitle.split(';') ;
			for ( var ci=0; ci < opts.length; ci++ ) {
				var	opt = opts[ci].replace( / +/g, '' ) ;
				var	pos = opt.indexOf(':') ;
				if ( pos < 0 ) {
					var	optName = opt ;
					var	parts = [ null ] ;
				}
				else {
					var	optName = opt.substring( 0, pos ) ;
					var	parts = opt.substring( pos+1 ).split(',') ;
				}
				for ( var cj=parts.length; cj < 10; cj++ ) parts.push( null ) ;
				
				switch ( optName ) {
					case	'scroll'	:
						setTextScroll( bgmTitleId, parts[0], parts[1], parts[2] ) ;
						break ;
					case	'blink'		:
						setTextBlink( bgmTitleId, parts[0], parts[1], parts[2], parts[3], parts[4] ) ;
						break ;
					case	'color'		:
						setTextColor( bgmTitleId, parts[0], parts[1], parts[2] ) ;
						break ;
					default	:
						break ;
				}
			}
		}
		var	div = document.createElement('div') ;
		div.className = 'bgmControl' ;
		div.innerHTML = '<embed ' + bgmOpt + ' src="' + bgmUrl + '" />' ;
		bgmControl.appendChild( div ) ;
	}
	else {
		bgmControl.innerHTML = '<div class="noBgmControl">' + noBgmControlText + '</div>' ;
	}
	
	function	setTextScroll( id, width, step, wait )
	{
		var	tgtWindow = document.getElementById( id ) ;
		if ( !tgtWindow ) return ;
		
		tgtWindow.style.textAlign = "left" ;
		tgtWindow.style.whiteSpace = "nowrap" ;
		
		step = eval(step) ;
		if ( !step || step == 0 ) step = 1 ;
		wait = eval(wait) ;
		if ( !wait || wait == 0 ) wait = 500 ;
		
		var	text = ( tgtWindow.tagName == 'INPUT' ) ? tgtWindow.value : tgtWindow.innerHTML ;
		
		var	space = ( text.charCodeAt(0) < 256 ) ? paddingChar : widePaddingChar ;
		width = eval(width) ;
		if ( !width || width == 0 ) {
			width = text.length ;
		}
		else {
			if ( space == paddingChar ) {
//				tgtWindow.style.fontFamily = "monospace" ;
			}
			else {
				width = Math.floor( width / 2 )  ;
			}
		}
		for ( var ci=text.length; ci < width; ci++ ) text += space ;
		
		var	px = 0 ;
		var	firstCall = true ;
		
		var	scrollStep = function ()
		{
			var	tgtWindow = document.getElementById( id ) ;
			if ( !tgtWindow ) return ;
			
			var	len1 = ( px+width < text.length ) ? width : text.length-px ;
			var	len2 = ( px+width < text.length ) ? 0 : px+width-text.length ;
			var	prtStr = text.substr( px, len1 ) + text.substr( 0, len2 ) ;
			if ( tgtWindow.tagName == 'INPUT' ) {
				tgtWindow.value = prtStr ;
			}
			else {
				prtStr = prtStr.replace( / /g, '&nbsp;' ) ;
				tgtWindow.innerHTML = prtStr ;
			}
			px += step ;
			if ( 0 < step ) {
				if ( text.length <= px ) px = 0 ;
			}
			else {
				if ( px < 0 ) px = text.length - 1 ;
			}
			if ( firstCall && bgmTitleScrollInitWait != 0 ) {
				firstCall = false ;
				setTimeout( scrollStep, bgmTitleScrollInitWait ) ;
			}
			else {
				setTimeout( scrollStep, wait ) ;
			}
	
		}	//	end of scrollStep()
		
		scrollStep() ;
	
	}	//	end of setTextScroll()
	
	
	function	setTextBlink( id, wait1, wait2, fgcolor, bgcolor, bdcolor )
	{
		var	tgtWindow = document.getElementById( id ) ;
		if ( !tgtWindow ) return ;
		
		wait1 = eval(wait1) ;
		if ( !wait1 || wait1 == 0 ) wait1 = 500 ;
		wait2 = eval(wait2) ;
		if ( !wait2 || wait2 == 0 ) wait2 = wait1 ;
		
		setTextColor( id, fgcolor, bgcolor, bdcolor ) ;
		
		if ( !fgcolor ) fgcolor = ( tgtWindow.style.color ) ? tgtWindow.style.color : document.fgColor ;
		if ( !bgcolor ) bgcolor = ( tgtWindow.style.backgroundColor ) ? tgtWindow.style.backgroundColor : document.bgColor ;
		
		var	hide = 0 ;
		
		var	textBlink = function()
		{
			var	tgtWindow = document.getElementById( id ) ;
			if ( !tgtWindow ) return ;
			
			tgtWindow.style.color = ( hide ) ? bgcolor : fgcolor ;
			
			setTimeout( textBlink, ( ( hide ) ? wait2 : wait1 ) ) ;
			
			hide = !hide ;
			
		}	//	end of textBlink()
		
		textBlink() ;
		
	}	//	end of setTextBlink()
	
	
	function	setTextColor( id, fgcolor, bgcolor, bdcolor )
	{
		var	tgtWindow = document.getElementById( id ) ;
		if ( !tgtWindow ) return ;
		
		if ( fgcolor ) tgtWindow.style.color = fgcolor ;
		if ( bgcolor ) tgtWindow.style.backgroundColor = bgcolor ;
		if ( bdcolor ) tgtWindow.style.borderColor = bdcolor ;
		
	}	//	end of setTextColor()
	

}	//	end of bgmChange()
