// Enhanced from 
// http://www.leigeber.com/2008/04/dynamic-inline-javascript-form-validation/

// START OF MESSAGE SCRIPT //

var MSGTIMER = 20;
var MSGSPEED = 5;
var MSGOFFSET = 3;
var MSGHIDE = 3;

// build out the divs, set attributes and call the fade function //
function inlineMsg(target,string,autohide) {
  var msg;
  var msgcontent;
  if(!document.getElementById('msg')) {
    msg = document.createElement('div');
    msg.id = 'msg';
    msgcontent = document.createElement('div');
    msgcontent.id = 'msgcontent';
    document.body.appendChild(msg);
    msg.appendChild(msgcontent);
    msg.style.filter = 'alpha(opacity=0)';
    msg.style.opacity = 0;
    msg.alpha = 0;
  } else {
    msg = document.getElementById('msg');
    msgcontent = document.getElementById('msgcontent');
  }
  msgcontent.innerHTML = string;
  msg.style.display = 'block';
  var msgheight = msg.offsetHeight;
  var targetdiv = document.getElementById(target);
  targetdiv.focus();
  var targetheight = targetdiv.offsetHeight;
  var targetwidth = targetdiv.offsetWidth;
  var topposition = topPosition(targetdiv) - ((msgheight - targetheight) / 2);
  var leftposition = leftPosition(targetdiv) + targetwidth + MSGOFFSET;
  msg.style.top = topposition + 'px';
  msg.style.left = leftposition + 'px';
  clearInterval(msg.timer);
  msg.timer = setInterval("fadeMsg(1)", MSGTIMER);
  if(!autohide) {
    autohide = MSGHIDE;  
  }
  window.setTimeout("hideMsg()", (autohide * 1000));
}

// hide the form alert //
function hideMsg(msg) {
  var msg = document.getElementById('msg');
  if(!msg.timer) {
    msg.timer = setInterval("fadeMsg(0)", MSGTIMER);
  }
}

// face the message box //
function fadeMsg(flag) {
  if(flag == null) {
    flag = 1;
  }
  var msg = document.getElementById('msg');
  var value;
  if(flag == 1) {
    value = msg.alpha + MSGSPEED;
  } else {
    value = msg.alpha - MSGSPEED;
  }
  msg.alpha = value;
  msg.style.opacity = (value / 100);
  msg.style.filter = 'alpha(opacity=' + value + ')';
  if(value >= 99) {
    clearInterval(msg.timer);
    msg.timer = null;
  } else if(value <= 1) {
    msg.style.display = "none";
    clearInterval(msg.timer);
  }
}

// calculate the position of the element in relation to the left of the browser //
function leftPosition(target) {
  var left = 0;
  if(target.offsetParent) {
    while(1) {
      left += target.offsetLeft;
      if(!target.offsetParent) {
        break;
      }
      target = target.offsetParent;
    }
  } else if(target.x) {
    left += target.x;
  }
  return left;
}

// calculate the position of the element in relation to the top of the browser window //
function topPosition(target) {
  var top = 0;
  if(target.offsetParent) {
    while(1) {
      top += target.offsetTop;
      if(!target.offsetParent) {
        break;
      }
      target = target.offsetParent;
    }
  } else if(target.y) {
    top += target.y;
  }
  return top;
}

// preload the arrow //
if(document.images) {
  arrow = new Image(7,80); 
  arrow.src = "images/msg_arrow.gif"; 
}


//custom methods -- starts
function IsEmpty(s) {
	return /^\s*$/.test(IsEmpty.arguments[0]);
}

function validateRequiredField(value,id,msg,duration){
	if(IsEmpty(value)) {
		inlineMsg(id,msg,duration);
		return false;
	}
}

function validateCharacter(value,id,requiredMsg,invalidMsg,mandatory,duration){
var nameRegex = /^[a-zA-Z]+(([\'\,\.\- ][a-zA-Z ])?[a-zA-Z]*)*$/;
if(mandatory == true){
if(validateRequiredField(value,id,requiredMsg,duration) == false)
	return false;
}
if(value){
if(!value.match(nameRegex)) {
    inlineMsg(id,invalidMsg,duration);
    return false;
  }
}
}

function validateEmail(value,id,requiredMsg,invalidMsg,mandatory,duration){
var emailRegex = /^[\w-\.]+@([\w-]+\.)+[\w-]{2,3}$/;
if(mandatory == true){
if(validateRequiredField(value,id,requiredMsg,duration) == false)
	return false;
}
if(value){
if(!value.match(emailRegex)) {
    inlineMsg(id,invalidMsg,duration);
    return false;
  }
}
}

function validateOnlyNumber(value,id,requiredMsg,invalidMsg,mandatory,duration){
	if(mandatory == true){
		if(validateRequiredField(value,id,requiredMsg,duration) == false)
			return false;
	}
    var number = /^[0-9]+$/;
	if(!value.match(number) || value<=0 ){
		inlineMsg(id,invalidMsg,duration);
		return false;
	}
}

function validateNumber(value,id,requiredMsg,invalidMsg,mandatory,duration){
	if(mandatory == true){
		if(validateRequiredField(value,id,requiredMsg,duration) == false)
			return false;
	}
	var number = /^[0-9]+$/;
	if(!value.match(number)){
		inlineMsg(id,invalidMsg,duration);
		return false;
	}
}

function validatePrice(value,id,requiredMsg,invalidMsg,mandatory,duration){
	if(mandatory == true){
		if(validateRequiredField(value,id,requiredMsg,duration) == false)
			return false;
	}
	if(isNaN(value)){
		inlineMsg(id,invalidMsg,duration);
		return false;
	}
}

function validateNumberDigits(value,id,requiredMsg,invalidMsg1,invalidMsg2,mandatory,digits,duration){

if(validateNumber(value,id,requiredMsg,invalidMsg1,mandatory,duration) == false)
return false;
else if(String(value).length != digits){
inlineMsg(id,invalidMsg2,duration);
return false;
}
}

function validateAlphaNumeric(value,id,requiredMsg,invalidMsg,mandatory,duration){
var usrid=document.getElementById("txtUserid"); //txtUserid-->ID of textbox
var alphanum=/^[0-9a-bA-B]+$/; //This contains A to Z , 0 to 9 and A to B

if(mandatory == true){
if(validateRequiredField(value,id,requiredMsg,duration) == false)
	return false;
}
if(!value.match(alphanum)){
inlineMsg(id,invalidMsg,duration);
return false;
}
}


//function validateRadioGroup(value,id,requiredMsg,duration){ 
function validateRadioGroup(value,name,form,requiredMsg,duration)
{
// set var radio_choice to false
var radio_choice = false;

// Loop from zero to the one minus the number of radio button selections
for (counter = 0; counter < document.form.radio_button.length; counter++)
{
// If a radio button has been selected it will return true
// (If not it will return false)
if (form.radio_button[counter].checked)
radio_choice = true; 
}

if (!radio_choice)
{
// If there were no selections made display an alert box 
inlineMsg(id,requiredMsg,duration);
return false;
}
return (true);
}
function validateUsername(value,id,requiredMsg,invalidMsg,mandatory,duration) {
    var regx = /^[A-Za-z0-9_]{5,25}$/;
    if(mandatory == true){
	if(validateRequiredField(value,id,requiredMsg,duration) == false)
	return false;
     }
 	
    if(!regx.test(value)){
        inlineMsg(id,invalidMsg,duration);
        return false;
    }
}

function validateStrongPassword(value,id,requiredMsg,invalidMsg,mandatory,duration) {
    var regx = /(?=^.{8,}$)((?=.*\d)|(?=.*\W+))(?![.\n])(?=.*[A-Z])(?=.*[a-z]).*$/;
    
    if(mandatory == true){
	if(validateRequiredField(value,id,requiredMsg,duration) == false)
	return false;
     }

    if(!regx.test(value)){
        inlineMsg(id,invalidMsg,duration);
        return false;
    }
}


// Date Validation -- starts
// copyright 30th October 2004, 31st December 2009 by Stephen Chapman
// http://javascript.about.com

// You have permission to copy and use this javascript provided that
// the content of the script is not changed in any way.

function valDateFmt(datefmt) {myOption = -1;
for (i=0; i<datefmt.length; i++) {if (datefmt[i].checked) {myOption = i;}}
if (myOption == -1) {alert("You must select a date format");return ' ';}
return datefmt[myOption].value;}

function valDateRng(daterng) {myOption = -1;
for (i=0; i<daterng.length; i++) {if (daterng[i].checked) {myOption = i;}}
if (myOption == -1) {alert("You must select a date range");return ' ';}
return daterng[myOption].value;}

function stripBlanks(fld) {var result = "";var c=0;for (i=0; i<fld.length; i++) {
if (fld.charAt(i) != " " || c > 0) {result += fld.charAt(i);
if (fld.charAt(i) != " ") c = result.length;}}return result.substr(0,c);}
var numb = '0123456789';
function isValid(parm,val) {if (parm == "") return true;
for (i=0; i<parm.length; i++) {if (val.indexOf(parm.charAt(i),0) == -1)
return false;}return true;}

function isNumber(parm) {return isValid(parm,numb);}
var mth = new Array(' ','january','february','march','april','may','june','july','august','september','october','november','december');
var day = new Array(31,28,31,30,31,30,31,31,30,31,30,31);

function validateDate(fld,id,requiredMsg,invalidMsg1,invalidMsg2,mandatory,fmt,rng,duration) { 
var dd, mm, yy;var today = new Date;var t = new Date;fld = stripBlanks(fld);

if(mandatory == true){
	if(validateRequiredField(fld,id,requiredMsg,duration) == false)
	return false;
       }

if (fld == '') return false;var d1 = fld.split('-');
if (d1.length != 3) d1 = fld.split(' ');
if (d1.length != 3) {
inlineMsg(id,invalidMsg1,duration);
        return false;
}
if (fmt == 'u' || fmt == 'U') {
  dd = d1[1]; mm = d1[0]; yy = d1[2];}
else if (fmt == 'j' || fmt == 'J') {
  dd = d1[2]; mm = d1[1]; yy = d1[0];}
else if (fmt == 'w' || fmt == 'W'){
  dd = d1[0]; mm = d1[1]; yy = d1[2];}
else return false;
var n = dd.lastIndexOf('st');
if (n > -1) dd = dd.substr(0,n);
n = dd.lastIndexOf('nd');
if (n > -1) dd = dd.substr(0,n);
n = dd.lastIndexOf('rd');
if (n > -1) dd = dd.substr(0,n);
n = dd.lastIndexOf('th');
if (n > -1) dd = dd.substr(0,n);
n = dd.lastIndexOf(',');
if (n > -1) dd = dd.substr(0,n);
n = mm.lastIndexOf(',');
if (n > -1) mm = mm.substr(0,n);
if (!isNumber(dd)) {
inlineMsg(id,invalidMsg1,duration);
        return false;
}
if (!isNumber(yy)) {
inlineMsg(id,invalidMsg1,duration);
        return false;
}
if (!isNumber(mm)) {
  var nn = mm.toLowerCase();
  for (var i=1; i < 13; i++) {
    if (nn == mth[i] ||
        nn == mth[i].substr(0,3)) {mm = i; i = 13;}
  }
}
if (!isNumber(mm)) {
inlineMsg(id,invalidMsg1,duration);
        return false;
}
dd = parseFloat(dd); mm = parseFloat(mm); yy = parseFloat(yy);
if (yy < 100) yy += 2000;
if (yy < 1582 || yy > 4881) {
inlineMsg(id,invalidMsg1,duration);
        return false;
}
if (mm == 2 && (yy%400 == 0 || (yy%4 == 0 && yy%100 != 0))) day[1]=29;else day[1]=28;
if (mm < 1 || mm > 12) {
inlineMsg(id,invalidMsg1,duration);
        return false;
}
if (dd < 1 || dd > day[mm-1]) {

inlineMsg(id,invalidMsg1,duration);
        return false;
}
t.setDate(dd); t.setMonth(mm-1); t.setFullYear(yy);
if (rng == 'p' || rng == 'P') {
if (t > today) {
inlineMsg(id,invalidMsg2,duration);
        return false;
}
}
else if (rng == 'f' || rng == 'F') {
if (t < today) {
inlineMsg(id,invalidMsg2,duration);
        return false;
}
}
else if (rng != 'a' && rng != 'A') {
inlineMsg(id,invalidMsg2,duration);
        return false;
}
return true;
}

// Date Validation -- ends

/*function validatePhoneNumber(value,id,requiredMsg,invalidMsg,mandatory,duration)
	{
	    var phone2 = /^(\+\d)*\s*(\(\d{3}\)\s*)*\d{3}(-{0,1}|\s{0,1})\d{2}(-{0,1}|\s{0,1})\d{2}$/;
	    
            if(mandatory == true){
		if(validateRequiredField(value,id,requiredMsg,duration) == false)
		return false;
	     }
	    if (!value.match(phone2)) {
	        inlineMsg(id,invalidMsg,duration);
	        return false;
	    }
	}
*/

function validateImage(value,id,requiredMsg,invalidMsg,mandatory,duration){
	var alphaExp = /.*\.(gif)|(GIF)|(jpeg)|(JPEG)|(jpg)|(JPG)|(png)|(PNG)$/; 
	if(mandatory == true){
		if(validateRequiredField(value,id,requiredMsg,duration) == false)
		return false;
	}
	if(value){
        if(!value.toLowerCase().match(alphaExp)){
			inlineMsg(id,invalidMsg,duration);
			return false;
        }
	}
}

function validateVideoFlv(value,id,requiredMsg,invalidMsg,mandatory,duration){
	var alphaExp = /.*\.(flv)|(FLV)$/; 
	if(mandatory == true){
		if(validateRequiredField(value,id,requiredMsg,duration) == false)
			return false;
	}
	if(value){
		if(!value.toLowerCase().match(alphaExp)){
			inlineMsg(id,invalidMsg,duration);
			return false;
		}
	}
}

function validateOnlyPdf(value,id,requiredMsg,invalidMsg,mandatory,duration){
	var alphaExp = /.*\.(pdf)|(PDF)$/;
	if(mandatory == true){
		if(validateRequiredField(value,id,requiredMsg,duration) == false)
			return false;
	}
	if(value){
		if(!value.toLowerCase().match(alphaExp)){
			inlineMsg(id,invalidMsg,duration);
			return false;
		}
	}
}

function validateZipFile(value,id,requiredMsg,invalidMsg,mandatory,duration){
	var alphaExp = /.*\.(zip)|(ZIP)$/;
	if(mandatory == true){
		if(validateRequiredField(value,id,requiredMsg,duration) == false)
			return false;
	}
	if(value){
		if(!value.toLowerCase().match(alphaExp)){
			inlineMsg(id,invalidMsg,duration);
			return false;
		}
	}
}

function validateCreditCard(value,id,requiredMsg,invalidMsg,mandatory,type,duration) { 
	if(mandatory == true){
		if(validateRequiredField(value,id,requiredMsg,duration) == false)
		return false;
	     }

	   if (type == "visa") {
	      // Visa: length 16, prefix 4, dashes optional.
	      var re = /^4\d{3}-?\d{4}-?\d{4}-?\d{4}$/;
	   } else if (type == "master") {
	      // Mastercard: length 16, prefix 51-55, dashes optional.
	      var re = /^5[1-5]\d{2}-?\d{4}-?\d{4}-?\d{4}$/;
	   } else if (type == "discover") {
	      // Discover: length 16, prefix 6011, dashes optional.
	      var re = /^6011-?\d{4}-?\d{4}-?\d{4}$/;
	   } else if (type == "amex") {
	      // American Express: length 15, prefix 34 or 37.
	      var re = /^3[4,7]\d{13}$/;
	   } else if (type == "diners") {
	      // Diners: length 14, prefix 30, 36, or 38.
	      var re = /^3[0,6,8]\d{12}$/;
	   }
	   if (!re.test(value)){
		inlineMsg(id,invalidMsg,duration);
		    return false;
		}
	   // Remove all dashes for the checksum checks to eliminate negative numbers
	   value = value.split("-").join("");
	   // Checksum ("Mod 10")
	   // Add even digits in even length strings or odd digits in odd length strings.
	   var checksum = 0;
	   for (var i=(2-(value.length % 2)); i<=value.length; i+=2) {
	      checksum += parseInt(value.charAt(i-1));
	   }
	   // Analyze odd digits in even length strings or even digits in odd length strings.
	   for (var i=(value.length % 2) + 1; i<value.length; i+=2) {
	      var digit = parseInt(value.charAt(i-1)) * 2;
	      if (digit < 10) { checksum += digit; } else { checksum += (digit-9); }
	   }
	   if ((checksum % 10) == 0) return true; else {
		inlineMsg(id,invalidMsg,duration);
		return false;}
	}


/*function validateRadioGroup(id,formName,groupName,msg,duration){
var cnt = -1;
var btn = formName +'.'+ groupName;

    var cnt = -1;
//alert(btn.length)
    for (var i=btn.length-1; i > -1; i--) {

        if (btn[i].checked) {cnt = i; i = -1;}
    }

    if (cnt > -1) return btn[cnt].value;
    else alert("false");

alert(btn)
alert(btn.length)
    for (var i=btn.length-1; i > -1; i--) {
        if (btn[i].checked) {cnt = i; i = -1;}
    }	
alert(cnt)
    if (cnt > -1){ return btn[cnt].value;}
    else{ 
	inlineMsg(id,msg,duration);
	return false;
     }
}*/







//custom methods -- ends

