// WEII Forms jQuery Library
// Loaded by default, accessiable at all times
var weiiforms = {};

weiiforms.listrange = function (fld,rfrom,rto,width) {
	if (width==undefined) width = 1;
	var sel = $('.'+fld);
	if (sel.length>0) {	// make sure it exists!
		if (rfrom>rto) {
			for (r=rfrom;r>=rto;r--) {
				option(r);
			}
		} else {
			for (r=rfrom;r<=rto;r++) {
				option(r);
			}
		}
				 
	}
	
	function option(v) {
		var rs = ''+v;
		while (rs.length<width) rs = '0'+rs;
		sel.append($('<option value="'+rs+'">'+rs+'</option>'));
	}
};

weiiforms.IsValidEmail = function (email) {
	var filter = /^([\w-\.]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([\w-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?)$/;
	return filter.test(email);
}

weiiforms.initpayform = function (fname,reqfields,valfields) {
	weiiforms.action = 'webpay';
	weiiforms.initform(fname,reqfields,valfields);
	
	// ok now populate fields
	$('.merchant').val('Establishing secure connection');
	
	weii.wex( {cmd:'/admin/weiipay.exe', exe:1, data: {mid: weiiforms.mid, trx: weiiforms.trxid } , onError: onError, onSuccess:onSuccess } );
	
	function onError(e) {
		alert('We had trouble communicating with the server. Please wait a few minutes and try again.');
	}
	
	function onSuccess(results) {
		if (results[1].result=='ok') {
			var rec = results[1];
			$('.merchant').val(rec.merchant);
			$('.desc').val(rec.desc);
			$('.amount').val(rec.amount);
			switch (rec.status) {
				case 'unpaid':
					break;
				case 'paid':
					alert('This transaction has already been paid!');
					break;
				default:
					alert('This transaction has been finalised: '+rec.status);
					break;
			}
		} else {
			alert(results[1].message);
		
		}
	}
	
}
weiiforms.initform = function (fname,reqfields,valfields) {
	$('#'+fname+' .send').click( function(e) {
		e.preventDefault();
		
		var ok = true;
		var errfield = '';
		var errmsg = "The highlighted fields need to be completed.";
		// check required fields
		for (f=0;f<reqfields.length;f++) {
			if ($('#'+fname+' .'+reqfields[f]).val()=='') {
				if (ok) {
					errfield = reqfields[f];
				}
				ok = false;
				$('#'+fname+' .'+reqfields[f]).addClass('reqfield');
			} else {
				$('#'+fname+' .'+reqfields[f]).removeClass('reqfield');
			}
		}
		// validate fields
		if (ok) {
			for (f in valfields) {
				var vf = $('#'+fname+' .'+f);
				if (vf.length>0 && vf.val()!='') {
					switch (valfields[f]) {
						case "email":
							if (!weiiforms.IsValidEmail(vf.val())) {
								if (ok) {
									errfield = f;
								}
								ok = false;
								errmsg = vf.attr('title')+' requires a valid email address.';
							}
							break;
					}
				}
			}
		}
		//send data
		if(ok) {
			if (weiiforms.action=='webpay') {
				weiiforms.sendpaydata(fname);
			} else {
				weiiforms.sendformdata(fname);
			}
		} else {
		//alert('Submit form');
			if(errfield!='') {
				$('#'+fname+' .'+errfield).focus();
			}
			alert(errmsg);
		}
	});
};

function addWait(fname) {
	var f = $('#'+fname);
	var w = f.width();
	var h = f.height();
	$('#'+fname+' input, #'+fname+' select').attr('disabled','disabled');
	var overlay = 
		'<div class="wait" '+
		'style="position: absolute; '+
		'z-index: 2; margin: -2px; '+
		'width: '+w+'px; height: '+h+'px; '+
		'background-image: url(/admin/loaderB32.gif); '+
		'background-position:center center; '+
		'background-repeat:no-repeat;">&nbsp;</div>';
		
	$('#'+fname+' form').before($(overlay));
}

function removeWait(fname) {
	var f = $('#'+fname);
	f.find('.wait').remove();
	$('#'+fname+' input, #'+fname+' select').removeAttr('disabled');
}


weiiforms.sendpaydata = function(fname) {
	// need to get:
	//	merchant id, trxid, then also cn, exp, ch
	var pdata = {};
	pdata.cmd = 'process';
	pdata.mid = weiiforms.mid;
	pdata.trx = weiiforms.trxid;
	pdata.cn = $('.cn').val();
	pdata.ch = $('.ch').val();
	pdata.xm = $('.xm').val();
	pdata.xy = $('.xy').val();
	
	function onPayError(e) {
		alert('We had trouble communicating with the server. Please wait a few minutes and try again.');
		removeWait(fname);
	}
	
	function onPaySuccess(results) {
		removeWait(fname);
		if (results[1].result=='ok') {
			var rec = results[1];
			
			if (rec.approved=='Yes') {
				//alert('Approved!');
				// redirect back to success page
				var successPage = weii.getQuerystring('success');
				if (successPage.indexOf('?')<0) { successPage += '?'; }
				successPage += '&trx='+weiiforms.trxid;
				weii.navtopage(successPage);
			} else {
				//weii.logError(results[1]);
				alert('Your credit card has not been charged:\n'+results[1].responseText+'\n\nPlease correct and try again.');
			}
		} else {
			//alert(results[1].message);
			weii.logError(results[1]);
		}
	}
	addWait(fname);
	weii.wex( {cmd:'/admin/weiipay.exe', exe:1, data:pdata, onError: onPayError, onSuccess:onPaySuccess } );
	
	
}
weiiforms.sendformdata = function(fname) {
	var data = {};
	
	$('#'+fname+' input:not(:submit)').each( function() {
		var f = $(this).attr('class');
		var sp = f.indexOf(' ');
		if (sp>0) {
			f = f.substr(0,sp-1);
		}
		data[f] = $(this).val();
	});
	$('#'+fname+' select').each( function() {
		var f = $(this).attr('class');
		data[f] = $(this).val();
	});
	
	var f = $('#'+fname);
	var w = f.width();
	var h = f.height();
	addWait(fname);
	// submit form data
	data.formname = f.find('form').attr('alt');
	weii.wex( {cmd:'submit', data: data, onError: onError, onSuccess:onSuccess } );
	
	function onError(e) {
		removeWait(fname);
		alert('We had trouble communicating with the server. Please wait a few minutes and try again.');
	}
	
	function onSuccess(results) {
		if (results[1].result=='ok') {
			//removeWait(fname);
			switch (results[1].okaction) {
				case "redir":
					weii.navtopage(results[1].redirtarget);
					break;
				default:
					inplace(results[1].message);
					removeWait(fname);
					break;
			}
		} else {
			alert(results[1].message);
			removeWait(fname);
		
		}
	}
	
	function inplace(msg) {
		f.empty();
		var div = 
			'<div style="width: '+w+'px; height: '+h+'px; margin: 0px;">'+msg+'&nbsp;</div>';
		f.append($(div));
	}
	/*
	var s = "";
	for (v in data) {
		s += v+':'+data[v]+String.fromCharCode(10);
	}
	alert(s);
	*/
}

weiiforms.fieldHints = function (comp) {
	$('#'+comp+' input:text, #'+comp+' input:password').each( function() {
		var f = $(this);
		var w = f.width();
		var h = f.height();
		var title = f.attr('title');
		var hint = $('<span style="position: absolute; z-index:1002; width: '+w+'px; height: '+h+'px; color: #888; margin-left: 10px;">'+title+'</span>');
		f.before(hint);
		
		hint.click( function(e) {
			e.preventDefault();
			f.focus();
		});
		
		f.focus( function() {
			hint.hide();
		});

		f.blur( function() {
			if(f.val()=='') hint.show();
		});
	});
}

weiiforms.signedin = function(comp) {
	$('#'+comp+' .signinmsg').hide();
	$('#'+comp+' .signoutmsg').show();
	$('#'+comp+' .username').hide();
	$('#'+comp+' .password').hide();
	$('#'+comp+' .signin').hide();
	$('#'+comp+' .signout').show();
	$('#'+comp+' .signinattempt').hide();
	$('#'+comp+' .signinerror').hide();

	$('#'+comp+' .signout').click(function(e) {
		e.preventDefault();
		weii.wex({ cmd:'user', data: {c: 'lo' }, onSuccess: onLogout });
	});
	
	function onLogout(results) {
		var stat = results[0];
		if (eval(stat.userid)>0) {
			// weiiforms.signedin(comp);
		} else {
			//weiiforms.signedout(comp);
			if (weiiforms[comp].logoutpage!=undefined && weiiforms[comp].logoutpage!='')
				weii.navtopage(weiiforms[comp].logoutpage);
		}
	}

}

weiiforms.signedout = function(comp) {
	weiiforms.fieldHints(comp);
	$('#'+comp+' .signinmsg').show();
	$('#'+comp+' .signoutmsg').hide();
	$('#'+comp+' .username').show();
	$('#'+comp+' .password').show();
	$('#'+comp+' .signin').show();
	$('#'+comp+' .signout').hide();
	$('#'+comp+' .signinattempt').hide();
	$('#'+comp+' .signinerror').hide();
	
	$('#'+comp+' .signin').click(function(e) {
		e.preventDefault();
		$('#'+comp+' .signin').attr('disabled','disabled');
		$('#'+comp+' .signinerror').hide();
		$('#'+comp+' .signinmsg').hide();
		$('#'+comp+' .signinattempt').show();
		weii.signin($('#'+comp+' .username').val(), $('#'+comp+' .password').val() , onLogin);
	});
	
	$('#'+comp+' .username,#'+comp+' .password').keyup( function (e) {
		var code = (e.keyCode ? e.keyCode : e.which);
		 if(code == 13) { //Enter keycode
			$('#'+comp+' .signin').attr('disabled','disabled');
			$('#'+comp+' .signinerror').hide();
			$('#'+comp+' .signinmsg').hide();
			$('#'+comp+' .signinattempt').show();
			weii.signin($('#'+comp+' .username').val(), $('#'+comp+' .password').val() , onLogin);
		 }
	});
	
	function onLogin(results) {
		var stat = results[0];
		$('#'+comp+' .signin').removeAttr('disabled');
		if (eval(stat.userid)>0) {
			//weiiforms.signedin(comp);
			if (weiiforms[comp].loginpage!=undefined && weiiforms[comp].loginpage!='')
				weii.navtopage(weiiforms[comp].loginpage);
		} else {
			//weiiforms.signedout(comp);
			$('#'+comp+' .signinerror').show();
			$('#'+comp+' .signinattempt').hide();
		}
	}
}

weiiforms.loginStatus = function(comp) {
	//alert("loginStatus: "+weii.userid);
	if (eval(weii.userid)>0) {
		weiiforms.signedin(comp);
	} else {
		weiiforms.signedout(comp);
	}
}

weiiforms.loginForm = function(comp,info) {
	weiiforms[comp] = {};
	weiiforms[comp].loginpage = info.loginpage;
	weiiforms[comp].logoutpage = info.logoutpage;
	//weiiforms.signedout(comp);
	//weii.wex({ onSuccess: onStatus});
	
	//function onStatus(results) {
	//	var stat = results[0];
	//	if (eval(stat.userid)>0) {
	//		weiiforms.signedin(comp);
	//	} else {
	//		weiiforms.signedout(comp);
	//	}
	//}
	
}
