
//////////////////
//FOR VALIDATION OF PHONE NUMBER

// JavaScript Document
// 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 = 7;

//////////////////Validation Rules
function getCtlValidationRule(ClassName)
{
//this function return regular expression depending upon the CSS class of control
	var regExp="";
	switch (ClassName)
	{
		case "namebox"://only Alpha
			regExp="^([a-zA-Z-\/ \.]+)$";///if numeric are to be allowed then, artist alphabet list must be amended
			break;
		case "addbox"://address fields
			regExp="^([0-9A-Za-z\-\,\/\& ]+)$";
			break;			
		case "phonebox"://phone field
			//regExp="^([0-9]{3})-([0-9]{3})-([0-9]{7})$";
			regExp="^([0-9\-\(\)\+]+)$";
			break;			
		case "alphanumbox":
			regExp="^([0-9A-Za-z ]+)$";
			break;			
		case "numbox":
			regExp="^([0-9]+)$";
			break;	
		case "floatbox":
			regExp="^([0-9]*\.?[0-9]+)$";
			break;	
		case "websitebox":
			regExp="^(http:\/\/)?(www.)?([a-zA-Z0-9_]+[\.][a-zA-Z]{2,3})+(\.[a-zA-Z]{2,3})?(\/[a-zA-Z0-9_]+)*(\/[a-zA-Z0-9_]+\.[a-zA-Z]{3,4})*\/?$";
			break;
		case "emailbox":
			regExp="^([a-zA-Z0-9_\.\-])+\@([a-zA-Z0-9\-])+([\.][a-zA-Z]{2,3})+(\.[a-zA-Z]{2,3})?$";
			break;			
		case "emailsubjectbox":
			regExp="^([0-9A-Za-z\-\,\/\& \?]+)$";
			break;			
		case "datebox"://yyyy-mm-dd
			regExp="^([0-9]){4}(-){1}([0-9]){2}(-){1}([0-9]){2}$";
			break;
/*		case "validlistbox":
			regExp="^([A-Za-z0-9]+)$";///dont allow zero values selected index, dates are handled with in calling function already
			break;*/
		case "txtarea":
			regExp="^([0-9A-Za-z\-\,\/\&\<\> ]+)$";///dont allow zero values selected index, dates are handled with in calling function already
			break;
		case "usernamebox":
			regExp="^([0-9A-Za-z]{5,})$";
			break;
		case "zipbox"://US zip code
			regExp="(^[0-9]{5,6}$)|(^[0-9]{5,6}-[0-9]{4}$)";
			break;
		default:
			regExp="(.*)";////allow all characters for which class name does not lie in the above list
	}
	return regExp;
}
function getCtlValidationText(ClassName)
{
//this function return regular expression depending upon the CSS class of control
	var regExp="";
	switch (ClassName)
	{
		case "namebox"://only Alpha
			regExp="Alphabets and white spaces are allowed";
			break;
		case "addbox"://address fields
			regExp="Alphabets,white spaces,-,/ and & are allowed";
			break;			
		case "phonebox"://phone field
			regExp="Not a valid phone number";
			break;			
		case "alphanumbox":
			regExp="Alphanumeric and white spaces are valid";
			break;			
		case "numbox":
			regExp="Only numeric characters are allowed";
			break;	
		case "floatbox":
			regExp="Valide floating point numbers are allowed";
			break;	
		case "websitebox":
			regExp="Invalid";
			break;
		case "emailbox":
			regExp="Invalid";
			break;			
		case "datebox"://yyyy-mm-dd
			regExp="Enter proper date";
			break;
		case "usernamebox":
			regExp="Only Alphanumerics are valid. Minimum 5 characters.";
			break;
		case "zipbox"://US zip code
			regExp="Format like 99999 or 999999 is valid";
			break;
		default:
			regExp="";////allow all characters for which class name does not lie in the above list
	}
	return regExp;
}

/////////removes spaces
function trim(str)
{
	var leadingspaces=new RegExp ('^ *');
	var trailingspaces=new RegExp (' *$');
	str=str.replace(leadingspaces, '');
	str=str.replace(trailingspaces, '');				
	return str;
}

function ValidateFormFields(frmName)//////Applying General rules to each form
{
		var classAtrib="ctlType";
		var requireAtrib="ctlReq";
		
		var msg="";
		var hasError=false;
		var frm=document.getElementById(frmName);
		var validationRule="";
        for (var i=0; i < frm.elements.length; i++) 
		{ //surf all form controls
        	if (frm.elements[i].id !== null && frm.elements[i].getAttribute(classAtrib))
			{ // check if the form control has a name and class set
				if ((frm.elements[i].value=="" || frm.elements[i].value.length<=0 || frm.elements[i].value=="0")&& !frm.elements[i].getAttribute(requireAtrib)) //if field is blank but not required
				{
					document.getElementById(frm.elements[i].id+'span').innerHTML ="";
					//hasError=false;
					continue;
				}
				if (frm.elements[i].value=="" || frm.elements[i].value.length<=0 || frm.elements[i].value=="0") //if required field is blank then return false
				{
//					alert (frm.elements[i].name);
					document.getElementById(frm.elements[i].id+'span').innerHTML = "<font color ='red'>* Required</font>";
					msg+=frm.elements[i].id;
					hasError=true;
					continue;
					//frm.elements[i].focus();
					//break;
				}
				else
				{
					if(document.getElementById(frm.elements[i].id+'span').innerHTML.indexOf("*")>=0)
					{
						document.getElementById(frm.elements[i].id+'span').innerHTML ="*";
					}
					else
					{
						document.getElementById(frm.elements[i].id+'span').innerHTML ="";
					}
				}				
				if (frm.elements[i].getAttribute(classAtrib)=="filebox")/////fileName Validation
				{
					if (frm.elements[i].value.indexOf(".")>0)////extension must be there
					{
						msg=frm.elements[i].value.split(".");
						if (frm.elements[i].getAttribute('fileType')=='image')
						{
							if (msg[msg.length-1].toUpperCase()!="GIF" && msg[msg.length-1].toUpperCase()!="JPG" && msg[msg.length-1].toUpperCase()!="JPEG")
							{
								if(document.getElementById(frm.elements[i].id+'span').innerHTML.indexOf("*")>=0)
								{
									document.getElementById(frm.elements[i].id+'span').innerHTML = "*&nbsp;Image File must be *.GIF, *.JPEG or *.JPG";
								}
								else
								{
									document.getElementById(frm.elements[i].id+'span').innerHTML = "Image File must be *.GIF, *.JPEG or *.JPG";
								}
								msg+=frm.elements[i].id;
								hasError=true;
								continue;
							}
							else
							{
								if(document.getElementById(frm.elements[i].id+'span').innerHTML.indexOf("*")>=0)
								{
									document.getElementById(frm.elements[i].id+'span').innerHTML ="*";
								}
								else
								{
									document.getElementById(frm.elements[i].id+'span').innerHTML ="";
								}
							}
						}
						else if (frm.elements[i].getAttribute('fileType')=="doc")////all doc controls must have DOC word included in their id
						{
							if (msg[msg.length-1].toUpperCase()!="DOC")
							{
								if(document.getElementById(frm.elements[i].id+'span').innerHTML.indexOf("*")>=0)
								{
									document.getElementById(frm.elements[i].id+'span').innerHTML = "*&nbsp;File must be *.DOC";
								}
								else
								{
									document.getElementById(frm.elements[i].id+'span').innerHTML = "File must be *.DOC";
								}
								msg+=frm.elements[i].id;
								hasError=true;
								continue;
							}
							else
							{
								if(document.getElementById(frm.elements[i].id+'span').innerHTML.indexOf("*")>=0)
								{
									document.getElementById(frm.elements[i].id+'span').innerHTML ="*";
								}
								else
								{
									document.getElementById(frm.elements[i].id+'span').innerHTML ="";
								}
							}
						}
						else if (frm.elements[i].getAttribute('fileType')=="pdf")////all doc controls must have PDF word included in their id
						{
							if (msg[msg.length-1].toUpperCase()!="PDF")
							{
								if(document.getElementById(frm.elements[i].id+'span').innerHTML.indexOf("*")>=0)
								{
									document.getElementById(frm.elements[i].id+'span').innerHTML = "*&nbsp;File must be *.PDF";
								}
								else
								{
									document.getElementById(frm.elements[i].id+'span').innerHTML = "File must be *.PDF";
								}
								msg+=frm.elements[i].id;
								hasError=true;
								continue;
							}
							else
							{
								if(document.getElementById(frm.elements[i].id+'span').innerHTML.indexOf("*")>=0)
								{
									document.getElementById(frm.elements[i].id+'span').innerHTML ="*";
								}
								else
								{
									document.getElementById(frm.elements[i].id+'span').innerHTML ="";
								}
							}
						}	
					}
					else
					{
						if(document.getElementById(frm.elements[i].id+'span').innerHTML.indexOf("*")>=0)
						{
							document.getElementById(frm.elements[i].id+'span').innerHTML ="*&nbsp;File must have Extension";
						}
						else
						{
							document.getElementById(frm.elements[i].id+'span').innerHTML ="File must have Extension";
						}
						hasError=true;
						continue;
					}
					continue;
				}
				if (frm.elements[i].getAttribute(classAtrib)=="listbox")/////have values only html list
				{
					if (frm.elements[i].value=="0" || frm.elements[i].value=="")
					{
						if(document.getElementById(frm.elements[i].id+'span').innerHTML.indexOf("*")>=0)
						{
							document.getElementById(frm.elements[i].id+'span').innerHTML = "*&nbsp;Select an option";
						}
						else
						{
							document.getElementById(frm.elements[i].id+'span').innerHTML = "Select an option";
						}
						msg+=frm.elements[i].id;
						hasError=true;
						continue;
					}
					else
					{
						if(document.getElementById(frm.elements[i].id+'span').innerHTML.indexOf("*")>=0)
						{
							document.getElementById(frm.elements[i].id+'span').innerHTML ="*";
						}
						else
						{
							document.getElementById(frm.elements[i].id+'span').innerHTML ="";
						}
					}
					continue;
				}
				if (frm.elements[i].getAttribute(classAtrib)=="txtarea")/////have values only html list
				{
					if (frm.elements[i].value==="<ul>\n<li> </li>\n<li> </li>\n</ul>" || frm.elements[i].value=="")
					{
						if(document.getElementById(frm.elements[i].id+'span').innerHTML.indexOf("*")>=0)
						{
							document.getElementById(frm.elements[i].id+'span').innerHTML = "*&nbsp;Add some text";
						}
						else
						{
							document.getElementById(frm.elements[i].id+'span').innerHTML = "Add some text";
						}
						msg+=frm.elements[i].id;
						hasError=true;
						continue;
					}
					else
					{
						if(document.getElementById(frm.elements[i].id+'span').innerHTML.indexOf("*")>=0)
						{
							document.getElementById(frm.elements[i].id+'span').innerHTML ="*";
						}
						else
						{
							document.getElementById(frm.elements[i].id+'span').innerHTML ="";
						}
					}
					continue;
				}
				frm.elements[i].value=trim(frm.elements[i].value);
				validationRule=getCtlValidationRule(frm.elements[i].getAttribute(classAtrib));
				if (validationRule==="(.*)") continue;///not required
            	validationRule= new RegExp (validationRule); //evaluate the control validation rule	
/*				var RegExResult;
				if (frm.elements[i].getAttribute(classAtrib)=="websitebox")
				{
					if (frm.elements[i].value.substring(frm.elements[i].value.length-1)=="/")///if last char is /
					{
						RegExResult=validationRule.test(frm.elements[i].value);
					}
					else
					{
						RegExResult=validationRule.test(frm.elements[i].value+"/");
					}
				}
				else
				{
					RegExResult=validationRule.test(frm.elements[i].value);	
				}
				alert (RegExResult);
*/				
				if (!validationRule.test(frm.elements[i].value))
				{ //returns true if ctl value validates the rule
					validationRuleText=getCtlValidationText(frm.elements[i].getAttribute(classAtrib));
					if(document.getElementById(frm.elements[i].id+'span').innerHTML.indexOf("*")>=0)
					{
						document.getElementById(frm.elements[i].id+'span').innerHTML = "*&nbsp;"+validationRuleText;
					}
					else
					{
						document.getElementById(frm.elements[i].id+'span').innerHTML = validationRuleText;
					}
					//alert(frm.elements[i].value);
					msg+=frm.elements[i].id;
					hasError=true;
					continue;
					//frm.elements[i].focus();
					//break;
				}//--> end test regular expression
				else
				{
					if(document.getElementById(frm.elements[i].id+'span').innerHTML.indexOf("*")>=0)
					{
						document.getElementById(frm.elements[i].id+'span').innerHTML ="*";
					}
					else
					{
						document.getElementById(frm.elements[i].id+'span').innerHTML ="";
					}
				}

			}

		}
	if (hasError==true)
	{
		return "Please fill in all fields properly.";
	}
	else
	{
		return "";
	}
}//--> end function 

function validateImages()/////this function onle apply on artists, artist-work and events
{
	//try{
		var imageRef=document.getElementsByName('image_path[]');
		var thumbRef=document.getElementsByName('thumbnail_path[]');
		var mediumRef=document.getElementsByName('medium_image_path[]');
		var ImageIDRef=document.getElementsByName('image_id[]');
	//}
	//catch(e){
	//	return true;///if image_path is not in the doc then return
	//}
	var ImageValidated=false;
	for(i=0;i<imageRef.length;i++)
	{
		if (imageRef[i].value!="" || thumbRef[i].value!="" || mediumRef[i].value!="" || ImageIDRef[i].value!="")
		{
			ImageValidated=true;
			break;
		}
	}
	if (ImageValidated===false)
	{
		document.getElementById('ImageErrorspan').innerHTML="<font color = red >Please add an Image by setting Main Image</font>";
	}
	else
	{
		document.getElementById('ImageErrorspan').innerHTML="";
	}
	return ImageValidated;
}

function submitForm(frmName,ValidateImage)
{
	
	var imageValidations=true;
	if (ValidateImage=="validate")
	{
		imageValidations=validateImages();
	}
	var msg=ValidateFormFields(frmName);
	if (msg!="" || imageValidations===false)///returned with errors
	{
		document.getElementById(frmName+"Errorspan").innerHTML=msg;
		return false;
	}
	return true;
}

function CheckArrayDuplicates(ArrayCheckCtlName,ErrorElement) // finds any duplicate array elements using the fewest possible comparison
{                          
	var i, j, n;
	var hasDuplicates=false;
	var ArrayCheck=document.getElementsByName(ArrayCheckCtlName);
	n=ArrayCheck.length;
                                             // to ensure the fewest possible comparisons
	for (i=0; i<n; i++)
	{                    // outer loop uses each item i at 0 through n
		for (j=i+1; j<n; j++)
		{         // inner loop only compares items j at i+1 to n
			if (ArrayCheck[i].value==ArrayCheck[j].value)
			{
				document.getElementById(ErrorElement+i+'span').innerHTML="duplicate";
				document.getElementById(ErrorElement+j+'span').innerHTML="duplicate as "+i;
				hasDuplicates=true;
			}
		}
	}
	if (hasDuplicates===false)///if not duplicate found
	{
		return submitForm('form1'); 
	}
	else
	{
		document.getElementById("form1Errorspan").innerHTML="Please check the duplicate emails";
		return false;
	}
}

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 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){
s=stripCharsInBag(strPhone,validWorldPhoneChars);
return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);
}

function validatePhone(Phone,type){		
	
	if(Phone.value == '')
	return true;
	
	if (checkInternationalPhone(Phone.value)==false){
		alert("Please Enter a Valid " + type + " Phone Number. A Valid Number must be atleast 7 digit number and may contain (),- and +")
		return false
	}
	
	return true;
 }
 
 //////////////////////////
 ////// EMAIL validation

function echeck(str) {

		var at="@"
		var dot="."
		var lat=str.indexOf(at)
		var lstr=str.length
		var ldot=str.indexOf(dot)
		if (str.indexOf(at)==-1){
		   alert("Invalid E-mail ID. Email ID should be like someone@domain.com")
		   return false
		}

		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.indexOf(at)==lstr){
		   alert("Invalid E-mail ID. Email ID should be like someone@domain.com")
		   return false
		}

		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.indexOf(dot)==lstr){
		    alert("Invalid E-mail ID. Email ID should be like someone@domain.com")
		    return false
		}

		 if (str.indexOf(at,(lat+1))!=-1){
		    alert("Invalid E-mail ID. Email ID should be like someone@domain.com")
		    return false
		 }

		 if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot){
		    alert("Invalid E-mail ID. Email ID should be like someone@domain.com")
		    return false
		 }

		 if (str.indexOf(dot,(lat+2))==-1){
		    alert("Invalid E-mail ID. Email ID should be like someone@domain.com")
		    return false
		 }
		
		 if (str.indexOf(" ")!=-1){
		    alert("Invalid E-mail ID. Email ID should be like someone@domain.com")
		    return false
		 }

 		 return true					
	}

function validateEmail(arg){
	var emailID=arg
		
	if(emailID.value == '')
	return true;
		
	if (echeck(emailID.value)==false){		
		emailID.focus()
		return false
	}
	return true
 }
 
 
 
 
 //////////////////////////
// text AREA restriction 800 chars

function showChars(arg)
{
	document.getElementById("charSpan").innerHTML = arg.value.length;
}
function restrict(arg,e)
{
	var keynum=999;
	if(window.event) // IE
	{
		keynum = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;
	}
	else if(e.which) // Netscape/Firefox/Opera
	{
		keynum = e.which;
	} 
// alert(keynum);
	if(arg.value.length >= 1200 && keynum>=32 && keynum<=126)///dont enter if backspace del etc.
	{
		alert("Maximum number of characters reached.");
		return false;
	}
	else return true;
}

