function aindexOf(a,obj)
{
    for(var i=0; i<a.length; i++){
        if(a[i]==obj){
            return i;
        }
    }
    return -1;
}
function makeDoubleDelegate(function1, function2) {
    return function() {
        if (function1)
            function1();
        if (function2)
            function2();
    }
}


(function(){
    var $ = jQuery;
	$.banners = {};
    $.banners.defaults = 
    {
    	flashStageURL : "/media/banners/bannerStageSmall.swf",
    	bannersURL : "/media/",
    	replace : "msk",
    	adredirectorURL : "/adredirector.wbp",
    	stageWidth : 486,
    	stageHeight : 200,
    	stageColor : "#fff",
	    stageVersion : "9",    		
    	stageParams :
    		[
    			{paramName: "wmode", paramValue : "opaque"},
    			{paramName: "allowScriptAccess", paramValue : "always"}
    		]    		
    };
    window.onload = makeDoubleDelegate(window.onload, function(){$.banners.drawAllBanners();});

    $.banners.groups = new Array();
    $.banners.drawAllBanners = function()
    {
    	var i,j;
    	for (i = 0; i< $.banners.groups.length; i++)
    	{
    		var gr = $.banners.groups[i]
    		for (j = 0; j<gr.BannerStages.length; j++)    		
    		{    			
				gr.BannerStages[j].drawBanner();    			
    		}
    	}
    }
    
    function getFlashMovie(movieName) 
    {   
    	var isIE = navigator.appName.indexOf("Microsoft") != -1;   
    	return (isIE) ? document.getElementById(movieName) : document[movieName];  
    }     
    $.banners.getGroupById = function(Id)
    {
    	var i;
    	var groups = $.banners.groups;
    	
    	for (i=0; i<groups.length; i++)
    	{
    		if (groups[i].Id == Id) return groups[i];
    	}
    	return null;
    }
    $.banners.addBannersGroup = function(options)
    {
	    var group = new Object();
	    group.settings = $.extend($.banners.defaults, options);
	    group.Id = AdGroupId;
	    group.Count = AdBannerId.length;
	    group.AdBannerId = AdBannerId;
	    group.AdMediaId = AdMediaId;
	    group.AdMediaWidth = AdMediaWidth;
	    group.AdMediaHeight = AdMediaHeight;
	    group.AdText = AdText;
	    group.BannerStages = new Array();
	    group.SelectedInds = new Array();
	    group.FreeInds = new Array();
	    
	    for (var i=0; i<group.Count; i++)
	    {
	    	group.FreeInds.push(i);
	    }
	    group.getStageById = function(Id)
    	{
    		var i;
    		var stages = group.BannerStages;
	    	for (i=0; i<stages.length; i++)
    		{
    			if (stages[i].StageId == Id) return stages[i];
    		}
    		return null;
    	}
	    group.getFreeBanner = function()
	    {
	    	//var i = group.FreeInds.pop();
	    	if (group.FreeInds.length == 0 ) return -1;
	    	var i = group.FreeInds[0];
	    	group.FreeInds.splice(0,1);	    	
	    	group.SelectedInds.push(i);
	    	return i;	
	    }
	    group.registerBannerStage  = function(stage)
	    {
	    	var bstage = new Object();
			bstage.SelectedIndex = group.getFreeBanner();			
			bstage.StageId = stage.attr("id");
			bstage.Group = group;
			
			bstage.drawStage = function()
			{
				var s = group.settings;
				var url = s.flashStageURL+"?stageId="+bstage.StageId+"&groupId="+group.Id;	
				var so = new SWFObject(url,bstage.StageId+"Flash",s.stageWidth,s.stageHeight,s.stageVersion,s.stageColor);
				for (i = 0; i<s.stageParams.length; i++)									
				{
					so.addParam( s.stageParams[i].paramName, s.stageParams[i].paramValue );
				}
				so.write(bstage.StageId);
			}
			bstage.drawBanner = function()
			{
				var s = group.settings;
				var index = bstage.SelectedIndex;
								
				var uri = s.adredirectorURL +"?gid="+group.Id+"&id="+group.AdBannerId[index]+"&replace=" + s.replace;
				var url = s.bannersURL+group.AdText[index];
				var movie = getFlashMovie(bstage.StageId+"Flash");				
				if (movie.drawBanner)movie.drawBanner(url,uri);
					else setTimeout(bstage.drawBanner,500);				
			}
			bstage.next = function()
			{
				var oldindex = bstage.SelectedIndex;
				var index = bstage.SelectedIndex;
				var count = 0;
				while ((count < group.Count) || (aindexOf(group.SelectedInds,index) != -1))
				{
					count++;
					index++;
					if (index == group.Count) index = 0;
				}
				bstage.SelectedIndex = index;
				group.SelectedInds.push(index);
				group.FreeInds.push(oldindex);
				group.SelectedInds.splice(aindexOf(group.SelectedInds,oldindex),1);
				group.FreeInds.splice(aindexOf(group.FreeInds,index),1);
				bstage.drawBanner();
			}
			bstage.prev = function()
			{
				var oldindex = bstage.SelectedIndex;
				var index = bstage.SelectedIndex;
				var count = 0;
				while ((count < group.Count) || (aindexOf(group.SelectedInds,index) != -1))
				{
					count++;
					index--;
					if (index == -1) index = group.Count-1;
				}
				bstage.SelectedIndex = index;
				group.SelectedInds.push(index);
				group.FreeInds.push(oldindex);
				group.SelectedInds.splice(aindexOf(group.SelectedInds,oldindex),1);
				group.FreeInds.splice(aindexOf(group.FreeInds,index),1);
				bstage.drawBanner();
			}
			bstage.goDirect = function(num)
			{
				var oldindex = bstage.SelectedIndex;
				if (aindexOf(group.SelectedInds,num) == -1) group.SelectedInds.push(num);
				bstage.SelectedIndex = num;
				group.FreeInds.splice(aindexOf(group.FreeInds,oldindex),1);
				bstage.drawBanner();
			}

	    	group.BannerStages.push(bstage);
	    	return bstage;	    	
	    }	    
    	$.banners.groups.push(group);
    }
    
    $.fn.banner = function(groupId)
    {
    	var group = $.banners.getGroupById(groupId);
    	var bstage = group.registerBannerStage(this);    	   	    	
    	bstage.drawStage();
    }
})();
