var Class = {
  create: function() {
    return function() {
      this.initialize.apply(this, arguments);
    }
  }
}


Object.extend = function(destination, source) {
  for (var property in source) {
    destination[property] = source[property];
  }
  return destination;
}

Function.prototype.bind = function() {
  var a = new Array();
  for(var i=0;i<arguments.length;i++){
	a[i] = arguments[i];
  }

  var __method = this, args = a, object = args.shift();
  return function() {
    return __method.apply(object, args.concat(a));
  }

}

function setHits(adId){
	if(!adId) return;
	var iRadm = Math.random();
	var url = "/php/includes/advertiser_sevlet.php";
	$.getJSON(url,{"func": "hit", "id": adId, "rom": iRadm });
}

function getPageSize(){
	var xScroll, yScroll;
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { 
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight, scrollTop;
	if (self.innerHeight) {	
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
		scrollTop = self.pageYOffset ;
	} else if (document.documentElement && document.documentElement.clientHeight) {
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
		scrollTop = document.documentElement.scrollTop;
	} else if (document.body) { 
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
		scrollTop = document.body.scrollTop;
	}	


	pageHeight = (yScroll < windowHeight) ? windowHeight : yScroll;
	pageWidth = (xScroll < windowWidth) ? windowWidth : xScroll;

	arrayPageSize = [pageWidth,pageHeight,windowWidth,windowHeight,scrollTop];
	return arrayPageSize;
}

/************************************/
//[1:图片，2:flash，3:视频，4:文字，5:桌面飘浮，6:首页弹出，7:首页全屏]


/**
* 文字广告
*/
var TextAdvertiser = Class.create();
TextAdvertiser.prototype = {
	initialize: function(options) {
		this.options = Object.extend({
			data   : new Array(), //[{id:'',txt:'',url:''},...]
			width  : 100,
			height : 100,
			speed  : 400
		}, options);

		this.divId = "_TextAdvertiser" + Math.ceil(Math.random() * 10000);

		this.writeAd();
	},

	writeAd: function(){ // 生成广告
		var iLen = this.options.data.length;
		if(!iLen) return;
		var d = this.options.data[0];
		if(iLen == 1){ //只生成一个广告
			document.write('<div id="'+ this.divId +'" style="height:'+ this.options.height +'px;width:'+ this.options.width +'px;"><a rel="advertiser_count_hits" adid="'+ d.id +'" href="'+ d.url +'" target="_blank">'+ d.txt +'</a></div>');
		}else{ //生成可滚动的文字
			document.write('<marquee id="'+ this.divId +'" direction="up" width="'+ this.options.width +'" height="'+ this.options.height +'" scrolldelay="'+ this.options.speed +'" onMouseOver="this.stop();" onMouseOut="this.start()">');
			for(var i=0;i<iLen;i++){
				d = this.options.data[i];
				document.write('<li title="' + d.txt + '" style="cursor:pointer"><a rel="advertiser_count_hits" adid="'+ d.id +'" href="'+ d.url + '" target="_blank">'+ d.txt +'</a></li>');
			}
			document.write("</marquee>");
		}
	}
}



/**
* Flash广告
*/
var FlashAdvertiser = Class.create();
FlashAdvertiser.prototype = {
	initialize: function(options) {
		this.options = Object.extend({
			path   : "",
			width  : 100,
			height : 100
		}, options);
		
		this.writeAd();
	},

	writeAd: function(){ // 生成广告
		if(this.options.path == "" ) return;
		document.write('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="'+this.options.width+'" height="'+this.options.height+'">');
		document.write('<param name="movie" value="'+this.options.path+'" />');
		document.write('<param name="quality" value="high" />');
		document.write('<embed src="'+this.options.path+'" width="'+this.options.width+'" height="'+this.options.height+'" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash"></embed>');
		document.write('</object>');
	}
}



/**
* 视频广告
*/
var VideoAdvertiser = Class.create();
VideoAdvertiser.prototype = {
	initialize: function(options) {
		this.options = Object.extend({
			path   : "",
			width  : 100,
			height : 100
		}, options);
		
		this.writeAd();
	},

	writeAd: function(){ // 生成广告
		if(this.options.path == "" ) return;
		document.write('<embed src="'+this.options.path+'" width="'+this.options.width+'" height="'+this.options.height+'" type=audio/mpeg AUTOSTART="1" loop="-1""></embed>');
	}
}




/**
*  浮动广告 
*  需要传入 <HashMap>形式的参数对象
*/
var FloatAdvertiser = Class.create();
FloatAdvertiser.prototype = {
	initialize: function(options) {
		this.options = Object.extend({
			adid   : "",
			pic    : "",
			url    : "http://www.fc114.com",
			title  : "漂浮广告",
			width  : 100,
			height : 100,
			iSpeed : 3
		}, options);

		this.x = 0;
		this.y = 0;
		this.dx = this.options.iSpeed;
		this.dy = this.options.iSpeed;

		this.divId = "_FloatAdvertiser" + Math.ceil(Math.random() * 10000);

		//this.popup =  window.createPopup(); 
		//this.isIE =  (window.navigator.appName=="Microsoft Internet Explorer"&&window.navigator.appVersion.substring(window.navigator.appVersion.indexOf("MSIE")+5,window.navigator.appVersion.indexOf("MSIE")+8)>=5.5);
		this.timeout = null;
		this.writeAd();
	},

	move: function(){
		var _oAd = null;
		if(!_oAd) _oAd = $("#" + this.divId);
		//if($.browser.msie){
			this.x += this.dx;
			this.y += this.dy;
			var arrSize = getPageSize();
			_oAd.css({"left": this.x +"px","top": this.y +"px"});
			if(this.x + this.options.width + 5 > arrSize[2] ) this.dx = - this.dx;
			if(this.y + this.options.height + 5 > arrSize[3] )  this.dy = - this.dy;
			if(this.x < 0) this.dx = - this.dx;
			if(this.y < 0) this.dy = - this.dy; 
			this.timeout = setTimeout(this.move.bind(this),50); 
		//}
	},

	pause: function(){
		clearTimeout(this.timeout);
	},

	stop: function(){
		clearTimeout(this.timeout);
		var _oAd = null;
		if(!_oAd) _oAd = $("#" + this.divId);
		_oAd.css("display","none");
		//this.popup.hide();
	},

	writeAd: function(){
		document.write('<div id="'+ this.divId +'" style="border: 1px #ccc dotted;background-color: #EBEBEB;height:'+ this.options.height +'px;width:'+ this.options.width +'px;position:absolute; z-index:1000">');
		document.write("<a rel='advertiser_count_hits' adid='"+ this.options.adid +"'  href='"+ this.options.url +"' target='_blank'><img src='" + this.options.pic + "' alt='" + this.options.title + "' border=0 width='" + this.options.width + "' height='" + this.options.height + "'></a>");
		document.write("<img src='/images/closelabel.gif' rel='del' align='right' style='cursor:pointer'/>");
		document.write("</div>");
		var _oAd = null;
		if(!_oAd) _oAd = $("#" + this.divId);
		_oAd.get(0).onmouseover = this.pause.bind(this);
		_oAd.get(0).onmouseout = this.move.bind(this); 
		$("img[@rel=del]",_oAd).get(0).onclick =  this.stop.bind(this);
		this.move();
	}	
}


/**
*  定时切换广告 
*  需要传入 <HashMap>形式的参数对象
*/
var SwitchAdvertiser = Class.create();
SwitchAdvertiser.prototype = {
	initialize: function(options) {
		this.options = Object.extend({
			data    : new Array(), //[{id:'',img:'',url:'',txt:''},...]
			width   : 100,
			height  : 100,
			times   : 10,
			defImg  : "/images/logo.jpg",
			showTxt : true,
			flash   : false
		}, options);
		
		this.iRan = Math.ceil(Math.random() * 10000);
		this.imgId = "_FloatAdvertiser_Img_" + this.iRan;
		this.txtId = "_FloatAdvertiser_Txt_" + this.iRan;

		this.picNum = 1;
		this.writeAd();
	},

	switchAd: function(){
		var iLen = this.options.data.length;
		var _oImg = $("#" + this.imgId),_oTxt = $("#" + this.txtId);
		_oImg.css({width:this.options.width,height:(this.options.showTxt ? (this.options.height-15) : this.options.height)});
		if(document.all) {
			var ran = Math.round(Math.random()*23);
			_oImg.get(0).filters.revealTrans.Transition = ran; 
			_oImg.get(0).filters.revealTrans.apply(); 
			_oImg.get(0).filters.revealTrans.play();
		}

		var obj =  this.options.data[this.picNum-1];
		_oImg.attr({src:obj.img,alt:obj.txt});
		_oImg.parent().eq(0).attr({href:obj.url,target:"_blank",adid:obj.id});
		_oImg.parent().eq(0).css("display","block"); 
		_oTxt.html("<a rel='advertiser_count_hits' adid='"+ obj.id +"' href='" + obj.url+ "' title='"+ obj.txt +"' target='_blank'>" + obj.txt + "</a>");
		if(!this.options.showTxt) _oTxt.css("display","none");

		if(iLen > 1){ //切换
			this.picNum < iLen ? (this.picNum ++) : (this.picNum = 1);
			setTimeout(this.switchAd.bind(this), this.options.times * 1000);
		}

	},

	writeAd: function(){
		var iLen = this.options.data.length;
		if(iLen == 0) {
			document.write('<img id="'+ this.imgId +'" src="'+ this.options.defImg +'" width="'+ this.options.width +'" height="'+ this.options.height +'" border="0" vspace="0" />');
			return;
		}

		if(this.options.flash){
			var obj=null,pics="",links="",texts="";
			var txtHeight = 0;
			if(this.options.showTxt) txtHeight = 22;
			
			for(var i=0;i<iLen;i++){
				obj = this.options.data[i];
				pics  += "|" + obj.img;
				links += "|" + obj.url;
				texts += "|" + obj.txt;
			}
			
			pics  = pics.substr(1);
			links = links.substr(1);
			texts = texts.substr(1);

			document.write('<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="'+ this.options.width  +'" height="'+ this.options.height  +'" style="display:block">');
			document.write('<param name="allowScriptAccess" value="sameDomain"><param name="movie" value="/images/pix.swf"><param name="quality" value="high"><param name="bgcolor" value="#F0F0F0">');
			document.write('<param name="menu" value="false"><param name=wmode value="opaque">');
			document.write('<param name="FlashVars" value="pics='+pics+'&links='+links+'&texts='+texts+'&borderwidth='+this.options.width +'&borderheight='+(this.options.height-txtHeight) +'&textheight='+txtHeight+'">');
			document.write('<embed src="pix.swf" wmode="opaque" FlashVars="pics='+pics+'&links='+links+'&texts='+texts+'&borderwidth='+this.options.width+'&borderheight='+(this.options.height-txtHeight)+'&textheight='+txtHeight+'" menu="false" bgcolor="#F0F0F0" quality="high" width="'+ this.options.width +'" height="'+ this.options.height +'" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />');
			document.write('</object>');
		}else{
			document.write('<a href="javascript:void(0)" rel="advertiser_count_hits"><img id="'+ this.imgId +'" src="javascript:void(0)" border="0" vspace="0" style="border: 1px solid #999999;padding:1px;filter:revealTrans(duration=1,transition=5);"/> </a> ');
			document.write('<div id="'+ this.txtId +'" class="switchAdText" style="width:'+this.options.width+'px;text-align:center;overflow:hidden;text-overflow:ellipsis;-o-text-overflow:ellipsis;white-space:nowrap;">&nbsp;</div>');
			this.switchAd();
		}
	}
}

/**
*  首页弹出广告 
*  需要传入 <HashMap>形式的参数对象
*/
var PopAdvertiser = Class.create();
PopAdvertiser.prototype = {
	initialize: function(options) {
		this.options = Object.extend({
			adid   : "",
			url    : "",
			width  : 400,
			height : 300
		}, options);
		this.writeAd();
	},

	writeAd: function(){
		var arrSize = getPageSize();
		var top = Math.ceil((arrSize[3] - this.options.height)/2) ;
		var left = Math.ceil((arrSize[2] - this.options.width)/2);
		setHits(this.options.adid);
		window.open(this.options.url,"_blank","width="+this.options.width+", height="+ this.options.height +", menubar=0, resizable=0, status=0, location=0, top="+top+", left="+left);
	}
}


/**
*  首页全屏广告 
*  需要传入 <HashMap>形式的参数对象
*/
var FullScreenAdvertiser = Class.create();
FullScreenAdvertiser.prototype = {
	initialize: function(options) {
		this.options = Object.extend({
			adid   : "",
			img    : "",
			url    : "http://www.fc114.com",
			width  : 780,
			height : 460,
			speed  : 8,
			flash  : false
		}, options);
		this.timeout = null;
		
		this.iRan = Math.ceil(Math.random() * 10000);
		this.sDivId = "_FullScreenAdvertiser_" + this.iRan;
		this.rDivId = "_FullScreenAdvertiser_Replay_" + this.iRan;

		this.writeAd();
	},

	show: function(){
		var width = this.options.width, height = this.options.height, url = this.options.url;
		var _oFdiv = $("#" + this.sDivId), _oRDiv = $("#" + this.rDivId);
		_oFdiv.css({"display":"none","width":width,"height":height,"cursor":"pointer"});
		_oFdiv.slideDown(this.options.speed*1000,function(){
			_oFdiv.css({"overflow":"hidden","width":width,"height":height});
		});
		
		if(!this.options.flash){
			_oFdiv.bind("click", function(){
				window.open(url);
				setHits(this.options.adid);
			});
		}
		this.timeout = setTimeout(this.hide.bind(this),(this.options.speed+5)*1000);
		_oRDiv.css("display","none");
	},

	hide: function(){
		clearTimeout(this.timeout);
		var _oFdiv = $("#" + this.sDivId), _oRDiv = $("#" + this.rDivId);
		_oFdiv.slideUp(this.options.speed*1000);
		_oRDiv.css("display","none");
	},

	writeAd: function(){
		document.write('<div id="'+ this.sDivId + '" style="overflow:hidden;border: 1px solid #6b6e73;top:0px;">&nbsp;</div>');
		document.write('<div id="'+ this.rDivId +'" style="width:50px;height:50px;position:absolute;z-index:1000;left:200px;top:300px">关闭</div>');
		
		var arrSize = getPageSize();
		var left = arrSize[2]-60, top = arrSize[3]-60;
		var _oFdiv = $("#" + this.sDivId), _oRDiv = $("#" + this.rDivId);
		_oRDiv.css({"left":left, "top":top});

		if(this.options.flash){
			_oFdiv.html("Flash");
		}else{
			_oFdiv.html("<img src='"+ this.options.img +"' width='"+this.options.width+"' height='"+this.options.height+"' border='0'/>");
		}
		
		window.onscroll = function(){_oRDiv.css("top", top + getPageSize()[4]);};
		_oRDiv.get(0).onclick = this.hide.bind(this);

		this.show();
	}
}


/**
*  对联广告 
*  需要传入 <HashMap>形式的参数对象
*/
var CoupletAdvertiser = Class.create();
CoupletAdvertiser.prototype = {
	initialize: function(options) {
		this.options = Object.extend({
			adid   : "",
			img    : "",
			url    : "http://www.fc114.com",
			align  : "left",
			width  : 100,
			height : 125
		}, options);
		
		this.divId = "_CoupletAdvertiser_" + Math.ceil(Math.random() * 10000);
		this.iCZize = parseInt($(".pagecenter").eq(0).css("width"));
		this.iCZize = isNaN(this.iCZize) ? 780 : this.iCZize;

		this.top  = 5;
		this.left = Math.ceil(((getPageSize()[0] - this.iCZize) / 2 -  this.options.width) / 2);
		if(this.options.align == "right") this.left = getPageSize()[0] - this.left - this.options.width;
		this.show = this.iCZize + this.options.width;
		this.writeAd();
	},

	writeAd: function(){
		document.write('<div id="'+ this.divId +'" style="border: 1px #ccc dotted;background-color: #EBEBEB;height:'+ this.options.height +'px;width:'+ this.options.width +'px;position:absolute; z-index:1010;left:'+ this.left +'px;top:'+ this.top +'px;">');
		document.write("<a rel='advertiser_count_hits' adid='"+ this.options.adid +"' href='"+ this.options.url +"' target='_blank'><img src='" + this.options.img + "' border=0  width='" + this.options.width + "' height='" + this.options.height + "'></a>");
		document.write("<img src='/images/closelabel.gif' rel='del' align='right' style='cursor:pointer'/>");
		document.write("</div>");
		if(getPageSize()[0] < this.show) $("#" + this.divId).css("display","none");
		window.onscroll = this.changePostion.bind(this);
		window.onresize = this.showAd.bind(this);
		$("img[@rel=del]",$("#" + this.divId)).get(0).onclick =  this.close.bind(this);
	},

	changePostion: function(){
		var ad = $("#" + this.divId), arrPage = getPageSize();
		ad.css("top",arrPage[4] + this.top);
		//alert(arrPage);
	},

	showAd: function(){
		var ad = $("#" + this.divId), arrPage = getPageSize();
		if(arrPage[0] < this.show) ad.css("display","none");
		else ad.css("display","block");
		this.left = Math.ceil(((getPageSize()[0] - this.iCZize) / 2 -  this.options.width) / 2);
		if(this.options.align == "right") this.left = getPageSize()[0] - this.left - this.options.width;
		ad.css("left",this.left);
	},
	
	close: function() {
		var ad = $("#" + this.divId);
		ad.css("display","none");
	}
}

jQuery(function(){
	$("a[@rel=advertiser_count_hits]").bind("click",function(){
		var adid = $(this).attr("adid");
		if(adid) setHits(adid);
	});
});
