﻿var clear="/images/clear.gif" //path to clear.gif

if(navigator.appVersion.match(/MSIE ([\d.]+);/) && navigator.appVersion.match(/MSIE ([\d.]+);/)[1]>=5.5)
{
	pngfix=function(elem)
		{
			if (elem==null) elem=document;
			var els=elem.getElementsByTagName('*');
			var ip=/\.png/i;
			var i=els.length;
			while(i-- >0)
				{
					var el=els[i];
					var es=el.style;
					if(el.src&&el.src.match(ip)&&!es.filter)
						{
							es.height=el.height;
							es.width=el.width;
							es.filter="progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+el.src+"',sizingMethod='scale')";
							el.src=clear;
						}
				}
		}

	Anim.SetElementOpacity = function(elem, opValue)
		{
			elem.style.zoom=1;
			var oAlpha = elem.filters['DXImageTransform.Microsoft.alpha'] || elem.filters.alpha;
			if(oAlpha) oAlpha.opacity=opValue;
			else elem.style.filter += "progid:DXImageTransform.Microsoft.Alpha(opacity="+opValue+")";
		}
}
else
	{
		pngfix=function(){};
		Anim.SetElementOpacity=function(elem, opValue)
		{
			elem.style.opacity=opValue/100;
		}
	}

function Anim(e,sA,b,a)
	{
		this.e=e;
		this.sA=sA;
		this.b=b;
		this.a=a;

		function anim(e, sArray, handler)
			{
				if (handler)
					{
						var sHand = function()
							{
								if (e.removeEventListener) e.removeEventListener("Animfinished", sHand, false);
								else if (e.detachEvent) e.detachEvent("ondataavailable",sHand);
								handler();
							}
							if(e.addEventListener) e.addEventListener("Animfinished",sHand,false);
							else if(e.attachEvent) e.attachEvent("ondataavailable",sHand);
			}

		var singleChange = function(elem, prop, value)
			{
				if(prop == "opacity")
					Anim.SetElementOpacity(elem, value);
				else
					elem.style[prop] = value;
			}
		if(sArray[0][0]) singleChange(e, sArray[0][0],sArray.shift()[1]);
		pngfix();
		while(sArray.length > 0 && sArray[0][2] == 0) singleChange(e, sArray[0][0],sArray.shift()[1]);
		if(sArray[0])
			{
				setTimeout(function(){anim(e, sArray)},sArray[0][2]);
			}
		else
			{
				if(document.createEvent)
					{
						var ev=document.createEvent("Events");
						ev.initEvent("Animfinished", true, false);
					}
				else if(document.createEventObject)
					{
						var ev = document.createEventObject( "onanimated" );
					}
				else return;
				if (e.dispatchEvent) e.dispatchEvent(ev);
				else if (e.fireEvent) e.fireEvent("ondataavailable",ev);
			}
	}
	this.animate = function(an)
		{
			if(an)
				{
					this.a=function()
						{	if(a)a();
							an();
						}
				};
				anim(this.e,this.sA,this.a);
				if(this.b) this.b();
		}
}



Anim.StepsGenerator = function(sArray, stepCount) //[property, startValue, endValue]
{
var simpleChanges = new Array();
for(var i=0;i<sArray.length;i++)
{
var step = (sArray[i][2] - sArray[i][1]) / stepCount;
var oneParam = new Array();
var postValueStr = "px";
if (sArray[i][0] == "opacity") postValueStr = "";
oneParam.unshift(sArray[i][2] + postValueStr);
for(var j=0;j<stepCount;j++){oneParam.unshift(sArray[i][2]-j*step+postValueStr);}
simpleChanges.push(oneParam);
}
var result = new Array();
while (simpleChanges[0].length > 0)
{
    result.push([sArray[0][0],simpleChanges[0].shift(),40]);
    for(var i=1;i<sArray.length;i++)result.push([sArray[i][0],simpleChanges[i].shift(),0]);
}
return result;
}

Anim.GetStyleObject = function(styleName)
{
	if(document.styleSheets[styleSheetNum].cssRules) 
		var rules=document.styleSheets[styleSheetNum].cssRules;
	else 
		var rules=document.styleSheets[styleSheetNum].rules;
	for(var i=0;i<rules.length;i++)if(rules[i].selectorText=="."+styleName)return rules[i].style;        
}


Anim.ChangeClass = function(elem,oldClass,newClass,AProps)
{
    var PArray = new Array();
    var OldStyleObj = this.GetStyleObject(oldClass);
    var NewStyleObj = this.GetStyleObject(newClass);
    for (var i = 0; i < AProps.length; i++)
    {
        if(/*elem.style[AProps[i]] == "" && */OldStyleObj[AProps[i]] != "" && NewStyleObj[AProps[i]] != "" && OldStyleObj[AProps[i]] != NewStyleObj[AProps[i]])
            PArray.push([AProps[i],parseInt(OldStyleObj[AProps[i]]),parseInt(NewStyleObj[AProps[i]])]);
        else if(elem.style[AProps[i]] != "")
        {
            alert(AProps[i] + ": " + elem.style[AProps[i]]);
             if (i > 0 && i < AProps.length -1)
                AProps = AProps.slice(0,i).concat(AProps.slice(i+1, AProps.length));
             else if (i == 0)
                AProps.shift();   
             else
                AProps.pop();
        }
    }
    var handler = function()
    {
        Anim.ClearInlineStyle(elem, AProps);
    }
	
	var pre = function()
	{
        elem.className = elem.className.replace(oldClass, newClass);	
	}

    if(PArray.length > 0)
    {
        return new Anim(elem, this.StepsGenerator(PArray,5), pre, handler);
    }
}   

Anim.ClearInlineStyle = function(elem, AProps)
{
    for (var i = 0; i < AProps.length; i++)
        elem.style[AProps[i]] = "";
}

if(navigator.appVersion.match(/MSIE ([\d.]+);/) && navigator.appVersion.match(/MSIE ([\d.]+);/)[1]>=5.5)
{
Anim.FadeIn=function(elem,handler){return new Anim(elem,this.StepsGenerator([["opacity",0,100]],5),null,handler);}
Anim.FadeOut=function(elem,handler){return new Anim(elem,this.StepsGenerator([["opacity",100,0]],5),null,handler);}
}
else
{
Anim.FadeIn=function(elem,handler){return new Anim(elem,this.StepsGenerator([["opacity",0,100]],5),null,handler);}
Anim.FadeOut=function(elem,handler){return new Anim(elem,this.StepsGenerator([["opacity",100,0]],5),null,handler);}
	
}

Anim.AnimQ=function(Anims,hand){if(Anims.length)Anims.shift().animate(function(){Anim.AnimQ(Anims);});else if(hand)hand();}
Anim.AnimP=function(Anims,hand){var counter=Anims.length;sHand=function(){counter--;if(!counter&&hand)hand();};while(Anims.length){Anims.shift().animate(sHand);}}
