/*!______________________________________________________________________*\
||                                                                      ||
|| __   __					                              ||			
|| \ \ / /__  _ __   ___ __ _ 		- Fırat Ağdaş                 ||
||  \ V / _ \| '_ \ / __/ _` |		- Yonca New Media             ||
||   | | (_) | | | | (_| (_| |		- firat@yonca-ad.com          ||
||   |_|\___/|_| |_|\___\__,_|                                          ||
||                                                                      ||
||______________________________________________________________________||
\*                                                                      */

// #######################################################################
// Flash - Copyright 2005-2007 Adobe Systems Incorporated.  
//       - All rights reserved. 
// 	  - Düzenleme: Fırat
// #######################################################################


// #######################################################################
// Versiyon Kontrol Fonksiyonları

/**
* Yonca Flash Sınıfı
*
* AC_RunActiveContent.js ve AC_ActiveX.js programlamalarının düzenlenmiş ve bazı eksikleri
* giderilmiş halidir. Bu noktada fonksiyonların adları da haliyle değişik. Yonca Sistemine uygun
* halde getirildi ve YUI 'ye entegre edildi.
*
* @class	Yonca_Flash
* @package	Yonca New Media
* @author	Adobe
* @editor	Fırat Ağdaş
* @version	1.0.0 Beta
*/
function Yonca_Flash()
{
	this.targetelement = '';
	this.iewin = ((UA.ie > 0) && UA.win && !UA.opera);
	this.returnvalue = false;
	this.version = -2;
}

/**
* Yonca_Flash.prototype.fetch_flash_version()
*
* Windows işletim sistemi ve Internet Explorer Kombinasyonlu bir bilgisayarda Flash Versiyonunu bulur
*
* @param	void
*
* @return	float	Version
*/
Yonca_Flash.prototype.fetch_flash_version = function()
{
	var version, obj;
	try
	{
		eval('ob' + 'j = ne' + 'w Acti' + 'veXObjec' + 't("S' + 'hockwave' + 'Fl' + 'ash.Sho' + 'ckwaveF' + 'lash.7");');
		version = obj.GetVariable('$version');
	}
	catch (e)
	{
		// hata yok..
	}
	
	if (!version)
	{
		try
		{
			eval('ob' + 'j = ne' + 'w Acti' + 'veXObjec' + 't("S' + 'hockwave' + 'Fl' + 'ash.Sho' + 'ckwaveF' + 'lash.6");');
			version = 'WIN 6,0,21,0';
			obj.AllowScriptAccess = 'always';
			version = obj.GetVariable('$version');
		}
		catch (e)
		{
			// hata yok
		}
	}
	
	if (!version)
	{
		try
		{
			eval('ob' + 'j = ne' + 'w Acti' + 'veXObjec' + 't("S' + 'hockwave' + 'Fl' + 'ash.Sho' + 'ckwaveF' + 'lash.3");');
			version = obj.GetVariable('$version');
		}
		catch (e)
		{
			// hata yok
		}
	}
	
	if (!version)
	{
		try
		{
			eval('ob' + 'j = ne' + 'w Acti' + 'veXObjec' + 't("S' + 'hockwave' + 'Fl' + 'ash.Sho' + 'ckwaveF' + 'lash.3");');
			version = 'WIN 3,0,18,0';
		}
		catch (e)
		{
			// hata yok
		}
	}
	
	if (!version)
	{
		try
		{
			eval('ob' + 'j = ne' + 'w Acti' + 'veXObjec' + 't("S' + 'hockwave' + 'Fl' + 'ash.Sho' + 'ckwaveF' + 'lash");');
			version = 'WIN 2,0,0,11';
		}
		catch (e)
		{
			version = -1;
		}
	}
	
	return version;
};

/**
* Yonca_Flash.prototype.fetch_swf_version()
*
* Tüm sistemler üzerinde flash versiyonu bulma fonksiyonudur.
*
* @param	void
*
* @return	float	Version
*/
Yonca_Flash.prototype.fetch_swf_version = function()
{
	var version = -1, plugin = navigator.plugins, ua = navigator.userAgent;
	if (this.version > -2)
	{
		return this.version;
	}
	
	if (plugin !== null && plugin.length > 0 && (plugin['Shockwave Flash 2.0'] || plugin['Shockwave Flash']))
	{
		var descwords = (plugin['Shockwave Flash 2.0'] || plugin['Shockwave Flash']).description.split(' ');
		var verinfo = descwords[2].split('.'), rev = descwords[3];
		if (rev == '')
		{
			rev = descwords[4];
		}
		
		if (rev[0] == 'd')
		{
			rev = rev.substr(1);
		}
		else if (rev[0] == 'r')
		{
			rev = rev.substr(1);
			if (rev.indexOf('d') != -1)
			{
				rev = rev.substr(0, rev.indexOf('d'));
			}
		}
		
		version = verinfo[0] + '.' + verinfo[1] + '.' + rev;
	}
	else if (ua.indexOf('webtv/2.6') != -1)
	{
		version = 4;
	}
	else if (ua.indexOf('webtv/2.5') != -1)
	{
		version = 3;
	}
	else if (ua.indexOf('webtv') != -1)
	{
		version = 2;
	}
	else if (this.iewin)
	{
		version = this.fetch_flash_version();
	}
	
	this.version = version;
	
	return version;
};

/**
* Yonca_Flash.prototype.flash_version_compare()
*
* Sistem Flash versiyonu girilen versiyona eşit ya da büyükse true olarak döner. 
*
* @param	float	Ana versiyon
* @param	float	Alt versiyon
* @param	float	Revizyon
*
* @return	boolean	true ise versiyon karşılaştırması doğru, false ise yanlış
*/
Yonca_Flash.prototype.flash_version_compare = function(major, minor, revision)
{
	var version = fetch_swf_version(), verinfo = new Array();
	if (version <= 0)
	{
		return false;
	}
	
	verinfo = (this.iewin ? version.split(' ')[1].split(',') : version.split('.'));
	if (verinfo[0] == parseFloat(major))
	{
		if (verinfo[1] > parseFloat(minor))
		{
			return true;
		}
		else if (verinfo[1] == parseFloat(minor) && verinfo[2] >= parseFloat(revision))
		{
			return true;
		}
	}
	
	return false;
}

/**
* Yonca_Flash.prototype.flash_add_extension()
*
* SRC, MOVIE taglarında girilen Flash ya da Shockwave veri yoluna uzantı ekler. Uzantı aynı ise ekleme yapmaz
*
* @param	string	Flash ya da Shockwave veri yolu
* @param	string	dosya uzantısı
*
* @return	float	uzantı eklenmiş veri yolu
*/
Yonca_Flash.prototype.flash_add_extension = function(attrvalue, extension)
{
	var retval = attrvalue, flashvars = '', quote_pos = attrvalue.indexOf('?');
	if (quote_pos != -1)
	{
		retval = retval.substr(0, quote_pos);
		flashvars = retval.substr(quote_pos);
	}
	
	var ext = /\.([a-z]{3})$/i.exec(retval);
	if (ext && ext[1] == extension)
	{
		return attrvalue;
	}
	
	return '' + retval + extension + flashvars;
}

/**
* Yonca_Flash.prototype.fetch_args()
*
* ActiveX, Flash ya da Shockwave argümanlarını OBJECT, PARAM ya da EMBED tagına göre sınıflandırır ve döndürür
*
* @param	boolean	Flash argümanları?
* @param	object	Girilen argümanlar ve değerleri
* @param	string	Dosya uzantı değeri
* @param	string	Shockwave de SRC parametresi SRC, Flash 'da ise MOVIE
* @param	string	Class ID
* @param	string	Mime Type
*
* @return	object	Sınıflarına ayrılmış obje
*/
Yonca_Flash.prototype.fetch_args = function(useflash, args, ext, srcparam, classid, mimetype)
{
	var retval = { embedattrs: {}, params: {}, objattrs: {} }, attrvalue = '', attrname = '';
	if (!useflash)
	{
		ext = classid = mimetype = '';
		srcparam = 'src';
	}
	else
	{
		retval.objattrs['classid'] = classid;
		if (mimetype)
		{
			retval.embedattrs['type'] = mimetype;
		}
	}
	
	for (var i = 0; i < args.length; i += 2)
	{
		attrname = tlc(args[i]);
		attrvalue = args[i + 1];
		
		switch (attrname)
		{
			case 'pluginspage':
				retval.embedattrs[attrname] = attrvalue;
			break;
			case 'src':
			case 'movie':
				if (!useflash)
				{
					break;
				}
				
				attrvalue = this.flash_add_extension(attrvalue, ext);
				retval.embedattrs['src'] = attrvalue;
				retval.params[srcparam] = attrvalue;
			break;
			case 'classid':
			case 'data':
				if (useflash)
				{
					break;
				}
			case 'onafterupdate':
			case 'onbeforeupdate':
			case 'onblur':
			case 'oncellchange':
			case 'onclick':
			case 'ondblClick':
			case 'ondrag':
			case 'ondragend':
			case 'ondragenter':
			case 'ondragleave':
			case 'ondragover':
			case 'ondrop':
			case 'onfinish':
			case 'onfocus':
			case 'onhelp':
			case 'onmousedown':
			case 'onmouseup':
			case 'onmouseover':
			case 'onmousemove':
			case 'onmouseout':
			case 'onkeypress':
			case 'onkeydown':
			case 'onkeyup':
			case 'onload':
			case 'onlosecapture':
			case 'onpropertychange':
			case 'onreadystatechange':
			case 'onrowsdelete':
			case 'onrowenter':
			case 'onrowexit':
			case 'onrowsinserted':
			case 'onstart':
			case 'onscroll':
			case 'onbeforeeditfocus':
			case 'onactivate':
			case 'onbeforedeactivate':
			case 'ondeactivate':
			case 'type':
			case 'codebase':
			case 'id':
				retval.objattrs[attrname] = attrvalue;
			break;
			case 'width':
			case 'height':
			case 'align':
			case 'vspace': 
			case 'hspace':
			case 'class':
			case 'title':
			case 'accesskey':
			case 'name':
			case 'tabindex':
				retval.objattrs[attrname] = retval.embedattrs[attrname] = attrvalue;
			break;
			default:
				retval.embedattrs[attrname] = retval.params[attrname] = attrvalue;
		}
	}

	return retval;
};

/**
* Yonca_Flash.prototype.construct_obj()
*
* Tarayıcı ve Sistme farklılıklarına göre HTML Kodu oluşturur
*
* @param	object	OBJECT Tag argümanları
* @param	object	PARAM Tag argümanları
* @param	object	EMBED Tag argümanları
*
* @return	string	HTML Kodu
*/
Yonca_Flash.prototype.construct_obj = function(objattrs, params, embedattrs)
{
	var retval = '';
	if (this.iewin)
	{
		retval = '<object ';
		for (var attrname in objattrs)
		{
			retval += attrname + '="' + objattrs[attrname] + '" ';
		}
		
		retval += '>';
		for (var attrname in params)
		{
			retval += ' <param name="' + attrname + '" value="' + params[attrname] + '" />';
		}
		
		retval += ' </object>';
	}
	else
	{
		retval = '<embed ';
		for (var attrname in embedattrs)
		{
			retval += attrname + '="' + embedattrs[attrname] + '" ';
		}
		
		retval += ' />';
	}
	
	return retval;
}

/**
* Yonca_Flash.prototype.construct_flash()
*
* Flash Kodu oluşturur, isteğe göre yazar, isteğe göre döndürür, isteğe göre de Element 'e entegre eder
*
* @param	void
*
* @return	void
*/
Yonca_Flash.prototype.construct_flash = function()
{
	var args = this.fetch_args(true, arguments, '.swf', 'movie', 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000', 'application/x-shockwave-flash');
	var flashobj = this.construct_obj(args.objattrs, args.params, args.embedattrs);
	
	if (this.returnvalue)
	{
		this.reset();
		return flashobj;
	}
	
	if (this.targetelement && (target = Dom.get(this.targetelement)))
	{
		target.innerHTML = flashobj;
	}
	else
	{
		document.write(flashobj);
	}
	
	this.reset();
};

/**
* Yonca_Flash.prototype.construct_shockwave()
*
* Shockwave Kodu oluşturur, isteğe göre yazar, isteğe göre döndürür, isteğe göre de Element 'e entegre eder
*
* @param	void
*
* @return	void
*/
Yonca_Flash.prototype.construct_shockwave = function()
{
	var args = this.fetch_args(true, arguments, '.dcr', 'src', 'clsid:166B1BCA-3F9C-11CF-8075-444553540000');
	var shockwaveobj = this.construct_obj(args.objattrs, args.params, args.embedattrs);
	if (this.returnvalue)
	{
		this.reset();
		return shockwaveobj;
	}
	
	if (this.targetelement && (target = Dom.get(this.targetelement)))
	{
		target.innerHTML = shockwaveobj;
	}
	else
	{
		document.write(shockwaveobj);
	}
	
	this.reset();
};

/**
* Yonca_Flash.prototype.construct_axobj()
*
* ActiveX Kodu oluşturur, isteğe göre yazar, isteğe göre döndürür, isteğe göre de Element 'e entegre eder
*
* @param	void
*
* @return	void
*/
Yonca_Flash.prototype.construct_axobj = function()
{
	var args = this.fetch_args(false, arguments);
	var axobj = this.construct_obj(args.objattrs, args.params, args.embedattrs);
	
	if (this.returnvalue)
	{
		this.reset();
		return axobj;
	}
	
	if (this.targetelement && (target = Dom.get(this.targetelement)))
	{
		target.innerHTML = axobj;
	}
	else
	{
		document.write(axobj);
	}
	
	this.reset();
};

/**
* Yonca_Flash.prototype.reset()
*
* Girilen bazı opsiyonları sıfırlar
*
* @param	void
*
* @return	void
*/
Yonca_Flash.prototype.reset = function()
{
	this.returnvalue = false;
	this.targetelement = '';
};


// ###########################################################################
// Yonca Genel Nesnesine Entegre
Yonca = Yonca || {};
Yonca.ActiveX = new Yonca_Flash();