function gjsf_cleanup_quote (p_strg)
{
	p_strg = p_strg.replace (/"/g,"&quot;");
	p_strg = p_strg.replace (/'/g,"&acute;");
	return p_strg;
}

function gjsf_cleanup_phone_no (p_phone_no)
{ 
	p_phone_no = p_phone_no.replace (/ /g,"");
	p_phone_no = p_phone_no.replace (/-/g,"");
	p_phone_no = p_phone_no.replace (/\(/g,"");
	p_phone_no = p_phone_no.replace (/\)/g,"");
	p_phone_no = p_phone_no.replace (/\'/g,"");
	p_phone_no = p_phone_no.replace (/\"/g,"");
	return p_phone_no;
}

function gjsf_contact_us()
{	
	window.open('/contactus.php','_blank','width=450, height=550, location=no, menubar=no, resizable=no, scrollable=no, status=no');
}

function gjsf_open_tell_a_friend (p_prodcode, p_code, p_row, p_col)
{ 
	var p1 = "tellafriend.php?p="+p_prodcode+"&cat="+p_code+"&r="+p_row+"&c="+p_col;
	var p2 = "_blank";
	var p3 = "directories=no,height=550,width=450,location=no,menubar=no,titlebar=no,scrollbars=yes";
	window.open (p1, p2, p3);
}

function gjsf_isnumeric(strString)
{
	var strValidChars = "0123456789.-";
	var strChar;
	var blnResult = true;
	
	if (strString.length == 0) return true;
	
	//  test strString consists of valid characters listed above
	for (i = 0; i < strString.length && blnResult == true; i++)
	  {
	  strChar = strString.charAt(i);
	  if (strValidChars.indexOf(strChar) == -1)
		 {
		 blnResult = false;
		 }
	  }
	return blnResult;
}

function gjsf_mouse_over_highlight (obj)
{ 
//	obj.style.filter = "alpha(opacity=120)";
	obj.className = "css-highlite-picture";
}

function gjsf_mouse_out_dim (obj)
{ 
//	obj.style.filter = "alpha(opacity=100)";
	obj.className = "css-lowlite-picture";
}

function gjsf_build_province_state (p_tb, p_country, p_fldname, p_default, p_event_name, p_event_func)
{ 
	switch (p_country)
	{	case "CA":	var thtml="<select id='"+p_fldname+"' name='"+p_fldname+"' class='css-standard-font' "+
					p_event_name+"='"+p_event_func+"'>"+
					"<option value=''>-- Provinces --</option>"+
					"<option value='AB'>Alberta</option>"+
					"<option value='BC'>British Columbia</option>"+
					"<option value='MB'>Manitoba</option>"+
					"<option value='NB'>New Brunswick</option>"+
					"<option value='NL'>Newfoundland and Labrador</option>"+
					"<option value='NT'>Northwest Territories</option>"+
					"<option value='NS'>Nova Scotia</option>"+
					"<option value='NU'>Nunavut</option>"+
					"<option value='ON'>Ontario</option>"+
					"<option value='PE'>Prince Edward Island</option>"+
					"<option value='QC'>Quebec</option>"+
					"<option value='SK'>Saskatchewan</option>"+
					"<option value='YT'>Yukon</option>"+
					"</select>";
					break;
		case "US":	var thtml="<select id='"+p_fldname+"' name='"+p_fldname+"' class='css-standard-font' "+
					p_event_name+"='"+p_event_func+"'>"+
					"<option value=''>-- States --</option>"+
					"<option value='AL'>ALABAMA</option>"+
					"<option value='AK'>ALASKA</option>"+
					"<option value='AS'>AMERICAN SAMOA</option>"+
					"<option value='AZ'>ARIZONA</option>"+
					"<option value='AR'>ARKANSAS</option>"+
					"<option value='CA')>CALIFORNIA</option>"+
					"<option value='CO'>COLORADO</option>"+
					"<option value='CT'>CONNECTICUT</option>"+
					"<option value='DE'>DELAWARE</option>"+
					"<option value='DC'>DISTRICT OF COLUMBIA</option>"+
					"<option value='FM'>FEDERATED STATES OF MICRONESIA</option>"+
					"<option value='FL'>FLORIDA</option>"+
					"<option value='GA'>GEORGIA</option>"+
					"<option value='GU'>GUAM</option>"+
					"<option value='HI'>HAWAII</option>"+
					"<option value='ID'>IDAHO</option>"+
					"<option value='IL'>ILLINOIS</option>"+
					"<option value='IN'>INDIANA</option>"+
					"<option value='IA'>IOWA</option>"+
					"<option value='KS'>KANSAS</option>"+
					"<option value='KY'>KENTUCKY</option>"+
					"<option value='LA'>LOUISIANA</option>"+
					"<option value='ME'>MAINE</option>"+
					"<option value='MH'>MARSHALL ISLANDS</option>"+
					"<option value='MD'>MARYLAND</option>"+
					"<option value='MA'>MASSACHUSETTS</option>"+
					"<option value='MI'>MICHIGAN</option>"+
					"<option value='MN'>MINNESOTA</option>"+
					"<option value='MS'>MISSISSIPPI</option>"+
					"<option value='MO'>MISSOURI</option>"+
					"<option value='MT'>MONTANA</option>"+
					"<option value='NE'>NEBRASKA</option>"+
					"<option value='NV'>NEVADA</option>"+
					"<option value='NH'>NEW HAMPSHIRE</option>"+
					"<option value='NJ'>NEW JERSEY</option>"+
					"<option value='NM'>NEW MEXICO</option>"+
					"<option value='NY'>NEW YORK</option>"+
					"<option value='NC'>NORTH CAROLINA</option>"+
					"<option value='ND'>NORTH DAKOTA</option>"+
					"<option value='MP'>NORTHERN MARIANA ISLANDS</option>"+
					"<option value='OH'>OHIO</option>"+
					"<option value='OK'>OKLAHOMA</option>"+
					"<option value='OR'>OREGON</option>"+
					"<option value='PW'>PALAU</option>"+
					"<option value='PA'>PENNSYLVANIA</option>"+
					"<option value='PR'>PUERTO RICO</option>"+
					"<option value='RI'>RHODE ISLAND</option>"+
					"<option value='SC'>SOUTH CAROLINA</option>"+
					"<option value='SD'>SOUTH DAKOTA</option>"+
					"<option value='TN'>TENNESSEE</option>"+
					"<option value='TX'>TEXAS</option>"+
					"<option value='UT'>UTAH</option>"+
					"<option value='VT'>VERMONT</option>"+
					"<option value='VI'>VIRGIN ISLANDS</option>"+
					"<option value='VA'>VIRGINIA</option>"+
					"<option value='WA'>WASHINGTON</option>"+
					"<option value='WV'>WEST VIRGINIA</option>"+
					"<option value='WI'>WISCONSIN</option>"+
					"<option value='WY'>WYOMING</option>"+
					"</select>";
					break;
		default:	var thtml="<input class='css-standard-font' type='text' id='"+p_fldname+"' name='"+p_fldname+"' size='30' "+
					"maxlength='30' "+p_event_name+"='"+p_event_func+"'>";
	}
	p_tb.innerHTML = thtml;
}
//------------------------------------------------------------------------------------------------
function gjsf_trim(s)
{   var i;
    var returnString = "";
	if (s!=null && s!="")
	{
		for (i = 0; i < s.length; i++)
		{   
			var c = s.charAt(i);
			if (c != " ") returnString += c;
		}
	}
    return returnString;
}
//-------------------------------------------------------------------------------------------
function gjsf_form_validator(p_form)
{
	// this function takes a form as parameter and validates all fields in the form according to directives set
	// fields that needs validation required directive set in tag named "VALIDATE"
	// more than one directives can be set in the tag. directives are created in pair in format of KEY=VALUE
	// multiple directives are separated with semi-color ';".
	// accepted directives are as follow:-
	// MANDATORY	(yes / no)	: field are mandatory, value must exists in fields
	// DTYPE (number/date/time/datetime/email/phone/postalzip) : validate format of value according to data  type
	// SUPCALL (function name): additional function called after build in validation is performed.
	
	//----------------------------------------------------------------------------------------------
	function jsf_checkInternationalPhone(strPhone)
	{
		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 = 10;
	
		var bracket=3;
		strPhone=gjsf_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=jsf_stripCharsInBag(strPhone,validWorldPhoneChars);
		
		return (gjsf_isnumeric(s) && s.length >= minDigitsInIPhoneNumber);
	}
	//-------------------------------------------------------------------------------------------
	function jsf_stripCharsInBag(s, bag)
	{   var i;
		var returnString = "";
		for (i = 0; i < s.length; i++)
		{   
			var c = s.charAt(i);
			if (bag.indexOf(c) == -1) returnString += c;
		}
		return returnString;
	}
	//-------------------------------------------------------------------------------------------
	function jsf_validate_date(p_value)
	{
		var validformat=/^\d{4}\-\d{2}\-\d{2}$/;
		var rtnbool=validformat.test(p_value);
		if (rtnbool)
		{
			var yearfield=p_value.split("-")[0];
			var monthfield=p_value.split("-")[1];
			var dayfield=p_value.split("-")[2];
			var dayobj = new Date(yearfield, monthfield-1, dayfield);
			rtnbool = (!((dayobj.getMonth()+1!=monthfield)||(dayobj.getDate()!=dayfield)||(dayobj.getFullYear()!=yearfield)));
		}
		return rtnbool
	}
	//-------------------------------------------------------------------------------------------
	function jsf_validate_email(p_email)
	{
	   var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	   rtnbool = reg.test(p_email);
	   return rtnbool;
	}
	//-------------------------------------------------------------------------------------------
	function jsf_validate_phone(p_phoneno)
	{
		rtnbool = jsf_checkInternationalPhone(p_phoneno);

		return rtnbool;
	}
	//-------------------------------------------------------------------------------------------
	function jsf_validate_postal(p_postal)
	{
		country = document.getElementById("fd_country").value;
		if (country=="CA"||country=="US")
		{
			zip = p_postal.replace (/ /g, "");
			var ll = zip.length;
			switch (ll)
			{	// US zip code
				case 5: rtnbool = gjsf_isnumeric(zip); break;
				case 9: rtnbool = gjsf_isnumeric(zip); break;
				case 10: rtnbool = (zip.search(/^\d{5}-\d{4}$/)!= -1); break;
				// canadian postal code
				case 6: rtnbool = (zip.length == 6 && zip.search(/^[a-zA-Z]\d[a-zA-Z]\d[a-zA-Z]\d$/)!= -1); break;
				default: rtnbool = false;
			}
		}
		else
			rtnbool = true;
		return rtnbool;
	}
	//-------------------------------------------------------------------------------------------
	function jsf_validate_time(p_timeStr)
	{
		var rtnbool = true;
		var timePat = /^(\d{1,2}):(\d{1,2})(:(\d{1,2}))?(\s?(AM|am|PM|pm))?$/;
		var matchArray = p_timeStr.match(timePat);
		rtnbool = (matchArray != null) 
		if (matchArray == null)
		{	return false;	}
		
		hour = matchArray[1];
		minute = matchArray[2];
		second = matchArray[4];
		ampm = matchArray[6];
	
		if (second=="") { second = null; }
		if (ampm=="") { ampm = null }
	
		if (hour < 0  || hour > 23) 
		{	return false;	}
		
		if  (hour > 12 && ampm != null) 
		{	return false;	}
		
		if (minute < 0 || minute > 59) 
		{	return false;	}
		
		if (second != null && (second < 0 || second > 59)) 
		{	return false;	}
		
		return true;
	}
	//-------------------------------------------------------------------------------------------
	function jsf_validate_datetime(p_value)
	{
	
	}
	//-------------------------------------------------------------------------------------------
	var rtnbool = true; 
	for (var i=0; i<p_form.elements.length && rtnbool; i++)
	{	
		var thevalue = gjsf_trim(p_form.elements[i].value);
		if (p_form.elements[i].validate)
		{
			var ar_attr = p_form.elements[i].validate.split(";");
			for (var j=0; j<ar_attr.length && rtnbool; j++)
			{ 
				tr_tmp = ar_attr[j].split("=");
				key = tr_tmp[0].toLowerCase();
				val = tr_tmp[1].toLowerCase(); 
				if (key=="mandatory")
				{	if (val=="yes")
						rtnbool = (thevalue!="");
					if (!rtnbool)
						errormsg = "field must be entered";
				}
//				else if (key=="supcall")
//				{
//					eval (val);
//				}
				else if (key=="dtype")
				{ 
					switch (val)
					{	case "number":	rtnbool = gjsf_isnumeric(thevalue);
										if (!rtnbool) errormsg = "field must be numeric";
										break;
										
						case "date": rtnbool = jsf_validate_date(thevalue);
									 if (!rtnbool) errormsg = "Invalid date entry";
									 break;
									 
						case "time": rtnbool = jsf_validate_time(thevalue);
									 if (!rtnbool) errormsg = "Invalid time entry";
									 break;
									 
						case "datetime": rtnbool = jsf_validate_datetime(thevalue);
										 if (!rtnbool) errormsg = "Invalid date/time entry";
										 break;
										 
						case "email": rtnbool = jsf_validate_email(thevalue);
									  if (!rtnbool) errormsg = "Invalid email address";
									  break;
						case "phone": rtnbool = jsf_validate_phone(thevalue); 
									  if (!rtnbool) errormsg = "Invalid phone entry";
									  break;
									  
						case "postalzip": rtnbool = jsf_validate_postal(thevalue);
									      if (!rtnbool) errormsg = "Invalid postal/zip code entry";
										  break;
										  
						default: errormsg = "Invalid validation data type specified"; 
								 rtnbool = false;
					}
				}
			}
		}
	}
	if (!rtnbool)
	{
		alert (errormsg);
		p_form.elements[i-1].focus();
	}
	return rtnbool;
}
//----------------------------------------------------------------------------------------
function handleErr(msg,url,l)
{
	txt="Error occurs in page.\n\n";
	txt+="Error: " + msg + "\n";
	txt+="URL: " + url + "\n";
	txt+="Line: " + l + "\n\n";
	txt+="Click OK to continue.\n\n";
	alert(txt);
	return true;
}
//----------------------------------------------------------------------------------------
function gjsf_openpopwindow(mypage, myname, w, h, scroll)
{
	LeftPosition = (screen.width) ? (screen.width-w)/2 : 0;
	TopPosition =  (screen.height) ? (screen.height-h)/2 : 0;
	settings = 'height='+h+',width='+w+',top='+TopPosition+',left='+LeftPosition+',scrollbars='+scroll+',resizable';
	window.open(mypage,myname,settings)
}
