document.getElementsByClassName = function(elClassName){var arrayList = new Array();var elements = document.getElementsByTagName("*");for(var i = 0;i < elements.length;i++){if(elements[i].className.indexOf(" ") >= 0){var classes = elements[i].className.split(" ");for(var j = 0;j < classes.length;j++){if(classes[j] == elClassName){arrayList.push(elements[i]);}}}else if(elements[i].className == elClassName){arrayList.push(elements[i]);}}return arrayList;}
			
function AjaxForm() 
{	
	this.TargetId = document.getElementById(arguments[0].TargetId);
	this.TriggerId = arguments[0].TriggerId;	
	this.TriggerResendId = arguments[0].TriggerResendId;
	this.RequestUrl = arguments[0].RequestUrl;
	this.RequestType = arguments[0].RequestType;	
	this.InputFields = arguments[0].Fields;		
	this.LoadingHTML = arguments[0].LoadingHTML;
	this.isValid = true;
	this.RequestString = "";
	this.From = arguments[0].From;
}

AjaxForm.prototype.Call = function(type)	
{						
	xmlHttp = GetXmlHttpObject();		
	this.RequestString = "&call=" + type + "&from=" + this.From;
	
	if(type == "submit")
		this.Validate();
	
	if(this.isValid)
	{		
		xmlHttp.open(this.RequestType,this.RequestUrl,true);						
		xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		xmlHttp.setRequestHeader("Content-length", this.RequestString.length);
		xmlHttp.setRequestHeader("Connection", "close");		
		var self = this;

		xmlHttp.onreadystatechange = function()
		{				
			if (xmlHttp.readyState == 4)
			{			
				self.TargetId.innerHTML = xmlHttp.responseText;								
				if((type == "new") && (document.getElementById(self.TriggerId) != null)) document.getElementById(self.TriggerId).onclick = function(){self.Call('submit');return false};											
				if((type == "submit") && (document.getElementById(self.TriggerResendId) != null)) document.getElementById(self.TriggerResendId).onclick = function(){self.Call('new');return false};															
				
				var scripts = self.TargetId.getElementsByTagName('script');
				for (var i=0;i<scripts.length;i++) {
					eval(scripts[i].innerHTML);
				}
			}
			else 		
			{		
				self.TargetId.innerHTML = self.LoadingHTML;									
			}
		};		
		xmlHttp.send(this.RequestString);	
		if(this.ResetFields == "true") this.Reset();			
	}
};

AjaxForm.prototype.Reset = function()
{
	for (var i in this.InputFields)
	{		
		document.getElementById(this.InputFields[i].id).value = "";
	}
};

AjaxForm.prototype.Set = function()
{
	var self = this;
	document.getElementById(self.TriggerId).onclick = function()
	{
		self.Call('submit');return false
	};	
}
			
AjaxForm.prototype.Validate = function()
{		
	for (var i in this.InputFields)
	{
		var fieldHolder = document.getElementById(this.InputFields[i].id);
		
		if(this.InputFields[i].validate)
		{		
			if(fieldHolder.value == "")
			{
				this.isValid = false;
				addClass(fieldHolder, this.InputFields[i].errorCss);															
				
			}			
			else if(this.InputFields[i].isEmail)
			{		
				var supEmail = fieldHolder.value;
				var emLen = supEmail.length;
				var posAt = supEmail.indexOf('@')
				var posDot = supEmail.lastIndexOf('.')
				if((emLen < 7) || (posAt < 1) || (posDot <= (posAt + 1)) || (posDot >= (emLen - 1)))
				{
					this.isValid = false;
					fieldHolder.setAttribute("class", fieldHolder.getAttribute("class") + " " + this.InputFields[i].errorCss);		
				}	
				else 
				{
					this.isValid = true;
					this.RequestString += "&"+this.InputFields[i].name+"=" + fieldHolder.value;
					removeClass(fieldHolder, this.InputFields[i].errorCss);
				}
			}	
			else if (this.InputFields[i].placeHolder == fieldHolder.value)
			{
				this.isValid = false;
				fieldHolder.setAttribute("class", fieldHolder.getAttribute("class") + " " + this.InputFields[i].errorCss);	
			}
			else
			{			
				this.isValid = true;
				this.RequestString += "&"+this.InputFields[i].name+"=" + fieldHolder.value;
				removeClass(fieldHolder, this.InputFields[i].errorCss);
			}
		}
		else
		{	
			this.RequestString += "&"+this.InputFields[i].name+"=" + fieldHolder.value;
		}
	}			
}

function hasClass(ele,cls) 
{
	return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}

function addClass(ele,cls) 
{
	if (!this.hasClass(ele,cls)) ele.className += " "+cls;
}

function removeClass(ele,cls) 
{
	if (hasClass(ele,cls)) 
	{
		var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
		ele.className=ele.className.replace(reg,' ');
	}
}

function GetXmlHttpObject()
{
	var xmlHttp = null;	
	try {
		xmlHttp = new XMLHttpRequest();
	} catch (e) {
		try
		{
			xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	return xmlHttp;
}
