/*********************************************************
*		Advertisement CLASS
*		Designed & developed by Dima Svirid, 2008	
*		Class: advertisement.js
*	  Extends: api.src.javascript.system
*********************************************************/
$WI.Class.Advertisement = new $WI.Class({
	Create: function(options) {
		this.options = options;			
		this.uuid = options.uuid;
		this.placer = $E(this.options.uuid);		
		this._loadBanners();
	},	
	_loadBanners: function() {			
		this.Request({url: this.getAjaxURL() + '&ReadInfo=true', method: 'GET', onComplete: this._loadResults});				
	},
	_loadResults: function(xml, text) {
		this.xml = xml;
		this.priority = [];
		this.banners = [];
		this.num_displayed_banners = parseInt(this.xml.getNodeValue('//advertisement/properties/num_displayed_banners'));
		this.num_columns = parseInt(this.xml.getNodeValue('//advertisement/properties/num_columns'));
		this.rotation_frequency = parseInt(this.xml.getNodeValue('//advertisement/properties/rotation_frequency'));
		var result = xml.List("banners");					

		for(var i=0;i<result.length;i++) {
			//prevent banner display if it overlimited max number of display
			if(result[i].display_max!='' && result[i].display_max < result[i].lbs_display_count) continue;
			var __priority = result[i].priority;
			for(var j=0;j<__priority;j++) this.priority.push(result[i].ab_id); 
			this.banners[result[i].ab_id] = result[i];
		}				

		if(result.length > 0)
			this._showBanners();
		else
			this._cleanPlace();
		
		if(this.rotation_frequency > 0)
			setInterval(function(){this._showBanners()}.Apply(this), this.rotation_frequency*1000);		
	},
	_showBanners: function() {
		this.obj = this._createDOM({objType: 'table', cellPadding: '0px', cellSpacing: '0px'});
		var current_col = 1;	
		var _appender = this.obj.tr;
		var _logged = [];
		
		for(var i=0;i<this.num_displayed_banners;i++) {
			if(this.priority.length==0) this._regeneratePriorityList();
			//generating random banner number
			if(this.priority.length==1) _randNum = 0;
			else  _randNum = $WI.System.Random(this.priority.length-1);
			
			var _randBanner = this.banners[this.priority[_randNum]];

			//create a new line
			if(this.num_columns < current_col) {
				current_col = 1;
				_appender = this._insertDOM(this.obj.tbody, {objType: 'tr'}, 'insertinto');
			}
			
			this._insertDOM(_appender, {newNode: this._createBanner(_randBanner)}, 'insertinto');
			
			//log banner id
			_logged.push(_randBanner.ab_id);
			
			//lets remove banner from the priority list			
			var _index = this.priority.Search(_randBanner.ab_id);
			if(_index != -1) this.priority.splice(_index, _randBanner.priority);			
			
			current_col++;
		}	
		
		//insert main banner object into the page
		this._cleanPlace();
		this._insertDOM(this.placer, {newNode: this.obj}, 'insertinto');	
		
		//execute logger
		this.Request({url: this.getAjaxURL() + '&LogBanner=true', method: 'POST', parameters: '&member_uuid=' + this.options.memberUuid + '&o1302281-85a4-bd74-f91da41fc01645a3=' + _logged.join(',')});	
					
		return;
	},	
	_regeneratePriorityList: function() {
		this.priority = [];
		var result = this.xml.List("banners");
		for(var i=0;i<result.length;i++) {
			//prevent banner display if it overlimited max number of display
			if(result[i].display_max!='' && result[i].display_max < result[i].lbs_display_count) continue;
			var __priority = result[i].priority;
			for(var j=0;j<__priority;j++) this.priority.push(result[i].ab_id); 
		}
	},
	_createBanner: function(banner) {
		var file_ext = banner.ab_banner_filename.split('.').pop();
		var column = this._createDOM({objType: 'td', vAlign: 'top'});
		var ___href = null;				

		if(banner.ab_use_ci_id == '' ||  (banner.click_max != '' && parseInt(banner.click_max) < parseInt(banner.lbs_click_count))) {
			//do nothing
		} else { //create a link		
			var ___href = '/index.php/tmpl/request/ci_uuid/' + this.options.contentItemUuid + '/cm_id/' + this.options.clusterMasterId + '/AE4D54E5-8BA4-ED2F-E3C94CAC40A05048/' + banner.ab_id;
		}			
		
		if(banner['ab_type'] == 1)
			this._createFlashBanner(banner, ___href, column);
		else if(file_ext == 'swf')
			this._createFlashBanner(banner, ___href, column);		
		else
			this._createImageBanner(banner, ___href, column);				
		
		//this.obj.tr.appendChild(column);	
		return column;
	},		
	_createFlashBanner: function(banner, ___href, column) {
		var wrapper = null;
		var linking = null;
		if(___href) {
			wrapper = this._insertDOM(column, {objType: 'div', position: 'relative'}, 'insertinto');		
			linking = this._insertDOM(wrapper, {objType: 'div', top: '0px', left: '0px', width: '100%', height: '100%', position: 'absolute', backgroundImage: 'url(/prism_resource/images/spacer.gif)'}, 'insertinto');			
			linking.style.cursor = 'pointer';
			
			if(banner['ab_popup']=='1') {
				this.AddDOMEvent({obj: linking, type: 'click', onevent: function(){$WI.DOM.PopUp(___href, 'BANNER_' + banner['ab_id'], "width=" + this._getScreenWH().w + ", height=" + this._getScreenWH().h + ", top=0, left=0, resizable=1, scrollbars=1, status=1, toolbar=1, location=1, menubar=1, directories=1")}});				
			} else if(banner['ab_popup']=='2') {
				this.AddDOMEvent({obj: linking, type: 'click', onevent: function(){$WI.DOM.PopUp(___href, 'BANNER_' + banner['ab_id'], "width=" + banner['ab_popup_width'] + ", height=" + banner['ab_popup_height'] + ", top=0, left=0, resizable=1, scrollbars=1")}});
			} else {
				this.AddDOMEvent({obj: linking, type: 'click', onevent: function(){location.href = ___href}});						
			}					
		}		
		if(banner['ab_type'] == 1)
			this._insertDOM((wrapper)?wrapper:column, {objType: 'div', html: banner['ab_html']}, 'insertinto');
		else
		 this._insertDOM((wrapper)?wrapper:column, {objType: 'div', html: $WI.Flash("src", banner.banner_url, "width", this._fixPx(banner['ab_banner_width']), "height", this._fixPx(banner['ab_banner_height']), "wmode", "transparent")}, 'insertinto');

		return column;
	}, 
	_createImageBanner: function(banner, ___href, column) {			
			var linking = null;
		
			if(___href) {
				linking = this._insertDOM(column, {objType: 'a'}, 'insertinto');
				linking.style.cursor = 'pointer';				
				
				if(banner['ab_popup']=='1') {				
					linking.href = ___href;
					linking.target = '_blank';
				} else if(banner['ab_popup']=='2') {
					this.AddDOMEvent({obj: linking, type: 'click', onevent: function(){$WI.DOM.PopUp(___href, 'BANNER_' + banner['ab_id'], "width=" + banner['ab_popup_width'] + ", height=" + banner['ab_popup_height'] + ", top=0, left=0, resizable=1, scrollbars=1")}});
				} else {				
					linking.href = ___href;				
				}					
			}
			
			var __img = this._insertDOM((linking)?linking:column, {objType: 'img', src: banner.banner_url, borderWidth: '0px'}, 'insertinto');
			if(banner['ab_banner_width']) __img.style.width = this._fixPx(banner['ab_banner_width']);
			if(banner['ab_banner_height']) __img.style.height = this._fixPx(banner['ab_banner_height']);

		return column;
	}, 
	_cleanPlace: function(){
		var _children = this._getChildren(this.placer);
		for(var i=0;i<_children.length;i++)
			this._removeDOM(_children[i]);
	},
	getAjaxURL: function() {
		return '/index.php?tmpl=request&ci_id=' + this.options.contentItemId + '&la_id=' + this.options.languageId + '&re_id=' + this.options.revisionId + '&cm_id=' + this.options.clusterMasterId + '&ci_socket_name=' + escape(this.options.socketName);
	}
});


