/////////////////////////////////////////////////////
//	Image Cache

var imageCache = new Array();

function CacheDualStateImage(path, hoverPathPostfix, imageFileName)
{
	var image;
	
	image = new Image(5);
	image.src = path + "/" + imageFileName;
	imageCache[imageFileName + "_low"] = image;

	image = new Image(5);
	image.src = path + "-" + hoverPathPostfix + "/" + imageFileName;
	imageCache[imageFileName + "_hover"] = image;
}

function CacheImage(path)
{
	var image;
	
	image = new Image(5);
	image.src = path;
	imageCache[path] = image;
}

function PrecacheImages()
{
	CacheDualStateImage("WebSite.Modules/Content.Forms/FormDecorations", "Hover", "field00Bg.gif");
	CacheDualStateImage("WebSite.Modules/Content.Forms/FormDecorations", "Hover", "field01Bg.gif");
	CacheDualStateImage("WebSite.Modules/Content.Forms/FormDecorations", "Hover", "field02Bg.gif");
	CacheDualStateImage("WebSite.Modules/Content.Forms/FormDecorations", "Hover", "field03Bg.gif");
	CacheDualStateImage("WebSite.Modules/Content.Forms/FormDecorations", "Hover", "field04Bg.gif");
	CacheDualStateImage("WebSite.Modules/Content.Forms/FormDecorations", "Hover", "field20Bg.gif");
	CacheDualStateImage("WebSite.Modules/Content.Forms/FormDecorations", "Hover", "field24Bg.gif");
	CacheDualStateImage("WebSite.Modules/Content.Forms/FormDecorations", "Hover", "field40Bg.gif");
	CacheDualStateImage("WebSite.Modules/Content.Forms/FormDecorations", "Hover", "field41Bg.gif");
	CacheDualStateImage("WebSite.Modules/Content.Forms/FormDecorations", "Hover", "field42Bg.gif");
	CacheDualStateImage("WebSite.Modules/Content.Forms/FormDecorations", "Hover", "field43Bg.gif");
	CacheDualStateImage("WebSite.Modules/Content.Forms/FormDecorations", "Hover", "field44Bg.gif");
	CacheDualStateImage("WebSite.Modules/Content.Forms/FormDecorations", "Hover", "goButton.png");
	CacheDualStateImage("WebSite.Modules/Content.Forms/FormDecorations", "Hover", "sendButtonBG.png");
	CacheDualStateImage("WebSite.Modules/Content.Forms/FormDecorations", "Hover", "sendButtonEN.png");
    	
	for(var i = 1; i <= 6; i++)
	{
		CacheImage("WebSite.Modules/Navigation.MainMenu.Fixed.Basic/CommonFrameMainManu0" + i + "/mainMenuButtonFirst.gif");
		CacheImage("WebSite.Modules/Navigation.MainMenu.Fixed.Basic/CommonFrameMainManu0" + i + "/mainMenuButtonLast.gif");
		CacheImage("WebSite.Modules/Navigation.MainMenu.Fixed.Basic/CommonFrameMainManu0" + i + "/mainMenuButtonMiddle.gif");
	}
}

PrecacheImages();


/////////////////////////////////////////////////////
//	Event Handlers

function OnInputFocused(element, hideDefaultTextOnFocus)
{
	var cssClass = new WCssClass(element.className);
	cssClass.SetModifier('_focused');
	cssClass.RemoveModifier('_blurred');
	element.className = cssClass.ToString();
	
	if(!hideDefaultTextOnFocus)
	{
	    return;
	}
	
	if(element.originalInputValue == null)
	{
		element.originalInputValue = element.value;
	}
	
	if(element.originalInputValue == element.value)
	{
		element.value = "";
	}
}

function OnInputBlurred(element, hideDefaultTextOnFocus)
{
	var cssClass = new WCssClass(element.className);
	cssClass.SetModifier('_blurred');
	cssClass.RemoveModifier('_focused');
	element.className = cssClass.ToString();
	
	if(!hideDefaultTextOnFocus)
	{
	    return;
	}
	
	if(element.value == "")
	{
		element.value = element.originalInputValue;
	}
}

function OnInputMouseEnter(idPostfix)
{
	HighlightDecoration("field00Image_" + idPostfix);
	HighlightDecoration("field01Cell_" + idPostfix);
	HighlightDecoration("field01Image_" + idPostfix);
	HighlightDecoration("field02Cell_" + idPostfix);
	HighlightDecoration("field02Image_" + idPostfix);
	HighlightDecoration("field03Image_" + idPostfix);
	HighlightDecoration("field04Cell_" + idPostfix);
	HighlightDecoration("field05Cell_" + idPostfix);
	HighlightDecoration("field06Image_" + idPostfix);
	HighlightDecoration("field07Cell_" + idPostfix);
	HighlightDecoration("field07Image_" + idPostfix);
	HighlightDecoration("field08Cell_" + idPostfix);
	HighlightDecoration("field08Image_" + idPostfix);
	HighlightDecoration("field09Image_" + idPostfix);
}

function OnInputMouseLeave(idPostfix)
{
	DimDecoration("field00Image_" + idPostfix);
	DimDecoration("field01Cell_" + idPostfix);
	DimDecoration("field01Image_" + idPostfix);
	DimDecoration("field02Cell_" + idPostfix);
	DimDecoration("field02Image_" + idPostfix);
	DimDecoration("field03Image_" + idPostfix);
	DimDecoration("field04Cell_" + idPostfix);
	DimDecoration("field05Cell_" + idPostfix);
	DimDecoration("field06Image_" + idPostfix);
	DimDecoration("field07Cell_" + idPostfix);
	DimDecoration("field07Image_" + idPostfix);
	DimDecoration("field08Cell_" + idPostfix);
	DimDecoration("field08Image_" + idPostfix);
	DimDecoration("field09Image_" + idPostfix);
}

function HighlightDecoration(id)
{
	var element = document.getElementById(id);
	if(element.src != undefined)
	{
		element.src = element.src.replace("FormDecorations", "FormDecorations-Hover");
	}
	else
	{
		element.style.backgroundImage = element.style.backgroundImage.replace("FormDecorations", "FormDecorations-Hover");
	}
}

function DimDecoration(id)
{
	var element = document.getElementById(id);
	if(element.src != undefined)
	{
		element.src = element.src.replace("-Hover", "");
	}
	else
	{
		element.style.backgroundImage = element.style.backgroundImage.replace("-Hover", "");
	}
}

var sequenceAnimators = new Array();

function HighlightMenuButton(element)
{
	var animator = sequenceAnimators[element.id];
	if(animator == undefined)
	{
		animator = new WSequenceAnimator(1, 6, 30, OnMenuButtonImageChanged, element);
		sequenceAnimators[element.id] = animator;
	}
	
	animator.Animate(true);
}

function DimMenuButton(element)
{
	var animator = sequenceAnimators[element.id];
	animator.Animate(false);
}

function OnMenuButtonImageChanged(animator)
{
	var element = animator.data;
	if(element.src != undefined)
	{
		element.src = element.src.replace(/CommonFrameMainManu0\d/, "CommonFrameMainManu0" + animator.current);
	}
	else
	{
		element.style.backgroundImage = element.style.backgroundImage.replace(/CommonFrameMainManu0\d/, "CommonFrameMainManu0" + animator.current);
	}
}

/////////////////////////////////////////////////////
//	Framework
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };

//	WCssClass
function WCssClass(text)
{
	var self = this;
	self.mainClassName = null;
	self.mainClassSwitches = null;
	self.modifierClassNames = null;
	self.Read(text);
};

WCssClass.prototype.Read = function(text)
{
	var self = this;
	self.mainClassName = "";
	self.mainClassSwitches = new Array();
	self.modifierClassNames = new Array();
	var tokens = text.split(new RegExp("\\s"));
	var length = tokens.length;
	for (var i = 0; i < length; i++)
	{
		var token = tokens[i] ;
		if (token.trim() == "")
			continue;
		if (token.charAt(0) == "_")
		{
			self.modifierClassNames[self.modifierClassNames.length] = token;
			continue;
		}
		if (self.mainClassName != "")
			continue;
		var subTokens = token.split("_");
		self.mainClassName = subTokens[0] ;
		var length2 = subTokens.length;
		for (var j = 1; j < length2; j++)
			self.mainClassSwitches[self.mainClassSwitches.length] = subTokens[j];
	}
	self.mainClassSwitches.sort();
};

WCssClass.prototype.HasSwitch = function(text)
{
	var self = this;
	var length = self.mainClassSwitches.length;
	for (var i = 0; i < length; i++)
	{
		if (self.mainClassSwitches[i] == text)
			return true;
	}
	return false;
};

WCssClass.prototype.SetSwitch = function(text)
{
	var self = this;
	var length = self.mainClassSwitches.length;
	for (var i = 0; i < length; i++)
	{
		if (self.mainClassSwitches[i] == text)
			return;
	}
	self.mainClassSwitches[self.mainClassSwitches.length] = text;
	self.mainClassSwitches.sort();
};

WCssClass.prototype.RemoveSwitch = function(text)
{
	var self = this;
	var old = self.mainClassSwitches;
	self.mainClassSwitches = new Array();
	var length = old.length;
	for (var i = 0; i < length; i++)
	{
		if (old[i] == text)
			continue;
		self.mainClassSwitches[self.mainClassSwitches.length] = old[i];
	}
};

WCssClass.prototype.HasModifier = function(text)
{
	var self = this;
	var length = self.modifierClassNames.length;
	for (var i = 0; i < length; i++)
	{
		if (self.modifierClassNames[i] == text)
			return true;
	}
	return false;
};

WCssClass.prototype.SetModifier = function(text)
{
	var self = this;
	var length = self.modifierClassNames.length;
	for (var i = 0; i < length; i++)
	{
		if (self.modifierClassNames[i] == text)
			return;
	}
	self.modifierClassNames[self.modifierClassNames.length] = text;
};

WCssClass.prototype.RemoveModifier = function(text)
{
	var self = this;
	var old = self.modifierClassNames;
	self.modifierClassNames = new Array();
	var length = old.length;
	for (var i = 0; i < length; i++)
	{
		if (old[i] == text)
			continue;
		self.modifierClassNames[self.modifierClassNames.length] = old[i];
	}
};

WCssClass.prototype.ToString = function()
{            
	var self = this;
	var result = self.mainClassName;
	var length = 0;
	var i = 0;
	length = self.mainClassSwitches.length;
	for (i = 0; i < length; i++)
	{
		result += "_" + self.mainClassSwitches[i];
	}
	length = self.modifierClassNames.length;
	if (length != 0)
	{
		result += " ";
		for (i = 0; i < length; i++)
		{
			result += " " + self.modifierClassNames[i];
		}
	}
	return result;
};

//	WImageSequenceAnimator
function WSequenceAnimator(minValue, maxValue, interval, onChange, data)
{
	var self = this;
	self.minValue = minValue;
	self.maxValue = maxValue;
	self.interval = interval;
	self.onChange = onChange;
	self.data = data;
	
	self.isRunning = false;
	self.current = 0;
	self.increment = false;
	self.timer = -1;
};

WSequenceAnimator.prototype.Animate = function(increment)
{
	var self = this;
	
	self.increment = increment;
	if(self.isRunning)
	{
		return;
	}
	
	self.current = increment ? self.minValue : self.maxValue;
	self.timer = window.setInterval(function() {self.OnTimerTick(self);}, self.interval);
	self.isRunning = true;
};

WSequenceAnimator.prototype.OnTimerTick = function(self)
{
	self.current += self.increment ? 1 : -1;
	if((self.increment && self.current > self.maxValue) || (!self.increment && self.current < self.minValue))
	{
		window.clearInterval(self.timer);
		self.timer = -1;
		self.isRunning = false;
	}
	else
	{
		self.onChange(self);
	}
};


