
function handleLink(url,id) {
	//console.log("handleLink('"+url+"','"+id+"') called.");
	document.cookie="_windowName="+escape(window.name);
	if (url.indexOf('_popupPageName=') > 0 && url.indexOf('_startPopup=true') > 0) {
		var target	= url.split('_popupPageName=',2)[1].split('&',2)[0];
		var url2	= url.split('_startPopup=true&');
		url2		= url2.join('');
		target		= "popupWindow_" + target + "_" + (id ? id : 0);
		win = window.open(url2,	target, "menubar=yes,width=950,height=700,toolbar=no,scrollbars=yes");
		if (!win) {
			//Catch the popup blocker
			alert('Please disable your popup blocker!!');
		}
		else {
			win.focus();
		}
	}
	else if (url.indexOf('_ajaxReplace=') > 0) {
	}
	else if (url.indexOf('_overlayName=') >0 ) {
	}
	else
		//window.location = url;
		return true;
	return false;
}

function convertElementNameToPropertyName(ele) {
	return ele;
}
/**
	valuse is a hashmap with the following elements.
	'required'  	=>  boolean
	'range'     	=>  boolean -- test against a range.
	'min'			=>	string
	'max'			=>  string
	'type'			=>  string -- data type of the property
	'isId'			=>  boolean
	'regexp'		=>  string -- regular expression
	'message'		=>  string -- standard error message
	'requiredMessage' => string -- message if required is true and element is empty.
	'rangeMessage'	=> string -- error message if element value is not in range.
*/

function validateVisitorForm(form, msgId, values) {
	var msg = "";
	var rtn = true;

	if (!(form && form.elements)) {
		alert("ERROR in the javascript calling validateForm(.,"+msgId+"), invalid form input.");
		rtn = false;
	}
	else {
		for (var i=0; i < form.elements.length; i++) {
			var ele = form.elements[i];
			var name = convertElementNameToPropertyName(ele.name);
			var value = values[name];
			if (!value)
				continue;
			if (ele.type == "text" || ele.type == "password") {
				$(ele).css('background-color','#ffffff'); // white
				if (value['required'] && (!ele.value || ele.value == "")) {
					$(ele).css('background-color', '#FFCACA'); // pink
					msg = value['requiredMessage'];
					rtn = false;
				}
				else if (value['regexp'] && value['regexp'] != '') {
					var re = new RegExp(value['regexp']);
					if (!re.test(ele.value)) {
						$(ele).css('background-color', '#FFCACA'); // pink
						msg += value['message'] + "<br />";
						rtn = false;
					}
				}
			}
		}
	}
	var node = document.getElementById(msgId);
	if (node)
		node.innerHTML = msg;
	return rtn;

}

function validateForm(form, msgId) {
	var msg = "";
	var rtn = true;

	if (!(form && form.elements)) {
		alert("ERROR in the javascript calling validateForm(.,"+msgId+").");
		rtn = false;
	}
	else {
		for (var i=0; i < form.elements.length; i++) {
			var ele = form.elements[i];
			if (ele.type == "text" || ele.type == "password") {
				$(ele).css('background-color','#ffffff'); // white
				if (!ele.value || ele.value == "") {
					$(ele).css('background-color', '#FFCACA'); // pink
					msg = "Required field.<br>";
					rtn = false;
				}
				else if (ele.name == 'user:email') {
					var re = new RegExp(".+@.+\\..+");
					if (!re.test(ele.value)) {
						$(ele).css('background-color', '#FFCACA'); // pink
						msg += "Please enter a valid email address.<br>";
						rtn = false;
					}
				}
			}
		}
	}
	var node = document.getElementById(msgId);
	if (node)
		node.innerHTML = msg;
	return rtn;
}

jQuery.fn.extend({
  processSum: function(updateOnly) {
	this.each(function() {
		var form = $(this);
		var sums = $(":text[sum]", form);
		if (sums.length > 0) {
			var cellArray = [];
			var cells = $.grep($(":text",form),function(n,i) {
				var name = $.trim($(n).attr('name'));
				cellArray[name] = $(n);
				return name.match(/^[A-Za-z_]+\d*$/);
			});
			var processRange = function(range) {
				var items = range.match(/([A-Za-z_]+)|(\d+)/g);
				var rtn = new Array();
				for(ch = items[0]; ch <= items[2]; ) {
					for (i = parseInt(items[1]); i <= parseInt(items[3]); i++) {
						if (cellArray[ch+i] != undefined)
							rtn.push( ch + i);
					}
					// increment the text part of the string.
					ch = ch.substring(0, ch.length-1) + String.fromCharCode(ch.charCodeAt(ch.length-1)+1);
				}
				return rtn.join('+');
			}

			var processFloat = function(name) {
				if (cellArray[name] == undefined)
					throw ("UNKNOWN field name, " + name);
				var cell = cellArray[name];

				return (cell.val().length == 0) ? 0 : parseFloat(cell.val().replace(/,/g,''));
			}

			var updateCells = function() {
				$(sums).each(function(i,n) {
					var stg = $(n).attr('sum');
					var s = stg.match(/[A-Za-z_]+\d+\.\.[A-Za-z_]+\d+/g);
					if (s) $.each(s, function(i,n) {
						stg = stg.replace(n,processRange(n));
					});
					stg = stg.replace(/([A-Za-z_]+\d*)/g,"processFloat('$1')");
					var rtn = 0;
					try {
						eval("rtn = " + stg + ';');
					} catch (e) {
						alert("Error in evaluating the sum data: "+(e.message ? e.message : e)+ "\n"+stg);
					}
					$(n).val(rtn);
				});
			};
			if (updateOnly==undefined || !updateOnly) {
				$(cells).change(function(n) {
					updateCells();
				});
			}
			updateCells();
		}
    });
	return this;
  }
});

$(document).ready(function() {
	$('input.date_input').datepicker({speed:'fast', dateFormat:'yy-mm-dd'});
});
//$($.date_input.initialize);

/*
$.extend(DateInput.DEFAULT_OPTS, {
  stringToDate: function(string) {
    var matches;
    if (matches = string.match(/^(\d{4,4})-(\d{2,2})-(\d{2,2})$/)) {
      return new Date(matches[1], matches[2] - 1, matches[3]);
    } else {
      return null;
    };
  },

  dateToString: function(date) {
    var month = (date.getMonth() + 1).toString();
    var dom = date.getDate().toString();
    if (month.length == 1) month = "0" + month;
    if (dom.length == 1) dom = "0" + dom;
    return date.getFullYear() + "-" + month + "-" + dom;
  },

  start_of_week: 0
});
*/
