/* -----------------------------------------------
#‎  FreakBox.co.ilכל הזכויות שמורות לליאור וול מ  #
#‎  liorwohl@gmail.com לפרטים נוספים:‏             #
----------------------------------------------- */
//a סקריפט לשליחת טפסים וקבלת ערך בחזרה ללא מעבר עמוד

function ajaxForm(form2use,action)
{
	var args;
	var msg;
	var returnText;
	
	this.send = function()
	{
		if (window.XMLHttpRequest)
		{
			//a כל דפדפן נורמלי
			xmlHttp = new XMLHttpRequest();
		}
		else if (window.ActiveXObject)
		{
			//a אקספלורר 6
			xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
		}
		else
		{
			//a דפדפנים שלא תומכים באג'קס בכלל
			alert("AJAX not supported. Please upgrade your browser!");
		}
	
		args = "useAjax=true";
		if (form2use)
		{			
			formItems = form2use.getElementsByTagName("*");
			for (i=0; i<formItems.length; i++)
			{
				oitem = formItems[i];
				if (oitem.name)
				{
					if (oitem.tagName.toLowerCase() == "input")
					{
						if (oitem.type.toLowerCase() == "text" || oitem.type.toLowerCase() == "password" || oitem.type.toLowerCase() == "hidden")
						{
							args = ""+args+"&"+oitem.name+"="+oitem.value.replace(/&/g,"%26")+"";
						}
						if (oitem.type.toLowerCase() == "checkbox")
						{
							if (oitem.checked)
							{
								args = ""+args+"&"+oitem.name+"=on";
							} 
							else 
							{
								args = ""+args+"&"+oitem.name+"=off";
							}
						}
						if (oitem.type.toLowerCase() == "radio") 
						{
							if (oitem.checked) 
							{
								args = ""+args+"&"+oitem.name+"="+oitem.value.replace(/&/g,"%26")+"";
							}
						}
					}
					if (oitem.tagName.toLowerCase() == "select")// && oitem.getElementsByTagName("option").lenght > 0) //משומה זה התחיל לעשות בעיות עם זה
					{
						args = ""+args+"&"+oitem.name+"="+oitem.getElementsByTagName("option")[oitem.selectedIndex].value.replace(/&/g,"%26")+"";
					}
					if (oitem.tagName.toLowerCase() == "textarea") 
					{
						args = ""+args+"&"+oitem.name+"="+oitem.value.replace(/&/g,"%26")+"";
					}
				}
			}
		}
		//alert(args); //for debuging
	
		xmlHttp.open("post",action,false);
		xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
		xmlHttp.send(args);
		
		xmlDoc = xmlHttp.responseXML.documentElement;
		success = xmlDoc.getElementsByTagName("success")[0].childNodes[0].nodeValue;
		msg = xmlDoc.getElementsByTagName("msg")[0].childNodes[0].nodeValue;
		
		returnTextNodes = xmlDoc.getElementsByTagName("returnText");
		if (returnTextNodes[0])
			returnText = returnTextNodes[0].childNodes[0].nodeValue;

		//a מחזיר ערך
		if (success == "false")
			return false;
		else
			return true;
	}
	
	this.getMsg = function()
	{
		return msg;
	}
	
	this.getReturnText = function()
	{
		return returnText;
	}
}

//a פונקצייה להדפסת הודעת שגיאה בולטת בתוך טופס במקרה הצורך
function displayFormError(form,error)
{
	if (document.getElementById("errorPlace"))
	{
		document.getElementById("errorPlace").parentNode.removeChild(document.getElementById("errorPlace"));
	}
	
	e = document.createElement("div");
	e.id = "errorPlace";
	e.innerHTML = error;
	form.appendChild(e);
}

//a פונקצייה כללית לשליחת טופס עם אג'קס
function ajax(sender,whatToDoOnSuccess,whatToDoOnFail,redirectUrl)
//a sender            = הטופס או הקישור ששלחו לפה (this)
//a whatToDoOnSuccess = מה לעשות אם בצד שרת היה הצלחה [alert / display / redirect / reload] אפשר לכתוב גם 2 ביחד
//a whatToDoOnFail    = מה לעשות אם בצד שרת לא היה הצלחה [alert / display / redirect / reload] אפשר לכתוב גם 2 ביחד
//a redirectUrl       = הכתובת הרצוייה במקרה שנבחר redirect
{
	/*if (whatToDoOnSuccess == undefined)
		whatToDoOnSuccess = "reload";
	
	if (whatToDoOnFail == undefined)
		whatToDoOnFail = "display";*/

	if (typeof(sender) == "string")
	{
		t = new ajaxForm(false,sender);
	}
	else
	{
		tagName = sender.tagName.toLowerCase();
		if (tagName == "form")
			t = new ajaxForm(sender,sender.action);
		else if (tagName == "a")
			t = new ajaxForm(false,sender.href);
		else
			alert("בעייה... "+tagName+"");
	}
	
	if (t.send())
	{
		if (whatToDoOnSuccess.indexOf("alert") > -1)
			alert(t.getMsg());
			
		if (whatToDoOnSuccess.indexOf("display") > -1)
			displayFormError(sender,t.getMsg());
			
		if (whatToDoOnSuccess.indexOf("redirect") > -1)
			window.location = redirectUrl;
			
		if (whatToDoOnSuccess.indexOf("reload") > -1)
			window.location = window.location;
		
		return true;
	}
	else
	{
		if (whatToDoOnFail.indexOf("alert") > -1)
			alert(t.getMsg());
			
		if (whatToDoOnFail.indexOf("display") > -1)
			displayFormError(sender,t.getMsg());
			
		if (whatToDoOnFail.indexOf("redirect") > -1)
			window.location = redirectUrl;
			
		if (whatToDoOnFail.indexOf("reload") > -1)
			window.location = window.location;
		
		return false;
	}
}

//a סגנון ישן, צריך להפסיק להשתמש:

/* ----------------------------------------------
#‎ פונקציות שמכסות את כל סוגי השליחות שצריך      #
#‎ כדי שלא יהיה צריך לכתוב בכל טופס/קישור מחדש.. #
---------------------------------------------- */

//a מציג באלרט את התוצאות של שליחת הטופס, ללא מעבר עמוד.
function alertAjaxFormResults(theForm,theAction)
{
	/*t = new ajaxForm(theForm,theAction);
	t.send();
	if (!theForm)
		alert(t.getMsg());
	else
		displayFormError(theForm,t.getMsg());*/
	ajax(theForm,"display","display");
}

//a מציג באלרט את התוצאות של שליחת הטופס, עם מעבר עמוד.
function ajaxFormAlertAndRedirect(theForm,theAction,url)
{
	/*t = new ajaxForm(theForm,theAction);
	if (t.send())
	{
		alert(t.getMsg());
		window.location = url;
	}
	else
	{
		if (!theForm)
			alert(t.getMsg());
		else
			displayFormError(theForm,t.getMsg());
	}*/
	ajax(theForm,"alert redirect","display",url);
}

//a מציג באלרט את התוצאות ואז מרפרש את הדף
function ajaxFormAlertAndReload(theForm,theAction)
{
	//ajaxFormAlertAndRedirect(theForm,theAction,window.location);
	ajax(theForm,"alert reload","display");
}

//a מעביר לכתובת חדשה אם לא הייתה שגיאה בשליחת הטופס או מציג את השגיאה באלרט ולא מעביר עמוד אם כן הייתה שגיאה
function ajaxFormRedirectOrAlert(theForm,theAction,url)
{
	/*t = new ajaxForm(theForm,theAction);
	if (t.send())
	{
		window.location = url;
	}
	else
	{
		if (!theForm)
			alert(t.getMsg());
		else
			displayFormError(theForm,t.getMsg());
	}*/
	ajax(theForm,"redirect","display",url);
}

//a מרפרש אם לא הייתה שגיאה בשליחת הטופס או מציג את השגיאה באלרט אם כן הייתה שגיאה
function ajaxFormReloadOrAlert(theForm,theAction)
{
	//ajaxFormRedirectOrAlert(theForm,theAction,window.location);
	ajax(theForm,"reload","alert");
}

//a בלחיצה על הקישור יופיע אלרט אם תהיה שגיאה או מעבר עמוד אם לא תהיה שגיאה
function ajaxLinkRedirectOrAlert(theAction,url)
{
	a = document.createElement("a");
	a.href = theAction;
	//ajaxFormRedirectOrAlert(null,theAction,url);
	ajax(a,"redirect","alert",url);
}

function ajaxLinkAlertAndReload(theAction)
{
	a = document.createElement("a");
	a.href = theAction;
	//ajaxFormAlertAndRedirect(null,theAction,window.location);
	ajax(a,"alert reload","alert");
}

//a בלחיצה על הקישור יופיע אלרט אם תהיה שגיאה או רענון לעמוד אם לא תהיה שגיאה
function ajaxLinkReloadOrAlert(theAction)
{
	a = document.createElement("a");
	a.href = theAction;
	//ajaxLinkRedirectOrAlert(theAction,window.location);
	ajax(a,"reload","alert");
}
