/*********************************************************
*		Media Gallery CLASS
*		Designed & developed by Dima Svirid, 2008	
*		Class: media_gallery.class.js
*	  Extends: system.js
*********************************************************/
$WI.Class.MediaGallery = new $WI.Class({
	Create: function(options) {
		if(!options) var options = {};
		this.options = options;
		this.ad_current_step = 0;
		this.obj = this._createDOM({objType: 'div', objClass: 'element-media-gallery'});
		this.obj.top = this._insertDOM(this.obj, {objType: 'div', objClass: 'element-media-gallery-top-container'}, 'insertinto');
		this.obj.player = this._insertDOM(this.obj.top, {objType: 'div', objClass: 'element-media-gallery-player'}, 'insertinto');
		this.obj.player.asset = this._insertDOM(this.obj.player, {objType: 'div', objClass: 'element-media-gallery-asset'}, 'insertinto');
		this.obj.player.description = this._insertDOM(this.obj.player, {objType: 'div', objClass: 'element-media-gallery-description'}, 'insertinto');
		
		if(window.s_media_gallery_default_image_path)
		this._insertDOM(this.obj.player.asset, {objType: 'img', src: s_media_gallery_default_image_path}, 'insertinto');
		if(window.s_media_gallery_default_desc)
		this._insertDOM(this.obj.player.description, {objType: 'p', html: s_media_gallery_default_desc}, 'insertinto');

		this.obj.banner = this._insertDOM(this.obj.top, {objType: 'div', objClass: 'element-media-gallery-banner'}, 'insertinto');
		//this.obj.banner.table = this._insertDOM(this.obj.banner, {objType: 'table', height: '100%'}, 'insertinto');
		
		this.obj.tab_area = this._insertDOM(this.obj.top, {objType: 'div', objClass: 'element-media-gallery-tabs'}, 'insertinto');
	},
	Write: function(where) {	
		this._insertDOM((where&&$E(where))?$E(where):null, null, 'insertinto');			
		this.LoadCSS({href: '/api/src/css/slides.css'});
		this.LoadCSS({href: '/api/src/css/gallery.css'});		
		this.LoadJS({src: '/api/src/javascript/image_preview.js', include_once: true});
		this.LoadJS({src: '/prism_resource/classes/flv_player/jwplayer.js', include_once: true});
		this.LoadJS({src:'/api/src/javascript/dragdrop.js', include_once: true});	
		this.LoadCSS({href: '/api/src/css/image_preview.css'});		
	
		//init history feature
		setTimeout(function(){
			$WI.History.Init({preloader: false, onevent: this.History, _construct: this, scrollTopPage: false});
		}.Apply(this), 10);
		
	
		//move advertisement
		setTimeout(function(){this._moveAdvertisement()}.Apply(this), 2000);
		
	},
	History: function(sURL, aUrl) {
		var t = 0;	//tab identificator
		var m = 0;	//submenu identificator
		var d = 0;	//drop down params
		var a = 0;	//asset identificator	
		var p = 0;	//photo asset main gallery photo
		var ap = 0; //main audio gallery page
		var pp = 0; //main photo gallery page
		var vp = 0; //main video gallery page
		
		try{	
		if(sURL.length>0) {			
			for(var i=0;i<aUrl.length;i=i+2)
				eval(aUrl[i] + " = '" + aUrl[i+1] + "'");		

			//select the proper tab
			if(t)			
				this.tabs.SelectTab(t);	
			else
				this.tabs.SelectTab(0);			
		
			var tab = this.tabs.GetSelectedTab();
			
			//enable scrollers for submenu if required
			var w = this._getWidth(tab.submenu.table);
			var wc = this._getWidth(tab.submenu.container);
			if(w > wc) {
				this._isDisplay(tab.submenu.container.leftarrow, true);
				this._isDisplay(tab.submenu.container.rightarrow, true);
			} else {
				this._isDisplay(tab.submenu.container.leftarrow, false);
				this._isDisplay(tab.submenu.container.rightarrow, false);
			}
			
			//select proper submenu and drop down item
			if(m&&d) { 						
				var dropdown = tab.submenu.items[0].submenu;						
				for(j=0;j<dropdown.allitems.length;j++) {
					if(dropdown.allitems[j].params && dropdown.allitems[j].params[1] == d) {			
						dropdown._selectItem(dropdown.allitems[j]);	
						break;
					}
				}

				for(j=0;j<tab.submenu.items.length;j++) {
					if(tab.submenu.items[j].params && tab.submenu.items[j].params[0] == m) {
						this._selectSubMenu(tab.submenu.items[j]);
						break;
					}
				}				
				
				this.OpenMediaBlock();				
			}
			
			//load asset
			if(a && !this._isAssetActive(a)) {				
				
				this._loadAsset(a, [a, pp, pa, pv, p]);
				
				

			} else if(a && p && this.obj.player.asset.gallery) {
				this.obj.player.asset.gallery.SetFrame(p);
			}
			
			var selected = tab.submenu.items[0].submenu.GetSelectedMenu();
			//switch to the right page
			
			if(pp && selected[0].media_block['photo'] && selected[0].media_block['photo'].pages) 
				selected[0].media_block['photo'].pages.SetFrame(pp);
			else if(pv && selected[0].media_block['video'] && selected[0].media_block['video'].pages) 
				selected[0].media_block['video'].pages.SetFrame(pv);
			else if(pa && selected[0].media_block['audio'] && selected[0].media_block['audio'].pages) 
				selected[0].media_block['audio'].pages.SetFrame(pa);
			
			
		} else {

			//default execution			
			setTimeout(function(){				
				this.tabs.SelectTab(0);
				$WI.Go('./t/0/pp/0/pv/0/pa/0/pa/0/p/0/m/40166/d/40166');
				var tab = this.tabs.GetSelectedTab();
				this._selectSubMenu(tab.submenu.items[0]);				
				var dropdown = tab.submenu.items[0].submenu;				
				dropdown._selectItem(dropdown.allitems[0]);					
				this.OpenMediaBlock();					
				var selected = tab.submenu.items[0].submenu.GetSelectedMenu();
				
				setTimeout(function(){
					if(!selected[0].assets) return;					
					if(selected[0].assets['photo'] && selected[0].assets['photo'].length > 0)					
						this._loadAsset(selected[0].assets['photo'][0].options.asset_id);
					else if(selected[0].assets['audio'] && selected[0].assets['audio'].length > 0)					
						this._loadAsset(selected[0].assets['audio'][0].options.asset_id);
					else if(selected[0].assets['video'] && selected[0].assets['video'].length > 0)					
						this._loadAsset(selected[0].assets['video'][0].options.asset_id);
				}.Apply(this), 3000);
				
			}.Apply(this), 500);	
		}
		} catch(e) {}
	},
	SetDefaultImagePath: function(image) {
		this.options.default_image_path = image;
	},
	SetDefaultDesc: function(desc) {
		this.options.default_desc = desc;
	},
	SetErrorMessageColor: function(color) {
		this.options.error_message_color = color;
	},
	SetPaginationImage: function(url) {
		this.options.pagination_image = url;
	},
	SetPaginatorMask: function(mask) {
		this.options.paginator_mask = mask;
	},
	SetPhotoPagesMask: function(mask) {
		this.options.photos_mask = mask;
	},
	SetLoadingMessage: function(message) {
		this.options.loading_message = message;
	},
	SetErrorMessage: function(message) {
		this.options.error_message = message;
	},
	SetMediaUrl: function(url) {
		this.options.media_url = url;
	},
	SetMediaUrlRecent: function(url) {
		this.options.media_url_recent = url;
	},
	SetStrechMode: function(mode) {
		this.options.strech_mode = mode;
	},
	SetDefaultThumbnail: function(url) {
		this.options.default_thumbnail = url;
	},
	SetVideoTitleImage: function(html) {
		this.options.video_image = html;
	},
	SetAudioTitleImage: function(html) {
		this.options.audio_image = html;
	},
	SetPhotoTitleImage: function(html) {
		this.options.photo_image = html;
	},
	SetAdvertisements: function(ciids) {
		//disable ads for none flash devices because of the bug with the html5 player
		if($WI.DOM._isFlash(10))
		  this.ads = ciids.split(',');
	},
	SetAdvertisementStep: function(step) {
		this.ad_step = parseInt(step);	
		this.ad_current_step = this.ad_step;	
	},
	SetRandomServers: function(servers){
		this.random_servers = servers;
	},
	InitTabs: function() {
		//init main tabs object
		this.tabs = new $WI.Class.Tabs;
		this.tabs.Create({});	
		this.tabs.Write(this.obj.tab_area);	
		
		//register history action
		this.AddEvent({type: 'selecttab', obj: this.tabs.GetBody(), onevent: function(){
			var tab = this.tabs.GetTabIndex(this.tabs.GetSelectedTab());			
			$WI.Go('./t/' + tab);
		}});	
		
	},
	AddTab: function(options) {
		this.tabs.AddTab(options);
	},
	LoadAsset: function(event, _target, obj) {
		if(!obj.options.asset_id) return;		
		
		this._unselectAllAssets();
		
		this._addClass(obj, 'element-media-gallery-asset-selected');
		
		$WI.Go('./a/' + obj.options.asset_id + '/p/0');
	},
	PasteAsset: function(content) {
		this._removeDOM(this.obj.player.wait);
		
		var div = this._createDOM({objType: 'div', html: content});
		
		this.obj.player.asset.appendChild(div);
	},
	LoadGallery: function(event, _target, obj) {				
		var selected = obj._construct.GetSelectedMenu();
		this._selectSubMenu(_target);	
		$WI.Go('./m/' + _target.params[0] + '/d/' + selected[0].params[1] + '/p/0/pa/0/pv/0/pp/0/a/$');
	},
	AddSubMenuItem: function(tab, options) {
		var tab = this.tabs.GetTab(tab);			
		if(tab) {
			//create submenu scrolling object
			if(!tab.submenu)
				this._createSubmenuContainer(tab);			
			
			var td = this._insertDOM(tab.submenu.table.tr, {objType: 'td',  objClass: 'element-media-gallery-tab-submenu-item', html: options.title}, 'insertinto');
			if(options.params) td.params = options.params;			
			if(!td.submenu) td.submenu = {}; 
			if(!tab.submenu.items) tab.submenu.items = [];			
			
			tab.submenu.items.push(td);		
			
			this.AddDOMEvent({obj: td, type: 'mouseover', onevent: this._onSubmenuMouseEvent});
			this.AddDOMEvent({obj: td, type: 'mouseout', onevent: this._onSubmenuMouseEvent});
						
			return td;		
		}		
	},
	ScrollSubmenuTo: function(num){
		
	},
	CreateDropDown: function(submenu) {
		//init drop down menu
		var dropdown = new $WI.Class.Menu;
		dropdown._construct = this;
		dropdown.Create({effect: true, staySelected: true, onMouseOver: true});
		dropdown.Write('media-dropdown-menu-placer');	
		
		//setTimeout(function(){this.Write()}.Apply(dropdown.GetThis()), 5000);
	  
		submenu.submenu = dropdown;
		
		return dropdown;
	},
	OpenMediaBlock: function() {
		var tab = this.tabs.GetSelectedTab();
		var content = this.tabs.GetContent(tab);
		var selected = tab.submenu.items[0].submenu.GetSelectedMenu();				
		
		if(selected.length > 0) {
			if(!selected[0].media_block) { 
				this._generateMediaBlock(tab, selected[0]);				
			} else {	
				if(this.isDisplayed(selected[0].media_block)) return;
				this._isDisplay(content.loader, true);	
				this._isDisplay(selected[0].media_block, true);		
				var _effect = this._Animation({effect: 'SlideOut', motion: 'slideOut', obj: selected[0].media_block, style: 'top', from: -317, to: 31, speed: 10});	
				_effect.onAnimationFinishedEffect = function() {					
					var tab = this._construct.tabs.GetSelectedTab();
					var content = this._construct.tabs.GetContent(tab);					
					this._construct._isDisplay(content.loader, false);	
					this._construct._hideAllMediaBlocks(this.target);
				};
			}
			this.MaxZ(selected[0].media_block);
			this.MaxZ(tab.submenu);
			this.MaxZ(content.loader);
		}		
		
	},		
	_hideAllMediaBlocks: function(obj) {
		var tab = this.tabs.GetSelectedTab();
		var content = this.tabs.GetContent(tab);
		var _children = this._getChildren(content);
			for(var i=0;i<_children.length;i++)
				if(this._hasClass(_children[i], 'element-media-gallery-media-block') && _children[i] != obj)
				 	this._isDisplay(_children[i], false);
	},
	_getSelectedSubmenu: function(tab){
		for(var i=0;i<tab.submenu.items.length;i++)
			if(tab.submenu.items[i].selected)
				return tab.submenu.items[i];
	},
	_createSubmenuContainer: function(tab) {
		var content = this.tabs.GetContent(tab);
		if(content) {
			tab.submenu = this._insertDOM(content, {objType: 'div', objClass: 'element-media-gallery-tab-submenu'}, 'insertinto');
			tab.submenu.container = this._insertDOM(tab.submenu, {objType: 'div', objClass: 'element-media-gallery-tab-scroller'}, 'insertinto');
			
			this._cancelSelect(null, true, tab.submenu);
			
			//create left arrow
			tab.submenu.container.leftarrow = this._createArrow({objClass: 'element-arrow-left', display: 'none'});
			tab.submenu.appendChild(tab.submenu.container.leftarrow);
			this.AddDOMEvent({obj: tab.submenu.container.leftarrow, type: 'mousedown', onevent: this._scrollSubMenu});
			
			//create right arrow
			tab.submenu.container.rightarrow = this._createArrow({objClass: 'element-arrow-right', right: '0px', display: 'none'});
			tab.submenu.appendChild(tab.submenu.container.rightarrow);
			this.AddDOMEvent({obj: tab.submenu.container.rightarrow, type: 'mousedown', onevent: this._scrollSubMenu});
			
			tab.submenu.table = this._insertDOM(tab.submenu.container, {objType: 'table', position: 'absolute',  left: '0px', cellSpacing: '0px', cellPadding: '0px'}, 'insertinto');
			
		}
	},
	_createArrow: function(options) {
		var arrow = this._createDOM({objType: 'div', objClass: 'element-arrow ' + options.objClass});
		var _image = this.options.pagination_image;
		if (!_image)
		{
			_image = '/multimedia/skin2008/media_gallery/images/arrows2.gif';
		}
		arrow.image = this._insertDOM(arrow, {objType: 'img', src:_image , objClass: 'element-arrow-image', right: this._fixPx(options.right)}, 'insertinto');
		
		return arrow;
	},
	_scrollSubMenu: function(event, _target, obj) {
		//finish already existed effect
		if(this._effect) return;
		
		var tab = this.tabs.GetSelectedTab();
		var _children = this._getChildren(tab.submenu.table.tr);		
		var w = this._getWidth(_children[0]);			
		

		if(this._hasClass(obj, 'element-arrow-left')) {
			this._insertDOM(_children[0], {newNode: _children.pop()}, 'insertbefore');
			var w = this._getWidth(_children[0]);	
			this._setStyle(tab.submenu.table, 'left', this._fixPx(-w));	
			this._effect = this._Animation({effect: 'SlideOut', motion: 'slideOut', obj: tab.submenu.table, style: 'left', to: 0, speed: 10});
			this._effect.onAnimationFinishedEffect = function() {	
				this._construct._effect = null;	
			};
		}
		else {
			this._effect = this._Animation({effect: 'SlideOut', motion: 'slideOut', obj: tab.submenu.table, style: 'left', to: -w, speed: 10});		
			this._effect.table = tab.submenu.table;	
			this._effect.td = _children[0];
			this._effect.onAnimationFinishedEffect = function() {					
					if(!this._construct._effect) return;				
					this._construct._effect.table.tr.appendChild(this._construct._effect.td);
					this._construct._setStyle(this._construct._effect.table, 'left', '0px');				
					this._construct._effect = null;	
			};		
		}

	},
	_getLoadingMessage: function() {
		var _message = this.options.loading_message;
		if(_message=='') _message = 'please wait ... loading';
		return _message;
	},
	_getErrorMessage: function() {
		var _message = this.options.error_message
		if(_message=='') _message = 'Oops...nothing is here!';
		return _message;
	},
	_getErrorMessageColor: function() {
		var _message_color = this.options.error_message_color
		if(_message_color=='') _message_color = '#ffffff';
		return _message_color;
	},
	_generateMediaBlock: function(tab, submenu) {
		var content = this.tabs.GetContent(tab);
		submenu.media_block = this._insertDOM(content, {objType: 'div', objClass: 'element-media-gallery-media-block'}, 'insertinto');
		
		if(!content.loader)
			content.loader = this._insertDOM(content, {objType: 'div', html: '<table><tr><td nowrap>&nbsp;' + this._getLoadingMessage() + '</td><td><img src="/api/src/images/indicator_arrows.gif" width=16 height=16 align="absmiddle" hspace=5></td></tr></table>', objClass: 'element-media-gallery-media-loader'}, 'insertinto');
		
		this._cancelSelect(null, true, submenu.media_block);
		
		this._loadMediaGallery(null, null, submenu);
	},
	_generateGalleryBlock: function(type, tab) {
		var __data = this._getRecordsNumber(type, tab);
		var pages = __data[0];
		var records = __data[1];
		var startrecord = 0;		
		var endrecord = 0;
		
		//register all the assets under this menu
		if(!tab.assets)tab.assets = {};
		tab.assets[type] = [];

		var block = this._insertDOM(tab.media_block, {objType: 'div', objClass: 'element-media-gallery-' + type + '-block', width: this._fixPx(__data[2])}, 'insertinto');
		block.type = type;
		block.content = tab[type];
		
		//creating title block
		block.top_title = this._insertDOM(block, {objType: 'div', objClass: 'element-media-gallery-block-title', html: this.options[type + '_image']}, 'insertinto');
		
		block.paginator = this._insertDOM(block.top_title, {objType: 'div', objClass: 'element-media-gallery-paginator', display: (pages>1)?'block':'none'}, 'insertinto');
		block.paginator.pages_label = this._insertDOM(block.paginator, {objType: 'div', objClass: 'element-media-gallery-label'}, 'insertinto');
		
		//creating content block		
		block.pages = new $WI.Class.Slides;					
		block.pages.Create({displayHeight: '317px', speed: 10});		
		block.pages.Write(block);
		block.pages.OnSlideChangeDone = function(){this._onPageChange(block);}.Apply(this);		
		if(!tab.media_block[type]) tab.media_block[type] = {};
		tab.media_block[type].pages = block.pages;
		
		var _page = $WI.History.GetParamValue((type=='video')?'pv':(type=='audio')?'pa':'pp');
		//slide to the current page
		if(_page) block.pages.SetFrame(_page);
		
		//create left arrow
		var _leftarrow = this._createArrow({objClass: 'element-arrow-left'});
		block.paginator.appendChild(_leftarrow);
		this.AddDOMEvent({obj: _leftarrow, type: 'mousedown', onevent: function(){this.PreviousFrame()}.Apply(block.pages)});
		
		//create right arrow
		var _rightarrow = this._createArrow({objClass: 'element-arrow-right', right: '0px'});
		block.paginator.appendChild(_rightarrow);
		this.AddDOMEvent({obj: _rightarrow, type: 'mousedown', onevent: function(){this.NextFrame()}.Apply(block.pages)});
		
		for(var p=0; p < pages; p++) {
			var page = this._createDOM({objType: 'div', objClass: 'element-media-gallery-block-content'});		
			var content = tab[type];
	
			if(p>0) startrecord += records;		
			endrecord = startrecord + records;
			if(endrecord > content.length) endrecord = content.length;
			
			for(var i=startrecord; i< endrecord; i++) {
				var asset = this._insertDOM(page, {objType: 'div', objClass: 'element-media-gallery-asset element-media-gallery-asset-' + ((type != 'audio') ? type : 'video')}, 'insertinto');
				asset.options = {};
				asset.options.asset_id = content[i].asset_id;
				var def = this.options.default_thumbnail;
				if(def&&$WI.System.Trim(content[i].image)=='') content[i].image = def;
				
				
				//randomize assets servers, if image url is passed as subdomain1.domain.com and or subdomain2.domain.com 
				if(this.random_servers > 1) {
					var _rand = $WI.System.Random(this.random_servers-1) + 1;
					content[i].image = content[i].image.replace(/^(http:\/\/\w+)\d+/, '$1' + _rand);
				}
				//lets make them thumbnails
				content[i].image = content[i].image.replace(/(\.[a-zA-Z]{3,4})$/, '_w80$1');

				//making phot type
				if(type == 'photo') {				
				  var __img = this._insertDOM(asset, {objType: 'img', src: content[i].image, objClass: 'element-media-gallery-picture'}, 'insertinto');__img.onerror = function(){this.src=MediaGalleryClass.mediaGallery.options.default_thumbnail};
					this._insertDOM(asset, {objType: 'div', objClass: 'element-media-gallery-asset-title', html: content[i].title}, 'insertinto');
					this._insertDOM(asset, {objType: 'div', objClass: 'element-media-gallery-asset-description', html: content[i].description}, 'insertinto');
					this._insertDOM(asset, {objType: 'div', objClass: 'element-media-gallery-asset-description2', html: content[i].description2}, 'insertinto');
				//making audio type
				} else if(type == 'audio') {
					this._insertDOM(asset, {objType: 'img', src: content[i].image, objClass: 'element-media-gallery-picture', margin: '3px'}, 'insertinto');
					var __title = content[i].title;
					if(content[i].description != '') __title += '<span class="element-media-gallery-asset-description"><br>' + content[i].description + '</span>';
					this._insertDOM(asset, {objType: 'div', objClass: 'element-media-gallery-asset-title', html: __title}, 'insertinto');
					this._insertDOM(asset, {objType: 'div', objClass: 'element-media-gallery-asset-description2', html: content[i].description2}, 'insertinto');
				//making video type
				} else {
					var __img = this._insertDOM(asset, {objType: 'img', src: content[i].image, objClass: 'element-media-gallery-picture', margin: '3px'}, 'insertinto');__img.onerror = function(){this.src=MediaGalleryClass.mediaGallery.options.default_thumbnail};					
					this._insertDOM(asset, {objType: 'img', src: '/multimedia/skin2008/media_gallery/images/play_video.png', objClass: 'png', position: 'absolute', left: '3px', bottom: '3px'}, 'insertinto');
					var __title = content[i].title;
					if(content[i].description != '') __title += '<span class="element-media-gallery-asset-description"><br>' + content[i].description + '</span>';
					this._insertDOM(asset, {objType: 'div', objClass: 'element-media-gallery-asset-title', html: __title}, 'insertinto');
					this._insertDOM(asset, {objType: 'div', objClass: 'element-media-gallery-asset-description2', html: content[i].description2}, 'insertinto');
					
				}		
				tab.assets[type].push(asset);
				this.AddDOMEvent({obj: asset, type: 'mouseover', onevent: this._onMouseEvent});	
				this.AddDOMEvent({obj: asset, type: 'mouseout', onevent: this._onMouseEvent});	
				this.AddDOMEvent({obj: asset, type: 'click', onevent: this.LoadAsset});		
			}			
				
			block.pages.AddFrame({content: page});
			
		}
		//set label first
		this._setPageLabel(block);
	},
	_setPageLabel: function(block) {
		var label = this.options.paginator_mask.replace(/%current_page%/, (block.pages.currentFrame+1)).replace(/%total_pages%/, block.pages.frames.length);
		block.paginator.pages_label.innerHTML = label;
	},
	_onPageChange: function(block){		
		this._setPageLabel(block);
		switch(block.type) {
			case 'photo': 
				$WI.Go('./pp/' + block.pages.currentFrame);
				break;
			case 'audio': 
				$WI.Go('./pa/' + block.pages.currentFrame);
				break;
			case 'video': 
				$WI.Go('./pv/' + block.pages.currentFrame);
				break;
		}
	},
	_onPhotoPageChange: function(preview_asset){
		//if($WI.History.GetBrowserURLAnchor() != '')
		$WI.Go('./p/' + preview_asset.currentFrame);
	},
	_loadMediaGallery: function(xml, text, instance) {
		var tab = this.tabs.GetSelectedTab();
		var content = this.tabs.GetContent(tab);	

		if(xml) {
			instance.photo = xml.List('photo');
			instance.audio = xml.List('audio');
			instance.video = xml.List('video');
			
			//show no records message in case if nothing came
			if(instance.photo.length == 0 && instance.audio.length == 0 && instance.video.length == 0) {				
				instance.media_block.innerHTML = '<div style="color: ' + this._getErrorMessageColor() + ';font-weight:bold;padding-top:100px;text-align: center;width: 1000px;">' + this._getErrorMessage() + '</div>';			
			} else {			
		
				//generate photo block			
				if(instance.photo.length > 0)
					this._generateGalleryBlock('photo', instance);
				
				//generate video block			
				if(instance.audio.length > 0)
					this._generateGalleryBlock('audio', instance);
				
				//generate video block			
				if(instance.video.length > 0)
					this._generateGalleryBlock('video', instance);
			
			}	

			var _effect = this._Animation({effect: 'SlideOut', motion: 'slideOut', obj: instance.media_block, style: 'top', to: 31, speed: 10});	
			_effect.onAnimationFinishedEffect = function() {					
					var tab = this._construct.tabs.GetSelectedTab();
					var content = this._construct.tabs.GetContent(tab);
					this._construct._isDisplay(content.loader, false);	
					this._construct._hideAllMediaBlocks(this.target);
			};
			
		} else {			
			
			this._isDisplay(content.loader, true);
			this.MaxZ(content.loader);			
			this.Request({url: ((instance.params[0]=='40166')?this.options.media_url_recent:this.options.media_url) + '&media_params=' + instance.params.join(','), method: 'GET' , onComplete: this._loadMediaGallery, cache: true, instance: instance, timeout: 30});
		}
	},
	_getRecordsNumber: function(type, tab) {
		var wp = 389;
		var wa = 299;
		var wv = 299;
		var content = tab[type];
		switch(type) {
			case 'video':
				var pp = 3;				
				if((!tab['audio']||tab['audio'].length==0)&&(!tab['photo']||tab['photo'].length==0)) {wv += wa + wp +1; pp += 6;}
				else if((!tab['photo']||tab['photo'].length==0)) {wv += parseInt(wp/2-30); pp += 3;} 
				return [Math.ceil(content.length/pp), pp, wv];
				break;
			case 'audio':
				var pp = 3;
				if((!tab['video']||tab['video'].length==0)&&(!tab['photo']||tab['photo'].length==0)) {wa += wv + wp + 1; pp += 6;}
				else if(!tab['photo']||tab['photo'].length==0) {wa += parseInt(wp/2+30); pp += 3;} 
				return [Math.ceil(content.length/pp), pp, wa];
				break;
			default:				
				var pp = 6;
				if((!tab['audio']||tab['audio'].length==0)&&(!tab['video']||tab['video'].length==0)) {wp += wa + wv + 2; pp += 8;}
				else if(!tab['audio']||tab['audio'].length==0) {wp += wa; pp += 4;}
				else if(!tab['video']||tab['video'].length==0) {wp += wv; pp += 4;} 					
				return [Math.ceil(content.length/pp), pp, wp];
				break;	
		}
	},
	_loadAsset: function(a, instance) {		
		//clean place for a data
		this._cleanPlayerContent();
		this.obj.player.wait = this._insertDOM(this.obj.player.asset, {objType: 'div', objClass: 'element-media-gallery-wait', html: this._getLoadingMessage()}, 'insertinto');
		
		var xy = this._getXY(this.obj);
		
		if(document.documentElement.scrollTop)
			document.documentElement.scrollTop = parseInt(xy.y-50);
		else
			document.body.scrollTop = parseInt(xy.y-50);	
		
		this.Request({url: this.options.media_url + '&asset_id=' + a, method: 'GET', onComplete: this._loadAssetResponse, cache: true, instance: instance, timeout: 30});
	},
	_loadAssetResponse: function(xml, text, instance) {			
		this.obj.player.asset.gallery = null;
		//WORKING MEDIA ASSETS VIA JS
		if(xml.getNodeValue('//asset/asset_type') != 4) {				

			var div = document.createElement('div');
			div.innerHTML = '<font style=\'display:none\'>&nbsp;</font>' + xml.getNodeValue('//asset/asset_content');
			this.obj.player.asset.appendChild(div);	
			
			if(xml.getNodeValue('//asset/asset_description'))
				this.obj.player.description.innerHTML = xml.getNodeValue('//asset/asset_description');		
			
			//support for a new version of jwplayer with html5 support
  		//lets get uuid of the container
  		var result;
  		if(result = new RegExp(/jwplayer\("([\s\S]+)"\)/ig).exec(text))	{
  		  div.id = result[1];		  
  		}	
				
				
			var _children = div.getElementsByTagName('script');
			var _jsContent = '';	
			for(var i=0;i<_children.length;i++) {
			 if((/src|jwplayer\(/i).test(_children[i].text) == false) 
			   continue;			
			   
			   _jsContent = _children[i].text;			   	
			  break;	
			}	
			
		      
      //lets cut out UUID of the element, we do assign an event to it so lets catch it
      //right now it is assigned to document.body, TODO fix it to assign to a specific wrapper of the video
      $WI.Event.AddEvent({obj: document.body, type: 'complete', onevent: function(){
          
          if(this.advertisement_history_src) {            
            jwplayer(0).load({ file: this.advertisement_history_src});
            jwplayer(0).getPlugin("controlbar").show();
            jwplayer(0).play(true);
          }
          
      }.Apply(this)});
			
			
			
			_jsContent = _jsContent.replace(/\$WI.Flash.Write/ig, 'MediaGalleryClass.assetContent = $WI.Flash');			
			_jsContent = _jsContent.replace(/\$WI.ActiveX.Write/ig, 'MediaGalleryClass.assetContent = $WI.ActiveX');
			_jsContent = _jsContent.replace(/AC_FL_RunContent/ig, 'MediaGalleryClass.assetContent = $WI.Flash');			
			_jsContent = _jsContent.replace(/AC_AX_RunContent/ig, 'MediaGalleryClass.assetContent = $WI.ActiveX');
			_jsContent += 'MediaGalleryClass.PasteAsset();';			
	
			_jsContent = _jsContent.replace(/([\"]width[\"][,][\s][\"][\d]{1,4}\")/ig, '"width", "480"');
			_jsContent = _jsContent.replace(/(width:[\s]+[\"][\d]{1,4}\")/ig, 'width: "480"');//new way
			_jsContent = _jsContent.replace(/([\"]height[\"][,][\s][\"][\d]{1,4}\")/ig, '"height", "360"');
			_jsContent = _jsContent.replace(/(height:[\s]+[\"][\d]{1,4}\")/ig, 'height: "360"');//new way
			_jsContent = _jsContent.replace(/([\"]autoplay[\"][,][\s][\"][A-Za-z]*\")/ig, '"autoplay", "true"');
			_jsContent = _jsContent.replace(/(&autostart=false)/ig, '&autostart=true');
			
			//format properly advertisememnt items
			if(instance && instance.ad) {
			  $WI.Object['HC_MEDIA_GALLERY'] = this;
				_jsContent = _jsContent.replace(/(controlbar=([A-Za-z]*))/ig, 'controlbar=none&autostart=true');
				_jsContent = _jsContent.replace(/(autostart=([A-Za-z]*))/ig, 'autostart=true');
				_jsContent += 'jwplayer(0).getPlugin("controlbar").hide();'; //hide control bar for the ad
 			}
			//check if nothing come up			
			if(xml.getNodeValue('//asset/asset_content') == '') {
				this.obj.player.asset.innerHTML = '<div class="element-media-gallery-wait">' + this._getErrorMessage() + '</div>';
				return;
			}

			var script = document.createElement('script');
					script.type = "text/javascript";
					script.text = _jsContent;
					//
					//lets load ad first					
					if((!instance || !instance.ad) && this.ads && this.ad_step && this.ad_step <= this.ad_current_step) {
						this.ad_current_step = 0;
					
            //lets get out the movie url     
            var filename, file;       
            if(file = new RegExp(/file:[^,]*/).exec(_jsContent)) {
                if(filename = new RegExp(/"([^"]*)/gi).exec(file[0])) {
                  this.advertisement_history_src = filename[1];
                  //HACK lets add preset.h264.mp4 for none flash devices
                  if(!$WI.DOM._isFlash(10) && this.advertisement_history_src.split('.').pop() != 'mp4')
                    this.advertisement_history_src += '.preset.h264.mp4';    
                 
                 }              
            }//
           				
					
						this.advertisement_history_desc = xml.getNodeValue('//asset/asset_description');
						this._loadAsset(this.ads[$WI.System.Random(this.ads.length-1)], {ad: true});		
					} else {
						this.ad_current_step++;
						this.obj.player.asset.appendChild(script);	
					}
			delete div;
		//WORKING WITH PHOTO GALLERY
		} else {
			this._cleanPlayerContent();
			
			var xml_assets = xml.List('gallery');
			
			if(xml_assets.length == 0) {
				this.obj.player.asset.innerHTML = '<div class="element-media-gallery-wait">' + this._getErrorMessage() + '</div>';
				return;
			}
			
			var preview_asset = new $WI.Class.Gallery;					
					preview_asset.Create({displayHeight: '360px', stretching: (this.options.strech_mode=='')?'none':this.options.strech_mode});			//uniform, fill, none		
					preview_asset.OnSlideChangeDone = function(){this._onPhotoPageChange(preview_asset);}.Apply(this);	
					preview_asset.SetPhotoPagesMask(this.options.photos_mask);
					preview_asset.SetCustom('screen', this.obj.player.asset);
					preview_asset.SetCustom('comments', this.obj.player.description);

					if(xml_assets.length > 1)
						preview_asset.SetCustom('controls', this.obj.player.asset);
					
			this.obj.player.asset.gallery = preview_asset;
			
			Gallery.aPhoto = {};
			Gallery.iPhotoCount = xml_assets.length;
			
			for(var i=0;i<xml_assets.length;i++) {
				//randomize assets servers, if image url is passed as subdomain1.domain.com and or subdomain2.domain.com 
				if(this.random_servers > 1) {
					var _rand = $WI.System.Random(this.random_servers-1) + 1;
					xml_assets[i].photo_url = xml_assets[i].photo_url.replace(/^(http:\/\/\w+)\d+/, '$1' + _rand);
				}
				var _frame = preview_asset.AddFrame({
							picture: xml_assets[i].photo_url,
							preview: xml_assets[i].photo_url,
							comments: xml_assets[i].description
						});

				//create zoom
				var _zoom = this._insertDOM(_frame.film, {objType: 'img', objClass: 'element-media-gallery-zoom png', src: '/multimedia/skin2008/media_gallery/images/zoom.png'}, 'insertinto');	
				_zoom.photo_url = xml_assets[i].photo_url;	
				_zoom.description = xml_assets[i].description;		
				_zoom.ci_id = i;
				this.AddDOMEvent({obj: _zoom, type: 'click', onevent: this._onPhotoZoom});
				
				Gallery.aPhoto[i] = {
					ci_id	:	i,
					src		:	xml_assets[i].photo_url,
					teaser	:	xml_assets[i].description,
					author	:	'',
					title	:	''
				};
			}

			if(instance && instance[4])
				preview_asset.SetFrame(instance[4]);
		}
		//assign asset id
		if(instance && instance[0])
			this.obj.player.current_asset_id = instance[0];
		
		//mark item as selected in case of the pasting url and going via History object
		if(instance && instance[0])
			this._selectAsset(instance[0]);
	},
	_onPhotoZoom: function(event, _target, obj) {
		Gallery.showPhoto(obj.ci_id);

//		preview.Image({src: obj.photo_url, description: obj.description})
	},	
	_cleanPlayerContent: function(){
		var _children = this._getChildren(this.obj.player.asset);
		for(var i=0;i<_children.length;i++)
			this._removeDOM(_children[i]);		
		var _children = this._getChildren(this.obj.player.description);
		for(var i=0;i<_children.length;i++)
			this._removeDOM(_children[i]);
		this.obj.player.description.innerHTML = "";
	},
	_onMouseEvent: function(event, _target, obj) {
		if(event.type=='mouseover') 
			this._addClass(obj, 'element-media-gallery-asset-mouseover');
		else if(event.type=='mouseout') 
			this._removeClass(obj, 'element-media-gallery-asset-mouseover');
	},
	_onSubmenuMouseEvent: function(event, _target, obj) {
		if(event.type=='mouseover') 
			this._addClass(obj, 'element-media-gallery-tab-submenu-item-mouseover');
		else if(event.type=='mouseout') 
			this._removeClass(obj, 'element-media-gallery-tab-submenu-item-mouseover');
	},
	_selectSubMenu: function(obj) {
		var tab = this.tabs.GetSelectedTab();		
		for(var i=0;i<tab.submenu.items.length;i++) {
			this._removeClass(tab.submenu.items[i], 'element-media-gallery-tab-submenu-item-selected');
			tab.submenu.items[i].selected = false;
		}
		this._addClass(obj, 'element-media-gallery-tab-submenu-item-selected');
		obj.selected = true;
	},
	_isBlockActive: function(id) {
		
	},
	_isAssetActive: function(id) {
		return (this.obj.player.current_asset_id==id)?true:false;
	},
	_selectAsset: function(id) {
		var tab = this.tabs.GetSelectedTab();		
		var selected = tab.submenu.items[0].submenu.GetSelectedMenu();

		if(selected[0]&&selected[0]['assets']&&selected[0]['assets']['photo'])
			for(var i=0;i<selected[0]['assets']['photo'].length;i++)
				if(selected[0]['assets']['photo'][i].options.asset_id == id) { 
					this._addClass(selected[0]['assets']['photo'][i], 'element-media-gallery-asset-selected');
					return;
				}	
		if(selected[0]&&selected[0]['assets']&&selected[0]['assets']['video'])
			for(var i=0;i<selected[0]['assets']['video'].length;i++)
				if(selected[0]['assets']['video'][i].options.asset_id == id) { 
					this._addClass(selected[0]['assets']['video'][i], 'element-media-gallery-asset-selected');
					return;
				}		
		if(selected[0]&&selected[0]['assets']&&selected[0]['assets']['audio'])
			for(var i=0;i<selected[0]['assets']['audio'].length;i++)
				if(selected[0]['assets']['audio'][i].options.asset_id == id) { 
					this._addClass(selected[0]['assets']['audio'][i], 'element-media-gallery-asset-selected');
					return;
				}
	
		
	},
	_moveAdvertisement: function(){
		//move opensocket banner to the right place
		var _children = this._getChildren($E('hc-right-banners'));
		for(var i=0;i<_children.length;i++) {
			//if(_children[i].tagName.toLowerCase() == 'div') {
			//	var td = this._insertDOM(this.obj.banner.table.tr, {objType: 'td'}, 'insertinto');
			//	td.appendChild(_children[i]);				
			//}
			this._insertDOM(this.obj.banner, {newNode: _children[i]}, 'insertinto');
		}
	},
	_unselectAllAssets: function() {
		var tab = this.tabs.GetSelectedTab();		
		var selected = tab.submenu.items[0].submenu.GetSelectedMenu();

		if(selected[0]&&selected[0]['assets']['video'])
			for(var i=0;i<selected[0]['assets']['video'].length;i++)
				this._removeClass(selected[0]['assets']['video'][i], 'element-media-gallery-asset-selected');
		if(selected[0]&&selected[0]['assets']['photo'])
			for(var i=0;i<selected[0]['assets']['photo'].length;i++)
				this._removeClass(selected[0]['assets']['photo'][i], 'element-media-gallery-asset-selected');
		if(selected[0]&&selected[0]['assets']['audio'])
			for(var i=0;i<selected[0]['assets']['audio'].length;i++)
				this._removeClass(selected[0]['assets']['audio'][i], 'element-media-gallery-asset-selected');
		
	}
});
