/*################################################################*\
       JotForm Forms Framework V1.2.0 | Interlogy LLC.
\*################################################################*/
/////// Defining the source domain of images.
/////// don't change these variables
/////////////////////////////////////////////
if(location.href.match(/https/))
	var url = "https://demo.developmentserver.info/incentivebook/";
else
	var url = "http://demo.developmentserver.info/incentivebook/";

//////// Prototype's $ function
///////////////////////////////
function $(){
  var elements = new Array();
  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;
}
///////// Birthdate picker //////////////////
function getdate(elem){
	id = elem.id.split("_");
	day = $("day_"+id[1]).options[$("day_"+id[1]).selectedIndex].value;
	month = $("month_"+id[1]).options[$("month_"+id[1]).selectedIndex].value;
	year = $("year_"+id[1]).options[$("year_"+id[1]).selectedIndex].value;
	$("date_"+id[1]).value = month+" / "+day+" / "+year;
}
///////// AutoComplete functions///////////////////////////
function Complete(obj, evt) {
  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;
  	 		var ini = obj.value.lastIndexOf(elm);
  		}
  } else if (obj.setSelectionRange) {
  		var 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);
  }
}
///////// sum function for payment objects
//////////////////////////////////////////
function sum(radio,t){
	var val = new Array();
	if(radio.type!='radio'){
		tot1=parseFloat($('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);
		$('hid').value=tot1;
		$('res').innerHTML='Total : '+tot1;
	}else{
		val = price[radio.value].split(':');
		rval = parseFloat(val[0]);
		rval = rval.toFixed(2);
		$('res').innerHTML='Total : '+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) // Safari bug
      return {width: element.offsetWidth, height: element.offsetHeight};
	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 = new Object();
function blindDown(elem, id, dur){
	if(!dur){
		var 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);
		var 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= $(id2);
	var the_divs=document.getElementsByTagName('div');
	var re = RegExp(/^div_/i);
	for(var 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 = $(id3);
	var re = RegExp(/^td_/i);
	var show = 'url('+url+'/images/splitter_right_show.gif)';
	var hide = 'url('+url+'/images/splitter_right_hide.gif)';
	if(tdElem.style.backgroundImage == show){
		tdElem.style.backgroundImage = hide;
	}else{
		for(var 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){
	$(hid).value = val;
}
function resetRate(elem,hid){
	var val = $(hid).value;
	if(val == "")
		elem.style.backgroundImage="url("+url+"/images/star0.gif)";
	else
		elem.style.backgroundImage="url("+url+"/images/star"+val+".gif)";
}
function changeColor(val,tab){
	$(tab).style.backgroundImage="url("+url+"/images/star"+val+".gif)";
}

//////// Tooltip code
///////////////////////
var offsetfromcursorX=12
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 border="0" cellpadding="0" cellspacing="0">\
  <tr><td width="1" height="8" background="'+url+'/images/tooltip_top.gif"></td>\
    <td align="left" background="'+url+'/images/tooltip_top.gif"><img src="'+url+'/images/tooltip_arrow.gif" width="20" height="8" /></td>\
    <td width="1" background="'+url+'/images/tooltip_top.gif"></td>\
  </tr><tr>\
  <td bgcolor="#b1bfcc"></td>\
    <td bgcolor="#edf4fa"><div style="padding:10px; font-family:\'Trebuchet MS\'; font-size:12px; color:black" id="tooltipinner"></div></td>\
    <td bgcolor="#b1bfcc"></td>\
  </tr><tr>\
    <td height="1" bgcolor="#b1bfcc"></td>\
    <td bgcolor="#b1bfcc"></td>\
    <td bgcolor="#b1bfcc"></td>\
  </tr>\
</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? $("tooltipinner") : ""
var pointerobj = document.all? document.all["tooltip"]      : document.getElementById? $("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
//////// Validation library V2
//////////////////////////////
var errored = false;            // Global for validate function
var exClassName = new Object(); // Global for Changed classnames
var styleAdded = false;         // Global for checking sytle status
function validate(elem,type,option){	// Main function
	var option = (option)? option : "";
	
	if(!styleAdded){			// Add style for Error warnings
		var style = document.createElement('style');
		var sprop = '.error{font-family:Tahoma;color:#919191;border:1px red solid; background:#FCFCFC;width:180px}\
		             .Errortext{ color:#FF0000;font-family:"Trebuchet MS"; font-size:11px;text-align:left }';
					 
		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){
		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}$/;
	var regexp_domain=/^[\w-]*[\.]?[\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;
	}
	//////////////
	// Function to trip extra spaces from value 
	function LTrim(str)
	{
		for (var i=0; str.charAt(i)==" "; i++);
		return str.substring(i,str.length);
		}
	function RTrim(str)
	 {
		for (var i=str.length-1; str.charAt(i)==" "; i--);
		return str.substring(0,i+1);
	 }
	 function Trim(str)
	 {
		return LTrim(RTrim(str));
	 }
	//////////////
	// Function to run onsubmit;
	var onSubmit = function(elem){
		errored = false;
		var form = document.forms[elem];
		for(var node = 0;node < form.length; node++)
			if((""+form[node].onblur).match("validate"))
				form[node].onblur();
		if(errored)	return false; 
		else form.submit();
	}
	//Function to check US phone format
	function check_usphone(phonenumber) 
	{ 
		if(phonenumber.match(/^[\s]*[(]?[\s]*[\d]{3,3}[\s]*[)]?[-]?[\s]*[\d]{3,3}[\s]*[-]?[\s]*[\d]{4,4}[\s]*$/)==null)  
			return false; 
		return true; 
	} 
    //Function to Validate Date
	function ValidateDate(dateObj)
	{
		var _date = dateObj.value;
		var today = new Date();
		var temp = _date.split("-");
		var myDate = new Date();
		$_year  = parseInt(temp[0]);
		$_month = parseInt(temp[1])-parseInt(1);
		$_day    = parseInt(temp[2]);
		myDate.setFullYear($_year);
		myDate.setMonth($_month,$_day);
		if(myDate < today)
			return false;
		return true;
	}
 
function cmpSysDate(cdate, flag)
{
	cdate = change_DateFormatMon(cdate);
	sysDate = getSysDate();

	if (flag == 0)
	{
	if (dateDiff(sysDate, cdate) > 0)
	{
	alert("Date cannot be more than the system date!");
	return false;

	}
	}
	else if (flag == 1)
	{
	if (dateDiff(sysDate, cdate) < 0)
	{
	alert("Date cannot be less than the system date!");
	return false;

	}
	}

	return true;
}



	
	//////////////
	// Function to set error messages
	var getMsg = function(type){
		switch(type){
			case "LessThan":           return "This field's length should be less than (" + option['LessThan'] + ")"
			case "GreaterThan":        return "This field's length should be greater than (" + option['GreaterThan'] + ")"
			case "Alphabetic":         return "Cannot contain non-alphabetic characters."
			case "RequiredAlphabetic": return "This field is required and cannot contain non-alphabetic characters."
			case "Numeric":            return "Cannot contain non-numeric characters."
			case "RequiredNumeric":    return "This field is required and cannot contain non-numeric characters."
			case "Number":              return "Enter Number only."
			case "Email":              return "Enter a valid email address."
			case "Email_NR":           return "Enter a valid email address."
			case "Required":           return "This field is required."
			case "Regex":              return "This entry does not match (" + option + ")."
			case "password_match":     return "This entry does not match "
			case "Phone":              return "This field is required."
			case "Phone_NR":           return "Please enter phone number in US format. For eg. 222 777 5555 or (222) 777-5555";
			case "Zip":                return "This field is required."
			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.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){
		var parent = elem.parentNode;
		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['LessThan']){
		if(elem.value.length >= option['LessThan']){
			error(elem,"LessThan",option['message']);
			return false;
		}else
			correct(elem);
	}
	if(option['GreaterThan']){
		if(elem.value.length <= option['GreaterThan']){
			error(elem,"GreaterThan",option['message']);
			return false;
		}else
			correct(elem);
	}
		
	//////////////
	// Make all the validations
	var iChars = "0123456789";
	switch(type){
		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(Trim(elem.value).length <= 0) error(elem,type,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(Trim(elem.value).length <= 0) error(elem,type,option['message']); 
			else{
				var charpos = elem.value.search(/[^0-9\.\,\s\-\_]/);
				if(charpos >= 0) error(elem,type,option['message']); else correct(elem);
			}
			break;
		case "Number":
			var charpos = elem.value.search(/[^0-9]/);
			if(charpos >= 0) error(elem,type,option['message']); else correct(elem);
			break;
		case "Email":
			if(Trim(elem.value)=="")
				{
				error(elem,type,'This field is required.');
				}
			else if(!checkmail(elem.value)) error(elem,type,option['message']); else correct(elem);
			break;
		case "Email_NR":
			if(Trim(elem.value)=="")
			{
				correct(elem);
			}
			else 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.options)	
				{  
					// Here can be edited for checking text to "Please Select one" or similar text
					// in this example it looks for blank <option> to give error
				//	if(elem.options[elem.selectedIndex].text.length <= 0) 
					if(elem.options[elem.selectedIndex].value <= 0) 
					{  
						error(elem,type,option['message']);
					}
					else correct(elem);
				}
				else
					if(Trim(elem.value).length <= 0) error(elem,type,option['message']); else correct(elem);
			}
			break;
		case "select_multiple":
				var form = document.book_notification;
				var elm = "category[]";
				var s = form.elements[elm];
				for (var i = 0; i < s.length; i++)
					{
						//if (s[i].selected) alert (s[i].value);
						if (s[i].selected) var sel = 'yes';
					}
						if (sel=='yes')
						{
							correct(elem);
						}
					   else
					   { 
						error(elem,type,'Please select at least one category.');
					   }
						
					

					break;
		case "select_multiple_aud":
				var form = document.book_notification;
				var elm = "audience[]";
				var s = form.elements[elm];
				for (var i = 0; i < s.length; i++)
					{
						//if (s[i].selected) alert (s[i].value);
						if (s[i].selected) var sel = 'yes';
					}
						if (sel=='yes')
							{ 
								correct(elem);
							}
					   else 
						   {
						       error(elem,type,'Please select at least one audience.');
						   }
						
				

				break;
		case "Required_password":
				password= Trim(document.publisher.password.value);	
		
				if(password=="")
				{
					error(elem,type,'This field is required.');
				}
				else if(password.length<6)
				{
					error(elem,type,'Password Should be of six character.');
				}										
				else
				{
					correct(elem);
				}
		break;
		case "Required_Username":
				userName= Trim(document.publisher.user_name.value);	
				//alert(iChars.indexOf(userName.charAt(0)));
			
				if(userName=="")
				{
					error(elem,type,'This field is required.');
				}
				else if(userName.length<2)
				{
					error(elem,type,'Username can not be single digit.');
				}else if(iChars.indexOf(userName.charAt(0)) != -1){
					error(elem,type,'Username can not be start with numeric value.');
				}
				else
				{
					correct(elem);
				}
		break;
		case "password_match":
		         password= Trim(document.publisher.password.value);
		 		 confirm_password= document.publisher.confirm_password.value;
			if(confirm_password!=password)
				{
						error(elem,type,'Confirm password does not match with password.');
						
				}
				else if(confirm_password=="")
				{
					error(elem,type,'This field is required.');
				}
				else
				{
					correct(elem);
				}
			     
		break;
		case "Regex":
			if(Trim(elem.value).match(option['expression'])) correct(elem);
			else error(elem,type,option['message']);
			break;
		case "Phone":
			if(Trim(elem.value).length <= 0) error(elem,type,option['message']);
			else if(!check_usphone(elem.value)) error(elem,type,'Please enter phone number in US format. For eg. 222 777 5555 or (222) 777-5555');
			else correct(elem);
					
		    break;
		case "Phone_NR":
			if(!check_usphone(elem.value)) error(elem,type,'Please enter phone number in US format. For eg. 222 777 5555 or (222) 777-5555');
			else correct(elem);
					
		    break;
		
		case "Zip":
			var zipcode = Trim(elem.value);
			if(zipcode.length <= 0) error(elem,type,option['message']);
		    else if(zipcode.length != 5) error(elem,type,'Please enter 5-digit valid zip code.');
			else correct(elem);
			break;
		case "Date_NR":
			if(Trim(elem.value)!=""){
				if(!ValidateDate(elem)) error(elem,type,"Date can't be less than Today Date.");
				else correct(elem);
			}
			else correct(elem);
			break;
		default:	// Default is for defining the form and setting onsubmit function
		   var form = document.forms[elem];			
		  		form.onsubmit = function(){ onSubmit(elem); return false; };
			break;
		
	//	case "Phone_NR":

	}		
}

