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

// build out the divs, set attributes and call the fade function //
function inlineMsg(target,string,autohide,setfocusOn,setfocus) {  
  var msg;
  var msgcontent;
  
  setfocus = (setfocus) ? setfocus : '1';
    
  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);  
  var setfocusOnObj = document.getElementById(setfocusOn);  
  if (setfocus == 1){
 	 //setfocusOnObj.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;  
  }
	// The following line has been commented so that the message doesnt hide after a few secs
//   window.setTimeout("hideMsg()", (autohide * 1000)); 
}

function inlineErrMsg(idx,target,string,autohide,setfocusOn){		
	var msg = document.createElement('div');
	msg.setAttribute('id','msg_'+idx);	
	msg.setAttribute('style','display:none; position:absolute; z-index:200;padding-left:7px;color:#ffffff;');
	msg.style.display = 'none';
	msg.style.position = 'absolute';	
	// msg.style.background = 'url(images/left.gif) left center no-repeat';
	msg.style.color = '#ffffff';
	msg.style.padding.left = '7px';
	var msgcontent = document.createElement('div');
	msgcontent.setAttribute('id','msgcontent_'+idx);
	msgcontent.setAttribute('style','display:block; background:#161827; margin-top:60px; border:2px solid #161827; border-left:none; padding:5px; font-family:Arial; font-size:11px; color:#ffffff; margin-left:-201px; width:178px;');	
	msgcontent.style.background =  '#161827';
	msgcontent.style.display = 'block';
	msgcontent.style.background = '#161827';
	msgcontent.style.border.left = 'none';
	msgcontent.style.padding = '5px';
	msgcontent.style.color = '#ffffff';
	document.body.appendChild(msg);
	msg.appendChild(msgcontent);
	msg.style.filter = 'alpha(opacity=0)';	
	msg.style.opacity = 0;	
	msg.alpha = 0;
	msg.style.display = 'block';		
	msgcontent.innerHTML = string;	  
	var msgheight = msg.offsetHeight;
	var targetdiv = document.getElementById(target); 
	var setfocusOnObj = document.getElementById(setfocusOn);  
	if(idx == 0 && setfocusOnObj!== null){
		setfocusOnObj.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("fadeErrMsg(1,'msg_"+ idx +"')", MSGTIMER);
	if(!autohide) {
    autohide = MSGHIDE;  
  }
  
  // window.setTimeout("hideErrMsg('msg_"+ idx+"')", (autohide * 1000)); 
}

function hideErrMsg(msgDivId){			
	  var msg = document.getElementById(msgDivId);
	  if(!msg.timer) {
	    msg.timer = setInterval("fadeErrMsg(0,'"+msgDivId+"')", MSGTIMER);
	  }	
}

function fadeErrMsg(flag,msgDivId) {	
  if(flag == null) {
    flag = 1;
  }
  var msg = document.getElementById(msgDivId);
  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);
    document.body.removeChild(msg);
  }
}


// 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"; 
}

function getObjVars2(){
	this.fieldN = new Array();	// Field name	
	this.fieldI = new Array();	// Field Id	
	this.fieldT = new Array();	// Field type (text, editor, checkbox, radio, select, mselect, date)	
	this.fieldV = new Array();	// Error message to be dispayed
	this.fieldCF = new Array();	// Check for equal field
	this.fieldCV = new Array();	// To check if field value is equal to a specific value. Give error if field value <> specified value
	this.fieldCVE = new Array(); // To check if field value is equal to a specific value. Give error if field value == specified value	
	this.fieldCM = new Array();	// Error message to be displayed after comparing two fields 
	this.fieldFocus = new Array(); // Set focus to this field, always give the ID of the field
	this.setFocus = new Array(); // whether to set focus to this field, if not specified it takes as 'yes'
	this.fieldValidate = new Array(); // this is specially used if you want to validate the field
	this.fieldValidateMsg = new Array(); // message
}

function validateFormNew(formN, objvar){

	var errobjvar = new getObjVars2();
	var k=0;
	var err = "";
	var frmObj = eval("document." + formN);
	
	for(var i=0; i<objvar.fieldN.length; i++){			
		objvar.setFocus[i] = (objvar.setFocus[i]) ? objvar.setFocus[i] : 1;
		objvar.fieldFocus[i] = (objvar.fieldFocus[i]) ? objvar.fieldFocus[i] : objvar.fieldI[i];		
		objvar.fieldValidate[i] = (objvar.fieldValidate[i]) ? objvar.fieldValidate[i] : "";		
		
		if ( (objvar.fieldT[i] == "text") || (objvar.fieldT[i] == "select")){	
			var frmElm = eval("frmObj." + objvar.fieldN[i]);
					 			
			if((frmElm.value == "") || (frmElm.value == " ")) {							
 				// inlineMsg(objvar.fieldI[i],objvar.fieldV[i],3,objvar.fieldFocus[i],objvar.setFocus[i]);
 				errobjvar.fieldN[k] = objvar.fieldN[i];
		 		errobjvar.fieldV[k] = objvar.fieldV[i];
		 	    errobjvar.fieldT[k] = objvar.fieldT[i];
		 	    errobjvar.fieldI[k] = objvar.fieldI[i];
		 	    errobjvar.fieldFocus[i] = objvar.fieldFocus[i];
		 	    k++;
    			//return false;
			}else if ((objvar.fieldN[i].indexOf("E-Mail") == 0) || (objvar.fieldN[i].indexOf("email") == 0)) {
				if(!checkEmail(frmElm.value)) {
					// inlineMsg(objvar.fieldI[i],'Please enter valid email address',3,objvar.fieldFocus[i],objvar.setFocus[i]);
    				// return false;
    				errobjvar.fieldN[k] = objvar.fieldN[i];
			 		errobjvar.fieldV[k] = objvar.fieldV[i];
			 	    errobjvar.fieldT[k] = objvar.fieldT[i];
			 	    errobjvar.fieldI[k] = objvar.fieldI[i];
			 	    errobjvar.fieldFocus[i] = objvar.fieldFocus[i];
			 	    k++;
				}else if (objvar.fieldValidate[i]){					
					// inlineMsg(objvar.fieldI[i],objvar.fieldValidateMsg[i],3,objvar.fieldFocus[i],objvar.setFocus[i]);
    				// return false;
    				errobjvar.fieldN[k] = objvar.fieldN[i];
			 		errobjvar.fieldV[k] = objvar.fieldV[i];
			 	    errobjvar.fieldT[k] = objvar.fieldT[i];
			 	    errobjvar.fieldI[k] = objvar.fieldI[i];
			 	    errobjvar.fieldFocus[i] = objvar.fieldFocus[i];
			 	    k++;
				}
				
			}else if(objvar.fieldCF[i]){
				var frmCElm = eval("frmObj." + objvar.fieldCF[i]);
				if(frmElm.value != frmCElm.value){					
					// inlineMsg(objvar.fieldI[i],objvar.fieldCM[i],3,objvar.fieldFocus[i],objvar.setFocus[i]);
    				// return false;
    				errobjvar.fieldN[k] = objvar.fieldN[i];
			 		errobjvar.fieldV[k] = objvar.fieldV[i];
			 	    errobjvar.fieldT[k] = objvar.fieldT[i];
			 	    errobjvar.fieldI[k] = objvar.fieldI[i];
			 	    errobjvar.fieldFocus[i] = objvar.fieldFocus[i];
			 	    k++;
				}
			}else if(objvar.fieldCV[i]){
				if(frmElm.value != objvar.fieldCV[i]){					
					// inlineMsg(objvar.fieldI[i],objvar.fieldCM[i],3,objvar.fieldFocus[i],objvar.setFocus[i]);
    				// return false;
    				errobjvar.fieldN[k] = objvar.fieldN[i];
			 		errobjvar.fieldV[k] = objvar.fieldV[i];
			 	    errobjvar.fieldT[k] = objvar.fieldT[i];
			 	    errobjvar.fieldI[k] = objvar.fieldI[i];
			 	    errobjvar.fieldFocus[i] = objvar.fieldFocus[i];
			 	    k++;
				}
			}else if(objvar.fieldCVE[i]){
				if (frmElm.value == objvar.fieldCVE[i]){	
					var dis_msg = (objvar.fieldCM[i]) ? objvar.fieldCM[i] : objvar.fieldV[i];
					// inlineMsg(objvar.fieldI[i],dis_msg,3,objvar.fieldFocus[i],objvar.setFocus[i]);
					// return false;
					errobjvar.fieldN[k] = objvar.fieldN[i];
			 		errobjvar.fieldV[k] = objvar.fieldV[i];
			 	    errobjvar.fieldT[k] = objvar.fieldT[i];
			 	    errobjvar.fieldI[k] = objvar.fieldI[i];
			 	    errobjvar.fieldFocus[i] = objvar.fieldFocus[i];
			 	    k++;
				}
			}else if (objvar.fieldValidateMsg[i] == 1){
				alert('here');
				var dis_msg = (objvar.fieldValidateMsg[i]) ? objvar.fieldValidateMsg[i] : objvar.fieldV[i];
				// inlineMsg(objvar.fieldI[i],dis_msg,3,objvar.fieldFocus[i],objvar.setFocus[i]);
				// return false;
				errobjvar.fieldN[k] = objvar.fieldN[i];
		 		errobjvar.fieldV[k] = objvar.fieldV[i];
		 	    errobjvar.fieldT[k] = objvar.fieldT[i];
		 	    errobjvar.fieldI[k] = objvar.fieldI[i];
		 	    errobjvar.fieldFocus[i] = objvar.fieldFocus[i];
		 	    k++;
			}
		}		
		if(objvar.fieldT[i] == "radio"){
			var frmElm = eval("frmObj." + objvar.fieldN[i]);
			var checkedI = false;
			var tol_options = frmElm.length;			
			for(var j=0; j< frmElm.length; j++) {
				if(frmElm[j].checked == true) {
					checkedI = true;
				}
			}			
			if(checkedI === false) {
				// inlineMsg(objvar.fieldI[i],objvar.fieldV[i],3,objvar.fieldFocus[i],objvar.setFocus[i]);
				// return false;
				errobjvar.fieldN[k] = objvar.fieldN[i];
		 		errobjvar.fieldV[k] = objvar.fieldV[i];
		 	    errobjvar.fieldT[k] = objvar.fieldT[i];
		 	    errobjvar.fieldI[k] = objvar.fieldI[i];
		 	    errobjvar.fieldFocus[i] = objvar.fieldFocus[i];
		 	    k++;
			}
		}
		
		if(objvar.fieldT[i] == "checkbox"){
			var frmElm = eval("frmObj." + objvar.fieldN[i]);
			if(frmElm.checked == false) {
				// inlineMsg(objvar.fieldI[i],objvar.fieldV[i],3,objvar.fieldFocus[i],objvar.setFocus[i]);
				// return false;
				errobjvar.fieldN[k] = objvar.fieldN[i];
		 		errobjvar.fieldV[k] = objvar.fieldV[i];
		 	    errobjvar.fieldT[k] = objvar.fieldT[i];
		 	    errobjvar.fieldI[k] = objvar.fieldI[i];
		 	    errobjvar.fieldFocus[i] = objvar.fieldFocus[i];
		 	    k++;
			}
		}
		
		if(objvar.fieldT[i] == "validate"){
			var frmElm = eval("frmObj." + objvar.fieldN[i]);
			// inlineMsg(objvar.fieldI[i],objvar.fieldV[i],3,objvar.fieldFocus[i],objvar.setFocus[i]);
			// return false;
			errobjvar.fieldN[k] = objvar.fieldN[i];
	 		errobjvar.fieldV[k] = objvar.fieldV[i];
	 	    errobjvar.fieldT[k] = objvar.fieldT[i];
	 	    errobjvar.fieldI[k] = objvar.fieldI[i];
	 	    errobjvar.fieldFocus[i] = objvar.fieldFocus[i];
	 	    k++;
		}
		
	}
	var rt = printAllAndReturn(errobjvar);	
	return rt;
}

function printAllAndReturn(errobj){	
	
	if(errobj.fieldN.length<=0){
		return true;		
	}	
	for(var k=0;k<14;k++){
		if(document.getElementById('msg_'+k)!= null){			
			document.body.removeChild(document.getElementById('msg_'+k));			
		}
	}
	for(var i=0; i<errobj.fieldN.length; i++){			
		inlineErrMsg(i,errobj.fieldI[i],errobj.fieldV[i],3,errobj.fieldFocus[i]);	
		// inlineMsg(errobj.fieldI[i],errobj.fieldV[i],3,errobj.fieldFocus[i],errobj.setFocus[i]);
	}
	return false;
}

function demo(){
	var objVar = new getObjVars2();
	objVar.fieldN[0] = "demofieldName1";
	objVar.fieldV[0] = "demofield1 error message to be displayed";
	objVar.fieldT[0] = "text";
	objVar.fieldI[0] = "demofieldId1";
	
	objVar.fieldN[1] = "demofieldName2";
	objVar.fieldV[1] = "demofield2 error message to be displayed";
	objVar.fieldT[1] = "text";
	objVar.fieldI[1] = "demofieldId2";
	return validateForm('formName',objVar);	
}
function checkEmail(fieldValue){
	var chkAt = fieldValue.indexOf("@");
	var chkDot= fieldValue.indexOf(".");
	var chkHack= fieldValue.indexOf("@.");
	var chkHackA= fieldValue.indexOf(".@");

	if((chkAt >= 0) && (chkDot >= 0) && (chkHack == -1) && (chkHackA == -1) ) {
		return true;
	}
	return false;
}
