function vFormReset(formID)
{
	var f = document.getElementById(formID);
	if (f){
		if(f.reset) f.reset();
		return false;
	}
}

function vFormValidation(){
	var self = this;
	var errClr='';
	var fgColor='';
	var ttPos = 0;
	
	self.errClr = "#FFCC99";
	self.fgColor= "#000066";
	self.fnError = fnError;
	self.ttPos = 0;
	self.LTrim=ltriM;
	self.RTrim=rtriM;
	self.Trim=triM;
	self.isCCValid = ccValid;
	
	if ((arguments) && (arguments.length)){
		if(arguments.length>0) self.fgColor	=arguments[0];
		if(arguments.length>1) self.errClr	=arguments[1];
		if(arguments.length>2) self.ttPos	=arguments[2];
	}
	//Constructor
	addDOMLoadEvent(hookForms);
	//
	function addDOMLoadEvent(f){if(!window.__ADLE){var n=function(){if(arguments.callee.d)return;arguments.callee.d=true;if(window.__ADLET){clearInterval(window.__ADLET);window.__ADLET=null}for(var i=0;i<window.__ADLE.length;i++){window.__ADLE[i]()}window.__ADLE=null};if(document.addEventListener)document.addEventListener("DOMContentLoaded",n,false);/*@cc_on @*//*@if (@_win32)document.write("<scr"+"ipt id=__ie_onload defer src=//0><\/scr"+"ipt>");var s=document.getElementById("__ie_onload");s.onreadystatechange=function(){if(this.readyState=="complete")n()};/*@end @*/if(/WebKit/i.test(navigator.userAgent)){window.__ADLET=setInterval(function(){if(/loaded|complete/.test(document.readyState)){n()}},10)}window.onload=n;window.__ADLE=[]}window.__ADLE.push(f)}
	function validateOnBlur(e){	
		var msg='';
		if(!e) { e = window.event; e.target = e.srcElement; }		
		if (e.target.name){
			var name = e.target.name;
			name=name.toLowerCase();
			if(self.doValidate) msg=self.doValidate(name,e.target);
			fnError(e.target,msg);
		}
	}
		
	function hookForms(){
		for(var i=0;i<document.forms.length;i++){
			var frm=document.forms[i];
			for(var j=0;j<frm.elements.length;j++){
				frm.elements[j].onblur = validateOnBlur; //fnCallBack; //;validateOnBlur;
			}
		}
		document.myToolTip = new vToolTip(self.fgColor, self.errClr, self.ttPos);
	}

	function fnError(obj,msg){
		var errClr=self.errClr;
		var title = new String(msg);
		
		if (msg.length){
			if (obj.style){
				if(!obj.vsetbackColor) {obj.vbackColor = obj.style.backgroundColor;obj.vsetbackColor=true;}
				obj.style.backgroundColor = errClr;
				if(!document.errRGB) document.errRGB=obj.style.backgroundColor.toString();						
			}
			if(document.myToolTip) document.myToolTip.Open(obj, title);
		}else{
			if (obj.style){
				var clr = obj.style.backgroundColor.toString();						
				if ((clr==errClr)||(clr==document.errRGB))
					obj.style.backgroundColor = obj.vbackColor;
			}
			if(document.myToolTip) document.myToolTip.Close();
		}
	}
	
	function ccValid (cardNumber)
	{
	  var isValid = false;
	  var cardType='';
	  var ccCheckRegExp = /[^\d ]/;
	  isValid = !ccCheckRegExp.test(cardNumber);

	  if (isValid)
	  {
	    var cardNumbersOnly = cardNumber.replace(/ /g,"");
	    var cardNumberLength = cardNumbersOnly.length;
	    var lengthIsValid = false;
	    var prefixIsValid = false;
	    var prefixRegExp;

		if (/^5[1-5]/.test(cardNumber))
			cardType="mastercard";
		else if (/^4/.test(cardNumber))
			cardType="visacard";
		else if (/^3(4|7)/.test(cardNumber))
			cardType="amexcard";
			
	    switch(cardType)
	    {
	      case "mastercard":
	        lengthIsValid = (cardNumberLength == 16);
	        prefixRegExp = /^5[1-5]/;
	        break;

	      case "visacard":
	        lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 13);
	        prefixRegExp = /^4/;
	        break;

	      case "amexcard":
	        lengthIsValid = (cardNumberLength == 15);
	        prefixRegExp = /^3(4|7)/;
	        break;

	      default:
	        prefixRegExp = /^$/;
	        return false;
	    }

	    prefixIsValid = prefixRegExp.test(cardNumbersOnly);
	    isValid = prefixIsValid && lengthIsValid;
	  }

	  if (isValid)
	  {
	    var numberProduct;
	    var numberProductDigitIndex;
	    var checkSumTotal = 0;

	    for (digitCounter = cardNumberLength - 1; 
	      digitCounter >= 0; 
	      digitCounter--)
	    {
	      checkSumTotal += parseInt (cardNumbersOnly.charAt(digitCounter));
	      digitCounter--;
	      numberProduct = String((cardNumbersOnly.charAt(digitCounter) * 2));
	      for (var productDigitCounter = 0;
	        productDigitCounter < numberProduct.length; 
	        productDigitCounter++)
	      {
	        checkSumTotal += 
	          parseInt(numberProduct.charAt(productDigitCounter));
	      }
	    }

	    isValid = (checkSumTotal % 10 == 0);
	  }

	  return isValid;
	}

	function ltriM(str){
		if(!str) return str;
		var ret=new String(str);
		return ret.replace(/^[ \t\n\r]+/g,'');
	}

	function rtriM(str){
		if(!str) return str;
		var ret=new String(str);
		return ret.replace(/[ \t\n\r]+$/g,'');
	}

	function triM(str){
		return self.LTrim(self.RTrim(str));
	}
}

function vToolTip(fgColor,bkColor,tipPos){
	var self=this;
	var ttID='t__tt_id';
	var ttElem=null;
	var ttPos = 0;
	
	Initialize(fgColor,bkColor,tipPos);
	
	function Initialize(fgColor,bkColor,tipPos){
		if(!self.ttElem) {
			self.ttElem = document.createElementNS ? 
					document.createElementNS("http://www.w3.org/1999/xhtml", "div") : 
					document.createElement("div");
			self.ttElem.setAttribute("id", this.ttID);
			addStyle("div.t__tt_id", "background: "+bkColor+";color: "+fgColor+"; font: bold 10px Verdana; border: 1px solid #666; padding:2px; display: none; position: absolute;z-index: 100;");
			self.ttElem.setAttribute('class', 't__tt_id');
			self.ttElem.setAttribute('className', 't__tt_id');//weird IE
			document.getElementsByTagName("body").item(0).appendChild(self.ttElem);
			self.ttElem = document.getElementById(self.ttID);
			self.ttPos = tipPos;
		}
	}
	
	function addStyle(selector, declaration) {
		var cssRule = selector + '{' + declaration + '}';
		if (document.styleSheets) {
			if(document.styleSheets.length){
				if (document.styleSheets[0].addRule){
					document.styleSheets[0].addRule(selector,declaration,0);
					return ;
				}else if(document.styleSheets[0].insertRule){
					document.styleSheets[0].insertRule(cssRule, 0);
					return ;
				}
			}
		}
		var style = document.createElement('style');
		style.type = 'text/css';
		if (document.getElementsByTagName) {
		    document.getElementsByTagName('head')[0].appendChild(style);
		    if (style.sheet && style.sheet.insertRule) {
		        style.sheet.insertRule(cssRule, 0);
		    }
		}
	}
	
	this.findPos=function(obj) {
		var curleft = curtop = 0;
		if (obj.offsetParent) {
			curleft = obj.offsetLeft;
			curtop = obj.offsetTop;
			while (obj = obj.offsetParent) {
				curleft += obj.offsetLeft;
				curtop += obj.offsetTop;
			}
		}
		return [curleft,curtop];
	}
	
	this.Open=function(inpFld, title){
		if(self.ttElem) {
			var curPos = self.findPos(inpFld);
			var style = self.ttElem.style;
			var width=0, height=0;
			self.ttElem.innerHTML = title;
			self.ttElem.zIndex = 100;
			if(self.ttPos==0)
				width = (inpFld.offsetWidth?inpFld.offsetWidth+6:220);
			else
				height= (inpFld.offsetHeight?inpFld.offsetHeight+6:24);
			style.left = curPos[0] + width + 'px';
			style.top = curPos[1] + height + 'px';
			style.display = "block";
		}
	}
	this.Close=function(title){
		if(self.ttElem) {
			self.ttElem.innerHTML ='';
			self.ttElem.style.display = "none";
		}
	}
	this.Element=function(){
		return self.ttElem;
	}
}