//Standard Rules
var objUsername 		= ".0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz";
var objNumber   		= ".0123456789";
var objWholeNumber   = "0123456789";
var objTelephone     = "-()0123456789";
var objName     		= " .0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz'-";
var objAlpha 			="ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz";
var objSpecialChar 		= "@&$#()=/!*ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz0123456789,'- :.+%/";
var objZipCode		= "0123456789";
var objEmail    		= ".@0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz";
var messageLocation = "right";
var messageWaitSeconds = 3;

var textarea_alts = new Array();
function addTextareaAlt(targetElement, elementAlt) {
    textarea_alts[textarea_alts.length] = new Array(targetElement.id, elementAlt);
}

function setTextareaAlt() {
    for(i = 0; i < textarea_alts.length; i++) {
        document.getElementById(textarea_alts[i][0]).alt = textarea_alts[i][1];
    }
}
//addToCallStack(window, "onload", setTextareaAlt, true);

function setOnloadFocus() {
    focusElements = getElementsByTagAndClassName("*", "onloadFocus");
    if(focusElements.length > 0) {
        focusElements[0].focus();
    }
}
//addToCallStack(window, "onload", setOnloadFocus, true);

function isRule(oComp, sRule, nLength, fdecimal, minLength,fieldName,maxLength)
{
	//alert("Herere");
	if(fdecimal == "" || typeof(fdecimal) == "undefined")
	{
		fdecimal = false;
	}

	//If the object is not specified return false
	if (typeof(oComp) == 'undefined' || oComp == null || oComp == '')
	{
		alert('Error: Input object not specified.');
		return false;
	}
	//If neither rule nor max length is specified, return false
	else if (typeof(sRule) == 'undefined' && typeof(nLength) == 'undefined')
	{
		alert('Error: No rule/maximum length for input object specified.');
		return false;
	}

	var noErrorFlg = true;

	//If object is specified and either of rule is specified,
	if(typeof(sRule) != 'undefined' && sRule != null)
	{
		var temp;
		sRule = sRule + "";
		var discardChars = false;
		if(sRule.length > 0 && sRule.charAt(0) == "~")
		{
			sRule = sRule.substring(1);
			discardChars = true;
		}

		if(typeof(oComp) == "undefined" || typeof(sRule) == "undefined")
			return false;

		for (var i = 0;i < oComp.value.length;i++)
		{
			temp = oComp.value.charAt(i);

			if((!discardChars && sRule.indexOf(temp) == -1) || (discardChars && sRule.indexOf(temp) >= 0))
			{
//				alert("Field disobeys entry rule.  Following are the valid characters:\n" + sRule);
				alert("Invalid Character!");
				oComp.value = oComp.value.substring(0,i);// + (oComp.value.length > i ? oComp.value.substring(i+1):"");
				noErrorFlg = false;
				break;
			}
		}
	}
	if(nLength)
	{
		if(fdecimal)
		{
			nLength -= fdecimal;
			var dp = oComp.value.indexOf(".");
			var p1;
			var p2 = "";;
			if(dp >= 0)
			{
				p1 = oComp.value.substring(0,dp);
				p2 = oComp.value.substring(dp+1);
			}
			else
			{
				p1 = oComp.value;
			}
			if(p1.length > nLength)
			{
				oComp.value = oComp.value.substring(0,nLength);
				return noErrorFlg;
			}
			for(var i = 0;i < p2.length;i++)
			{
				var ch = p2.charAt(i);
				if(ch < '0' || ch > '9')
				{
					oComp.value = p1 + "." + p2.substring(0,i);
					return noErrorFlg;
				}
			}
			if(p2.length > fdecimal)
			{
				oComp.value = p1 + "." + p2.substring(0,fdecimal);
			}
		}
		else if(oComp.value.length > nLength)
		{
			oComp.value = oComp.value.substring(0,nLength);
		}
		else if(minLength && oComp.value.length < minLength)
		{
			alert("Please Enter atleast "+minLength +" Characters "+ "for "+fieldName+ "!");
			oComp.focus();
			noErrorFlg = false;
		}
		else if(maxLength && oComp.value.length > maxLength)
		{
			alert("Please Enter less then "+maxLength +" Characters "+ "for "+fieldName+ "!");
			oComp.focus();
			noErrorFlg = false;
		}
	}
	return noErrorFlg;
}
//+--------------------------------------------------------------------------

function isEmail(newstr)
{
	var emailexp = /^[a-z][a-z_0-9\-\.]+@[a-z_0-9\-\.]+\.[a-z]{2,5}$/i

	//Check that the email entry is valid
	if (!emailexp.test(newstr) || newstr.indexOf("..") >= 0)
	{
		return false;
	}
	return true;
}

String.prototype.trim = function()
{
	var retstr = this.replace(/^\s+/,"");
	retstr = retstr.replace(/\s+$/,"");
	return retstr;
}
function clearValue(elementobj)
{
	if(elementobj && elementobj.value!="")
		elementobj.value="";
}
function trimText(strComp)
{
	ltrim = /^\s+/
	rtrim = /\s+$/
	strComp = strComp.replace(ltrim,'');
	strComp = strComp.replace(rtrim,'');
	return strComp;
}

function getIndex(input) {
	var index = -1, i = 0, found = false;
	while (i < input.form.length && index == -1) {
		if (input.form[i] == input) {
			index = i;
			i=input.form.length;
		} else {
			i++;
		}
	}
	return index;
}

var nav = window.Event ? true : false;
if (nav) {
   window.captureEvents(Event.KEYDOWN);
   window.onkeydown = NetscapeEventHandler_KeyDown;
} else {
   document.onkeydown = MicrosoftEventHandler_KeyDown;
}

function arrayContains(needle, haystack) {
    if(haystack instanceof Array) {
        for(i = 0; i < haystack.length; i++) {
            if(haystack[i] == needle) {
                i = haystack.length;
                return true;
            }
        }
    }
    return false;
}

function hasValidValue(targetElement) {
    if((targetElement.className).split(" ").contains("required_field")) {
        if(targetElement.value == "") {
            return false;
        } else {
        	return true
        }
    } else {
        return true;
    }
}

function advanceFocus(targetElement) {
	if(targetElement) {
		if(targetElement.form) {
            for(i = 1; i < targetElement.form.length; i++) {
                if(targetElement.form[(getIndex(targetElement)+i) % targetElement.form.length].type != "hidden") {
                    targetElement.form[(getIndex(targetElement)+i) % targetElement.form.length].focus();
                    i = targetElement.form.length;
                    return true;
                }
            }
            targetElement.form[0].focus();
		}
	}
}

var enterAllowedList = new Array("textarea", "submit", "password");
var tabAllowedList = new Array("submit", "password");

function cs_ClearMessage() {
    if(document.getElementById("cs_divMessage")) {
        divMessage = document.getElementById("cs_divMessage");
        divMessage.style.display = "none";
    }
}

function findPosX(obj)
  {
    var curleft = 0;
    if(obj.offsetParent)
        while(1) 
        {
          curleft += obj.offsetLeft;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.x)
        curleft += obj.x;
    return curleft;
  }

  function findPosY(obj)
  {
    var curtop = 0;
    if(obj.offsetParent)
        while(1)
        {
          curtop += obj.offsetTop;
          if(!obj.offsetParent)
            break;
          obj = obj.offsetParent;
        }
    else if(obj.y)
        curtop += obj.y;
    return curtop;
  }
function cs_DisplayMessage(objPositionalElement, txtMessage, txtLocation) {
    if (typeof(txtLocation) == 'undefined' || txtLocation == null) {
        txtLocation = 'below';
    }
    if(document.getElementById("cs_divMessage")) {
        divMessage = document.getElementById("cs_divMessage");
        divMessage.style.display = "none";
        divMessage.innterHTML = "";
        nodeMessage = document.createTextNode(txtMessage);
        divMessage.replaceChild(nodeMessage, divMessage.firstChild);
    }
    else {
        divMessage = document.createElement("div");
        divMessage.id = "cs_divMessage";
        divMessage.className = "divMessage";
        nodeMessage = document.createTextNode(txtMessage);
        divMessage.appendChild(nodeMessage);
        divMessage.style.display = "none";
        objPositionalElement.parentNode.appendChild(divMessage);
   }

//    targetPosition = RicoUtil.toDocumentPosition(objPositionalElement);
    var targetPosition = new Array();
    targetPosition.x = parseInt(findPosX(objPositionalElement));
    targetPosition.y = parseInt(findPosY(objPositionalElement));
    if(txtLocation.split(" ").contains("left")) {
        targetPosition.x -= parseInt(divMessage.style.width);
    }

    if(txtLocation.split(" ").contains("right")) {
        targetPosition.x += parseInt(objPositionalElement.style.width);
    }

    if(txtLocation.split(" ").contains("above")) {
        targetPosition.y -= parseInt(divMessage.style.height);
    }

    if(txtLocation.split(" ").contains("below")) {
        targetPosition.y += parseInt(objPositionalElement.style.height);
    }

    divMessage.style.left = targetPosition.x+"px";
    divMessage.style.top = targetPosition.y+"px";
    divMessage.style.display = "block";

    if(divMessage.timeout) {
        clearTimeout(divMessage.timeout);
    }
    divMessage.timeout = setTimeout("cs_ClearMessage()", (messageWaitSeconds*1000));
}

function cs_EventHandler_KeyDown(keyPressed, targetElement) {
    cs_ClearMessage();
    if(keyPressed == 9 && !arrayContains(targetElement.type, tabAllowedList)) {
        if(hasValidValue(targetElement)) {
            return true;
        } else {
            if(targetElement.alt) {
                cs_DisplayMessage(targetElement, targetElement.alt, messageLocation);
            } else {
                cs_DisplayMessage(targetElement, "Please supply a valid entry.", messageLocation);
            }
            return false;
        }
    } else if(keyPressed == 13 && !arrayContains(targetElement.type, enterAllowedList)) {
        if(hasValidValue(targetElement)) {
            advanceFocus(targetElement);
        } else {
            if(targetElement.alt) {
                cs_DisplayMessage(targetElement, targetElement.alt, messageLocation);
            } else {
                cs_DisplayMessage(targetElement, "Please supply a valid entry.", messageLocation);
            }
        }
        return false;
    } else {
        return true;
    }



    if (((keyPressed == 9 && !arrayContains(targetElement.type, tabAllowedList)) || (keyPressed == 13 && !arrayContains(targetElement.type, enterAllowedList))) && targetElement.form) {
        if(hasValidValue(targetElement)) {
            if(keyPressed == 13) {
                advanceFocus(targetElement);
            } else {
                return true;
            }
        } else {
            return false;
        }
    } else {
        return true;
    }
}

function NetscapeEventHandler_KeyDown(e) {
    return cs_EventHandler_KeyDown(e.which, e.target);
}

function MicrosoftEventHandler_KeyDown() {
    return cs_EventHandler_KeyDown(event.keyCode, event.srcElement);
}

function validate_form(event)
{
	var e=event || window.event;
    theForm = this;
    requiredElements = getElementsByTagAndClassName("*", "required_field");
    for(i = 0; i < requiredElements.length; i++) {
        if(requiredElements[i].value == "") {
            requiredElements[i].focus();
            var theMessage = "Please supply a valid entry.";
            if(requiredElements[i].alt) {
                theMessage = requiredElements[i].alt;
            }
            cs_DisplayMessage(requiredElements[i], theMessage, messageLocation);
            return false;
        }
    }
    return true;
}

function setonSubmit() {
    aElements = getElementsByTagAndClassName("form", "validate_form");
    for(i = 0; i < aElements.length; i++) {
        addToCallStack(aElements[i], "onsubmit", validate_form, true);
    }
}
//addToCallStack(window, "onload", setonSubmit, true);

