/*
* The Array contain the forms and field that will be validited.
* The structure will be difined as the following:
* Form Name, Submit Address, Div to display after submit, Div to display when 
* error, Div to disapear when done, sub-Array of field to validate on this form
* 
*The sub Array will be difined as the following:
*Name of the field, Type of validation (minchar, phone, email), param, error 
*message to display, is required
*/

var FieldArray = [
  ["frmLeadForm", "/gefunctions/AddNewSubscriberGR.php", "SubmitMsg","SubmitMsg", "DivLeadForm",[
  	["name","minchar",1,"שם חייב להכיל לפחות 2 אותיות",1],
  	["phone","phone","","מספר טלפון לא תקין",1],
  	["email","email","","דואר אלקטרוני לא תקין",1]],"submitimgsidebar"],
  	
	["frmFotterLeadForm", "/gefunctions/AddNewSubscriberGR.php", "FotterSubmitMsg","FotterSubmitMsg", "DivFotterLeadForm",[
  	["fotter_name","minchar",1,"שם חייב להכיל לפחות 2 אותיות",1],
  	["fotter_phone","phone","","מספר טלפון לא תקין",1],
  	["fotter_email","email","","דואר אלקטרוני לא תקין",1]], "submitimgfotter"],
  	
  ["frmMiniCourse", "/gefunctions/AddNewSubscriberGR.php", "SubmitMsgMiniCourse","SubmitMsgMiniCourse", "frmMiniCourse",[	
  	["minicourse_name","minchar",1,"שם חייב להכיל לפחות 2 אותיות",1],
  	["minicourse_email","email","","דואר אלקטרוני לא תקין",1]],"submitimgminicourse"]
];

function TagForms(){
  for ( var i=FieldArray.length-1; i>=0; --i ){
    var formarray = FieldArray[i][5];
    try  {
      for(var forms=document.forms.length-1 ;forms>=0 ; --forms){
        if(document.forms[forms].id == FieldArray[i][0]){
      	   for ( var j=formarray.length-1; j>=0; --j ){
      	     for(var f = document.forms[forms].elements.length-1;f>=0;--f){
              if(document.forms[forms].elements[f].id==formarray[j][0]){
                document.forms[forms].elements[f].onchange = function () {Validate(this);} //.form.id,this.id);}
      	     }
      	     }
           }          
        } }
        /*
       var SubmitObj = document.getElementById(FieldArray[i][6]);
       var parent = SubmitObj.parentNode;
       //alert(FieldArray[i][6] + "," + type);
       while(parent.elements[0].form.id != ""){
        parent = parent.parentNode;
       }
       alert(parent.id); */
      }  catch(e){}

     
      //SubmitObj.onclick = function {if(ValidateAll(formarray[0])==true) AjaxSubmit(formarray[0]); return false;}     
  } 
  return true; 
}

function ajaxFunction(url){
	var ajaxRequest;  // The variable that makes Ajax possible!
	
	try{
		// Opera 8.0+, Firefox, Safari
		ajaxRequest = new XMLHttpRequest();
	} catch (e){
		// Internet Explorer Browsers
		try{
			ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try{
				ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e){
				// Something went wrong
				return false;
			}
		}
	}
	// Create a function that will receive data sent from the server
	ajaxRequest.onreadystatechange = function(){
		if(ajaxRequest.readyState == 4){
			return false;
		}
	}
	ajaxRequest.open("GET", url, true);
	ajaxRequest.send(null);
	return true;
}


function AjaxSubmit(formname){
  var formArray = GetFormArrayFromID(formname);
  var SubmitURL = formArray[1];
  var AfterSubmitShowDiv = formArray[2];
  var AfterSubmitHideDiv = formArray[4];

	var add = "&";
	if(SubmitURL.indexOf("?",0) < 0)
		add = "?";

	var	NewSubmitURL = SubmitURL;

	for(i=0; i<document[formname].elements.length; i++) {
		NewSubmitURL+=add + document[formname].elements[i].id + "=" + document[formname].elements[i].value;
		if (add = "?")
		{
			add = "&";
		}
	}
	var Response = ajaxFunction(NewSubmitURL);
	if(Response == true)
	{
    //CreateMsgDiv("<b>הודעתך נשלחה בהצלחה!<br /> אנו נחזור אליך בהקדם</b>","ok");
    document.getElementById(AfterSubmitShowDiv).style.display="block";
    document.getElementById(AfterSubmitHideDiv).style.display="none";
  }  else
    //CreateMsgDiv("<b>הודעתך לא נשלחה!<br /> אנא נסה במועד מאוחר יותר</b>","error");  
	return false;
}

function GetFormArrayFromID(formname){
  for ( var i=FieldArray.length-1; i>=0; --i ){
  		if(FieldArray[i][0] == formname) {
  		  return FieldArray[i]; 
  		}
  }
  return false;
}

function ValidateAll(formname){
	var valid = true;
  for ( var i=FieldArray.length-1; i>=0; --i ){
  		if(FieldArray[i][0] == formname) {
  		  var formarray = FieldArray[i][5];
  		  for ( var j=formarray.length-1; j>=0; --j ){
  		    obj = GetObject(formname, formarray[j][0]);
  		    if(obj !=false)
  		      if(Validate(obj) == false)
  		          valid = false;
  		  }
      }
  	};

 	return valid;
}
function GetObject(formname,objectname){
  for(var forms=document.forms.length-1 ;forms>=0 ; --forms){
    if(document.forms[forms].id == formname){}
      for(var f = document.forms[forms].elements.length-1;f>=0;--f){
        if(document.forms[forms].elements[f].id == objectname)
          return document.forms[forms].elements[f];        
      }
    }
  return false;    
  }
  
function returnObjectValidationArray(obj,formname,name){
for ( var i=obj.length-1; i>=0; --i ){
		if(obj[i][0] == formname) {
		  var formarray = obj[i][5];
		  for ( var j=formarray.length-1; j>=0; --j ){
		    if(formarray[j][0] == name)
		      return formarray[j];
		  }
    }
	};
	return false;
}

function Validate(obj) {
//obj = document.getElementById(objName);

formname = obj.form.id;
objName = obj.id;

var ValidationArray = returnObjectValidationArray(FieldArray,formname,objName);

if (ValidationArray[1] == 'minchar') {
	if(obj.value.length>ValidationArray[2]){
		DivObj = document.getElementById('div'+objName);
		if(DivObj!=null)
			DivObj.style.display="none";
	}else {
		x = parseInt(findPosX(obj))-135;
		y = findPosY(obj);
		CreateValidationDiv(objName,ValidationArray[3] ,x,y);
		return false;
	}
} if(ValidationArray[1]  == "phone"){
	if(checkInternationalPhone(obj.value)){
		DivObj = document.getElementById('div'+objName);
		if(DivObj!=null)
			DivObj.style.display="none";
	}else {
		x = parseInt(findPosX(obj))-135;
		y = findPosY(obj);
		CreateValidationDiv(objName,ValidationArray[3],x,y);
		return false;
	}  
}if(ValidationArray[1]  == "email"){
	if(emailCheck(obj.value)){
		DivObj = document.getElementById('div'+objName);
		if(DivObj!=null)
			DivObj.style.display="none";
	}else {
		x = parseInt(findPosX(obj))-135;
		y = findPosY(obj);
		CreateValidationDiv(objName,ValidationArray[3],x,y);
		return false;
	}
	return true;
}
}
	function findPosY(obj){
	var curtop = 0;
	if (obj.offsetParent) {
	while (obj.offsetParent) {
	curtop += obj.offsetTop;
	obj = obj.offsetParent;
	}
	} else if (obj.y){
	curtop += obj.y;
	}
	return curtop;
}

function findPosX(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}

	return curleft;
}

function CreateOrReturnObject(Id, Tag)
{
  var o = document.getElementById(Id);
  if (o)
  {
    if (Tag)
    {
      if (o.tagName.toLowerCase() == Tag.toLowerCase())
      {
        return o;
      }
    }
    else
    {
      return o;
    }
  }
  return document.createElement('div');
}

function CreateMsgDiv(msg,type) {
   var newdiv = CreateOrReturnObject('msgdiv',"div");
   newdiv.setAttribute('id', 'div');
   if(type=="ok")
       newdiv.className ="round-a-ok centered";
   else
       newdiv.className ="round-a-error centered";
   

   newdiv.style.position = "absolute";
      
   newdiv.style.display="block";
   newdiv.innerHTML = msg;   
   document.body.appendChild(newdiv);
   
}

function CreateValidationDiv(id, msg, left, top) { 
   var newdiv = CreateOrReturnObject('div'+id,"div");
   newdiv.setAttribute('id', 'div'+id);
   newdiv.className ="ValidationDivClass";
   newdiv.style.width = 150;
   newdiv.style.height = 25;
   
   if ((left || top) || (left && top)) {
       newdiv.style.position = "absolute";
       
       if (left) {
          left=left+140;
           newdiv.style.left = left+'px';
       }
       
       if (top) {
           top=top+20;
           newdiv.style.top = top+'px';
       }
   }
   
   newdiv.style.display="block";
   
   newdiv.innerHTML = msg;

   
   document.body.appendChild(newdiv);
  }

// Declaring required variables
var digits = "0123456789";
// non-digit characters which are allowed in phone numbers
var phoneNumberDelimiters = "()- ";
// characters which are allowed in international phone numbers
// (a leading + is OK)
var validWorldPhoneChars = phoneNumberDelimiters + "+";
// Minimum no of digits in an international phone no.
var minDigitsInIPhoneNumber = 9;

function isInteger(s)
{   var i;
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}
function trim(s)
{   var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not a whitespace, append to returnString.
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (c != " ") returnString += c;
    }
    return returnString;
}
function stripCharsInBag(s, bag)
{   var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function checkInternationalPhone(strPhone){
	var bracket=3
	strPhone=trim(strPhone)
	if(strPhone.indexOf("+")>1) return false
	if(strPhone.indexOf("-")!=-1)bracket=bracket+1
	if(strPhone.indexOf("(")!=-1 && strPhone.indexOf("(")>bracket)return false
	var brchr=strPhone.indexOf("(")
	if(strPhone.indexOf("(")!=-1 && strPhone.charAt(brchr+2)!=")")return false
	if(strPhone.indexOf("(")==-1 && strPhone.indexOf(")")!=-1)return false
	s=stripCharsInBag(strPhone,validWorldPhoneChars);
	return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);
	}

function emailCheck(str) {

		var at="@"
		var dot="."
		var lat=str.indexOf(at)
		var lstr=str.length
		var ldot=str.indexOf(dot)
		if (str.indexOf(at)==-1){
		   return false
		}

		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
		   return false
		}

		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		    return false
		}

		 if (str.indexOf(at,(lat+1))!=-1){
		    return false
		 }

		 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		    return false
		 }

		 if (str.indexOf(dot,(lat+2))==-1){
		    return false
		 }
		
		 if (str.indexOf(" ")!=-1){
		    return false
		 }

 		 return true					
	}
