(function($) {
	var _inViewport = [];
	
	var _isInViewport = function(element) {
		return $(window).scrollTop() < ($(element).offset().top + $(element).height())
			&& ($(window).height() + $(window).scrollTop()) > $(element).offset().top
			&& $(window).scrollLeft() < ($(element).offset().left + $(element).width())
			&& ($(window).width() + $(window).scrollLeft()) > $(element).offset().left;
	};
	
	$.fn.adsTrack = function(settings) {
		var config = {
			'host' : '',
			'context' : '',
			'resourceType' : undefined,
			'id' : undefined,
			'position' : undefined
		};

		if (settings)
			$.extend(config, settings);

		var _adsTrackImpression = function(element) {
			if (_isInViewport(element)) {
				var key = config.id + '-' + config.position;
				if ($.inArray(key, _inViewport) == -1) {
					_inViewport.push(key);
					$.getJSON(config.host + config.context + '/api/tracker/' + config.id + '/impression.json?callback=?', { 'position' : config.position });
				}
			}
		};
		
		if (config.resourceType === undefined || config.id === undefined || config.position === undefined)
			return this;

		this.each(function(i, element) {
			// track show
			$.getJSON(config.host + config.context + '/api/tracker/' + config.id + '/show.json?callback=?', { 'position' : config.position });
			_adsTrackImpression(element);
			$(window).bind('scroll', function(e) {
				_adsTrackImpression(element);
			});
		});

		return this;
	};

})(jQuery);

$(document).ready(function($){
	var host = 'http://ads.dskb.cn';
//	var host = 'http://ads.local';
	var context = '';
	var hasProjection = false;
	function _projection(obj, item){
//		var swidth = window.document.width ? window.document.width : document.body.clientWidth;
		var swidth = $(window).width();
		var dwidth = item.width;
		var left = 0 - (dwidth - swidth) / 2;
//		if($.browser.msie) {
//			left -= 0.5;
//		}
		obj.css({
			'width' : (swidth - left) + 'px', 
			'height' : item.height + 'px', 
			'left' : left + 'px', 
			'overflow' : 'hidden',
			'position' : 'absolute', 
			'top' : 0
		});
		hasProjection = true;
	};
	$('.kb_ad_client').each(function() {
		var $this = $(this);
		var url = host + context + '/api/ads/' + $this.attr('rel') + '.json?callback=?';
		$.getJSON(url, function(data, textStatus){
			for(var i = 0; i < data.list.length; i++) {
				var item = data.list[i];
				if (item.type == 'TEXT') {
					var ad;
					if (item.link) {
						ad = $('<div>').append($('<a>').attr({ 
							'href' : host + context + '/api/tracker/' + item.id + '/click.xhtml?' + $.param({ 'position' : data.id, 'referrer' : location.href, 'link' : item.link}),
							'target' : item.target
						}).text(item.title));
					} else {
						ad = $('<div>').attr({ 
							'width' : item.width,
							'height' : item.height
						}).append(item.description);
					}
					$this.append(ad);
					ad.adsTrack({
						'host' : host,
						'context' : context,
						'resourceType' : item.type,
						'id' : item.id,
						'position' : data.id
					});
					
					continue;
				} if (item.type == 'PICTURE') {
					var ad = $('<div>').append($('<a>').attr({
						'href' : host + context + '/api/tracker/' + item.id + '/click.xhtml?' + $.param({ 'position' : data.id, 'referrer' : location.href, 'link' : item.link}),
						'target' : item.target
					}).append($('<img>').attr({
						'src' : host + item.file.url,
						'width' : item.width,
						'height' : item.height,
						'border' : 0,
						'alt' : item.description
					})).attr({ 'title' : item.description }));
					$this.append(ad);
					ad.adsTrack({
						'host' : host,
						'context' : context,
						'resourceType' : item.type,
						'id' : item.id,
						'position' : data.id
					});
				} else if(item.type == 'FLASH') {
					var obj = $('<object>').attr({
                        'classid': 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000',
						'width' : item.width,
						'height' : item.height,
						'type' : 'application/x-shockwave-flash',
                        'data' : host + '/scripts/TemplateContainer.swf'
						/*'flashvars' : $.param({
							'TEMPLATE_WIDTH' : item.width,
							'TEMPLATE_HEIGHT' : item.height,
							'TEMPLATE_URL' : host + item.file.url,
							'TEMPLATE_AIT_URL' : host + context + '/api/tracker/' + item.id + '/click.xhtml?' + $.param({ 'position' : data.id, 'referrer' : location.href, 'link' : item.link})
						})*/
					}).append($('<param>').attr({ name: 'wmode', value: 'transparent' }))
					  .append($('<param>').attr({ name: 'movie', value: host + '/scripts/TemplateContainer.swf' }))
                      .append($('<param>').attr({ name: 'allowScriptAccess', value: 'always' }))
                      .append($('<param>').attr({ name: 'flashvars', value: $.param({
							'TEMPLATE_WIDTH' : item.width,
							'TEMPLATE_HEIGHT' : item.height,
							'TEMPLATE_URL' : host + item.file.url,
							'TEMPLATE_AIT_URL' : host + context + '/api/tracker/' + item.id + '/click.xhtml?' + $.param({ 'position' : data.id, 'referrer' : location.href, 'link' : item.link})
						})}));
					if(!$.browser.msie) {
						obj.append($('<embed>').attr({
							'width' : item.width,
							'height' : item.height,
							'wmode' : 'transparent',
							'type' : 'application/x-shockwave-flash',
							//'src' : host + item.file.url,
                            'src' : host + '/scripts/TemplateContainer.swf',
							'flashvars' : $.param({
								'TEMPLATE_WIDTH' : item.width,
								'TEMPLATE_HEIGHT' : item.height,
								'TEMPLATE_URL' : host + item.file.url,
								'TEMPLATE_AIT_URL' : host + context + '/api/tracker/' + item.id + '/click.xhtml' + $.param({ 'position' : data.id, 'referrer' : location.href, 'link' : item.link})
							})
						}));
					}
					var ad = $('<div>').append(obj);
					$this.append(ad);
					ad.adsTrack({
						'host' : host,
						'context' : context,
						'resourceType' : item.type,
						'id' : item.id,
						'position' : data.id
					});
				}
				
				if (item.width>960) {
					$(window).bind('resize', function(event){
						_projection($this, item);
					});
					_projection($this, item);
				} else if(hasProjection) {
					$this.css({ 'position' : 'relative' });
				}
			}
		});
	});
});

