/**
 Class Name : 	ShaFlashTag
 Builder : 		An.sehan (Sha/birdhoney/Tinja/plandas) :: plandas@naver.com / ansehan@dstrict.com
 Build Day : 		2007.02.22
 Last Modify : 	2007.06.05
 Version : 		1.15


 @marks |
	- ÇÃ·¡½Ã¹öÁ¯¾÷¿¡ µû¸¥ Æ÷ÇÔ¼Ó¼ºÀÌ ¸¹¾ÆÁö´Âµ¥ ´ëÇÑ »ç¿ë»óÀÇ ¾î·Á¿ò°ú ¶Ç Ãß°¡·Î ¹ß»ýÇÏ´Â ¿©·¯ ¼Ó¼ºµéÀ» È¿À²ÀûÀ¸·Î °ü¸®ÇÏ°í
	Á»´õ Á÷°üÀûÀ¸·Î ÅÂ±×»ý¼ºÀ» µµ¸ðÇÏ±â À§ÇØ¼­ Á¦ÀÛ
	------------------------------------------------------------------------------------------------------------------

	*°ø°³¸Þ¼Òµå
	- ShaFlashTag //»ý¼ºÀÚ
	- addParam // ¼Ó¼ºÃß°¡¹× º¯°æ
	- setFlashVars // ÇÃ·¡½Ãº¯¼ö ¼ÂÆÃÀü¿ë
	- createTag // ÆäÀÌÁöÇÃ·¡½ÃÄÚµå ÀÓº£µùÃ³¸®
	- debugTag // ÄÚµåµð¹ö±ë

	- getInstanceFlashObject // ÇÃ·¡½Ã¿ÀºêÁ§Æ® ÀÎ½ºÅÏ½º±¸ÇÏ±â(htmlÆäÀÌÁö³»¿¡¼­ ¾×¼¼½º°¡´ÉÇÑ)
	- externalInterfaceAddCallback // ÇÃ·¡½ÃÇÔ¼öÈ£ÃâÀ» À§ÇÑ Àü¿ë
	- toString

	- 2007.06.05 Ãß°¡»çÇ×
	- addSpecialTag // <object>¿Í </object>»çÀÌ¿¡ »ç¿ëÀÚ Á¤ÀÇÅÂ±× Æ÷ÇÔ½ÃÅ°±â(Æ¯¼öÇÑ°æ¿ì¿¡ »ç¿ëµÉ¼ö ÀÖ½¿)


	*°ø°³ static ¸Þ¼Òµå
	- getInstanceFlashObjectById // ÆÄ¶ó¹ÌÅÍ ÀÎÀÚ id·Î flashObject ÀÎ½ºÅÏ½º ±¸ÇÏ±â
	- availableBrowser // ºê¶ó¿ìÁ® Áö¿ø»óÈ²À» ºÒ¸°°ªÀ¸·Î ÀúÀåÇÏ°í ÀÖ´Â °´Ã¼¹ÝÈ¯




 @usage |
	
	ex1)
	<script src='ShaFlashTag.js'></script>
	<script>
		// flash ÀÓº£µùÀ» À§ÇÑ ÀÎ½ºÅÏ½º »ý¼º (¹Ýµå½Ã ÆÄ¸®¹ÌÅÍ ¼ø¼­´ë·Î 'ÆÄÀÏ°æ·Î','Æø','³ÐÀÌ' °ªÀ» Àü´ÞÇØÁÖ¾î¾ßÇÔ)
		var theFlash = new ShaFlashTag('test.swf',200,200);

		// ÆäÀÌÁö¿¡ ÀÓº£µù ½ÃÅ°±â
		theFlash.createTag();
	</script>

	ex2)
	<script src='ShaFlashTag.js'></script>
	<script>
		var theFlash = new ShaFlashTag('test.swf',200,200);

		// name ¼Ó¼ºÀ» 'hehe'·Î º¯°æ
		theFlash.addParam('name','hehe');

		// ¹öÁ¯ÄÚµå¸¦ µðÆúÆ®(9.0)¿¡¼­ 8.0À¸·Îº¯°æ
		theFlash.addParam('version','8,0,0,0');

		// swLiveConnect¸¦ »ç¿ëÇÏ±â À§ÇØ ±âº»Àº ¾ø´ø ¼Ó¼ºÀÎ swLiveConnect¸¦ Ãß°¡ÇÏ°í °ªÀ» true·Î ¼ÂÆÃ (´Ü, ¶§¿¡µû¶ó allowScriptAcess´Â always·Î º°µµ·Î ¼ÂÆÃÀÌ ÇÊ¿äÇÔ)
		theFlash.addParam('swLiveConnect','true');

		// ÇÃ·¡½Ã¿¡°Ô sendvalueº¯¼ö·Î test¶ó´Â °ªÀ» Àü´Þ
		theFlash.setFlashVars('sendvalue=test');

		// ÆäÀÌÁö¿¡ ÀÓº£µù ½ÃÅ°±â
		theFlash.createTag();

		// ÄÚµåµð¹ö±ë
		theFlash.debugTag();
	</script>

*/
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////



/**
* @[Class Constructor]
*
*parameters |
	- src:String // ÆÄÀÏ°æ·Î(.swf)Æ÷ÇÔµÈ »ó´ë¹× Àý´ë°æ·Î
	- width:String or Number // °¡·Î»çÀÌÁî ('100%'°°Àº°æ¿ì ¹®ÀÚ¿­·Î)
	- height:String or Number // ¼¼·Î»çÀÌÁî

*marks |
	- Ãß°¡·Î ÇÊ¿äÇÑ ¼Ó¼ºµéÀº addParamÀ» ÀÌ¿ëÇØ¼­Ãß°¡·Î »ç¿ëÇÏµµ·ÏÇÔ
*/
var ShaFlashTag = function(src, width, height)
{
	var addProperty = function(obj1,obj2, none)
	{
		var chknone = function(_p){try{for(var i in none) if(none[i]==_p) return false;}catch(e){return true;}return true;};
		for(var p in obj1){if(chknone(p)) obj2[p] = obj1[p];};
		return obj2;
	};

	var args = arguments; // ÇâÈÄ µðÆúÆ®·Î ¼ÂÆÃµÇ¾î¾ß ÇÒ ¼Ó¼ºÀ» °¨¾ÈÇØ¼­ arguments·Î Ã³¸®
	var attrObject = {}, params = {};
	var attrEmbed= {width:args[1], height:args[2]};

	attrObject.classid = "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000";
	attrObject.version = "9,0,0,0";
	attrObject.codebase = "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version="+attrObject.version;


	var _src = src.split("/");
	_src = _src[_src.length-1];
	attrEmbed.id = attrEmbed.name = _src.indexOf('.swf')!=-1? (_src.split('.swf'))[0]: "";
	attrEmbed.align = "middle";
	this.attrObject = addProperty(attrEmbed,attrObject);

	attrEmbed.src = args[0];
	attrEmbed.bgcolor = args[3]? args[3]: "#ffffff";
	attrEmbed.quality = "high";
	attrEmbed.allowScriptAccess = "sameDomain";
	attrEmbed.allowFullScreen = "false";
	attrEmbed.base = ""; // ±âº»º£ÀÌ½º¸¦ »ç¿ëÄ¡¾ÊÀ½

	params.movie = attrEmbed.src;
	this.params = addProperty(attrEmbed,params,['id','name','align','src','width','height']);

	attrEmbed.type="application/x-shockwave-flash";
	attrEmbed.pluginspage="http://www.macromedia.com/go/getflashplayer";
	this.attrEmbed = attrEmbed;

	this.specialTag = '';
};var member = ShaFlashTag.prototype;


/**
* @Get flashObj (static public method) :: for ExternalInterface.addCallback
* 2007.05.18 addtion
* parameters |
	- idname:String // id name
* usage |
	ShaFlashTag.getInstanceFlashObject('myflash').sendToFlashFunction('test');
*/
ShaFlashTag.getInstanceFlashObjectById = function(idname)
{
	return navigator.appName.indexOf("Microsoft") != -1?
	window[idname]: document[idname];
}

ShaFlashTag.availableBrowser = function()
{
	var availbleObj = {
	isIE: ((navigator.appVersion.indexOf("MSIE") != -1) ? true : false),
	isWin: ((navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false),
	isOpera: ( (navigator.userAgent.indexOf("Opera") != -1) ? true : false)};
	return availbleObj;
}


/**
* @[¼Ó¼ºÀ» Ãß°¡ÇÏ°Å³ª ±âÁ¸¼Ó¼ºÀ» º¯°æÇÏ°íÀÚ ÇÒ¶§ »ç¿ë]
*
*parameters |
	- attribute:String // ¼Ó¼ºÀÌ¸§
	- value:String // ¼Ó¼º°ª

* param lists
	- name or id
	- src
	- width
	- height
	- bgcolor
	- quality
	- wmode
	- align
	- version // ¹Ýµå½Ã ÀüÃ¼ ¹öÁ¯ÀÌ¸§À» ÀÔ·ÂÇØ¾ßÇÔ (ex:8.0.0 / 9.0.0...)
	- allowScriptAccess
	- swLiveConnect
	- flashVars // flash¿¡ º¯¼ö¸¦ ´øÁ®ÁÖ´Â ¼Ó¼º
	- allowFullScreen // 9.0¿¡ Ãß°¡µÈ ¼Ó¼º
	- base // ÇÃ·¡½ÃÀÇ µðÆúÆ® µð·ºÅä¸® °æ·Î¸¦ º¯°æÇÏ¿© Á÷Á¢ Àâ¾ÆÁÙ¶§ »ç¿ë

*marks |
	- ¹Ýµå½Ã createTagÀÌÀü¿¡ »ç¿ëÇÏ¿©¾ßÇÔ.
*/
member.addParam = function(attribute, value)
{
	if(attribute=='id' || attribute=='name')
		this.attrObject['name'] = this.attrObject['id'] = this.attrEmbed['name'] = this.attrEmbed['id'] = value;

	else if(attribute=='width' || attribute=='height' || attribute=='align')
		 this.attrObject[attribute] = this.attrEmbed[attribute] = value;

	else if(attribute=='bgcolor' || attribute=='quality' || attribute=='allowScriptAccess' || 
		attribute=='allowFullScreen' || attribute=='flashVars' || attribute=='wmode' || attribute=='base')
		this.params[attribute] = this.attrEmbed[attribute] = value;

	else if(attribute=='src') this.params['movie'] = this.attrEmbed['src'] = value;
	else if(attribute=='version') this.attrObject[attribute] = value;
	else this.attrEmbed[attribute] = value;
}





/**
*@Flash¿¡ º¯¼öÃß°¡¸¦ À§ÇÑ Àü¿ë¸Þ¼­µå
*marks |
	- addParamÀ» ÀÌ¿ëÇØµµ µÊ.
*parameters |
	- value:String // ¼Ó¼º°ª
*/
member.setFlashVars = function(value)
{
	this.addParam('flashVars',value);
}




/**
*@ÆäÀÌÁö¿¡ ÇÃ·¡½ÃÄÚµå ÀÓº£µù Ã³¸®
*marks |
	- ¸¸¾à Ãß°¡ÇÒ¼Ó¼ºÀÌ ÀÖ°Å³ª º¯°æÇÒ °ªÀÌ Á¸ÀçÇÑ´Ù¸é ¹Ýµå½Ã º» ¸Þ¼Òµå¸¦ È£ÃâÇÏ±âÀü¿¡ addParam¸Þ¼Òµå¸¦ ¸ÕÀú»ç¿ëÇÑ ÈÄ
	º»¸Þ¼Òµé ½ÇÇàÇØ¾ßÇÑ´Ù.
*/
member.createTag = function()
{
	var availobj = ShaFlashTag.availableBrowser();

	var swliveconTag = "", tag;
	if(this.attrEmbed.swLiveConnect)
	{
		swliveconTag += '<script language="JavaScript">\n';
		swliveconTag += 'function '+this.attrEmbed.id+'_DoFSCommand(command, args)\n';
		swliveconTag += '{\n';
		swliveconTag += '	if (command=="javascript") eval(args);\n';
		swliveconTag += '};\n';
		swliveconTag += '</script>\n';

		swliveconTag += '<script language="VBScript">\n';
		swliveconTag += 'On Error Resume Next\n';
		swliveconTag += 'Sub '+this.attrEmbed.id+'_FSCommand(ByVal command, ByVal args)\n';
		swliveconTag += '	Call '+this.attrEmbed.id+'_DoFSCommand(command, args)\n';
		swliveconTag += 'End Sub\n';
		swliveconTag += '</script>\n';
		document.write(swliveconTag);
	}

	if (availobj.isIE && availobj.isWin && !availobj.isOpera)
	{
		tag = "<object "; for(var p in this.attrObject){if(p!='version') tag += (p+"='"+this.attrObject[p]+"' ");}; tag += ">\n";
		for(var p in this.params){tag += ("<param name='"+p+"' value='"+this.params[p]+"' />\n");};
		tag += "<embed "; for(var p in this.attrEmbed){tag += (p+"='"+this.attrEmbed[p]+"' ");}; tag += "</embed>\n\n"+this.specialTag+"\n</object>";
	}
	else
	{
		tag = "<embed "; for(var p in this.attrEmbed){tag += (p+"='"+this.attrEmbed[p]+"' ");}; tag += "</embed>";
	}

	document.write(tag);
	this.tag = swliveconTag+tag;
}


/**
* @ Debug current flash embeded tag
*/
member.debugTag = function()
{
	try{window.alert(this.tag);}catch(e){};
}

/**
* @ Get flashobject instances(accessble)
*/
member.getInstanceFlashObject = function()
{
	return this.attrObject? ShaFlashTag.getInstanceFlashObjectById(this.attrObject['id']): null;
}

/*
* @ ExternalInterface.addCallback:: for swf
* flash player version : 9.0 late
*
* parameters |
	- functionName:String // the defined functionName in swf
	- value // value to send..
*/
member.externalInterfaceAddCallback = function(functionName, value)
{
	var flashobj = this.getInstanceFlashObject();
	flashobj[functionName](value);
}

/**
* @ To string
*/
member.toString = function()
{
	var availobj = ShaFlashTag.availableBrowser();
	var addstr = "";
	for(var i in availobj) addstr += i+":"+availobj[i]+"\n";
	return this.tag + "\n\n"+addstr;
}

/**
* @ Add Special tag(from <object> to </object>)
*/
member.addSpecialTag = function(tag)
{
	this.specialTag += tag;
}
