//Javascript

var flag1 = true;
var flag2 = false;
var xmlHttp;

var stop = 0;
var show_div = "respond";
var d1_pic = "";

function addMainProdToCart(id)
{
	var qty = parseInt(document.getElementById(id).value);
	qty++;
	document.getElementById(id).value = qty;
	
	document.getElementById('qty_form').submit();
}

function value_numeric(elem)
{
	if (!IsNumeric(elem.value))
		elem.value = 0;
}

function show_forgot()
{
	$('forgot_div').style.display = 'block';
}

function hide_forgot()
{
	$('forgot_div').style.display = 'none';
	$('fe_title').innerHTML = 'האימייל שלך:';
	$('fe_input').innerHTML = '<input type="text" name="femail" id="femail" />';
}

function val_for_email()
{
	email = $('femail').value;
	if (email != '' && email != null)
	{
		var url = 'valemail.php?e=' + email;
		new Ajax.Request(url, {
		  method: 'get',
		  asynchronous:true,
		  onSuccess: function(transport)
		  {
		  	switch (transport.responseText)
		  	{
		  		case '1':
		  			$('fe_title').innerHTML = '<span style="font-weight:bold;color:#aa0000;">הפרטים נשלחו לדואר האלקטרוני שלך</span>';
		  			$('fe_input').innerHTML = '<a href="javascript:hide_forgot();">סגור</a>';
		  			break;
		  		case '2':
		  			$('fe_title').innerHTML = '<span style="font-weight:bold;color:#aa0000;">אינך רשום באתר</span>';
		  			break;
		  		case '3':
		  			$('fe_title').innerHTML = '<span style="font-weight:bold;color:#aa0000;">נא לרשום אימייל!</span>';
		  			break;
		  	}
		  }
		});
	}
	else
	{
		$('fe_title').innerHTML = '<span style="font-weight:bold;color:#aa0000;">נא לרשום אימייל!</span>';
	}
}

function on_brand_search(selem)
{
	var brand_id = document.getElementById(selem).options[document.getElementById(selem).selectedIndex].value;
	location.href = 'index.php?page=brand&sub=2&brand=' + brand_id;
}

function on_cat_search(selem)
{
	var cat_id = document.getElementById(selem).options[document.getElementById(selem).selectedIndex].value;
	if (cat_id == 453)
		location.href = 'index.php?page=gifts&b=5';
	else
		if (cat_id == 8)
			location.href = 'index.php?page=artists&sub=1&mcategory=8';
		else
			location.href = 'index.php?page=category&sub=1&mcategory=' + cat_id;
}

function get_prod_pic(pid, elem)
{
	//var url = "get_prod_v.php?table=" + table + "&rfield=" + rfield + "&key=מקט&val=" + pid;
	var url = "get_prod_pic.php?val=" + pid;
	/*new Ajax.Updater(elem, url, {asynchronous:true,
								onComplete: function(transport)
								{
									'123';//transport.responseText;
								}});*/
	new Ajax.Request(url, {
	  method: 'get',
	  asynchronous:true,
	  onSuccess: function(transport)
	  {
	  	$(elem).src = transport.responseText;
	  }
	});
}

function change_product_in_group(id, elem1, elem2, elem22, elem3, elem4, elem5, elem6, elem7, qty_id)
{
	var td_id1 = 'td1' + id.substr(1);
	var td_id2 = 'td2' + id.substr(1);
	$(td_id1).innerHTML = '';
	$(td_id2).innerHTML = '';
	var pid = $(id).options[$(id).selectedIndex].value;

	set_new_link(pid, id.substr(1));
	
	get_prod_availible(pid, id.substr(1));
	get_prod_pic(pid, elem1);
	get_prod_name(pid, elem2);
	get_prod_id(pid, elem22);
	get_prod_del_per(pid, elem3);
	get_prod_site_price(pid, elem4);
	get_prod_market_price(pid, elem5,id.substr(1));
	get_prod_sale_price(pid, elem6, td_id1, td_id2);
	get_prod_present_discount(pid, elem7);
	update_qty(qty_id, pid);
}

function enable_na_prod(flag, prod_id)
{
	if (flag == "true")
	{
		$('dec'+prod_id).onclick = new Function('DecProdQ(\'q_'+prod_id+ '\');');
		$('inc'+prod_id).onclick = new Function('IncProdQ(\'q_'+prod_id+ '\');');
		$('q_'+prod_id).disabled = false;
	}
	else
	{
		$('dec'+prod_id).onclick = new Function('alert(\'! מצטערים הפריט חסר במלאי זמנית\')');
		$('inc'+prod_id).onclick = new Function('alert(\'! מצטערים הפריט חסר במלאי זמנית\')');
		$('q_'+prod_id).disabled = true;
	}
	
}

function set_new_link(pid, old_id)
{
	var vars = getUrlVars();
	var new_url = "index.php?page=d1&sub=1&mcategory=" + vars['mcategory'] + "&category=" + vars['category'] + "&prod=" + pid;
	var oldid = "a" + old_id;
	$(oldid).href = new_url;	
	/*var oldid2 = "a2" + old_id;
	$(oldid2).href = new_url;	*/
}

function getUrlVars()
{
	var vars = [], hash;
	var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
	for(var i = 0; i < hashes.length; i++)
	{
		hash = hashes[i].split('=');
		vars.push(hash[0]);
		vars[hash[0]] = hash[1];
	}
	return vars;
}

function update_qty(qty_id, pid)
{
	$(qty_id).name = "qty" + pid;
	$(qty_id).value = 0;
}

function get_prod_name(pid, elem)
{
	url = "get_prod_v.php?table=ht_product_gen&rfield=2&key=0&val=" + pid;
	/*new Ajax.Updater(elem, url, {asynchronous:true,
								onComplete: function(transport)
								{
									//alert(transport.responseText);
								}});*/
	var vars = getUrlVars();
	var new_url = "index.php?page=d1&sub=1&mcategory=" + vars['mcategory'] + "&category=" + vars['category'] + "&prod=" + pid;
	
	new Ajax.Request(url, {
	  method: 'get',
	  asynchronous:true,
	  onSuccess: function(transport)
	  {
	  	$(elem).innerHTML = '<a href="' + new_url + '">' + transport.responseText + '</a>';
	  }
	});
}

function get_prod_availible(pid, old_id)
{
	url = "get_prod_v.php?table=ht_product_delivery&rfield=1&key=0&val=" + pid;
	
	new Ajax.Request(url, {
	  method: 'get',
	  asynchronous:true,
	  onSuccess: function(transport)
	  {
	  	switch (transport.responseText)
	  	{
	  		case 'זמנית חסר במלאי':
	  			enable_na_prod('false', old_id);
	  			break;
	  		default:
	  			enable_na_prod('true', old_id);
	  			break;
	  	}	  	
	  }
	});
}

function get_prod_id(pid, elem)
{
	$(elem).innerHTML = 'מק"ט: ' + pid;
}

function get_prod_del_per(pid, elem)
{
	url = "get_prod_v.php?table=ht_product_delivery&rfield=1&key=0&val=" + pid;
	new Ajax.Updater(elem, url, {asynchronous:true,
								onComplete: function(transport)
								{
									//alert(transport.responseText);
								}});
}
function get_prod_site_price(pid, elem)
{
	url = "get_prod_v.php?table=ht_product_prices&rfield=1&key=0&val=" + pid;
	new Ajax.Updater(elem, url, {asynchronous:true,
								onComplete: function(transport)
								{
									//alert(transport.responseText);
								}});
}
function get_prod_market_price(pid, elem,td_id2)
{
	url = "get_prod_v.php?table=ht_product_prices&rfield=2&key=0&val=" + pid;
	new Ajax.Request(url, {
	  method: 'get',
	  asynchronous:true,
	  onSuccess: function(transport)
	  {
	  	var elem_id = "md" + td_id2;
	  	$(elem_id).innerHTML = "";
	  	$(elem).innerHTML = transport.responseText;
	  }
	});
}
function get_prod_sale_price(pid, elem, td_id1, td_id2)
{
	url = "get_prod_v.php?table=ht_product_prices&rfield=3&key=0&val=" + pid;
	new Ajax.Request(url, {
	  method: 'get',
	  asynchronous:true,
	  onSuccess: function(transport)
	  {
	  	if (transport.responseText != "")
	  	{
	  		$(td_id1).innerHTML = "מחיר מבצע";
	  		$(td_id2).innerHTML = "₪";
	  	}
	  	$(elem).innerHTML = transport.responseText;
	  }
	});
}
function get_prod_present_discount(pid, elem)
{
	url = "get_prod_v.php?table=ht_product_prices&rfield=5&key=0&val=" + pid;
	new Ajax.Updater(elem, url, {asynchronous:true,
								onComplete: function(transport)
								{
									//alert(transport.responseText);
								}});
}
function show_reply()
{
	if (stop == 1) return;
	stop = 0;
	if (document.documentElement && document.documentElement.scrollTop)
	{
		theTop = document.documentElement.scrollTop;
		theLeft = document.documentElement.scrollLeft;
	}
	else if (document.body)
	{
		theTop = document.body.scrollTop;
		theLeft = document.body.scrollLeft;
	}
	document.getElementById(show_div).style.top=(tempY-140);
	document.getElementById(show_div).style.left=(tempX-140);
	document.getElementById(show_div).style.display='';
	document.getElementById('bug_text').focus();
}
function cancel_reply()
{
	document.getElementById(show_div).style.display='none';
	document.getElementById("bug_text").value = '';
}
function submit_reply()
{
	if (document.getElementById("bug_text").value == "")
	{
		alert("נא לרשום הערה.");
	}
	else
	{
		$("comment_form").submit();
	}
}
function reset_reply()
{
	document.getElementById("bug_text").value = '';
}

var IE = document.all?true:false;

if (!IE) document.captureEvents(Event.MOUSEMOVE)

document.onmousemove = getMouseXY;

var tempX = 0;
var tempY = 0;

function getMouseXY(e) {
  if (IE) { // grab the x-y pos.s if browser is IE
    tempX = event.clientX + document.body.scrollLeft - 100;
    tempY = event.clientY + document.body.scrollTop - 50;
  } else {  // grab the x-y pos.s if browser is NS
    tempX = e.pageX;
    tempY = e.pageY;
  }  
  return true;
}


function ShowSendToFriend(prod_id)
{
	var email_form = document.createElement('form');
	email_form.action = "sendtofriend.php?b="+encodeURIComponent(location)+"&p="+prod_id;
	email_form.method = "post";
	email_form.style.padding = '0';
	email_form.style.margin = '0';
	email_form.onsubmit = emailCheck;
	
	var email_input = document.createElement('input');
	email_input.type = "text";
	email_input.name = "s2f_input";
	email_input.id = "s2f_input";
	email_input.dir = "ltr";
	email_input.style.marginLeft = "20";
	
	var submit_btn = document.createElement('input');
	submit_btn.type="submit";
	submit_btn.value = "שלח";
	submit_btn.className = "ht_button";
	
	email_form.appendChild(email_input);
	email_form.appendChild(submit_btn);
	
	$('d1_table_td4_table_td2').innerHTML = 'רשום אימייל';
	$('d1_table_td4_table_td2').appendChild(email_form);
	email_input.focus();
}

function emailCheck (s2f_input)
{
	//var emailStr = $(s2f_input).value;
	var emailStr = document.getElementById(s2f_input).value;
	var checkTLD=1;
	var knownDomsPat=/^(com|net|org|edu|int|mil|gov|arpa|biz|aero|name|coop|info|pro|museum)$/;
	var emailPat=/^(.+)@(.+)$/;
	var specialChars="\\(\\)><@,;:\\\\\\\"\\.\\[\\]";
	var validChars="\[^\\s" + specialChars + "\]";
	var quotedUser="(\"[^\"]*\")";
	var ipDomainPat=/^\[(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\]$/;
	var atom=validChars + '+';
	var word="(" + atom + "|" + quotedUser + ")";
	var userPat=new RegExp("^" + word + "(\\." + word + ")*$");
	var domainPat=new RegExp("^" + atom + "(\\." + atom +")*$");
	var matchArray=emailStr.match(emailPat);
	
	if (matchArray==null)
	{
		alert("הכתובת לא תקינה, נסה שוב.");
		return false;
	}

	var user=matchArray[1];
	var domain=matchArray[2];
	
	for (i=0; i<user.length; i++)
	{
		if (user.charCodeAt(i)>127)
		{
			alert("הכתובת לא תקינה, נסה שוב.");
			return false;
		}
	}
	
	for (i=0; i<domain.length; i++)
	{
		if (domain.charCodeAt(i)>127)
		{
			alert("הכתובת לא תקינה, נסה שוב.");
			return false;
		}
	}
	
	if (user.match(userPat)==null)
	{
		alert("הכתובת לא תקינה, נסה שוב.");
		return false;
	}
	
	var IPArray=domain.match(ipDomainPat);
	if (IPArray!=null)
	{
		for (var i=1;i<=4;i++)
		{
			if (IPArray[i]>255)
			{
				alert("הכתובת לא תקינה, נסה שוב.");
				return false;
			}
		}
		return true;
	}

	var atomPat=new RegExp("^" + atom + "$");
	var domArr=domain.split(".");
	var len=domArr.length;

	for (i=0;i<len;i++)
	{
		if (domArr[i].search(atomPat)==-1)
		{
			alert("הכתובת לא תקינה, נסה שוב.");
			return false;
		}
	}

	if (checkTLD && domArr[domArr.length-1].length!=2 && domArr[domArr.length-1].search(knownDomsPat)==-1)
	{
		alert("הכתובת לא תקינה, נסה שוב.");
		return false;
	}

	if (len<2)
	{
		alert("הכתובת לא תקינה, נסה שוב.");
		return false;
	}

	return true;
}

/************************* AJAX *************************************/
function ShowWhatIs()
{
	document.getElementById('whatis').style.display = 'block';
}

function UpdateCart2(id, elem)
{
	var value = parseInt(document.getElementById(elem).value);
	
	myform = document.createElement("form");
	myform.action = "cart.php?action=update&a=1";
	myform.method = "post";
	
	myinput = document.createElement("input");
	myinput.name = elem;
	myinput.type = "hidden";
	myinput.value = value;
	
	myform.appendChild(myinput);
	
	document.body.appendChild(myform);
}

function UpdateCart(id, elem)
{
	var value = parseInt(document.getElementById(elem).value);
	
	/*var url="cart.php?action=update";
	var str = "qty" + id + "=" + value + "&a=1";
	
	new Ajax.Request(url, {
	  method: 'post',
	  postData: str,
	  asynchronous:true,
	  onSuccess: function(transport)
	  {

	  }
	});
	
	*/
	xmlHttp=GetXmlHttpObject();
	
	if (xmlHttp==null)
	{
		alert ("Your browser does not support AJAX!");
		return;
	} 

	var url="cart.php?action=update";

	var str = "qty" + id + "=" + value + "&a=1";
	xmlHttp.onreadystatechange=stateChangedText;
	xmlHttp.open("POST",url,true);
	xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
	xmlHttp.send(str);
} 
function stateChangedText() 
{ 
	if (xmlHttp.readyState==4)
	{
		location.reload(true);
	}
}
function GetXmlHttpObject()
{
	var xmlHttp=null;
	try
	{
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	}
	catch (e)
	{
		// Internet Explorer
		try
		{
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e)
		{
			xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
		}
	}
	return xmlHttp;
}
/************************* AJAX *************************************/

function IncProdQ(input_id)
{
	var value = parseInt(document.getElementById(input_id).value);
	value++;
	document.getElementById(input_id).value = value;
}

function DecProdQ(input_id)
{
	var value = parseInt(document.getElementById(input_id).value);
	if (value > 0)
		value--;
	document.getElementById(input_id).value = value;
}

function order1(elem, page, sub, mcat, cat)
{
	var box = document.getElementById(elem);
	var ordermode = box.options[box.selectedIndex].value;
	
	var by = 'שם_מוצר';
	switch (ordermode)
	{
		case 'pasc':
			by = 'מחיר_אתר';
			ordermode = ordermode.substring(1);
			break;
		case 'pdesc':
			by = 'מחיר_אתר';
			ordermode = ordermode.substring(1);
			break;
	}
	location.href = "index.php?page=" + page + "&sub=" + sub + "&mcategory=" + mcat + "&category=" + cat + "&o=" + ordermode + "&by=" + by;
}

function Order2(elem, page, sub, b)
{
	var box = document.getElementById(elem);
	var ordermode = box.options[box.selectedIndex].value;
	
	var by = '1';
	switch (ordermode)
	{
		case 'pasc':
			by = '2';
			ordermode = ordermode.substring(1);
			break;
		case 'pdesc':
			by = '2';
			ordermode = ordermode.substring(1);
			break;
	}
	location.href = "index.php?page=" + page + "&sub=" + sub + "&b=" + b + "&o=" + ordermode + "&by=" + by;
}

function order2(elem, page, sub, mcat, cat, brand)
{
	var box = document.getElementById(elem);
	var ordermode = box.options[box.selectedIndex].value;
	var by = 'שם_מוצר';
	switch (ordermode)
	{
		case 'pasc':
			by = 'מחיר_אתר';
			ordermode = ordermode.substring(1);
			break;
		case 'pdesc':
			by = 'מחיר_אתר';
			ordermode = ordermode.substring(1);
			break;
	}
	location.href = "index.php?page=" + page + "&sub=" + sub + "&mcategory=" + mcat + "&category=" + cat + "&brand=" + brand + "&o=" + ordermode + "&by=" + by;
}

function BuyRedirect(elem, back, mcategory, category)
{
	var box = document.getElementById(elem);
	var mygoto = box.options[box.selectedIndex].value;
	
	switch (mygoto)
	{
		case 'cart':
			location.href = 'index.php?page=cart&sub=1&mcategory=' + mcategory + '&category=' + category;
			break;
			
		case 'back':
			location = back;
			break;
	}
}

function show_pass()
{
	if (flag1)
	{
		document.getElementById('signup_table_td2_table_td3_table_td3_div').style.display = 'block';
		document.getElementById('signup_table_td2_table_td3_table_td32_div').style.display = 'block';
		document.getElementById('signup_table_td2_table_td3_table_td4_div').style.display = 'block';
		document.getElementById('signup_table_td2_table_td3_table_td42_div').style.display = 'block';
		flag1 = false;
	}
	else
	{
		document.getElementById('signup_table_td2_table_td3_table_td3_div').style.display = 'none';
		document.getElementById('signup_table_td2_table_td3_table_td32_div').style.display = 'none';
		document.getElementById('signup_table_td2_table_td3_table_td4_div').style.display = 'none';
		document.getElementById('signup_table_td2_table_td3_table_td42_div').style.display = 'none';
		flag1 = true;
	}
}

function show_pass2()
{
	if (flag2)
	{
		document.getElementById('myaccount_table_td10_div2').style.display = 'none';
		flag2 = false;
	}
	else
	{
		document.getElementById('myaccount_table_td10_div2').style.display = 'block';
		flag2 = true;
	}
}

function validate_page()
{
	var pass1 = document.getElementById('signup_table_td2_table_td1_table_input1').value;
	var pass2 = document.getElementById('signup_table_td2_table_td1_table_input2').value;
	var val;
	var arr = new Array("0", "1", "2", "3" ,"4","5", "6", "7", "8", "9");
	
	if (pass1 != pass2)
	{
		alert('שגיאה בהזנת סיסמא, נסה שנית');
		return false;
	}
	var postcode = document.getElementById('postcode').value;
	if (postcode != "" && !IsNumeric(postcode))
	{
		alert('מיקוד לא תקין');
		return false;
	}
	var house = document.getElementById('house').value;
	if (house != "" && !IsNumeric(house))
	{
		alert('מספר בית לא תקין');
		return false;
	}
	var room = document.getElementById('room').value;
	if (room != "" && !IsNumeric(room))
	{
		alert('מספר דירה לא תקין');
		return false;
	}
	var floor = document.getElementById('floor').value;
	if (floor != "" && !IsNumeric(floor))
	{
		alert('קומה לא תקין');
		return false;
	}
	for (var i = 0; i < document.getElementById('fname').value.length; i++)
	{
		val = document.getElementById('fname').value.charAt(i);
		if (myin_array(arr, val))
		{
			alert('שם פרטי לא תקין');
			document.getElementById('fname').focus();
			return false;
		}			
	}
	for (var i = 0; i < document.getElementById('lname').value.length; i++)
	{
		val = document.getElementById('lname').value.charAt(i);
		if (myin_array(arr, val))
		{
			alert('שם משפחה לא תקין');
			document.getElementById('lname').focus();
			return false;
		}			
	}
	for (var i = 0; i < document.getElementById('city').value.length; i++)
	{
		val = document.getElementById('city').value.charAt(i);
		if (myin_array(arr, val))
		{
			alert('שם העיר לא תקין');
			document.getElementById('city').focus();
			return false;
		}			
	}
	
	return v.exec();
}

function validate_page_details()
{
	var val;
	var arr = new Array("0", "1", "2", "3" ,"4","5", "6", "7", "8", "9");
	

	for (var i = 0; i < document.getElementById('fname').value.length; i++)
	{
		val = document.getElementById('fname').value.charAt(i);
		if (myin_array(arr, val))
		{
			alert('שם פרטי לא תקין');
			document.getElementById('fname').focus();
			return false;
		}			
	}
	for (var i = 0; i < document.getElementById('lname').value.length; i++)
	{
		val = document.getElementById('lname').value.charAt(i);
		if (myin_array(arr, val))
		{
			alert('שם משפחה לא תקין');
			document.getElementById('lname').focus();
			return false;
		}			
	}
	
	return v.exec();
}
function myin_array(arr, val)
{
	for (var i = 0; i < arr.length; i++)
	{
		if (arr[i] == val)
			return true;
	}
	return false;
}
function validate_page5()
{
	cpayer_id = $('cpayer_id').value;
	if (cpayer_id != "" && !IsNumeric(cpayer_id))
	{
		alert('מספר ת.ז לא תקין');
		$('cpayer_id').focus();
		return false;
	}
	ccard_num = $('ccard_num').value;
	if (ccard_num != "" && !IsNumeric(ccard_num))
	{
		alert('מספר כרטיס לא תקין');
		$('ccard_num').focus();
		return false;
	}
	ccard_code = $('ccard_code').value;
	if (ccard_code != "" && !IsNumeric(ccard_code))
	{
		alert('קוד כרטיס לא תקין');
		$('ccard_code').focus();
		return false;
	}
	return v.exec();
}
function IsNumeric(strString)
   //  check for valid numeric strings	
   {
   var strValidChars = "0123456789.-";
   var strChar;
   var blnResult = true;

   if (strString.length == 0) return false;

   //  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 validate_page2()
{
	var pass1 = document.getElementById('signup_table_td2_table_td1_table_input2').value;
	var pass2 = document.getElementById('signup_table_td2_table_td1_table_input3').value;
	
	if (pass1 != pass2)
	{
		alert('שגיאה בהזנת סיסמא, נסה שנית');
		return false;
	}

	return v.exec();
}
function validate_page3()
{
	var sales = $('summary_table_td3_table').getElementsBySelector('[type="text"]');
	var count = 0;
	for (var i = 0; i < sales.length; i++)
	{
		
		if (sales[i].name.substr(0, 2) == 'sc' && sales[i].value != "")
		{
			count++;
		}
	}
	if (count > 1)
		alert('מותר לך להשתמש בקוד מבצע אחד בלבד.'+"\n\r"+'נא לבחור קוד מבצע אחד.');
	else
		document.getElementById('summary_form').submit();
}

// Title: Tigra Form Validator
// URL: http://www.softcomplex.com/products/tigra_form_validator/
// Version: 1.3
// Date: 08/25/2005 (mm/dd/yyyy)
// Notes: This script is free. Visit official site for further details.

// regular expressions or function to validate the format
var re_dt = /^(\d{1,2})\-(\d{1,2})\-(\d{4})$/,
re_tm = /^(\d{1,2})\:(\d{1,2})\:(\d{1,2})$/,
a_formats = {
	'alpha'   : /^[a-zA-Z\.\-]*$/,
	'alphanum': /^\w+$/,
	'unsigned': /^\d+$/,
	'integer' : /^[\+\-]?\d*$/,
	'real'    : /^[\+\-]?\d*\.?\d*$/,
	'email'   : /^[\w-\.]+\@[\w\.-]+\.[a-z]{2,4}$/,
	'phone'   : /^[\d\.\s\-]+$/,
	'date'    : function (s_date) {
		// check format
		if (!re_dt.test(s_date))
			return false;
		// check allowed ranges	
		if (RegExp.$1 > 31 || RegExp.$2 > 12)
			return false;
		// check number of day in month
		var dt_test = new Date(RegExp.$3, Number(RegExp.$2-1), RegExp.$1);
		if (dt_test.getMonth() != Number(RegExp.$2-1))
			return false;
		return true;
	},
	'time'    : function (s_time) {
		// check format
		if (!re_tm.test(s_time))
			return false;
		// check allowed ranges	
		if (RegExp.$1 > 23 || RegExp.$2 > 59 || RegExp.$3 > 59)
			return false;
		return true;
	}
},
a_messages = [
	'No form name passed to validator construction routine',
	'No array of "%form%" form fields passed to validator construction routine',
	'Form "%form%" can not be found in this document',
	'Incomplete "%n%" form field descriptor entry. "l" attribute is missing',
	'Can not find form field "%n%" in the form "%form%"',
	'Can not find label tag (id="%t%")',
	'Can not verify match. Field "%m%" was not found',
	'%l%',
	'Value for "%l%" must be %mn% characters or more',
	'Value for "%l%" must be no longer than %mx% characters',
	'"%v%" לא ערך תקין ל%l%',
	'"%l%" must match "%ml%"'
]

// validator counstruction routine
function validator(s_form, a_fields, o_cfg) {
	this.f_error = validator_error;
	this.f_alert = o_cfg && o_cfg.alert
		? function(s_msg) { alert(s_msg); return false }
		: function() { return false };
		
	// check required parameters
	if (!s_form)	
		return this.f_alert(this.f_error(0));
	this.s_form = s_form;
	
	if (!a_fields || typeof(a_fields) != 'object')
		return this.f_alert(this.f_error(1));
	this.a_fields = a_fields;

	this.a_2disable = o_cfg && o_cfg['to_disable'] && typeof(o_cfg['to_disable']) == 'object'
		? o_cfg['to_disable']
		: [];
		
	this.exec = validator_exec;
}

// validator execution method
function validator_exec() {
	var o_form = document.forms[this.s_form];
	if (!o_form)	
		return this.f_alert(this.f_error(2));
		
	b_dom = document.body && document.body.innerHTML;
	
	// check integrity of the form fields description structure
	for (var n_key in this.a_fields) {
		// check input description entry
		this.a_fields[n_key]['n'] = n_key;
		if (!this.a_fields[n_key]['l'])
			return this.f_alert(this.f_error(3, this.a_fields[n_key]));
		o_input = o_form.elements[n_key];
		if (!o_input)
			return this.f_alert(this.f_error(4, this.a_fields[n_key]));
		this.a_fields[n_key].o_input = o_input;
	}

	// reset labels highlight
	if (b_dom)
		for (var n_key in this.a_fields) 
			if (this.a_fields[n_key]['t']) {
				var s_labeltag = this.a_fields[n_key]['t'], e_labeltag = get_element(s_labeltag);
				if (!e_labeltag)
					return this.f_alert(this.f_error(5, this.a_fields[n_key]));
				this.a_fields[n_key].o_tag = e_labeltag;
				
				// normal state parameters assigned here
				e_labeltag.className = 'tfvNormal';
			}

	// collect values depending on the type of the input
	for (var n_key in this.a_fields) {
		var s_value = '';
		o_input = this.a_fields[n_key].o_input;
		if (o_input.type == 'checkbox') // checkbox
			s_value = o_input.checked ? o_input.value : '';
		else if (o_input.value) // text, password, hidden
			s_value = o_input.value;
		else if (o_input.options) // select
			s_value = o_input.selectedIndex > -1
				? o_input.options[o_input.selectedIndex].value
				: null;
		else if (o_input.length > 0) // radiobuton
			for (var n_index = 0; n_index < o_input.length; n_index++)
				if (o_input[n_index].checked) {
					s_value = o_input[n_index].value;
					break;
				}
		this.a_fields[n_key]['v'] = s_value.replace(/(^\s+)|(\s+$)/g, '');
	}
	
	// check for errors
	var n_errors_count = 0,
		n_another, o_format_check;
	for (var n_key in this.a_fields) {
		o_format_check = this.a_fields[n_key]['f'] && a_formats[this.a_fields[n_key]['f']]
			? a_formats[this.a_fields[n_key]['f']]
			: null;

		// reset previous error if any
		this.a_fields[n_key].n_error = null;

		// check reqired fields
		if (this.a_fields[n_key]['r'] && !this.a_fields[n_key]['v']) {
			this.a_fields[n_key].n_error = 1;
			n_errors_count++;
		}
		// check length
		else if (this.a_fields[n_key]['mn'] && this.a_fields[n_key]['v'] != '' && String(this.a_fields[n_key]['v']).length < this.a_fields[n_key]['mn']) {
			this.a_fields[n_key].n_error = 2;
			n_errors_count++;
		}
		else if (this.a_fields[n_key]['mx'] && String(this.a_fields[n_key]['v']).length > this.a_fields[n_key]['mx']) {
			this.a_fields[n_key].n_error = 3;
			n_errors_count++;
		}
		// check format
		else if (this.a_fields[n_key]['v'] && this.a_fields[n_key]['f'] && (
			(typeof(o_format_check) == 'function'
			&& !o_format_check(this.a_fields[n_key]['v']))
			|| (typeof(o_format_check) != 'function'
			&& !o_format_check.test(this.a_fields[n_key]['v'])))
			) {
			this.a_fields[n_key].n_error = 4;
			n_errors_count++;
		}
		// check match	
		else if (this.a_fields[n_key]['m']) {
			for (var n_key2 in this.a_fields)
				if (n_key2 == this.a_fields[n_key]['m']) {
					n_another = n_key2;
					break;
				}
			if (n_another == null)
				return this.f_alert(this.f_error(6, this.a_fields[n_key]));
			if (this.a_fields[n_another]['v'] != this.a_fields[n_key]['v']) {
				this.a_fields[n_key]['ml'] = this.a_fields[n_another]['l'];
				this.a_fields[n_key].n_error = 5;
				n_errors_count++;
			}
		}
		
	}

	// collect error messages and highlight captions for errorneous fields
	var s_alert_message = '',
		e_first_error;

	if (n_errors_count)
	{
		for (var n_key in this.a_fields)
		{
			var n_error_type = this.a_fields[n_key].n_error,
				s_message = '';
				
			if (n_error_type)
				s_message = this.f_error(n_error_type + 6, this.a_fields[n_key]);

			if (s_message)
			{
				if (!e_first_error)
					e_first_error = o_form.elements[n_key];
				s_alert_message += s_message + "<br/>";
				// highlighted state parameters assigned here
				if (b_dom && this.a_fields[n_key].o_tag)
					this.a_fields[n_key].o_tag.className = 'tfvHighlight';
			}
		}
		document.getElementById('signup_table_td2_table_td1_table_td1222').innerHTML = '<div style="font-weight: bold;">שדות חובה</div>' + s_alert_message;
		//alert(s_alert_message);
		// set focus to first errorneous field
		document.getElementById('signup_table_td2_table_td1_table_td1222').focus();
		if (e_first_error.focus && e_first_error.type != 'hidden'  && !e_first_error.disabled)
			eval("e_first_error.focus()");
		// cancel form submission if errors detected
		return false;
	}
	
	for (n_key in this.a_2disable)
		if (o_form.elements[this.a_2disable[n_key]])
			o_form.elements[this.a_2disable[n_key]].disabled = true;

	return true;
}

function validator_error(n_index) {
	
	var s_ = a_messages[n_index], n_i = 1, s_key;
	for (; n_i < arguments.length; n_i ++)
		for (s_key in arguments[n_i])
			s_ = s_.replace('%' + s_key + '%', arguments[n_i][s_key]);
	s_ = s_.replace('%form%', this.s_form);
	return s_
}

function get_element (s_id) {
	return (document.all ? document.all[s_id] : (document.getElementById ? document.getElementById(s_id) : null));
}
