Add

Go 0.4.8jg1 + HydroTween rev30 + Guide + Source Code


The latest rev is 32. I have added the changes to this document in addition to the other updates.

Update 31d Fixed a bug from the removal of OverlapMonitor. Thanks John!

Update 32 Smoothness issue has been fixed with pulseInterval and example updated for 0.4.9. Start Values have been added for non-color/image matrix properties

Update 33 Made a couple updates and a post for the FlashBelt 2008 conference. A few more examples. I also added a DisplayObject3D target argument in the init3D() method for running a lookAt() during scene renders. Click here for the recent post.

// Color Tweening!
HydroTween.go(mc, {color:0xFF0000}, 2, 0, Elastic.easeOut);
 
// Fuse style sequencing!
var seq1:SequenceCA = HydroTween.parseSequence(
	{target:fusebox, x:320, seconds:5, easing:Quadratic.easeInOut},
	{target:fusebox, Blur_blurX:8, Blur_blurY:8, seconds:5, easing:Quadratic.easeInOut},
	{target:fusebox, color:0x0000FF, seconds:5, easing:Quadratic.easeInOut},
	{target:fusebox, Blur_blurX:0, Blur_blurY:0, seconds:5, easing:Quadratic.easeInOut},
	{target:fusebox, x:400, seconds:.5, easing:Quadratic.easeInOut},
	{target:fusebox, rotation:270, seconds:.5, easing:Quadratic.easeInOut}
);
seq1.start();

After a short hiatus from the blog, and a wedding, I've been able to knock out some much needed changes and additions to HydroTween. I'm excited about this because now I can move onto the fun stuff and I've started putting together a roadmap of sorts. Go has been picking up steam and examples have been popping up which is great to see. Most people seem to think there are two types of users of Go. The ones that simply want to tween away, have something functioning, and useful right away. The other types are interested in developing their own tweening system and animation utilities either for all around use or for specialized applications. I'm excited about the 3rd group which falls in the middle. These are the people that want the first, but find themselves becoming the latter just because of the Methodology of Go. I used to be in the first group for quite some time until Go came along and then I found myself thrown intro the world of tweening. I've been saying this for some time now, but the beauty of Go is that you might find yourself in the middle with very little effort. Once you it that point, consider yourself an addict. This post should help with a general understanding of HydroTween. I also hope this post will open some eyes to the idea of going it along and giving their own parser a shot. That said I will start with the usage of HydroTween and it's updates, then I will follow with my own trial and tribulations of reaching this recent version. The example below along with the source is located at the end of this post.

Click here for the Go Project Site – Go Project Site

Click here for the Go Playground Project Site – Home of Parsers/User Generated Go projects and examples.



Current Tweenable Properties:

  • alpha
  • Bevel_angle
  • Bevel_blurX
  • Bevel_blurY
  • Bevel_color
  • Bevel_distance
  • Bevel_highlightAlpha
  • Bevel_highlightColor
  • Bevel_quality
  • Bevel_shadowAlpha
  • Bevel_shadowColor
  • Bevel_strength
  • Blur_blurX
  • Blur_blurY
  • Blur_quality
  • brightness
  • color
  • contrast
  • DropShadow_alpha
  • DropShadow_angle
  • DropShadow_blurX
  • DropShadow_blurY
  • DropShadow_color
  • DropShadow_distance
  • DropShadow_quality
  • DropShadow_strength
  • Glow_alpha
  • Glow_blurX
  • Glow_blurY
  • Glow_color
  • Glow_quality
  • Glow_strength
  • height
  • hue
  • pan
  • rotation
  • rotationX (PV3D)
  • rotationY (PV3D)
  • rotationZ (PV3D)
  • saturation
  • scaleX
  • scaleY
  • scaleZ (PV3D)
  • text
  • tint
  • volume
  • width
  • x
  • y
  • z (PV3D)

What's new in this version:

  • Image/Bitmap/ColorMatrix property refactoring such as contrast, brightness, etc. Color tweening has been added as well. Worked out some bugs and streamlined.
  • Fuse style sequencing.
  • An autostart parameter.
  • Updated reverse and cycle structure.
  • Started porting over the previous textfield tweening functionality.
  • Tweening of multiple targets as Arrays
  • Papervision3D tweening functions
  • start_ values for non image/color matrix tweening. (This will be addded soon!)

Autostart:
Autostart has been deprecated from version 30. In version 31, go calls() and sequence() methods start automatically. To setup a sequence that doesn't start, use the parseSequence() method.

LinearGoRepeater:
The static go() method and the constructor have been updated to reflect the changes in version 0.4.8. An object has been added that provides parameters for cycling back and forth. You can either input a LinearGoRepeater instance, or you can use a generic object.

HydroTween.go(mc,  tweenObj[e.target.name], seconds, 0, easing, null, null, null, {cycles:2, reverse:true, easing:easing});

Fuse style Sequence Tweening:

// This sequence will start automatically.
var seq1:SequenceCA = HydroTween.sequence(
	{target:fusebox, x:320, seconds:5, easing:Quadratic.easeInOut},
	{target:fusebox, Blur_blurX:8, Blur_blurY:8, seconds:5, easing:Quadratic.easeInOut},
	{target:fusebox, color:0x0000FF, seconds:5, easing:Quadratic.easeInOut},
	{target:fusebox, Blur_blurX:0, Blur_blurY:0, seconds:5, easing:Quadratic.easeInOut},
	{target:fusebox, x:400, seconds:.5, easing:Quadratic.easeInOut},
	{target:fusebox, rotation:270, seconds:.5, easing:Quadratic.easeInOut}
);
// This sequence will NOT start automatically. Allows you to create sequences and store them
var seq2:SequenceCA = HydroTween.parseSequence(
	{target:fusebox, x:320, seconds:5, easing:Quadratic.easeInOut},
	{target:fusebox, Blur_blurX:8, Blur_blurY:8, seconds:5, easing:Quadratic.easeInOut},
	{target:fusebox, color:0x0000FF, seconds:5, easing:Quadratic.easeInOut},
	{target:fusebox, Blur_blurX:0, Blur_blurY:0, seconds:5, easing:Quadratic.easeInOut},
	{target:fusebox, x:400, seconds:.5, easing:Quadratic.easeInOut},
	{target:fusebox, rotation:270, seconds:.5, easing:Quadratic.easeInOut}
);
seq2.start();

Tweening Examples:


F.Y.I. The flash interface/example above will copy the code to the clipboard.

General:

HydroTween.go(mc, {x:400}, 2, 0, Elastic.easeOut);

Filter:

HydroTween.go(mc, {Glow_color:0x0000FF, Glow_blurX:8, Glow_blurY:8, Glow_strength:3}, 2, 0, Elastic.easeOut);

Image/Bitmap/ColorMatrix:

// Brightness
HydroTween.go(mc, {brightness:2}, 2, 0, Elastic.easeOut);
// Contrast
HydroTween.go(mc, {contrast:2}, 2, 0, Elastic.easeOut);
// Hue
HydroTween.go(mc, {hue:45}, 2, 0, Elastic.easeOut);
// Saturation
HydroTween.go(mc, {saturation:-1}, 2, 0, Elastic.easeOut);
// Tint
HydroTween.go(mc, {tint:0x00FF00}, 2, 0, Elastic.easeOut);
// Color
HydroTween.go(mc, {color:0xFF0000}, 2, 0, Elastic.easeOut);
// Color Reset (This will tween back to it's original value
HydroTween.go(mc, {color:-1}, 2, 0, Elastic.easeOut);

Matrix tweening (for array values such as sepia, etc) should make a return in the next update as well as a tint percentage value.

Sound:

// Volume
HydroTween.go(soundchannel, {volume:.1}, 2, 0, Elastic.easeOut);
// Contrast
HydroTween.go(soundchannel, {pan:-1}, 2, 0, Elastic.easeOut);

Sound tweening takes the SoundChannel instance as a target.

Text:

HydroTween.go(textfield, {text:100}, 2, 0, Elastic.easeOut);

This simply tweens the number from 0 to whatever param is specified and outputs to a textfield. I hope to expand on the functionality of this soon.

Using Callbacks and Updaters:

// Complete Callback
HydroTween.go(textfield, {text:100}, 2, 0, Elastic.easeOut, onCompleteHandler);
// Update Callback
HydroTween.go(textfield, {text:100}, 2, 0, Elastic.easeOut, null, onUpdateHandler);

Papervision3D Tweening:

I have added a convenient function for setting up your renderer for HydroTween. This is called once before you call any tweens and runs the renderer during any tween.

// Call once to setup a 3D tweens renderer
HydroTween.init3D(renderer, scene, camera, viewport);
// Simple Papervision3D Tween
HydroTween.go(plane, {rotationX:100, z:500}, 2, 0, Elastic.easeOut);

Also be sure to check out John Grden's kickass Go3D parser.


Roadmap and upcoming updates:

  • Text tweening to support prefix and suffix String values
  • Even more modular format for adding tweenable properties
  • Drawning and spline/bezier tweening/Catmull Rom/etc
  • Continuing with speed enhancements

The Making of HydroTween


For those of you interested in setting up your own tweening parser, hopefully this section will offer some insight. Getting these updates was a bit of a challenge and I learned quite a bit. Because of this, I think my ultimate vision for HydroTween has changed a bit. With the flexibility Go offers, the task of how to manage tweens and properties falls in the hands of the Go practitioner. The efficiency of a tweening engine really boils down to the simplicity of it's core and the reading and routing of updating property values. How this is achieved can explain the large number of different tweening systems out there. My hope is to eventually set up HydroTween to extend the open foundation of the Go system to it's tweenable properties making them more modular and easy to tweek. Let's forget about how the Go core engine works for a minute and look at the bare bones processes invloved in tweening.

  • First we need some way to parse a syntax of our choosing.
  • We need to keep track of where/what the end result of our tween will be.
  • We need to figure out the starting value of the tween.
  • We need to figure out the difference of the starting and ending value.
  • We need to update the values of that difference over a period of time.
  • We need to route the updated values to the tweens target based on the type of property that's being tweened.

This is a very general idea of what's going on here. Now some of the above has been taken out of the equation and/or made easier to accomplish. The parsing is being left up to us, along with how we store and route the updating property values. We have a place to figure out the starting point as well as where to update the data. The trick is how to do it.

I've found that most tweenable properties fall into a few categories:

Some are direct properties of an object, such as the x value of a Sprite.

// Normal syntax:
sprite.x = 1;
// "Tweenable" syntax:
sprite["x"] = 1;

Some are done through object's filters, such as BlurFilter and DropShadow.

// Normal syntax:
var gf:GlowFilter = new GlowFilter();
gf.color = 0xFF0000;
box.filters = [gf];
// "Tweenable" syntax:
box.filters = [new GlowFilter()];
var f:Array = box.filters;
f[0]["color"] = 0x0000FF;
box.filters = f;

Some are done through a transform property, or a combination of transform properties, such as volume or some color changing.

// Normal syntax:
var tf:* = targ.soundTransform;
tf.volume = val;
targ.soundTransform = tf;
// "Tweenable" syntax:
var tf:* = targ["soundTransform"];
tf["volume"] = val;
targ["soundTransform"] = tf;

The above examples are straight forward, but they point out the process of parsing. We are using a String reference to the Objects property which allows us to match it up in our property list. This is where we define our syntax and essentially becomes our "key". Every key in our parser must be unique so we can match up a respective property. In the case of blurX, we have to specify that it is either the BlurFilter, GlowFilter, etc. So Blur_blurX is added to a key/property list which matches that property with the functions needed to update the BlurFilter and target in the Objects filter Array.

Some use a combination of Filter and Matrix math such as contrast, color, hue. Some use value pairs, such as drawing. The rest I have found use either a single or double value, along with some constants such as spline animation, text, etc. You can refer to the source for the more complicated examples as they require a couple extra steps. Just to give you the general idea. With ColorMatrix we are tweening an entire array of values. What HydroTween does is depending on the property settings, an "adjustment" function is called. This changes the end values for the array, and the write function updates the entire array from point A to B. Since an Object can have multiple ColorMatrix adjustments made to it, we need to call these first before running the tween. Thanks again to Grant Skinner for letting me import and tweek his ColorMatrix class.

All of these items are easy to tween in their own right, but when you combine them all together, that's when things get tricky. I've organized my functions in a read, write, and for some an adjust and path category. "Read" simply gets the objects existing state, "write" updates the objects property value, "adjust" modifies a property prior to writing it (such as ColorMatrix transformations of a ColorMatrix Array before tweening it), and "path" is a param that accesses an objects property.

My goal now is to continue to make this more efficient and modular in a way that the average user can create a read function, a write function, and register it to the property list along with any additional params it might need. It's sorta there, but there is much work to be done:)

I'm still no tweening Jedi and this is an ongoing work in progress. Any suggestions, complaints, and contributions are welcome.

Also I will be at Flashbelt. Hit me up if you are interested in meeting up. Looking forward to Moses' presentation!


HydroTween rev32 Source and Example

The Discussion

see what everyone is saying

  • Moses Gunesch May 14th, 2008 at 9:44 am #1

    Donovan, this is really awesome work! Serious kudos. :)

  • Sam Wilson May 14th, 2008 at 1:24 pm #2

    You are the MAN. Thank you!

  • Neven Jacmenović May 14th, 2008 at 1:26 pm #3

    Hell yeah! GO just got new dimension. And it's syntax friendly too. :) Great work Donovan!

  • djdonovan May 14th, 2008 at 1:35 pm #4

    Thanks guys! Let me know how it goes, and let me know if you have any ideas:)

  • Montgommery Clift May 14th, 2008 at 3:29 pm #5

    I've just got the mail from Moses. Thank you, thank you.

  • djdonovan May 15th, 2008 at 1:27 am #6

    Post has been updated with rev31 updates.

  • tim May 15th, 2008 at 9:42 am #7

    The one thing holding me back from diving into AS3 has been the lack of a Fuse equivalent. Looks like you've provided it! Thanks, and now I look forward to long nights at my Mac learning new stuff. :)

  • ion May 15th, 2008 at 11:37 am #8

    Great work/

  • n00ge May 15th, 2008 at 1:01 pm #9

    I've also been holding off on AS3 for a nice fuse equivalent. This looks pretty sweet.

  • chris May 15th, 2008 at 4:26 pm #10

    Great work! I have a question. Does this support triggers to start the next action before the current action is complete?

  • undersound May 18th, 2008 at 12:53 pm #11

    Thanks very much for this !

    P.s. Which music am i hearing when testing the volume tween?

  • djdonovan May 18th, 2008 at 2:06 pm #12

    Abiogenesis" by Carbon Based Lifeforms on the World of Sleepers album. Great CD!

    http://phobos.apple.com/WebObjects/MZStore.woa/wa/viewAlbum?id=203743554&s=143441

  • Mark June 2nd, 2008 at 7:44 am #13

    Hey great work!
    Just one question – how would you send parameters through to a tween complete handler? eg. if you were tweening multiple mc's and wanted to know which mc had just called the handler?
    I'm probably being dim.

  • djdonovan June 2nd, 2008 at 9:56 am #14

    I have yet to add params for arguments.. but the easiest way to do this for passing args to any function call is using a nested closure.


    HydroTween.go(targ, {x:10}, 1, 0, Linear.easeNone, function():void{onComplete(arg1, arg2);});

    It's a sneaky trick that works for all sorts of stuff:)

  • djdonovan June 2nd, 2008 at 8:10 pm #15

    Updated the source with the rev32 0.4.9 Code!

  • [...] hydrotik | flash development / design / photographyflash development and creative playground of Donovan Adams Go 0.4.8jg1 + HydroTween rev30 + Guide + Source Code [...]

  • Lance June 14th, 2008 at 10:42 am #17

    Great, great work. From my perspective, this is the most robust — and yet simplest — animation class out there. Congratulations.

    Don't know if this helps anyway, but I've figured out a way to add listeners to a simple tween:

    function single (e:MouseEvent):void {
    var tween:IPlayable = HydroTween.go(fusebox, {x:400}, 2, 0, Elastic.easeOut);
    tween.addEventListener(GoEvent.COMPLETE, test);

    }

    function test(e:GoEvent):void {
    trace("finished");
    }

    Obviously, in this case you can achieve the same functionality using a callback, but I love the greater flexibility of listeners.

  • djdonovan June 14th, 2008 at 1:47 pm #18

    Thanks man!

    You can do it this way, but this is the same as using:


    HydroTween.go(fusebox, {x:400}, 2, 0, Elastic.easeOut, test);

    The function argument is applied to the tween in the same way as you are adding the listener. It's just happening internally. But this good for people to know as there is a definite need for breaking stuff out if you want to use the pause() resume() and other higher level functions of Go.

    But thanks for pointing that out! I will include it in the documentation that I need to get together.

  • soenke June 20th, 2008 at 12:25 pm #19

    Hi Donovan,
    I just added a method to easily call a function after a delay.
    why don't you add this:

    public static function call(delay:Number = 0, func : Function = null) : IPlayable
    {
    return HydroTween.go(new Object, {}, 0, delay, null, func);
    }

  • argenisleon June 27th, 2008 at 1:07 pm #20

    Greetings,

    I am using this sequence but it not seems to have 180 seconds. What i am missing?

    var seq1:SequenceCA = HydroTween.sequence(
    {target:tapa6, x:443, seconds:180, easing:Quadratic.easeInOut},
    {target:tapa6, x:443, seconds:180, easing:Quadratic.easeInOut},
    {target:tapa6, alpha:0, seconds:180, easing:Quadratic.easeInOut},
    {target:tapa6, x:-400, seconds:180, easing:Quadratic.easeInOut},
    {target:tapa6, x:-400, seconds:180, easing:Quadratic.easeInOut},
    {target:tapa6, alpha:1, seconds:180, easing:Quadratic.easeInOut},
    {target:tapa6, x:443, seconds:180, easing:Quadratic.easeInOut}
    );

  • djdonovan June 27th, 2008 at 1:20 pm #21

    Both work, but seconds seems to round to an int. I need to update the info on this page, but you should use duration int he meantime.

    I also suggest you download the latest version if you are using rev30.

  • Mike June 29th, 2008 at 8:35 pm #22

    Nice work! I was able to add my favorite property "fade" into the class in no time and actually created a quick and dirty shortcuts class just like the fuse shortcuts.

  • Ido July 7th, 2008 at 8:01 pm #23

    Hello
    I have added a properties "frame"

    — HydroTween.as.org Tue Jul 8 11:03:54 2008
    +++ HydroTween.as Tue Jul 8 11:25:04 2008
    @@ -233,6 +233,7 @@
    _propertyList["height"] = {prop:"height", read:genericRead, write:genericWrite};
    _propertyList["rotation"] = {prop:"rotation", read:genericRead, write:genericWrite};
    _propertyList["alpha"] = {prop:"alpha", read:genericRead, write:genericWrite};
    + _propertyList["frame"] = {prop:"frame", read:frameRead, write:frameWrite};
    // BevelFilter —————————————————————————-
    _propertyList["Bevel_angle"] = {prop:"angle", definition: BevelFilter, read:filterRead, write:filterWrite};
    _propertyList["Bevel_blurX"] = {prop:"blurX", definition: BevelFilter, read:filterRead, write:filterWrite};
    @@ -675,6 +676,21 @@

    + //frame ———————————————————————————
    + protected static function frameRead(targ : Object, key : String) : Number
    + {
    + return MovieClip( targ ).currentFrame;
    + }
    +
    + protected static function frameWrite(targ : Object, key : String, val : Number, val2 : Number = 0) : void
    + {
    + var mc : MovieClip = MovieClip( targ );
    + var frames : Number = Math.round( val ) % mc.totalFrames;
    + MovieClip( targ ).gotoAndStop( ( frames < 1 ) ? mc.totalFrames + frames : frames );
    + }
    +
    +
    +

  • Aron July 18th, 2008 at 10:18 am #24

    HydroTween, best tween engine ever. Thx for the big work. However it it would be handy, if this works without sequence or callback:

    HydroTween.go(sprite, {x:100}, 1, 0, Cubic.easeInOut);
    HydroTween.go(sprite, {x:0}, 1, 1, Cubic.easeInOut);

  • djdonovan July 20th, 2008 at 10:35 am #25

    Check out the latest for HydroSequence where you can easily do this. HydroTween doesn't let you run a Tween on the same object at once. What you are looking to do is Sequencing, so check it out! :)

  • djdonovan August 7th, 2008 at 6:00 am #26

    frame prop has been added. Also addProperty has been added so you can set up your own simple props.

  • jagaro September 17th, 2008 at 11:04 pm #27

    Hello Donovan,
    This is really the best. I downloaded the source and sample files but how come it doesn't work on my end?

  • djdonovan September 18th, 2008 at 6:05 am #28

    Check the download on the google code site, make sure you are using the latest versions. Also let me know what version you are using. Haven't had any problems with people using the download, so it might be something simple and easily fixed.

  • HailBlogula » HydroTween, A Love Story September 19th, 2008 at 12:28 pm #29

    [...] new kid on the scripted tween library scene looks a lot like the old one, but is leaner and faster. Hydrotik somehow released HydroTween a little while ago and I'm just now starting to use it in [...]

  • grabek September 21st, 2008 at 2:15 am #30

    hi. how about making life easier and applying some regexps. I'm talking explicitly about QueueLoaderLite lines:404-412

    YOu are performng a match against file types (jpg, JPG) what if the fielname is: jPg???

    try this:

    var image_pattern=/(\.jpg|\.png|\.gif)\z/i
    var swf_pattern=/\.swf\z/i

    if (currItem.utl.match(image_pattern))!=null)_currType = FILE_IMAGE;
    if (currItem.utl.match(swf_pattern))!=null)_currType = FILE_SWF;

    the case is not an issue (/i)
    filetypes can be any (\.extension)
    and make sure it's at the end! (\z)

    cause, your check will also say FILE_IMAGE for: a.jpg.swf

    fun script nonetheless!
    drop me a line!

  • djdonovan September 21st, 2008 at 8:12 am #31

    I think this comment is in the wrong spot:)

    Regardless I made this change and commited it to the SVN. QueueLoader and QueueLoaderLite now support RaVeR cAsE :)

  • tim October 15th, 2008 at 12:46 pm #32

    I am finally delving into HydroTween and AS3. Thanks for all your hard work. I am having an issue, though. Doing a color tween, I find that the colors are muted, as though some black was being mixed in. Here's simple code I've been playing with:

    //box is a movie clip placed on stage
    box.addEventListener(MouseEvent.ROLL_OVER, rolyPoly);
    box.addEventListener(MouseEvent.ROLL_OUT, skateAway);

    //for some reason, the colors are darker – almost as if HydroTween is mixing in some black!!
    function rolyPoly(color:String):void{
    HydroTween.go(box, {color:0×99CC66}, .5, 0, Cubic.easeInOut)
    }

    function skateAway(color:String):void{
    HydroTween.go(box, {color:0xFFFFFF}, .5, 0, Cubic.easeInOut)
    }
    //…but the color doesn't go to white!!

  • tim October 15th, 2008 at 1:07 pm #33

    –update: WEIRDNESS!!!!

    I figured out what the "problem" is: when I draw a shape on stage, I have to break it apart(Command+B) then make it a symbol. If I don't break it and then make it a symbol, I get the color skew. Very strange.

  • djdonovan October 15th, 2008 at 1:17 pm #34

    Be sure to update to the latest version of HT. Sounds like this is unrelated to HT, but some significant enhancements have been made:)

  • Lee Probert January 19th, 2009 at 10:04 am #35

    Do you have a repository of the code?

  • djdonovan January 20th, 2009 at 11:10 am #36

    SVN links are right above the swf example.

  • [...] tweening engine that looked promising is HydroTween that is AS3 compatible and supports [...]

  • Michael September 3rd, 2009 at 9:02 am #38

    is there a method to stop/remove a sequence or a tween for an object or all tweens?

Respond

get in on the action.

* Required

revatio efects buy lisinopril viagra order online erectile dysfunction medications I Need To Buy Viagra drugs on line cheap msm food allergies muscle building diet osteoporosis hormon ultram dosage levitra without prescription buy viagra in canada buy desyrel buy mexiletine buy phentermine online without prescription where to buy soma lithium carbonate women and viagra medications on line ultram er alprazolam no perscription viagra online without prescription type 2 diabetes diazepam pharmacology lower high blood pressure how to get big muscles discount dog products starlix buy deltasone health vitamins ultram dosage tooth whitening dentist buy pain meds now a reliever of arthritic pain hoodia patches cheap decadron reduce cholesterol naturally asthma control cheap generic viagra online fitness muscle online treatment for aids body building online course throat infection treatment increasing breast size naturally buy celebrex online buy antibiotics cheap online clomid testosterone booster patch nutritional diet for osteoporosis treating aids in africa blood pressure diet order vitamins order viagra online cymbalta vs lexapro xanax without prescription cheap pet health care buy prevacid buy prevacid soma 250 drug for nausea where to buy soma natural cure for erectile dysfunction ear pain right side back pain dog calming pills ordering viagra dental antibiotics antifungal strategies help the pain januvia cheap diabetes type 2 bronchitis diarrhea cimetidine dose alprazolam acne tips blood pressure buy cheap tooth whitening product prevacid online water pill buspirone dosage prescription phentermine buy beconase lower leg pain vitamins for women new antibiotic drug dog health care weight loss after baby skin cancer treatments high blood pressure yerba diet self help alcoholism benicar generic cure blood clot eye infections in dogs bph prostate family pharmacy zyban pharmacy atarax generic high blood pressure drug list buy xanax online buy natural antibiotics list how to white teeth avalide generic viagra cialis levitra medician for heart attacks phentermine prescription alcoholism new treatment help for depression heart failure medicine buy retin a buy levitra online with fast delivery body fat lose weight loss web sites buy nimotop herpes simplex new blood pressure drug how do a stop smoking flu shots herpes treatment enhance sexual performance effects of celexa viagra shop increase male volume treatment for chest pain cats bladder side effects clomid face wrinkles allegra klonopin effects relieve joint pain drugs that relieve pain new cat products human parasite ultram dosing tab tramadol carb blocker medication to stop smoking order viagra online in germany anxiety info ambien viagra gel use of xanax for anxiety online drugs without prescription weight loss health health ambien online buy viagra online cheap alternative medicine cholesterol mestinon blood pressure meds treatment parkinsons disease buy viagra without prescription methocarbamol effects pet health care information what is saw palmetto buy cialis online without a prescription flu drugs celebrex information gout cures buy orlistat on line sildenafil dosage blood pressure medication names ultram dosing order viagra canadian drug online big muscle fluconazole 150mg lasix cheap ashwagandha dosage side effects of ativan body acne treatment buying viagra online without prescription body building programs cat health care natural pet products viagra order body building tips high blood calcium level estradiol pill tips for weight loss back pain medications atenolol withdrawal vermox xanax dose antibiotics bronchitis cialis cialis information how to white teeth diabetes blood sugar levels pravastatin sleep disorders remedy viagra superactive diet pills hypnotherapy cds viagra cheep carisoprodol purchase cat anxiety buy alcoholism medications nausea cure how do a stop smoking relieve joint pain oral ketoconazole clonazepam pharma california cold flu calcium channel blocker hypertension prednisone allergy Cealis Lavetra effects of levitra professional anti allergic drug drugs for hiv body building online course dog ear problem super flu quickly stop smoking bad body odor atlas rx viagra abilify 10mg nolvadex 20mg hair loss treatment uk anti obesity chloramphenicol triphala sleep disorder treatment information on ambien remedy for hair loss when are beta blockers prescribed myasthenia gravis risperdal anxiety symptoms high blood pressure cure snoring chronic heart failure medicines valium with no prescription buy alcoholism medications generic pain medication alternative treatment arthritis diovan prescription latest diet pill effects of levitra professional clomid drug xanax without prescription online hair loss for men purchase viagra online hair loss products for men lamictal viagra online usa xenical no prescription pneumonia vs bronchitis prednisone 10 mg diflucan buy celebrex online anti fungus products endep liver infection treatment order indomethacin penis enlagement augmentin medication hair loss prevention treatment for yeast infection pyridium chest pain symptoms flovent generic valium with no prescription prevention of diabetes breast enhancement new york levitra do for men ginkgo biloba prescription lipitor klonopin zoloft order medication to aid in sleeping diabetes type 2 medicines for insomnia weight loss and fitness high blood pressure info purchase levitra online cialis on line health support discount prescription medications alprazolam no perscription how to purchase cialis acne free antifungal sinus women insomnia valium maximum dosage osteoporosis bone health buspar online discount cialis levitra viagra cure bronchitis prostate cancer treatment protonix overactive bladder medications skin cancer treatment effects klonopin yeast infection remedies fluconazole interaction canada online pharmacy viagra healthy women's vitamins expected weight loss with phentermine how to purchase cialis about cialis body building buy product how to buy cialis male erectile dysfunction femara drug topamax parkinson medications male bladder problems diabetes health care system haldol medication withdrawal zyrtec buy hyzaar cat hairball remedies cheap florinef lipitor use drugs for pain celebrex cealis lavetra Viagra Cialis Levitra buy nimotop how to increase fertility buy pain medicine online insomnia sleep problems cheapest place buy viagra online tooth whitening systems haldol medication information on levitra cialis advice bactroban price of drugs seroquel for anxiety malaria preventative effects of allegra body building info vytorin generic bladder problem solutions dog health help cialis cheap no prescription beta blockers bronchitis antibiotics back pain anti-fungal natural arthritis cures buying viagra online in britain penis development cheapest generic cialis snoring woman stretch penis purchase generic viagra virility gum viagra and sports buy proscar soma on line diet supplements that work breast enhancer pills how to enlarge breast buy cialis generic online dog bowel problems pet health information enhance breast acai alpha blocker medications cialis best on-line drugstore infection dog ears enhance sexual performance weight loss male sexual power cat health info clean dogs ears ultram used for gout medicines effective weight loss program improve sexual confidence cialis levitra viagra sildenafil kamagra cat skin disorders female sexual enhancement creams prozac on line bentyl drug diarrhea in pregnancy insomnia pills helping high blood pressure buy plendil lipitor use weight loss support group online buy plan b remedies for stomach ulcers cancer cure phentermine with no perscription best weight loss products online pain doctors buy vitamin a breast enhancer how to build muscle generic abilify free pain pills by mail breast enhancement products prostate cancer support accupril cymbalta medication small penis ramipril capsules depression symptoms treatment penis enhansment blood pressure drug names herpes medications to buy free smoking treatment online carisoprodol lasix drug depression and anxiety buy griseofulvin without prescription free weight loss tips klonopin pill viagra cialis levitra diet drug online enhancement breast atacand generic get viagra prescription online verapamil drug zyban what is hoodia overactive bladder in men buy tramadol cheap treatment for chronic fungal infection zoloft buy white spots on face pediatric diarrhea paxil information buy online cialis weight loss doctor online brain cancer treatment new weight loss drug levitra pro medication for depression relieve joint pain naturally enhancement breast health information bone health general drugs for hiv nexium drug premature ejaculation cure promethazine tablets treatment for dry skin erectile dysfunction cure online viagra without prescription best weight loss solutions drug allergies buy buy cialis online now cancer drug acessrx buy tooth whitening products parkinson disease medicine free hoodia