//-------------------------------------------------------------------------
function GetX(input) {
  var img=input;
  var X=0;
  do {X+=img.offsetLeft;} while (img=img.offsetParent);
  return X;
}
//------------------------------------------------------------------------------------------
function GetY(input) {
  var img=input;
  var Y=0;
  do {Y+=img.offsetTop} while ((img=img.offsetParent)!=null);
  return(Y);
}
//------------------------------------------------------------------------------------------
function checkAll(checks,checked){
	if (!checks)
		return
	if (!checks.length)
		checks.checked = checked
	else
		for (var i = 0;i<checks.length;i++)
			checks[i].checked = checked
}
//-------------------------------------------------------------------------
function RoundDigits(amount,digits)
{
  if (!Number(amount)) 
  	return 0;
   return Math.round(Number(amount)*Math.pow(10,digits))/Math.pow(10,digits);
}
//-----------------------------------------------------------------------------
function CutDigits(amount,digits)
{
  if (!Number(amount)) 
  	amount = "0";
  var res=String(Math.round(Number(amount)*Math.pow(10,digits))/Math.pow(10,digits));
  if (res.indexOf(".")==-1) {
    res+=".";
    for (i=0;i<digits;i++) res+="0";
  }
  else {
    var kl=res.length-res.indexOf(".") - 1;
    for(i=kl;i<digits;i++) res+="0";
  }
  return(res);
}
//-----------------------------------------------------------------------------
function getText(elt)
{
	if (elt.getText instanceof Function)
		return elt.getText();
	switch(elt.nodeName.toLowerCase())
	{
	case "input":
	case "textarea":
		return elt.value;
	case "select":
		return elt.options[elt.selectedIndex].innerText;
	default:
		return elt.innerText
	}

}
//-----------------------------------------------------------------------------
function getValue(elt)/*{{{*/
{
	var name = elt.nodeName;
	if (elt.getValue instanceof Function)
		return elt.getValue();
	if (elt.length && !name)
		return GetCheckValue(elt);
	switch(name.toLowerCase())
	{
	case "textarea":
	case "input":
 		switch(elt.type)
		{
		case "checkbox":
		case "radio":
			return GetCheckValue(elt);
		default:
			return elt.value;
		}
		break;
	case "select-one":
	case "select-multiple":
	case "select":
		return GetSelectValue(elt)
	default:
		return elt.innerText
	}
}/*}}}*/
//-----------------------------------------------------------------------------
function setValue(elt,value)/*{{{*/
{
	if (elt.setValue instanceof Function)
		return elt.setValue(value);
	switch(elt.nodeName.toLowerCase())
	{
	case "textarea":
	case "input":
 		switch(elt.type)
		{
		case "checkbox":
		case "radio":
			return SetCheckValues(elt,value);
		default:
			return elt.value = value;
		}
		break;
	case "select":
		return SetSelectValue(elt,value);
		break;
	default:
		return elt.innerText = value
	}
}/*}}}*/
//-----------------------------------------------------------------------------
function getAncestorByTagName(elt,tagName,level)
{
	level = level || 1;
	var i = 0;
	while(elt && i< level)
	{
		elt = elt.parentElement;
		if (elt && elt.nodeName == tagName)
			i++;
	}
	return elt;
}
//-----------------------------------------------------------------------------
function valid_email(val){
 	return /^[^@]+@(\w[A-Z0-9-]*\w\.)+\w[A-Z0-9-]*\w$/i.test(val);
}
//-----------------------------------------------------------------------------
function date_is_valid(from,pfx){
	var mon = from[pfx + "_month"].value;
	var day = from[pfx + "_day"].value;
	var year =from[pfx + "_year"].value;
	var date = mon + "/" + day + "/" + year;
	if (!/\d\d\/\d\d\/\d\d\d\d/.test(date))
		return true;
	var rx = new RegExp(Date.getRegExp(101));
	return rx.test(date);
}
//-----------------------------------------------------------------------------
function second_date_is_later(from,pfx1,pfx2){
	var mon1 = from[pfx1 + "_month"].value;
	var day1 = from[pfx1 + "_day"].value;
	var year1 =from[pfx1 + "_year"].value;
	var date1 = mon1 + "/" + day1 + "/" + year1;
	if (!/\d\d?\/\d\d?\/\d\d\d\d/.test(date1))
		return true;
	var mon2 = from[pfx2 + "_month"].value;
	var day2 = from[pfx2 + "_day"].value;
	var year2 =from[pfx2 + "_year"].value;
	var date2 = mon2 + "/" + day2 + "/" + year2;
	if (!/\d\d?\/\d\d?\/\d\d\d\d/.test(date2))
		return true;
	var ydiff = year2 - year1;
	if (ydiff > 0) return true;
	if (ydiff < 0) return false;
	var mdiff = mon2 - mon1;
	if (mdiff > 0) return true;
	if (mdiff < 0) return false;
	var ddiff = day2 - day1;
	if (ddiff > 0) return true;
	if (ddiff < 0) return false;
	return true;
}
//-----------------------------------------------------------------------------
function map1(arr)
{
	var o=new Object;
	for(var i=0;i<arr.length;i++)
	{
		o[String(arr[i])]=1;
	}
	return o;
}
//-------------------------------------------------------------------------
function GetRadioValue(radio)
{
	for (var i=0;i<radio.length;i++)
	{
		if (radio[i].checked)
			return radio[i].value;
	}
}
//-------------------------------------------------------------------------
function SetRadioValue(radio,value)
{
	for (var i=0;i<radio.length;i++)
	{
		if (radio[i].value == value)
		{
			radio[i].checked=1;
			return;
		}
	}
}
//-------------------------------------------------------------------------
function GetSelectValue(what)
{
	var v=new Array();
	var obj=what.options;
	for (i=0;i<obj.length;i++)    
	{
		if (obj[i].selected){
			v[v.length]=obj[i].value;
		}
	}
	return v.join(",");
}
//-------------------------------------------------------------------------
function SetSelectValue(what,value)
{
	var obj=what.options;
	var o=map1(value.split(", "));
	for (var i=0;i<obj.length;i++)
	{
		if (o[obj[i].value] != null)
			obj[i].selected=1;
	}
}
//-------------------------------------------------------------------------
function GetCheckValue(check)
{
	var v=new Array();
	if (!check.length)//not an array
	{
		if (check.checked)
			return check.value;
		return "";
	}
	//array
	for (i=0;i<check.length;i++)
	{
		switch(check[i].type)
		{
		case "checkbox":
		case "radio":
			if (check[i].checked)
				v[v.length]=check[i].value;
			break;
		default:
			v[v.length]=check[i].value;
		}
	}
	return v.join(", ");
}
//-------------------------------------------------------------------------
function SetCheckValues(check,value)
{
	if (typeof(check) !="object")
		return ;
	if (!check.length)
	{
		check.checked = check.value==value;
		return;
	}
	var o=map1(value.split(/,\s*/));
	for (var i=0;i<check.length;i++)
	{
		if (o[check[i].value])
			check[i].checked=true;
		else
			check[i].checked=false;
	}
}
//-------------------------------------------------------------------------
function dump(obj,name)
{
	var txt="";
	switch (typeof (obj))
	{
	case "object":
		for (var  i in obj)
		{
			if (obj[i] instanceof Function)
				continue;
			if (typeof(obj[i]) == "object")
				txt+= dump(obj[i],name + "[" + i + "]") + "\n";
			else
				txt+=name + "[" + i + "]=" + String(obj[i]) + "\n";
		}
		break;
	default:
		txt +=String(obj);
	}
	return txt;
}
//-------------------------------------------------------------------------
function dump_one(obj,name)
{
	var txt="<pre>";
	switch (typeof (obj))
	{
	case "object":
		for (var  i in obj)
			txt+=name + "." + i + "=" + obj[i] + "\n";
		break;
	case "array":
		for (var  i=0;i<obj.length;i++)
			txt+=name + "[" + i + "]=" +obj[i]  + "\n";
		break;
	default:
		txt +=String(obj);
	}
	return txt + "</pre>";
}
//-------------------------------------------------------------------------
function QuizCheckAllAdded(pnum){
	var form = document.forms.quiz;
	var from = (pnum - 1)*20 + 1;
	var till = pnum*20;
	for (var i = from;i<=till;i++){
		if (!GetCheckValue(form["q" + i])){
			alert("You haven't answered question " + i);
			return false;
		}
	}
	return true;
}
//-------------------------------------------------------------------------
function checkFieldsAreEqual(form,name1,name2){
	if (getValue(form[name1]) != getValue(form[name2]))
		return {'error':1,'name':name1};
}
//-------------------------------------------------------------------------
function checkContryStateThing(form,state,country){
	var cntr = getValue(form[country]);
	var st = getValue(form[state])
	if (!countrystates[cntr])
		return {'error':1,'name':country};
	if (!countrystates[cntr][st])
		return {'error':1,'name':state};
}
//-------------------------------------------------------------------------
var countrystates = {
	'US':{
		'AL':true, 'AK':true, 'AR':true, 'AZ':true, 'CA':true, 'CO':true,
		'CT':true, 'DC':true, 'DE':true, 'FL':true, 'GA':true, 'HI':true,
		'IA':true, 'ID':true, 'IL':true, 'IN':true, 'KS':true, 'KY':true,
		'LA':true, 'MA':true, 'MD':true, 'ME':true, 'MI':true, 'MN':true,
		'MO':true, 'MS':true, 'MT':true, 'NC':true, 'ND':true, 'NE':true,
		'NH':true, 'NJ':true, 'NM':true, 'NY':true, 'NV':true, 'OH':true,
		'OK':true, 'OR':true, 'PA':true, 'PR':true, 'RI':true, 'SC':true,
		'SD':true, 'TN':true, 'TX':true, 'UT':true, 'VT':true, 'VA':true,
		'WA':true, 'WV':true, 'WI':true, 'WY':true 
	},
	'CA':{
		'AB':true, 'BC':true, 'MB':true, 'NB':true, 'NF':true, 'NS':true,
		'NT':true, 'NV':true, 'ON':true, 'PE':true, 'QB':true, 'SK':true,
		'YK':true
	},

	'AU':{ 'NonUS':true }, 'HK':{ 'NonUS':true }, 'UK':{ 'NonUS':true },
	'AF':{ 'NonUS':true }, 'AL':{ 'NonUS':true }, 'DZ':{ 'NonUS':true },
	'AS':{ 'NonUS':true }, 'AD':{ 'NonUS':true }, 'AO':{ 'NonUS':true },
	'AI':{ 'NonUS':true }, 'AQ':{ 'NonUS':true }, 'AG':{ 'NonUS':true },
	'AR':{ 'NonUS':true }, 'AM':{ 'NonUS':true }, 'AW':{ 'NonUS':true },
	'AT':{ 'NonUS':true }, 'AZ':{ 'NonUS':true }, 'BS':{ 'NonUS':true },
	'BH':{ 'NonUS':true }, 'BD':{ 'NonUS':true }, 'BB':{ 'NonUS':true },
	'BY':{ 'NonUS':true }, 'BE':{ 'NonUS':true }, 'BZ':{ 'NonUS':true },
	'BJ':{ 'NonUS':true }, 'BM':{ 'NonUS':true }, 'BT':{ 'NonUS':true },
	'BO':{ 'NonUS':true }, 'BA':{ 'NonUS':true }, 'BW':{ 'NonUS':true },
	'BV':{ 'NonUS':true }, 'BR':{ 'NonUS':true }, 'BN':{ 'NonUS':true },
	'BG':{ 'NonUS':true }, 'BF':{ 'NonUS':true }, 'BI':{ 'NonUS':true },
	'KH':{ 'NonUS':true }, 'CM':{ 'NonUS':true }, 'CV':{ 'NonUS':true },
	'KY':{ 'NonUS':true }, 'CF':{ 'NonUS':true }, 'TD':{ 'NonUS':true },
	'CL':{ 'NonUS':true }, 'CN':{ 'NonUS':true }, 'MO':{ 'NonUS':true },
	'CX':{ 'NonUS':true }, 'CC':{ 'NonUS':true }, 'CO':{ 'NonUS':true },
	'KM':{ 'NonUS':true }, 'CG':{ 'NonUS':true }, 'CD':{ 'NonUS':true },
	'CK':{ 'NonUS':true }, 'CR':{ 'NonUS':true }, 'CI':{ 'NonUS':true },
	'HR':{ 'NonUS':true }, 'CU':{ 'NonUS':true }, 'CY':{ 'NonUS':true },
	'CZ':{ 'NonUS':true }, 'DK':{ 'NonUS':true }, 'DJ':{ 'NonUS':true },
	'DM':{ 'NonUS':true }, 'DO':{ 'NonUS':true }, 'TP':{ 'NonUS':true },
	'EC':{ 'NonUS':true }, 'EG':{ 'NonUS':true }, 'SV':{ 'NonUS':true },
	'GQ':{ 'NonUS':true }, 'ER':{ 'NonUS':true }, 'EE':{ 'NonUS':true },
	'ET':{ 'NonUS':true }, 'FK':{ 'NonUS':true }, 'FO':{ 'NonUS':true },
	'FJ':{ 'NonUS':true }, 'FI':{ 'NonUS':true }, 'FR':{ 'NonUS':true },
	'GF':{ 'NonUS':true }, 'PF':{ 'NonUS':true }, 'GA':{ 'NonUS':true },
	'GM':{ 'NonUS':true }, 'GE':{ 'NonUS':true }, 'DE':{ 'NonUS':true },
	'GH':{ 'NonUS':true }, 'GI':{ 'NonUS':true }, 'GR':{ 'NonUS':true },
	'GL':{ 'NonUS':true }, 'GD':{ 'NonUS':true }, 'GP':{ 'NonUS':true },
	'GU':{ 'NonUS':true }, 'GT':{ 'NonUS':true }, 'GN':{ 'NonUS':true },
	'GW':{ 'NonUS':true }, 'GY':{ 'NonUS':true }, 'HT':{ 'NonUS':true },
	'HN':{ 'NonUS':true }, 'HU':{ 'NonUS':true }, 'IS':{ 'NonUS':true },
	'IN':{ 'NonUS':true }, 'ID':{ 'NonUS':true }, 'IR':{ 'NonUS':true },
	'IQ':{ 'NonUS':true }, 'IE':{ 'NonUS':true }, 'IL':{ 'NonUS':true },
	'IT':{ 'NonUS':true }, 'JM':{ 'NonUS':true }, 'JP':{ 'NonUS':true },
	'JO':{ 'NonUS':true }, 'KZ':{ 'NonUS':true }, 'KE':{ 'NonUS':true },
	'KI':{ 'NonUS':true }, 'KR':{ 'NonUS':true }, 'KP':{ 'NonUS':true },
	'KW':{ 'NonUS':true }, 'KG':{ 'NonUS':true }, 'LA':{ 'NonUS':true },
	'LV':{ 'NonUS':true }, 'LB':{ 'NonUS':true }, 'LS':{ 'NonUS':true },
	'LR':{ 'NonUS':true }, 'LY':{ 'NonUS':true }, 'LI':{ 'NonUS':true },
	'LT':{ 'NonUS':true }, 'LU':{ 'NonUS':true }, 'MK':{ 'NonUS':true },
	'MG':{ 'NonUS':true }, 'MW':{ 'NonUS':true }, 'MY':{ 'NonUS':true },
	'MV':{ 'NonUS':true }, 'ML':{ 'NonUS':true }, 'MT':{ 'NonUS':true },
	'MH':{ 'NonUS':true }, 'MQ':{ 'NonUS':true }, 'MR':{ 'NonUS':true },
	'MU':{ 'NonUS':true }, 'YT':{ 'NonUS':true }, 'MX':{ 'NonUS':true },
	'FM':{ 'NonUS':true }, 'MD':{ 'NonUS':true }, 'MC':{ 'NonUS':true },
	'MN':{ 'NonUS':true }, 'MS':{ 'NonUS':true }, 'MA':{ 'NonUS':true },
	'MZ':{ 'NonUS':true }, 'MM':{ 'NonUS':true }, 'NA':{ 'NonUS':true },
	'NR':{ 'NonUS':true }, 'NP':{ 'NonUS':true }, 'AN':{ 'NonUS':true },
	'NL':{ 'NonUS':true }, 'NC':{ 'NonUS':true }, 'NZ':{ 'NonUS':true },
	'NI':{ 'NonUS':true }, 'NE':{ 'NonUS':true }, 'NG':{ 'NonUS':true },
	'NU':{ 'NonUS':true }, 'NF':{ 'NonUS':true }, 'NO':{ 'NonUS':true },
	'OM':{ 'NonUS':true }, 'PK':{ 'NonUS':true }, 'PW':{ 'NonUS':true },
	'PA':{ 'NonUS':true }, 'PG':{ 'NonUS':true }, 'PY':{ 'NonUS':true },
	'PE':{ 'NonUS':true }, 'PH':{ 'NonUS':true }, 'PN':{ 'NonUS':true },
	'PL':{ 'NonUS':true }, 'PT':{ 'NonUS':true }, 'PR':{ 'NonUS':true },
	'QA':{ 'NonUS':true }, 'RE':{ 'NonUS':true }, 'RO':{ 'NonUS':true },
	'RU':{ 'NonUS':true }, 'RW':{ 'NonUS':true }, 'SH':{ 'NonUS':true },
	'KN':{ 'NonUS':true }, 'LC':{ 'NonUS':true }, 'WS':{ 'NonUS':true },
	'SM':{ 'NonUS':true }, 'SA':{ 'NonUS':true }, 'SN':{ 'NonUS':true },
	'SC':{ 'NonUS':true }, 'SL':{ 'NonUS':true }, 'SG':{ 'NonUS':true },
	'SK':{ 'NonUS':true }, 'SI':{ 'NonUS':true }, 'SB':{ 'NonUS':true },
	'SO':{ 'NonUS':true }, 'ZA':{ 'NonUS':true }, 'ES':{ 'NonUS':true },
	'LK':{ 'NonUS':true }, 'SD':{ 'NonUS':true }, 'SR':{ 'NonUS':true },
	'SZ':{ 'NonUS':true }, 'SE':{ 'NonUS':true }, 'CH':{ 'NonUS':true },
	'SY':{ 'NonUS':true }, 'TW':{ 'NonUS':true }, 'TJ':{ 'NonUS':true },
	'TZ':{ 'NonUS':true }, 'TH':{ 'NonUS':true }, 'TG':{ 'NonUS':true },
	'TK':{ 'NonUS':true }, 'TO':{ 'NonUS':true }, 'TT':{ 'NonUS':true },
	'TN':{ 'NonUS':true }, 'TR':{ 'NonUS':true }, 'TM':{ 'NonUS':true },
	'TC':{ 'NonUS':true }, 'TV':{ 'NonUS':true }, 'UG':{ 'NonUS':true },
	'UA':{ 'NonUS':true }, 'AE':{ 'NonUS':true }, 'UY':{ 'NonUS':true },
	'UZ':{ 'NonUS':true }, 'VU':{ 'NonUS':true }, 'VA':{ 'NonUS':true },
	'VE':{ 'NonUS':true }, 'VN':{ 'NonUS':true }, 'VG':{ 'NonUS':true },
	'VI':{ 'NonUS':true }, 'WF':{ 'NonUS':true }, 'EH':{ 'NonUS':true },
	'YE':{ 'NonUS':true }, 'YU':{ 'NonUS':true }, 'ZM':{ 'NonUS':true },
	'ZW':{ 'NonUS':true }
};
//-------------------------------------------------------------------------
