﻿var formSuccessContent = '';
var formFailContent = '';

//var _ServerUrl = 'http://localhost:6106/Internet_2009/';
var _ServerUrl = "http://www.kumed.com/"

String.prototype.trim = function () {
   return this.replace(/^\s+|\s+$/g, '');
}

Array.prototype.contains = function (obj) {
   var i = this.length;
   while (i--) {
      var _me = this[i].toString();
      _me = _me.trim();
      if (_me === obj) {
         return true;
      }
   }
   return false;
}

function GetBaseURL() {
   if ("baseURI" in document) {
      return document.baseURI;
   }
   else {
      var baseTags = document.getElementsByTagName("base");
      if (baseTags.length > 0) {
         return baseTags[0].href;
      }
      else {
         return window.location.href;
      }
   }
}


// Grab the names and data from any formdata classed inputs/textarea elements
// submit them to the forms web service with whatever function we can find
function executeFormFunction() {
   var _PageId = GetBaseURL().split('=')[1];
   var _Continue = true;

   // Validate controls up from
   var formRequiredContent = $('#formRequiredContent');
   var formValidEmailFields = $('#formValidEmailFields');
   var ValidateFormText = $(".formdata");
   var arrReqContent = CSVToArray(formRequiredContent[0].value, ",");
   var arrValidEmail = CSVToArray(formValidEmailFields[0].value, ",");

   // Now extract the form name=value pairs, put into corresponding elements of paramList
   var formText = $(".formdata");

   if (formText.length > 0) {
      for (var i = 0; i < formText.length; i++) {
         if (arrReqContent[0].contains(formText[i].name) == true) {
            if (formText[i].value == "") {
               var _ErrorMessage = "field [" + formText[i].name + "] is required";
               alert(_ErrorMessage);
               _Continue = false;
               break;
            }
         }
         if (arrValidEmail[0].contains(formText[i].name) == true) {
            if (echeck(formText[i].value) == false) {
               _Continue = false;
               break;
            }
         }
      }
   }


   if (_Continue == false) {
      return false;
   }

   if (_bValidateCaptcha == true && _Continue == true) {
      var _CaptchaText = $('#CaptchaText')[0].value; ;
      if (_CaptchaText.length == 0) {
         $('#ErrorMessage').css("visibility", "visible");
         _Continue = false;
      }
      else {
         $.ajax({
            type: "POST",
            async: false,
            url: "WebService.asmx/VerifyCaptchaForJSON",
            data: "{'uniqueID':'" + _UniqueId + "','captchaText':'" + _CaptchaText + "'}",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (msg) {
               var _MyJson = JSON.parse(msg.d);
               var _RetMessage = _MyJson.ResponseMessage.toString();
               if (_RetMessage == "failure") {
                  $('#ErrorMessage').css("visibility", "visible");
                  _Continue = false;
               }
               else {
                  _Continue = true;
               }
            },
            error: function (msg) {
               alert(msg.toString());
               _Continue = false;
            }
         });
      }
   }
   else {
      $('#ErrorMessage').css("visibility", "hidden");
      _Continue = true;
   }
   if (_Continue == false) {
      return false;
   }

   //alert("Processing form");
   var formFunction = $("#formFunction");
   //alert("Form function - " + formFunction[0].value);
   
	if(formFunction[0].value == 'usbankpayart'){
		var _PayUrl = $('#formPayUrl')[0].value;
        var _MerchId = $('#formMerchId')[0].value;
        var _StoreId = $('#formStoreId')[0].value;
        var _TermId = $('#formTermId')[0].value;		
        var _EventInfo = $('#EventInfo')[0].value;		
		
		var _QueryString = "";
		var _CompanyName = "";
		var _Phone1 = "";
		var _Phone2 = "";
		var _GeneralCost = 0.0;
		var _PatronCost = 0.0;
		var _ContribAmount = 0.0;
   
		if( formText.length > 0 ){
			for(var i=0; i<formText.length; i++){
			   switch (formText[i].name) {
			      case "GuestName":
			         _QueryString += "&AdditionalInfo6=" + formText[i].value;
			         break;
					case "PhoneNumber1":
						_Phone1 = formText[i].value;
						break;
					case "PhoneNumber2":
						_Phone2 = formText[i].value;
						break;
					case "CompanyName":
						_CompanyName = formText[i].value;
						break;
					case "General":
						if (formText[i].value != '') {
							var _tmp = parseFloat(formText[i].value);

							if (_tmp.toString() != "NaN") {
								_GeneralCost = _tmp * 95.0;
							}
							else {
								alert('Individual Reservation requires numeric value.');
								return false;
							}
							_QueryString += "&AdditionalInfo3=" + formText[i].value;
						}
						break;
					case "Patron":
						if (formText[i].value != '') {
							var _tmp = parseFloat(formText[i].value);
							if (_tmp.toString() != "NaN") {
								_PatronCost = _tmp * 175.0;
							}
							else {
								alert('Patron Reservation requires numerica value.');
								return false;
							}
							_QueryString += "&AdditionalInfo4=" + formText[i].value;
						}
						break;
					case "AddContrib":
						if(formText[i].value != ""){
							_ContribAmount = parseFloat(formText[i].value);
							if(_ContribAmount.toString() == "NaN"){
								alert('Invalid Contribution Amount');
								return false;
							}
						}
						break;
					default:
						_QueryString += "&";
						_QueryString += formText[i].name + "=" + formText[i].value;
				}
			}
		}
		
		_QueryString += "&PatientPhoneNumber=" + _Phone1 + _Phone2;
		_QueryString += "&amount=" + (_GeneralCost + _PatronCost + _ContribAmount).toString();
		_QueryString += "&AdditionalInfo5=" + _EventInfo + "&AdditionalInfo2=" + _CompanyName;
		
		_PayUrl += _QueryString;
        location.href = _PayUrl;
		return false;
   }   

   if (formFunction[0].value == 'usbankpay') {
      var _Amount = 0.0;
      var _NumTickets = 0.0;
      var _NumOfTeamTickets = 0.0;
      var _TeamTicketAmount = 0.0;
      var _PayUrl = $('#formPayUrl')[0].value;
      var _QueryString = "";
      var _MerchId = $('#formMerchId')[0].value;
      var _StoreId = $('#formStoreId')[0].value;
      var _TermId = $('#formTermId')[0].value;
      var _TicketPrice = parseFloat($('#formTicketPrice')[0].value);
      var _EventInfo = $('#EventInfo')[0].value;
      var _CompanyName = "";

      var _Phone1 = "";
      var _Phone2 = "";
      var _GeneralCost = 0.0;
      var _PatronCost = 0.0;
      var _SponsCost = 0.0;
      var _UserVote = 0.0;

      var _VotesBobPage = 0;
      var _VotesBobRegnier = 0;
      var _VotesMarkFabel = 0;
      var _VotesFrankRoss = 0;

      if (formText.length > 0) {
         for (var i = 0; i < formText.length; i++) {
            switch (formText[i].name) {
               case "PhoneNumber1":
                  _Phone1 = formText[i].value;
                  break;
               case "PhoneNumber2":
                  _Phone2 = formText[i].value;
                  break;
               case "CompanyName":
                  _CompanyName = formText[i].value;
                  break;
               case "General":
                  if (formText[i].value != '') {
                     var _tmp = parseFloat(formText[i].value);

                     if (_tmp.toString() != "NaN") {
                        _GeneralCost = _tmp * 125.0;
                     }
                     else {
                        alert('Individual Reservation requires numeric value.');
                        return false;
                     }
                     _QueryString += "&AdditionalInfo2=" + formText[i].value;
                  }
                  break;
               case "Patron":
                  if (formText[i].value != '') {
                     var _tmp = parseFloat(formText[i].value);
                     if (_tmp.toString() != "NaN") {
                        _PatronCost = _tmp * 200.0;
                     }
                     else {
                        alert('Patron Reservation requires numerica value.');
                        return false;
                     }
                     _QueryString += "&AdditionalInfo3=" + formText[i].value;
                  }
                  break;
 			    case "AddContrib":
                  // Will need to validate that it's actually a float value
                  if (formText[i].value != "") {
                     _Amount = parseFloat(formText[i].value);

                     if (_Amount.toString() == "NaN") {
                        alert('Invalid Contribution Value');
                        return false;
                     }
                  }
                  break;
               case "CorpSpons":
                  var _MyValue = formText[i].options[formText[i].selectedIndex].value;
                  if (_MyValue != 0) {
                     if (_MyValue == 1) {
                        _SponsCost = 2500.0;
                        _QueryString += "&AdditionalInfo1=SilverHeart";
                     }
                     else {
                        _SponsCost = 1500.0;
                        _QueryString += "&AdditionalInfo1=CrystalHeart";
                     }
                  };
                  break;
               case "BobPage":
                  if (formText[i].value != '') {
                     var _tmp = parseFloat(formText[i].value);
                     if (_tmp.toString() != "NaN") {
                        _VotesBobPage = _tmp;
                        _UserVote = _UserVote + (_tmp * 10.00);
                     }
                     else {
                        alert('Voting fields require numeric value');
                        return false;
                     }
                  }
                  break;
               case "BobRegnier":
                  if (formText[i].value != '') {
                     var _tmp = parseFloat(formText[i].value);
                     if (_tmp.toString() != "NaN") {
                        _VotesBobRegnier = _tmp;
                        _UserVote = _UserVote + (_tmp * 10.00);
                     }
                     else {
                        alert('Voting fields require numeric value');
                        return false;
                     }
                  }
                  break;
               case "MarkFaber":
                  if (formText[i].value != '') {
                     var _tmp = parseFloat(formText[i].value);
                     if (_tmp.toString() != "NaN") {
                        _VotesMarkFabel = _tmp;
                        _UserVote = _UserVote + (_tmp * 10.00);
                     }
                     else {
                        alert('Voting fields require numeric value');
                        return false;
                     }
                  }
                  break;
               case "FrankRoss":
                  if (formText[i].value != '') {
                     var _tmp = parseFloat(formText[i].value);
                     if (_tmp.toString() != "NaN") {
                        _VotesFrankRoss = _tmp;
                        _UserVote = _UserVote + (_tmp * 10.00);
                     }
                     else {
                        alert('Voting fields require numeric value');
                        return false;
                     }
                  }
                  break;               default:
                  _QueryString += "&";
                  _QueryString += formText[i].name + "=" + formText[i].value;
            }
         }
      }

      var _VoteInfo = _VotesBobPage + "_" + _VotesBobRegnier + "_" + _VotesMarkFabel + "_" + _VotesFrankRoss;
      _QueryString += "&AdditionalInfo6=" + _VoteInfo;
      _QueryString += "&PatientPhoneNumber=" + _Phone1 + _Phone2;
      _QueryString += "&amount=" + (_GeneralCost + _PatronCost + _Amount + _SponsCost + _UserVote).toString();
      _QueryString += "&AdditionalInfo5=" + _EventInfo + "&AdditionalInfo4=" + _CompanyName;
      _PayUrl += _QueryString;

      //alert(_PayUrl);
      location.href = _PayUrl;
      //$('#MyURLRedirection').val(_PayUrl);

      return false;
   }
   else {
      var paramList = new Object();
      // Add special data to the param list to send:
      // formEMailTo
      var formEMailTo = $("#formEMailTo");
      if (formEMailTo.length > 0) {
         paramList.formEMailTo = formEMailTo[0].value;
      }

      // formEMailFrom
      var formEMailFrom = $("#formEMailFrom");
      if (formEMailFrom.length > 0) {
         paramList.formEMailFrom = formEMailFrom[0].value;
      }

      // formEMailSubject
      var formEMailSubject = $("#formEMailSubject");
      if (formEMailSubject.length > 0) {
         paramList.formEMailSubject = formEMailSubject[0].value;
      }

      // formUser
      var formUser = $("#formUser");
      if (formUser.length > 0) {
         paramList.formUser = formUser[0].value;
      }

      // formClientHost
      var formClientHost = $("#formClientHost");
      if (formClientHost.length > 0) {
         paramList.formClientHost = formClientHost[0].value;
      }

      // formUrl
      var formUrl = $("#formUrl");
      if (formUrl.length > 0) {
         paramList.formUrl = formUrl[0].value;
      }

      // formSuccessContent
      formSuccessContent = $("#formSuccessContent");
      if (formSuccessContent.length > 0) {
         paramList.formSuccessContent = formSuccessContent[0].value;
      }

      // formFailContent
      formFailContent = $("#formFailContent");
      if (formFailContent.length > 0) {
         paramList.formFailContent = formFailContent[0].value;
      }




      //alert("Extracting Form Data - " + formText.length.toString() + " elements.");
      var controlGroups = new Object();
      if (formText.length > 0) {
         for (var i = 0; i < formText.length; i++) {
            if (formText[i].type !== undefined) {
               switch (formText[i].type) {
                  case "radio":
                  case "checkbox":
                     var multKey = '';
                     if (controlGroups[formText[i].name] == undefined) {
                        controlGroups[formText[i].name] = -1;
                     }
                     controlGroups[formText[i].name]++;
                     multKey = formText[i].name + controlGroups[formText[i].name].toString();
                     paramList[multKey] = formText[i].value + "(" + formText[i].checked.toString() + ")";
                     break;
                  default:
                     paramList[formText[i].name] = formText[i].value;
                     break;
               }
            }
            else {
               paramList[formText[i].name] = formText[i].value;
            }
         }
      }

      // Extract the elements of the paramList object, into a json string
      //alert("Serializing Form Data: " + JSON.stringify("T@st <str&ng>"));
      //var formData = JSON.stringify({ formData: paramList });

      var _ExtraFields = "&formEMailFrom=" + formEMailFrom[0].value + "&formEMailSubject=" + formEMailSubject[0].value + "&formEMailTo=" + formEMailTo[0].value;
      _ExtraFields += "&PageId=" + _PageId;
      var formData = "{'formData':'" + $(":input").serialize() + _ExtraFields +"'}";

      $.ajax({
         type: "POST",
         url: "Forms.asmx/" + formFunction[0].value,
         contentType: "application/json; charset=utf-8",
         data: formData,
         dataType: "json",
         success: formSuccess,
         error: formFailure
      });
   }
}

function formSuccess(response) {
   window.location.href = _ServerUrl + 'default.aspx?id=' + formSuccessContent[0].value;
}

function formFailure(msg) {
   var errmsg = msg.responseText;
   alert(errmsg);

   window.location.href = _ServerUrl + 'default.aspx?id=' + formFailContent[0].value;
}

function formErrorMsg() {
   var ca = document.cookie.split(';');
   var errMsg = '';
   for (var i = 0; i < ca.length; i++) {
      var c = ca[i];
      while (c.charAt(0) == ' ') c = c.substring(1, c.length);
      if (c.indexOf('errmsg') === 0) return c.substring(nameeQ.legth, c.length);
   }

}


function gup(name) {
   name = name.replace(/[\[]/, "\\\[").replace(/[\]]/, "\\\]");
   var regexS = "[\\?&]" + name + "=([^&#]*)";
   var regex = new RegExp(regexS);
   var results = regex.exec(window.location.href);
   if (results == null)
      return "";
   else
      return results[1];
}

function CSVToArray(strData, strDelimiter) {
   strDelimiter = (strDelimiter || ",");

   var objPattern = new RegExp((
            "(\\" + strDelimiter + "|\\r?\\n|\\r|^)" +
            "(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|" +
            "([^\"\\" + strDelimiter + "\\r\\n]*))"),
            "gi");
   var arrData = [[]];
   var arrMatches = null;
   while (arrMatches = objPattern.exec(strData)) {
      var strMatchedDelimeter = arrMatches[1];
      if (strMatchedDelimeter.length && (strMatchedDelimeter != strDelimiter)) {
         arrData.push([]);
      }
      if (arrMatches[2]) {
         var strMatchedValue = arrMatches[2].replace(
            new RegExp("\"\"", "g"), "\"");
      }
      else {
         var strMatchedValue = arrMatches[3];
      }

      arrData[arrData.length - 1].push(strMatchedValue);
   }
   return (arrData);
}

function GetCaptchaImage() {
   $.ajax({
      type: "POST",
      async: false,
      url: "WebService.asmx/LoadCaptchaReturnJSON",
      data: "{}",
      contentType: "application/json; charset=utf-8",
      dataType: "json",
      success: function (msg) {
         var _MyJson = JSON.parse(msg.d);
         _UniqueId = _MyJson.UniqueID.toString();
         $('#CaptchaImage').attr("src", _MyJson.ImagePath.toString());
         $('#ErrorMessage').css("visibility", "hidden");
      },
      error: function (msg) {
         alert('Unable to contact local web service.');
      }
   });
}

function ReloadCaptcha() {
   GetCaptchaImage();
}

function echeck(str) {
   var at = '@';
   var dot = '.';
   var lat = str.indexOf(at);
   var lstr = str.length;
   var ldot = str.indexOf(dot);

   if (str.indexOf(at) == -1 || str.indexOf(at) == 0 || str.indexOf(at) == lstr) {
      alert("Invalid E-mail ID")
      return false
   }

   if (str.indexOf(dot) == -1 || str.indexOf(dot) == 0 || str.indexOf(dot) == lstr) {
      alert("Invalid E-mail ID")
      return false
   }

   if (str.indexOf(at, (lat + 1)) != -1) {
      alert("Invalid E-mail ID")
      return false
   }

   if (str.substring(lat - 1, lat) == dot || str.substring(lat + 1, lat + 2) == dot) {
      alert("Invalid E-mail ID")
      return false
   }

   if (str.indexOf(dot, (lat + 2)) == -1) {
      alert("Invalid E-mail ID")
      return false
   }

   if (str.indexOf(" ") != -1) {
      alert("Invalid E-mail ID")
      return false
   }

   return true
}

