var X_Script_VBS_ENABLED = X_UA[ 'Windows' ] && !X_UA[ 'WinCE' ] && !X_UA[ 'WinPhone' ] && X_UA[ 'IE' ] < 11,
	// 構文のサポート instanceof, in(for-in ではない), try-catch. JS version 1.5以上
	X_Script_gte15       = !( X_UA[ 'IE' ] < 5.5 ) && ( new Function( 'f,a', 'try{return f.apply({},a)}catch(e){}' ) );

/**
 * js バージョン間の差異を可能な限り吸収する
 * @namespace X.Script
 * @alias X.Script
 * @type {object}
 */
X[ 'Script' ] = {
	'tryCatch' : X_Script_try
	
	// git, strict mode, asm.js, 
};

if( X_Script_VBS_ENABLED ){
	
/**
 * Visual Basic Script が使えるか?
 * @alias X.Script.VBS
 * @type {boolean}
 */
	X[ 'Script' ][ 'VBS' ] = true;
	
	X_Script_gte15 || document.write( '<script type=text/vbscript>' +
		[
			'Function vbs_testAXO(v)',
				'On Error Resume Next',
				'Set ax = CreateObject(v)',
				'If Err.Number Then',
					'ax = 1',
				'End If',
				'Err.Clear',
				'vbs_testAXO = ax',
			'End Function' /*,
			
			'Function vbs_try(jsFunc,a1,a2,a3,a4)',
				'On Error Resume Next',
				'Set rs = jsFunc(a1,a2,a3,a4)',
				'If Err.Number != 0 Then',
					'rs = 0',
				'End If',
				'Err.Clear',
				'vbs_try = rs',
			'End Function'
			
			// elementID .SRC = v
			'Function vbs_setValue(id,k,v)',
				'On Error Resume Next',
				'Set rs = 1',
				'Document.all[id][k]=v',
				'If Err.Number != 0 Then',
					'rs = 0',
				'End If',
				'Err.Clear',
				'vbs_try = rs',
			'End Function'

			* 
			* 
			* */
		].join( '\n' ) + '</script>' );

	// TODO Object のメンバを辿る vba
	// byte Array を扱う vba
};

function X_Script_try( func, args ){
	if( !X_Script_gte15 ){
		//return func.apply( {}, args );
		return;
	};
	return X_Script_gte15( func, args || [] );
};

function X_Script_createActiveXObjectSafty( name ){
	if( !X_Script_gte15 ){
		if( X_Script_VBS_ENABLED ){
			// console.log( window[ 'vbs_testAXO' ]( name ) + ' ' + name );
			return !window[ 'vbs_testAXO' ]( name ) && X_Script_createActiveXObject( name );
		};
		return X_Script_createActiveXObject( name );
	};
	
	return X_Script_try( X_Script_createActiveXObject, [ name ] );
};

// TODO GeckoActiveX
function X_Script_createActiveXObject( name ){
	return new ActiveXObject( name );
};

/*
 * http://archiva.jp/web/html-css/ie6_background_flickr.html
 * hover時の背景画像ちらつきに対処する
 * この問題はIE6固有の問題であり、他のモダンブラウザやIE5等では発現しない。
 */
if( X_UA[ 'IE6' ] && // error @ NN7.2
	!X_Script_try( function(){ document.execCommand( 'BackgroundImageCache', false, true ); return 1; } ) ){
		/**
		 * ie6 のみで実行する document.execCommand( 'BackgroundImageCache', false, true ) の失敗。
		 * bonus: hotfix for IE6 SP1 (bug KB823727)
		 * multipleIEs IE6 standalone 版では不可, IE5.5 は可,,,
		 * @alias X.UA.ieExeComError */
		X_UA[ 'ieExeComError' ] = true;
};


