 var distance = 300;
 var count = 0;
 var begin;
 var vxAdSlider;
 var ad;
 var ad_close_btn;
 var time = 100;
 var startFade = false;
 var showClose = true;
 var closeAdBefore = false;
 var clearAfterOpac = false;
 var offset = false;
 var isOpen = false;

 // Set default values
 var direction 		= 	"down";		// Sliding direction
 var pSize			= 	[300,250];	// playerSize, Default: 300px X 250px
 var bSize			=	20;			// border thickness, Default: 20px
 var showClose 		= 	false;		// show close button
 
/*
 * vxAdTransition()
 *
 * Animates and styles the sliding ad
 *
 * params: begin, end, axis
 */
function vxAdTransition(begin, end, axis)
{
	if (ad == null) ad = document.getElementById("vxFlashPlayerSyncIMUFrame");
	count += 1;
	distance = end - begin;
	var adPosition;
	if(count < time)
	{
		adPosition = tween(count, begin, distance, time);
	}else{
		adPosition = end;
		if (end != 0) isOpen = true;
		window.clearInterval(vxAdSlider);
	}
	
	// Begin fade out when 100px from finishing position (0)
	if (startFade == false && ((end < begin && end == 0 && adPosition <= (end+100)) || (begin < end && end == 0 && adPosition >= (end-100)))) {
		startFade = true;
		opacity("vxFlashPlayerSyncIMUFrame", 100, 0, 500);
	}
	
	ad.style.borderStyle = "solid";
	ad.style.borderColor = "#DFD5C9";
	ad.style.borderWidth = bSize + "px"; //bHeight + "px " + bWidth + "px";
	
	if(axis == "x") // Animate left/right
	{
		//debugOutput(adPosition);
		ad.style.left = adPosition + "px";
		ad.style.top = 0 + "px";
	} else if (axis == "y") { // Animate up/down
		ad.style.top = adPosition + "px";
		ad.style.left = 0 + "px";
	}
	
	// Offset companion ad appropriately if not aligned with the top-left corner of the flash player
	if (!offset)
	{
		var adpos = findPos(ad);
		var flppos = findPos(document.getElementById("vxFlashPlayer"));
		var xdiff = flppos[0] - adpos[0];
		var ydiff = flppos[1] - adpos[1];
		ad.style.marginLeft = xdiff + "px";
		ad.style.marginTop = ydiff + "px";
		offset = true;
	}
}

/*
 * tween()
 * 
 * Returns tweened values for animating smoothly
 * 
 * params: count, begin, distance, time
 */
function tween(t, b, c, d) {
	if ((t/=d/2) < 1) return c/2*t*t + b;
	return -c/2 * ((--t)*(t-2) - 1) + b;
}

/*
 * vxLoadExternalAd()
 *
 * Begins loading the sliding ad
 * 
 * params: direction|width,height|border_width|toggle_close_button
 */
function vxLoadExternalAd(params)
{
	if (isOpen) return;		// if sliding ad is already open, leave
	
	if (ad == null) ad = document.getElementById("vxFlashPlayerSyncIMUFrame");
	
	ad.style.opacity = "0";	// for some reason the opacity css property needs to be re-set
	
	// Reset toggles
	startFade = false;
	closeAdBefore = false;
	
	// Get parameters
	SlidingAdParameters = params.split("|");
	// Parse values
	//for (items in SlidingAdParameters)
	for (var i = 0; i < SlidingAdParameters.length; i++)
	{
		var item = SlidingAdParameters[i].split("::");
		switch(item[0])
		{
			case "direction":
				direction = item[1];
				break;
			case "playerSize":
				pSize = item[1].split(",");
				break;
			case "border":
				bSize = Number(item[1]);
				break;
			case "close":
				showClose = ((item[1] == "false") ? false : true); // default true
				break;
		}
	}
	
	// Create and position close button 
	if (showClose) {
		ad_close_btn = document.getElementById("ad_close");
		
		if (ad_close_btn)
		{
			ad_close_btn.innerHTML = '<a href="javascript:void(0);" onClick="vxCloseExternalAdBefore();"><img id="ad_close_img" src="http://publish.vx.roo.com/verizon/central/scripts/closebtn.gif" alt="Close Ad" title="Close Ad"></a>';
			
			// set close button position
			ad_close_btn.style.right = -(bSize+4) + "px";
			ad_close_btn.style.top = -(bSize-2) + "px";
		}
	}
	
	ad.style.display = "block";
	
	// Start fade in
	opacity("vxFlashPlayerSyncIMUFrame", 0, 100, 500);
	window.clearInterval(vxAdSlider);
	count = 0; // current count
	time = 100; // speed of animation
	switch(direction.toLowerCase())
	{
	  case "left": vxAdSlider = window.setInterval("vxAdTransition(0,"+(-(300+(bSize*2)))+",'x')", 1); //300 is the standard width of an ad
	  break;
	  case "right": vxAdSlider = window.setInterval("vxAdTransition(0,"+(pSize[0])+",'x')", 1);
	  break;
	  case "down": vxAdSlider = window.setInterval("vxAdTransition(0,"+(pSize[1])+",'y')", 1);
	  break;
	  case "up": vxAdSlider = window.setInterval("vxAdTransition(0,"+(-(250+(bSize*2)))+",'y')", 1); //250 is the standard height of an ad
	  break;
	  default: vxAdSlider = window.setInterval("vxAdTransition(0,"+(pSize[1])+",'y')", 1); // Default: Down
	} // end switch
}


/*
 * vxCloseExternalAd()
 * 
 * Begins closing the sliding ad
 *
 * params: direction|width,height|border_width|toggle_close_button
 */
function vxCloseExternalAd(params)
{
	
	if (closeAdBefore) return;	// if sliding ad was closed by the close button, leave
	if (!isOpen) return;		// if sliding ad is not open, leave
	
	// Reset toggles
	isOpen = false;
	
	// Get parameters
	SlidingAdParameters = params.split("|");
	// Parse values
	for (var i = 0; i < SlidingAdParameters.length; i++)
	{
		var item = SlidingAdParameters[i].split("::");
		switch(item[0])
		{
			case "direction":
				direction = item[1];
				break;
			case "playerSize":
				pSize = item[1].split(",");
				break;
			case "border":
				bSize = Number(item[1]);
				break;
			case "close":
				showClose = ((item[1] == "false") ? false : true); // default true
				break;
		}
	}
	
	window.clearInterval(vxAdSlider);
	count = 0; // current count
	time = 100; // speed of animation
	switch(direction.toLowerCase())
	{
	  case "left": vxAdSlider = window.setInterval("vxAdTransition("+(-(300+(bSize*2)))+",0,'x')", 1); //300 is the standard width of an ad
	  break;
	  case "right": vxAdSlider = window.setInterval("vxAdTransition("+(pSize[0])+",0,'x')", 1);
	  break;
	  case "down": vxAdSlider = window.setInterval("vxAdTransition("+(pSize[1])+",0,'y')", 1);
	  break;
	  case "up": vxAdSlider = window.setInterval("vxAdTransition("+(-(250+(bSize*2)))+",0,'y')", 1); //250 is the standard height of an ad
	  break;
	  default: vxAdSlider = window.setInterval("vxAdTransition("+(pSize[1])+",0,'y')", 1); // Default: Down
	} // end switch
}

/*
 * vxCloseExternalAdBefore()
 * 
 * Runs when close button on sliding ad is pressed.
 *
 * params: (none)
 */
function vxCloseExternalAdBefore()
{
	if (showClose) {
		closeAdBefore = true;
		window.clearInterval(vxAdSlider);
		opacity("vxFlashPlayerSyncIMUFrame", 100, 0, 500);
		isOpen = false;
	}
}

/*
 * opacity()
 * 
 * Opacity fade (compatible with different browsers)
 *
 * params: element id, opacity Start, opacity End, milliseconds
 */
function opacity(id, opacStart, opacEnd, millisec) {
    //speed for each frame
    var speed = Math.round(millisec / 100);
    var timer = 0;

    //determine the direction for the blending, if start and end are the same nothing happens
    if(opacStart > opacEnd) {
        for(i = opacStart; i >= opacEnd; i--) {
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
		clearAfterOpac = true;
    } else if(opacStart < opacEnd) {
        for(i = opacStart; i <= opacEnd; i++)
            {
            setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
            timer++;
        }
		clearAfterOpac = false;
    }
}

/*
 * changeOpac()
 * 
 * Change the opacity for different browsers.
 * Called from opacity() function above.
 *
 * params: opacity value, element id
 */
function changeOpac(opacity, id) {
    var object = document.getElementById(id).style;
    object.opacity = (opacity / 100);
    object.MozOpacity = (opacity / 100);
    object.KhtmlOpacity = (opacity / 100);
    object.filter = "alpha(opacity=" + opacity + ")";
	
	// Finished! Hide div after fading out!
	if (opacity == 0 && clearAfterOpac) {
		ad.style.display = "none";
		ad.innerHTML = "";
	}
}

function debugOutput(s) { //c,t,b,e,a
	document.getElementById("textBox").value += s + "\n"; //"count: " + c + "\ntime: " + t + "\nbegin: " + b + "\nend: " + e + "\nadPosition: " + a;
}

/*
 * findPos()
 * 
 * Finds the absolute position of an element on the page
 *
 * params: element object
 */
function findPos(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		do {
			curleft += obj.offsetLeft;
			curtop += obj.offsetTop;
		} while (obj = obj.offsetParent);
		return [curleft,curtop];
	}
}
