﻿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);}}