/*################################################################*\
       JotForm Forms Framework V1.2.0 | Interlogy LLC.
\*################################################################*/
/////// Defining the source domain of images.
/////// don't change these variables
/////////////////////////////////////////////

var url = typeof(jot_config) != "undefined"? jot_config.KIT_LIVE_URL : location.protocol+"//"+location.host+"/memberkit/";
if ( typeof(jcm_server) != "undefined" ){
    url = jcm_server;
}
var editors = {};
var disabledButtons = [];
var errorwarning = false;
/**
 * Prototypes dollar function
 */

function $jt(){
  var elements = [];
  for (var i = 0; i < arguments.length; i++) { 
    var element = arguments[i];
    if (typeof element == 'string'){
	  element = document.getElementById(element);
    }
    if (arguments.length == 1){        
      return element;
    }
    elements.push(element);
  }
  return elements;
}

function enable_buttons(){
    for(var i in disabledButtons){
        if(disabledButtons[i].el){
            if(disabledButtons[i].el.disabled){
                disabledButtons[i].el.disabled = false;
                disabledButtons[i].el.value = disabledButtons[i].text;
            }
        }
    }
}

function disable_button(button){
    setTimeout(function(){
        button.disabled = true;
        disabledButtons.push({el: button, text:button.value});
        button.value = "Please Wait...";
        button.blur();
    }, 100);
}


var events = {
    add: function(obj, evt, fn){
        if (obj.addEventListener) {
            obj.addEventListener(evt, fn, false);
        }
        else 
            if (obj.attachEvent) {
                obj.attachEvent('on' + evt, fn);
            }
    },
    remove: function(obj, evt, fn){
        if (obj.removeEventListener) {
            obj.removeEventListener(evt, fn, false);
        }
        else 
            if (obj.detachEvent) {
                obj.detachEvent('on' + evt, fn);
            }
    }
};
///////// Birthdate picker 
///////////////////////////////////
function getdate(elem){
	id = elem.id.split("_");
	day = $jt("day_"+id[1]).options[$jt("day_"+id[1]).selectedIndex].value;
	month = $jt("month_"+id[1]).options[$jt("month_"+id[1]).selectedIndex].value;
	year = $jt("year_"+id[1]).options[$jt("year_"+id[1]).selectedIndex].value;
	$jt("date_"+id[1]).value = year+"-"+month+"-"+day;
}
///////// AutoComplete functions
///////////////////////////////////
function Complete(obj, evt) {
    var ini = "";
  if ((!obj) || (!evt) || (auto.length === 0)){ return; }
  if (obj.value.length === 0){ return; }
  var elm = (obj.setSelectionRange) ? evt.which : evt.keyCode;
  if ((elm < 32) || (elm >= 33 && elm <= 46) || (elm >= 112 && elm <= 123)) { return; }
  var txt = obj.value.replace(/;/gi, ",");
  elm = txt.split(",");
  txt = elm.pop();
  txt = txt.replace(/^\s*/, "");

  if (txt.length === 0){return;}
  if (obj.createTextRange) {
   	var rng = document.selection.createRange();
  		if (rng.parentElement() == obj) {
   			elm = rng.text;
  	 		ini = obj.value.lastIndexOf(elm);
  		}
  } else if (obj.setSelectionRange) {
  		ini = obj.selectionStart;
  }
  for (var i = 0; i < auto.length; i++) {
       	elm = auto[i].toString();
    	if (elm.toLowerCase().indexOf(txt.toLowerCase()) === 0) {
    		obj.value += elm.substring(txt.length, elm.length);
    		break;
    	}
  }
  if (obj.createTextRange) {
  		rng = obj.createTextRange();
  		rng.moveStart("character", ini);
  		rng.moveEnd("character", obj.value.length);
  		rng.select();
  } else if (obj.setSelectionRange) {
  		obj.setSelectionRange(ini, obj.value.length);
  }
}
///////// check time
//////////////////////////////////////////
function handleTime(e, element, type, isTwelve, id){
	// numbers
	if (/^\d+$/.test(element.value)){
		if (type=="min"){
			var minValue = parseInt(element.value,10)
			if (minValue>60){
				element.value="";
			}else if(element.value.length >= 2){
//                $jt("tc_"+id).focus();
            }
		}
		else if (type=="hour"){
			var hourValue = parseInt(element.value,10);
			if (isTwelve){
				if (hourValue>12){
					element.value="";
				}else if(element.value.length >= 2){
//                    $jt("min_"+id).focus();
                }
			}else{
				if (hourValue>24){
					element.value="";
				}else if(element.value.length >= 2){
 //                   $jt("min_"+id).focus();
                }
			}
		}
	}
	else{
		element.value="";
	}
	calculateTime(id,isTwelve);
}
function calculateTime(id,calculate){
	hourId = 'hour_'+id;
	minId = 'min_'+id;
	if ($jt(hourId).value=="" || $jt(minId).value==""){
		$jt(id).value="";
		return;
	}
	var hour = parseInt($jt(hourId).value,10);
	var min = parseInt($jt(minId).value,10);
	if (calculate){
		tcId = "tc_"+id;
		var tc = $jt(tcId).value;
		if (tc == "am" && hour == 12){
			hour = hour + 1;
		}
		if (tc == "pm" && hour==0){
			hour = 12;
		}
		if (tc == "pm" && hour<12){
			hour = hour + 12;
		}
	}
	hour = hour.toString();
	min = min.toString();
	
	if (hour.length == 1){
		hour = "0" + hour;
	}
	if (min.length == 1){
		min = "0" + min;
	}
	
	$jt(id).value= hour +":"+ min;
}
function setTime(id, time, isTwelve){
	
	if (!time){
		var time= "00:00";
	}
	else{
		var time = time.split(":");
	}

	var tc;
	var minId = "min_"+id;
	var hourId = "hour_"+id;
	var tcId = "tc_"+id;
	if (isTwelve){
        if (time[0]>12){
            tc = "pm";
            time[0] = time[0] - 12;
        }
        else if (time[0] == 12){
            tc = "pm";
        }
        else if (time[0] > 0){
            tc = "am";
        }
        else if (time[0] == 0){
            tc = "am";
            time[0] = 12;
        }
	}
	$jt(hourId).value = PadDigits(time[0],2);
	$jt(minId).value = PadDigits(time[1],2);
	if (isTwelve){
		select_value(tcId, tc)	
	}
}
function PadDigits(n, totalDigits) 
{ 
    n = n.toString(); 
    var pd = ''; 
    if (totalDigits > n.length) 
    { 
        for (i=0; i < (totalDigits-n.length); i++) 
        { 
            pd += '0'; 
        } 
    } 
    return pd + n.toString(); 
} 
///////// sum function for payment objects
//////////////////////////////////////////
function sum(radio,t){
    if(!$jt('res')){
        return true;
    }
	var val = new Array();
	if(radio.type!='radio'){
		tot1=parseFloat($jt('hid').value);
		if(t){
			tot2=parseFloat(price[radio.value])+parseFloat(setup[radio.value]);
		}else
			tot2=parseFloat(price[radio.value]);
		if(radio.checked)
			tot1=tot1+tot2;
		else 
			tot1=tot1-tot2;
		tot1 = tot1.toFixed(2);
		$jt('hid').value=tot1;
		$jt('res').innerHTML = tot1;
	}else{
		val = price[radio.value].split(':');
		rval = parseFloat(val[0]);
		rval = rval.toFixed(2);
		$jt('res').innerHTML = rval;
	}
}
/////////Prototypes Clipp functions
///////////////////////////////////
function makeClipping(element){ 
	if (element._overflow) {
        return element;
    }
    element._overflow = element.style.overflow || 'auto';
    if ((element.style.overflow || 'visible') != 'hidden'){
      element.style.overflow = 'hidden';
    }
    return element;
}
/////////Prototypes Clipp functions
///////////////////////////////////
function undoClipping(element){
	if (!element._overflow){ return element;}
	element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
    element._overflow = null;
    return element;
}
/////////Prototypes Dimention functions
///////////////////////////////////////
function getDimentions(e){
	element = e;
	var display = element.style.display;
    if (display != 'none' && display !== null){
      return {width: element.offsetWidth, height: element.offsetHeight};
    } // Safari bug
	var els = element.style;
    var originalVisibility = els.visibility;
    var originalPosition = els.position;
    var originalDisplay = els.display;
    els.visibility = 'hidden';
    els.position = 'absolute';
    els.display = 'block';
    var originalWidth = element.clientWidth;
    var originalHeight = element.clientHeight;
    els.display = originalDisplay;
    els.position = originalPosition;
    els.visibility = originalVisibility;
    return {width: originalWidth, height: originalHeight};
}
//////// Effect for sliding down and show
/////////////////////////////////////////
var orgH = {};
function blindDown(elem, id, dur){
	if(!dur){
		dur = 0;
		orgH[elem.id] = getDimentions(elem).height;
		makeClipping(elem);
		elem.style.display = "block";
	}
	elem.style.height = (dur+=25)+"px";
	if(dur <= orgH[elem.id]){        
		setTimeout(function(){ blindDown(elem, id, dur); },50);
    }else{
		undoClipping(elem);
		elem.style.height = orgH[elem.id]+"px";
		elem.style.padding = "2px";
		window.location = "#td_"+id;
	}
}
//////// Effect for sliding up and hide
/////////////////////////////////////////
function blindUp(elem, id, dur){
	if(!dur){
		makeClipping(elem);
		dur = getDimentions(elem).height;
		orgH[elem.id] = dur;
	}
	dur -= 25;
	if(dur > 0){
		elem.style.height = dur+"px";
		setTimeout(function(){ blindUp(elem, id, dur); },50);
	}else{
		undoClipping(elem);
		elem.style.display = "none";
		elem.style.height = orgH[elem.id]+"px";
		elem.style.padding = "2px";
		window.location = "#td_"+id;
	}
}
//////// Form collapse functions
////////////////////////////////
var tool = "";
function closeDiv(id){
	var id2 = 'div_'+id;
	var currdiv= $jt(id2);
	var the_divs=document.getElementsByTagName('div');
	var re = RegExp(/^div_/i);
	for(n=0;n<the_divs.length;n++){
		if(the_divs[n].id.match(re)){
			if (the_divs[n].id==id2 && the_divs[n].style.display == 'none'){
				blindDown(the_divs[n], id);
			}else if(the_divs[n].style.display == 'block'){
				blindUp(the_divs[n], id);
			}
        }
    }
	var the_tds=document.getElementsByTagName('td');
	var id3 = 'td_'+id;
	var tdElem = $jt(id3);
	re = RegExp(/^td_/i);
	var show = 'url('+jot_config.KIT_URL+'jotengine/images/splitter_right_show.gif)';
	var hide = 'url('+jot_config.KIT_URL+'jotengine/images/splitter_right_hide.gif)';
	if(tdElem.style.backgroundImage == show){
		tdElem.style.backgroundImage = hide;
	}else{
		for(n=0; n < the_tds.length; n++){
			if(the_tds[n].id.match(re)){
				if (the_tds[n].style.backgroundImage == show){
					the_tds[n].style.backgroundImage = hide;
					}
				}
			}
		tdElem.style.backgroundImage = show;
	}
}
//////// Functions for star rating
//////////////////////////////////
function rate(elem, val, hid){
    if(window.rateCallback){
        rateCallback(hid, val, elem);
    }
	$jt(hid).value = val;
}
function resetRate(elem, hid){
	var val = $jt(hid).value;
    elem = $jt(elem);
    
	if(window.rateCallback){
        rateCallback(hid, val, elem);
    }
    
    if(val === ""){
		elem.style.backgroundImage="url("+jot_config.KIT_URL+"jotengine/images/star0.gif)";
    }else{
		elem.style.backgroundImage="url("+jot_config.KIT_URL+"jotengine/images/star"+val+".gif)";
    }
}
function changeColor(val,tab){
	$jt(tab).style.backgroundImage="url("+jot_config.KIT_URL+"jotengine/images/star"+val+".gif)";
}

//////// Tooltip code
///////////////////////
var offsetfromcursorX=22;
var offsetfromcursorY=10;
var offsetdivfrompointerX=10;
var offsetdivfrompointerY=14;
var table  = '<div id="tooltip" style="display:none; position:absolute;z-index: 100;opacity: .9;filter: alpha(opacity=90);">';
    table += '<table border="0" cellpadding="0" cellspacing="0">';
    table += '  <tr><td width="1" height="8" background="'+jot_config.KIT_URL+'jotengine/images/tooltip_top.gif"></td>';
    table += '    <td align="left" background="'+jot_config.KIT_URL+'jotengine/images/tooltip_top.gif"><img src="'+jot_config.KIT_URL+'jotengine/images/tooltip_arrow.gif" width="20" height="8" /></td>';
    table += '    <td width="1" background="'+jot_config.KIT_URL+'jotengine/images/tooltip_top.gif"></td>';
    table += '  </tr><tr>';
    table += '  <td bgcolor="#b1bfcc"></td>';
    table += '    <td bgcolor="#edf4fa"><div style="padding:10px; font-family:\'Trebuchet MS\'; font-size:12px; color:black" id="tooltipinner"></div></td>';
    table += '    <td bgcolor="#b1bfcc"></td>';
    table += '  </tr><tr>';
    table += '    <td height="1" bgcolor="#b1bfcc"></td>';
    table += '    <td bgcolor="#b1bfcc"></td>';
    table += '    <td bgcolor="#b1bfcc"></td>';
    table += '  </tr>';
    table += '</table>';
    table += '</div>';
    
document.write(table);
var ie=document.all;
var ns6=document.getElementById && !document.all;
var enabletip=false;
if (ie||ns6){
    var tipobj     = document.all? document.all.tooltipinner : document.getElementById? $jt("tooltipinner") : "";
}
var pointerobj = document.all? document.all.tooltip      : document.getElementById? $jt("tooltip") : "";
function ietruebody(){
	return (document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body;
}
function ddrivetip(thetext, thewidth, thecolor){
	if(thetext !== ""){
		if (ns6||ie){
		 	if (typeof thewidth != "undefined") { tipobj.style.width = thewidth + "px"; }
			if (typeof thecolor!="undefined" && thecolor!==""){
              tipobj.style.backgroundColor=thecolor;  
            } 
			tipobj.innerHTML=thetext;
			enabletip=true;
			return false;
		}		
	}
}
function positiontip(e){
	if (enabletip){
		var nondefaultpos=false;
		var curX=(ns6)?e.pageX : event.clientX+ietruebody().scrollLeft;
		var curY=(ns6)?e.pageY : event.clientY+ietruebody().scrollTop;
		var winwidth=ie&&!window.opera? ietruebody().clientWidth : window.innerWidth-20;
		var winheight=ie&&!window.opera? ietruebody().clientHeight : window.innerHeight-20;
		var rightedge=ie&&!window.opera? winwidth-event.clientX-offsetfromcursorX : winwidth-e.clientX-offsetfromcursorX;
		var bottomedge=ie&&!window.opera? winheight-event.clientY-offsetfromcursorY : winheight-e.clientY-offsetfromcursorY;
		var leftedge=(offsetfromcursorX<0)? offsetfromcursorX*(-1) : -1000;
		if (rightedge<tipobj.offsetWidth){
			tipobj.style.left=curX-tipobj.offsetWidth+"px";
		nondefaultpos=true;
	}
	else if (curX<leftedge){
		tipobj.style.left="5px";
        
    }
	else{
		tipobj.style.left=(curX+offsetfromcursorX-offsetdivfrompointerX-25)+"px"; //position the horizontal position of the menu where the mouse is positioned
		pointerobj.style.left=(curX+offsetfromcursorX-25)+"px";
	}
	if (bottomedge<tipobj.offsetHeight){
		tipobj.style.top=(curY-tipobj.offsetHeight-offsetfromcursorY+15)+"px";
		nondefaultpos=true;
	}
	else{
		tipobj.style.top=curY+offsetfromcursorY+offsetdivfrompointerY+"px";
		pointerobj.style.top=curY+offsetfromcursorY+"px";
	}
	//tipobj.style.visibility="visible"
	tipobj.style.display = "block";
	pointerobj.style.display = "block";
	}
}
function hideddrivetip(){
	if (ns6||ie){
		enabletip=false;
		//tipobj.style.visibility="hidden"
		tipobj.style.display = "none";
		pointerobj.style.display = "none";
		tipobj.style.left="-1000px";
		tipobj.style.backgroundColor='';
		tipobj.style.width='';
	}
}
document.onmousemove=positiontip;

function request (query) {
	var httpRequest = (!window.XMLHttpRequest)? new ActiveXObject("Microsoft.XMLHTTP") : new XMLHttpRequest();
    
    try{
        httpRequest.open('POST', url+'server.php', false)
    }catch(e){
        var tloc = location.href.split("/");
        tloc.pop();
        tloc.pop();
        url = tloc.join("/");
        httpRequest.open('POST', url+'/server.php', false)
    }
    
    httpRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    httpRequest.send(query);
    if (httpRequest.status == 200){
      return httpRequest.responseText;
	}else{
      return httpRequest.status + " " + httpRequest.statusText;
	}
}
function select_value(qid, val){
    if (!val) {return}
    var options = $jt(qid).options;
    var found = false;
    for (var x =0; x<options.length; x++){
        var opt = x;
        var value = options[opt].value? options[opt].value : options[opt].text;
        if(value == val){
            options[opt].selected = true;
            found = true;
        }
    }
    if(!found){
        var opt = new Option();
        opt.innerHTML = val;
        $jt(qid).appendChild(opt);
        select_value(qid, val);
    }
}

function checkCoupon(coupons){
	var accepted = false;
    $jt("checkButton").value = "Checking...";
	var ccode =  request('action=getMD5&value='+$jt("ccode").value); //$jt("ccode").value;
    
	var ca = coupons;
	
    for( var c=0; c<ca.length; c++ ){
		if (ca[c].toLowerCase() == ccode.toLowerCase()){
			accepted = true;
			break;
		}
	}
    $jt("checkButton").value = "Check";
	if(accepted){
		$jt("couponStatus").innerHTML = "Coupon Accepted: <b>"+$jt("ccode").value+ "</b> <img align='absmiddle' src='"+jot_config.KIT_URL+"images/tick.png'>";
        
		var dp = getElementsByClass('regular_price');
        
		for(var i=0; i<dp.length; i++){
			dp[i].style.textDecoration = 'line-through';
		}
        
		var dp = getElementsByClass('discount_price'); 
        
		for(var i=0; i<dp.length; i++){
			dp[i].style.display = 'inline';
		}
        
		$jt('checkButton').style.display = 'none';
        $jt('ccode').style.display = 'none';
        
		price = discount;
		$jt('hid').value = 0;
        if($jt('res')){
    		$jt('res').innerHTML = 0;
        }
		var o = getElementsByClass('other');
		for(var i=0; i<o.length; i++){
			if( o[i].type == 'radio' || o[i].type == 'checkbox' ){
				if( o[i].value>0 ){
					o[i].checked = false;
				}

			}
		}

	}else{
		$jt("couponStatus").innerHTML = "<img align='absmiddle' src='"+jot_config.KIT_URL+"images/cross.png'>";
        $jt('ccode').value='';
        $jt('ccode').focus();
	}
}

function checkCouponEnter(e){
    var evt = (e) ? e : window.event;
    if (evt.keyCode == 13) {
        checkCoupon(coupons);
    }
    // Disable submit for half second
    stopSubmit = true;
    setTimeout(function(){
        stopSubmit = false;
    }, 500);
    return false;
}

function select_birthdate(id, val){
    if (!val) {return}
    val = val.split(" ")[0];
    select_value("month_"+id, val.split("-")[1]);
    select_value("day_"+id, val.split("-")[2]);
    select_value("year_"+id, val.split("-")[0]);
}

//////// Validation library V2
//////////////////////////////
var errored = false;            // Global for validate function
var exClassName = {};           // Global for Changed classnames
var styleAdded = false;         // Global for checking sytle status
var formID = false;
var stopSubmit = false;         // Global to stop the submit proces
// page break object
var pageBreak = new pageBreak();


function isVisible(element){
    element = $jt(element);
    if(element.style.display == "none" || element.style.visibility == "hidden"){
        return false;
    }
    
    if(!element.parentNode){
        return false;
    }
    
    if(element.tagName == "BODY"){
        return true;
    }
    
    return isVisible(element.parentNode);
}



function validate(elem,type,option){	// Main function

	if (typeof(pageBreak.formName) == 'undefined'){
		pageBreak.formName = elem;
		pageBreak.setInitialStatus();
	}

	option = (option)? option : "";
	if(!styleAdded){			// Add style for Error warnings
		var style = document.createElement('style');
		var sprop  = '.error{ border:2px red solid; background:#FCFCFC; }';
		    sprop += '.Errortext{ color:#FF0000;font-family:"Trebuchet MS"; font-size:11px; }';
            sprop += '.DivErrortext{ border:1px solid #ccc;margin:4px; padding:5px; background:lightyellow; color:#FF0000;font-family:"Trebuchet MS"; font-size:11px; }';
            sprop += '.parentBox{ color:#333; font-family:"Trebuchet MS"; font-size:11px; background:#FFFFE0 }';
                    
		style.setAttribute("type", "text/css");
		if (style.styleSheet){   // for IE
			style.styleSheet.cssText = sprop;
		} else {
			var newStyle = document.createTextNode(sprop);
			style.appendChild(newStyle);
		}
		document.getElementsByTagName('head')[0].appendChild(style);
		styleAdded = true; //don't add again.
	}
	///////////
	//Checking for mail validation
	var checkmail = function(email){
		if (email == "") return true;
		var splitted = email.match("^(.+)@(.+)$");
			if (splitted === null) {return false;}
			if(splitted[1] !== null ){
				var regexp_user=/^\"?[\w-_\.]*\"?$/;
				if(splitted[1].match(regexp_user) === null){ return false; }
			}
			if(splitted[2] !== null)  {
				var regexp_domain=/^[\w-\.]*\.[A-Za-z]{2,4}$/;
				if(splitted[2].match(regexp_domain) == null) {
					var regexp_ip =/^\[\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\]$/;
					if(splitted[2].match(regexp_ip) == null) return false; 
				}
				return true; 
			}
		return false;
	}
    
    var saveEditors = function(){
        try{ // force editors to save their contents. IE mixes up the savecontent function
            for(var x in editors){
                for(var inst in editors[x].nicInstances){
                    var instance = editors[x].nicInstances[inst];
                    if(instance.saveContent){
                       instance.saveContent();
                    }
                }
            }
        }catch(e){ }
    }
    
    saveEditors();
    
    var warned = false;
	
	//////////////
	// Function to run onsubmit;
	if(typeof(elem)== "string"){
        formID = elem.split("_")[2];
        
        errored = false;
		var form = document.forms[elem];
		
		saveEditors();
        
        for(var node in form){
            try {
                if (form[node].onblur) {
                    if (("" + form[node].onblur).replace(/\n+/gim, "").match(/\'?Match\'?\:\s+true/)) {
                        validate(form[node], "", {
                            Match: true
                        });
                    }
                }
            }catch(e){}
        }
        
        var onSubmit = function(elem){
            if(stopSubmit){
                setTimeout(function(){
                    enable_buttons();
                }, 100);
                return false;
            }
    		errored = false;
    		var form = document.forms[elem];
            
    		saveEditors();
			         
            for (var node = 0; node < form.length; node++) {
                if (("" + form[node].onblur).match("validate")) {
                    form[node].onblur();
                }
            }
    		if(errored){
                if(!warned){
                    var inputs = form.getElementsByTagName('input');
                    for(var x =0; x< inputs.length; x++){
                        if(inputs[x].type == 'submit'){
                            var errdiv = document.createElement('div');
                            errorwarning = errdiv;
                            errdiv.className = 'DivErrortext';
                            errdiv.innerHTML = 'There are missing fields on your form please correct them.';
                            inputs[x].parentNode.appendChild(errdiv);
                        }
                    }
                    warned = true;
                }
				pageBreak.goErrorPage();
                setTimeout(function(){
                    enable_buttons();
                }, 100)
                return false; 
            } else{
                if(option.Confirm){
                    x = confirm(option.Confirm);
                }else{
                    x = true;
                }
                if(x){
                    form.submit();
                }
            } 
    	}
    }
    
    if($jt(elem) && !isVisible(elem)){ return true; }
    
	var qid = elem.id;
	//////////////
	// Function to set error messages
	var getMsg = function(type){
        
        var cmess = window.customMessages != undefined? customMessages : {};
        if(cmess[qid] && cmess[qid][type]){
            return cmess[qid][type];
        }
        
        if(cmess[type]){
            return cmess[type];
        }
        
        
		switch(type){
			case "Max":                return "Length should be less than (" + option['Max'] + ")";
			case "Min":                return "Length should be greater than (" + option['Min'] + ")";
			case "RequiredAlphabetic": 
			case "Alphabetic":         return "Cannot contain non-alphabetic characters.";
            case "RequiredStrict Alphabetic":
            case "Strict Alphabetic":  return "Only alphabetic characters and numbers allowed. Please do not use space or punctuation marks";
			case "RequiredNumeric":    
			case "Numeric":            return "Cannot contain non-numeric characters.";
			case "RequiredEmail":
            case "Email":              return "Enter a valid email address.";
			case "Required":           return "This field is required.";
            case "unique":             return "This field is unique. Please choose another value.";
            case "exist":              return "Cannot find the value.";
            case "Match":              return "Values should match each other";
			case "Regex":              return "This entry does not match (" + option['Regex'] + ").";
			default:                   return "Undefined Error Message";
		}
	}
    
	/////////////
	// Function to check is error printed?
	var checkForErrorDiv = function(elem){
		for(var node = 0;node < elem.parentNode.childNodes.length; node++)
			if(elem.parentNode.childNodes[node].className == "Errortext")
				return true;
		return false;
	}
	
	/////////////
	// Function to define errors and print messages
	var error = function(elem, type, message){
        correct(elem);
		if(!checkForErrorDiv(elem)){
			div = document.createElement("div");
			div.innerHTML = (message)? message : getMsg(type);
			div.className = "Errortext";
            elem.parentNode.className += " parentBox";
			elem.parentNode.appendChild(div);
			//elem.parentNode.insertBefore(div, elem.nextSibling);
		}
        
		if(elem.className != "error")
			exClassName[elem.name] = elem.className;
		if(elem.type != "checkbox" && elem.type != "radio"){
			elem.className = "error";
		}
		errored = true;
		return true;
	}
	
	/////////////
	// Function to revert Errored fields
	var correct = function(elem){
        if(errorwarning && !errored){
            errorwarning.parentNode.removeChild(errorwarning);
            errorwarning = false;
        }
		var parent = elem.parentNode;
        parent.className = parent.className.replace("parentBox", "").replace(/\s+/, "");
		for(x = 0; x < parent.childNodes.length; x++){
			var node = parent.childNodes[x];
			if(node){
				if(node.className == "Errortext")
					node.parentNode.removeChild(node);
				if(node.className == "error")
					node.className = exClassName[node.name];
			}
		}
	}
	
	///////////////
	// Check for optional validations
	if(option['Max']){
		if(elem.value.length > Number(option['Max'])){
			error(elem,"Max",option['message']);
			return false;
		}else
			correct(elem);
	}
    
	if(option['Min']){
		if(elem.value.length < Number(option['Min']) && elem.value.length > 0){
			error(elem,"Min",option['message']);
			return false;
		}else
			correct(elem);
	}
    
    if(option['Match']){
        var pass = true;
        if(typeof option['Match'] == "string"){
            if(elem.value == option['Match']){
                pass = false;
            }else{
                pass = true;
            }
        }
        if (pass) {
            if (!elem.id.match(/^j\_matchbox.*$/)) {
                if (!$jt('j_matchbox_' + elem.name)) {
                    var matchbox = elem.cloneNode(true);
                    matchbox.id = "j_matchbox_" + elem.name;
                    //            matchbox.onblur=function(){};
                    matchbox.value = "";
                    matchbox.ownerElem = elem;
                    
                    matchbox.style.marginTop = "10px";
                    //elem.parentNode.appendChild(document.createElement("br"));
                    
                    elem.parentNode.appendChild(document.createElement("br"));
                    elem.parentNode.appendChild(matchbox);
                    elem.parentNode.appendChild(document.createTextNode(" Re-enter"));
                    //matchbox.focus();
                }
                var slave = $jt('j_matchbox_' + elem.name);
                var master = elem;
                
            }
            else {
                var master = elem.ownerElem;
                var slave = elem;
            }
            
            if (master.value != slave.value) {
                error(master, "Match", option['message']);
                error(slave, "Match", option['message']);
                return false;
            }
            else {
                correct(master);
                correct(slave);
            }
        }
	}
    
    if(option.Unique && elem.value){
    	if (!option.Value || option.Value != elem.value){
        	res = request("action=checkUniqness&formID="+option.Unique+"&field="+elem.name.replace(/q\d+_(.*)/, "$1")+"&value="+elem.value);  
    		if(res == "notuniq"){
    			correct(elem);
    		}else{
    			error(elem, "unique", option['message']);
    			return false;
            }
    	}
	}
    
    if(option.Exist && elem.value){
        v=option.Exist.split(":");
    	res = request("action=checkExistance&form="+v[0]+"&field="+v[1]+"&value="+elem.value);  
		if(res == "exists"){
			correct(elem);
		}else{
			error(elem, "exist", option['message']);
			return false;
        }
	}
    
		
	//////////////
	// Make all the validations
	switch(type){
        case "Strict Alphabetic":
            var charpos = elem.value.search(/[^a-zA-Z0-9\_]/);
			if(charpos >= 0) error(elem,type,option['message']); else correct(elem);
			break;
        case "RequiredStrict Alphabetic":
            if(elem.value.length <= 0) error(elem,"Required",option['message']); 
			else{
				var charpos = elem.value.search(/[^a-zA-Z0-9\_]/);
    			if(charpos >= 0) error(elem,type,option['message']); else correct(elem);
			}
            break;
		case "Alphabetic":
			var charpos = elem.value.search(/[^a-zA-Z\s\-\_]/);
			if(charpos >= 0) error(elem,type,option['message']); else correct(elem);
			break;
		case "RequiredAlphabetic":
			if(elem.value.length <= 0) error(elem,"Required",option['message']); 
			else{
				var charpos = elem.value.search(/[^a-zA-Z\s\-\_]/);
				if(charpos >= 0) error(elem,type,option['message']); else correct(elem);
			}
			break;
		case "Numeric":
			var charpos = elem.value.search(/[^0-9\.\,\s\-\_]/);
			if(charpos >= 0) error(elem,type,option['message']); else correct(elem);
			break;
		case "RequiredNumeric":
			if(elem.value.length <= 0) error(elem,"Required",option['message']); 
			else{
				var charpos = elem.value.search(/[^0-9\.\,\s\-\_]/);
				if(charpos >= 0) error(elem,type,option['message']); else correct(elem);
			}
			break;
		case "RequiredEmail":
			if(elem.value.length <= 0) error(elem,"Required",option['message']); 
			else{
				if(!checkmail(elem.value)) error(elem,type,option['message']); else correct(elem);
			}
			break;			
		case "Email":
			if(!checkmail(elem.value)) error(elem,type,option['message']); else correct(elem);
			break;
		case "Required":
            if (elem.type == "checkbox" || elem.type == "radio") {
                var parent = elem.parentNode;
                var ok = false;
                for (x = 0; x < parent.childNodes.length; x++) 
                    if (parent.childNodes[x].checked == true) 
                        ok = true;
                if (ok) 
                    correct(elem, true);
                else 
                    error(elem, type, option['message']);
                
            }else if(elem.type == "file"){
                if(elem.value.length > 0){
                    correct(elem);
                }else if (elem.readAttribute('oldvalue').length <= 0) {
                    error(elem, type, option['message']);
                }else {
                    correct(elem);
                }
            }else{
                
				if (elem.options) {
                    
                    if (elem.selectedIndex <= 0) error(elem, type, option['message']); else correct(elem);
                    // if (elem.options[elem.selectedIndex].text.length <= 0) error(elem, type, option['message']); else correct(elem);
                } else {
                    if (elem.value.length <= 0)  error(elem, type, option['message']); else correct(elem);
                }
			}
			break;
		case "Regex":
			if(elem.value.match(option['expression'])) correct(elem);
			else error(elem,type,option['message']);
			break;
        case "": break;
		default:	// Default is for defining the form and setting onsubmit function
            var form = document.forms[elem];
			//events.add(form, "submit", function(){ onSubmit(elem); return false; });
            form.onsubmit = function(){ onSubmit(elem); return false; };
			break;
	}		
}

function toArray(obj){
    var n = [];
    for (var x in obj) {
        if (obj[x] && obj[x] == Object.prototype[x]) {
            continue;
        }
        n.push(obj[x]);
    }
    return n;
}


function pageBreak(){
	// the object properties
	this.form;
	this.pages;
	this.pageIndex;
	this.pageLength;
	
	// The form objects.
	this.setInitialStatus = setInitialStatus;
	this.goErrorPage = goErrorPage;
	this.goPage = goPage;
	this.controlCurrentPage = controlCurrentPage;
	
	// function for getting properties	
	/**
	 * Get the form objects with the
	 * name form name
	 */
	function getForm(formName){
		var forms = document.getElementsByName(formName);
		return forms[0];
	}
	
	/**
	 * Get the divs
	 */
	function getPages(){
		var temp = new Array();
		var mainDiv = $jt("main");
        if(!mainDiv){ return false; }
		if (typeof(mainDiv) == null) {
			alert("Cannot find the main div.");
		}
		for (var i = 0; i < mainDiv.childNodes.length; i++) {
			if (mainDiv.childNodes[i].className == "pagebreak") {
				temp.push(mainDiv.childNodes[i]);
			}
		}
		return temp;
	}
	
	// methods..
	/**
	 * Set the initial status of the
	 * divs.
	 */
	function setInitialStatus(){
		this.form = getForm(this.formName);
		this.pages = getPages();
		this.pageIndex = 0;
		this.pageLength = this.pages.length;
		hidePages(this);
		setButtons(this);
	}
	
	function hidePages(pageBreak){
		for (var i = 0; i < pageBreak.pages.length; i++) {
			if (i != 0) {
				pageBreak.pages[i].style.display = "none";
			}
		}
	}
	
	function setButtons(pageBreak){
		for (var i = 0; i < pageBreak.pageLength; i++) {
			for (var j = 0; j < pageBreak.pages[i].childNodes.length; j++) {
				if (pageBreak.pages[i].childNodes[j].nodeName == "TABLE") {
					var table = pageBreak.pages[i].childNodes[j];
					var rows = table.getElementsByTagName('tr');
					if (rows.length<1){
						continue;
					}
					var lastRow = rows[rows.length-1];
					var myCells = lastRow.getElementsByTagName('td');
					var myCell = myCells[0];
					if (!lastRowButton(table) || i != (pageBreak.pageLength - 1)) {
						var myRow = table.insertRow(-1);
						var myCell = myRow.insertCell(-1);
						var myCell2 = myRow.insertCell(-1);
					}
					if (i != 0) {
						var backButton = document.createElement("div");
						backButton.className = "backButton";
						backButton.onclick = function(){
							goBackPage(pageBreak);
						};
						myCell.appendChild(backButton);
					}
					if (i != pageBreak.pageLength - 1) {
						var nextButton = document.createElement("div");
						nextButton.className = "nextButton";
						nextButton.onclick = function(){
							goNextPage(pageBreak);
						};
						myCell2.appendChild(nextButton);
					}
				} // if element is table
			} // look for all elements in page
		} // look for all pages
	} // end of function
	function goNextPage(pageBreak){
		if (pageBreak.controlCurrentPage() == false){
			scrollTo(obtenerPosicionX($jt('main')), obtenerPosicionY($jt('main')))
			return;
		}
		scrollTo(obtenerPosicionX($jt('main')), obtenerPosicionY($jt('main')))
		pageBreak.pages[pageBreak.pageIndex].style.display = "none";
		pageBreak.pageIndex++;
		pageBreak.pages[pageBreak.pageIndex].style.display = "block";
	}
	
	function goBackPage(pageBreak){
		scrollTo(obtenerPosicionX($jt('main')), obtenerPosicionY($jt('main')))
		pageBreak.pages[pageBreak.pageIndex].style.display = "none";
		pageBreak.pageIndex--;
		pageBreak.pages[pageBreak.pageIndex].style.display = "block";
	}
	
	//Get X position
	function obtenerPosicionX(elemento){
		var x = 0;
		while (elemento) {
			x += elemento.offsetLeft;
			elemento = elemento.offsetParent;
		}
		return x;
	}
	
	//Get Y position
	function obtenerPosicionY(elemento){
		var y = 0;
		while (elemento) {
			y += elemento.offsetTop;
			elemento = elemento.offsetParent;
		}
		return y;
	}
	
	function goErrorPage(){
		for (var i = 0; i < this.pageLength; i++) {
			var div = this.pages[i];
			var inputs = div.getElementsByTagName('input');
			for (var j = 0; j < inputs.length; j++) {
				var className = inputs[j].className;
				if (className.search(/error/) != -1) {
					this.goPage(i);
					return;
				}
			}
		}
	}
	
	function goPage(index){
		this.pages[this.pageIndex].style.display = 'none';
		this.pages[index].style.display = 'block';
		this.pageIndex = index;
	}
	
	function lastRowButton(table){
		var inputs = table.getElementsByTagName('input');
		if (inputs.length<1){
			return false;
		}
		var lastRowInput = inputs[inputs.length - 1];
		if (lastRowInput.type == 'submit') {
			return true;
		}
		return false;
	}
	
	function controlCurrentPage(){
		var div = this.pages[this.pageIndex];
		var inputs = toArray(div.getElementsByTagName('input'));
        inputs = inputs.concat(toArray(div.getElementsByTagName('select')));
        inputs = inputs.concat(toArray(div.getElementsByTagName('textarea')));
        
		// fire all validation events
		for (var i=0; i<inputs.length; i++){
			fireHTMLEvent(inputs[i], "onblur");
			var className = inputs[i].className? inputs[i].className : "";
			if (className.search(/error/) != -1) {
				return false;
			}
		}
		return true;
	}
	
    function fireHTMLEvent(obj, eventType){
        if (typeof obj.fireEvent != "undefined") 
            obj.fireEvent(/^on/.test(eventType) ? eventType : "on" + eventType);
        else {
            try {
                var evt = document.createEvent("HTMLEvents");
                evt.initEvent(eventType.replace(/^on/, ""), true, true);
                if (obj.dispatchEvent) {
                    obj.dispatchEvent(evt);
                }
            }catch(e){
                
            }
        }
    }
}

function getElementsByClass(searchClass, node, tag){
    var classElements = new Array();
    if (node == null) 
        node = document;
    if (tag == null) 
        tag = '*';
    var els = node.getElementsByTagName(tag);
    var elsLen = els.length;
    var pattern = new RegExp('(^|\\\\s)' + searchClass + '(\\\\s|$)');
    for (i = 0, j = 0; i < elsLen; i++) {
        if (pattern.test(els[i].className)) {
            classElements[j] = els[i];
            j++;
        }
    }
    return classElements;
}

