﻿InitPage();
var _gvCreditCount;
var _gvCreditLogCount;
function InitPage()
{    
    window.setTimeout(formatForm,1000);    
    _gvCreditLogCount = 0;
}
function formatForm()
{       
    $("div.topicName").css({cursor:"pointer"}).unbind("click").click(function(){toggleHeader($(this));});
	$("input.date-pick").val("").unbind("blur").blur(function(){validateDate($(this));}).focus(function(){$(this).removeAttr("style").parents("div.row").css({backgroundColor:"transparent", border:"none"});$(this).siblings("span.creditErr").empty();});
	$("input.verifyText").focus(function(){$(this).removeAttr("style").parents("div.row").css({backgroundColor:"transparent", border:"none"});})
	$("input[@type=checkbox]").css({cursor:"pointer"}).unbind("click").click(function(){tallyPointsChk($(this));});
	$("span.totalPoints").html("0 points");
	$("div.submitForm li").css({cursor:"pointer"}).unbind("click").click(function(){doAction($(this));});		
	$("input.verifyText").each(function(i){
	    $(this).val($(this).attr("verifyValue"));
	});
	$("div.submitInfo").click(function(){updateMemberInfo();});

	$("#txtEmail").val("").blur(function(){CheckEmail($(this));}).focus(function(){ResetErrors();});
	$("#txtFName").val("");
    $("#txtLName").val("");
	//check to see if they have contact information
	if($("div.memberUpdateCreditPage").length > 0)
	{
	    $("div.submitForm").css("display","none");
	}
}

function doAction(evt)
{
    switch ($(evt).attr("action"))
    {
        case "submit":
            validateForm();
            break;
            
        case "reset":
            resetForm();
            break;        
    }
}

function validateForm()
{
    var creditArray = new Array();
    
    var rtg = true;
    $("div.memberCreditStatus").empty();
    $("div.row").css({backgroundColor:"transparent",border:"none"});
    
    
    $("input[@type=checkbox][@checked]").each(function(i)
    {       
       var credit = "";
       var idArr = $.trim($(this).attr("id")).split("_");
       var id = idArr[idArr.length - 1];
       credit += "topicID~" + id + "!";
       var valid = true;
       if(parseInt($("#date_"+id).attr("validDate")) == 0)
       {
        valid = false;
       }  
       var actDate = $("#date_"+id).val();
       if(!actDate){rtg = false;$("#date_"+id).css({border:"1px solid red"});}
       if(actDate)
       {
        if(!valid)
        //if($("#date_"+id).attr("style").length > 0) // || actDate.length != 10)
        {
            rtg = false;
            $("#date_"+id).css({border:"1px solid red"});
            $("#date_"+id).parents("div.row").css({backgroundColor:"white", border:"1px solid #FB933A"});
        }
        else
        {
            credit += "creditDate~" + actDate + "!";
        }
       }
       var vText = $("#activityVerification_"+id).val().toLowerCase();
       var vValue = $("#activityVerification_"+id).attr("verifyValue").toLowerCase();
       if(vText == vValue)
       {
        rtg = false;
        $("#activityVerification_"+id).css({border:"1px solid red"});
        $("#activityVerification_"+id).parents("div.row").css({backgroundColor:"white", border:"1px solid #FB933A"});
       }       
       else
       {
            credit += "creditVerify~" + $("#activityVerification_"+id).val();
       }
       creditArray.push(credit);
   });
   if(!rtg)
   {
    $("div.memberCreditStatus").empty().html("Please verify your entries.").slideDown(500);
   }
   if(rtg) //send the form off
   {
        var memberID = GetMemberID();
        _gvCreditCount = creditArray.length;
        for(var i=0;i<creditArray.length;i++)
        {
            var url = "ajax.aspx?logCredit=" + memberID + "&credit=" + creditArray[i];
            var xhrReq = xhrRequest("text");
            xhrReq.open("GET", url, true);
            xhrReq.onreadystatechange = function(){if(xhrReq.readyState == 4 && xhrReq.status == 200){logCredit(xhrReq.responseText, memberID)};}
            sendRequest(xhrReq);
        }
   }
}

function logCredit(rText, memberID)
{
    var myJSON = rText;var func = new Function("return " + myJSON);
    var jsonObj = func();
    if(jsonObj.length > 0)
    {
        if(parseInt(jsonObj[0]["response"]) == 1)
        {
            var msg = "Your credits have been submitted for approval";
            $("div.creditStatus").empty().append(msg).fadeIn(500, function(){resetForm(true);});
            _gvCreditLogCount = _gvCreditLogCount + 1;
        }
        else
        {
           var msg = "We're sorry. There was a problem. Please try again.";
           $("div.creditStatus").empty().append(msg).fadeIn(500);
        }
    }
    if(_gvCreditLogCount == _gvCreditCount)
    {
        var url = "ajax.aspx?sendVerifyEmail=" + memberID;
        var xhrReq = xhrRequest("text");
        xhrReq.open("GET", url, true);
        xhrReq.onreadystatechange = function(){if(xhrReq.readyState == 4 && xhrReq.status == 200){clearCreditCounts()};}
        sendRequest(xhrReq);
    }
}

function clearCreditCounts()
{
    _gvCreditCount = 0;
    _gvCreditLogCount = 0;
}
function GetMemberID()
{
    var memberID = $("div.submitForm input[@type=hidden]").val();
    return memberID;
}

function rollUpHeaders()
{
    $("div.topicName").each(function(i){
        var cNameArr = $(this).attr("className").split(" ");
        for(var i=0;i<cNameArr.length;i++)
        {
            if(cNameArr[i].toLowerCase() == "topictypedown")
            {
                toggleHeader($(this));
            }
        }        
    });
    window.setTimeout(hideStatus,2000);    
}
function hideStatus()
{
    $("div.creditStatus").fadeOut(500,function(){$(this).empty();});
}

function resetForm(rollUp)
{
    $("input[@type=checkbox]").removeAttr("checked");
    $("input.date-pick").val("").removeAttr("style");
    $("span.totalPoints").html("0 points");
    $("span.creditErr").empty();
    $("input.verifyText").val($("input.verifyText").attr("verifyValue"));
    if(rollUp)
    {
        rollUpHeaders();
    }
}

function tallyPointsDiv(evt)
{
    var creditPoints;
    var idArr;
    var id;
    var chked;
    
    creditPoints = parseInt($(evt).children("input[@type=checkbox]").attr("value"));
    idArr = $.trim($(evt).children("input[@type=checkbox]").attr("parent")).split('_');
    id = idArr[idArr.length - 1];
    chked = $(evt).children("input[@type=checkbox]").attr("checked");
    if(chked == undefined)
    {
        $(evt).children("input[@type=checkbox]").attr("checked","true");
        chked = true;
    }        
    else
    {
        $(evt).children("input[@type=checkbox]").removeAttr("checked");
        chked = false;
    }
    var tmpPointsArr = $("#totalPoints_" + id).html().split(' ');
    var totalPoints = parseInt(tmpPointsArr[0]);
    if(chked == undefined || !chked) //delete the points
    {
        totalPoints = totalPoints - creditPoints;        
    }
    else //add the points
    {
        totalPoints = totalPoints + creditPoints;
    }
    $("#totalPoints_" + id).empty().html(totalPoints.toString() + " points");
    
}

function tallyPointsChk(evt)
{
    var creditPoints;
    var idArr;
    var id;
    var chked;
    
    creditPoints = parseInt($(evt).attr("value"));
    idArr = $.trim($(evt).attr("parent")).split('_');
    id = idArr[idArr.length - 1];
    chked = $(evt).attr("checked");        
    
    var tmpPointsArr = $("#totalPoints_" + id).html().split(' ');
    var totalPoints = parseInt(tmpPointsArr[0]);
    if(chked == undefined) //delete the points
    {
        totalPoints = totalPoints - creditPoints;        
    }
    else //add the points
    {
        totalPoints = totalPoints + creditPoints;
    }
    $("#totalPoints_" + id).empty().html(totalPoints.toString() + " points");    
}

function validateDate(evt)
{
    $(evt).attr("validDate","1");
    $(evt).siblings("span.creditErr").empty();
    var myVal = $(evt).val();
    var validCharArr = new Array("/", "-", ".");
    if(myVal.length > 0)
    {
        var rtg = true;
        for(var i=0;i<myVal.length;i++)
        {
            var c = myVal.charAt(i);
            if(isNaN(c))
            {
                rtg = false;
                for(var j=0;j<validCharArr.length;j++)
                {
                    if(c == validCharArr[j]){rtg = true;}
                }            
            }            
        }
        if(rtg)
        {
            var re = /[- \.]/g;
            myVal = myVal.replace(re, "/");
            var myValArr = myVal.split('/');
            if(myValArr.length == 3)
            {
                  for(var i=0;i<myValArr.length;i++)
                  {
                      if(i == 2)
                      {
                          if(myValArr[i].length == 1){myValArr[i] = "200" + myValArr[i]}
                          if(myValArr[i].length == 2){myValArr[i] = "20" + myValArr[i]}
                          if(myValArr[i].length == 3){myValArr[i] = "2" + myValArr[i]}
                          var currentDate = new Date();
                          var currYear = currentDate.getFullYear();
                          var y = parseInt(myValArr[2]);
                          if(y < currYear || y > currYear + 1)
                          {
                              myValArr[2] = currYear.toString();
                          }
                      }
                  }

                  if (myValArr[0].charAt(0) == "0")
                      myValArr[0] = myValArr[0].charAt(1);
                      
                  var m = parseInt(myValArr[0]);
                  if (myValArr[1].charAt(0) == "0")
                      myValArr[1] = myValArr[1].charAt(1);
                      
                  var d = parseInt(myValArr[1]);
                  var y = parseInt(myValArr[2]);
                  
                  if(m > 12 || m == 0){rtg = false;};
                  var validMaxDateArr = Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
                  if(y % 4 == 0 && !m % 100 == 0 || y % 400 == 0)
                      validMaxDateArr[1] = 29;
                  var maxDate = validMaxDateArr[m-1];
                  if(d == 0 || d > maxDate){rtg = false;}
                  if(rtg)
                  {
                      var newDate = myValArr.toString();
                      var re = /[,]/g;
                      newDate = newDate.replace(re, "/");
                      $(evt).val(newDate);
                  }
                  else
                  {
                      $(evt).css({border:"2px solid Red"});
                      $(evt).siblings("span.creditErr").html(" Invalid Date");
                      $(evt).attr("validDate","0");
                  }
             }
            else
            {
              $(evt).css({border:"2px solid Red"});
              $(evt).siblings("span.creditErr").html(" Invalid Date");
              $(evt).attr("validDate","0");
            }
        }
        else
        {
            $(evt).css({border:"2px solid Red"});
            $(evt).siblings("span.creditErr").html(" Invalid Date");
            $(evt).attr("validDate","0");
        }
    }
    else
    {
        $(evt).attr("validDate","0");
    }    
}

function toggleHeader(evt)
{
    var idAr = $(evt).attr("id").split('_');
    var id = idAr[idAr.length - 1];
    var actTable = $("#actTable_" + id);
    var myStyle = $(evt).attr("className").split(' ');
    for(var i = 0; i<myStyle.length;i++)
    {
       if(myStyle[i].indexOf("Up") > -1)
       {
        $(evt).removeClass("topicTypeUp").addClass("topicTypeDown");
        $(evt).parent("div.topicType").css({backgroundColor:"#FFECA1"});
        $(actTable).slideDown(500);
        $(evt).attr("title","Click to collapse");
        return false;
       } 
       
       if(myStyle[i].indexOf("Down") > -1)
       {
        $(evt).removeClass("topicTypeDown").addClass("topicTypeUp");
        $(evt).parent("div.topicType").css({backgroundColor:"#DFCB7D"});
        $(actTable).slideUp(500);
        $(evt).attr("title","Click to expand");
        return false;
       }
    }
}

function updateMemberInfo()
{
    var rtg = true;
    $("div.memberUpdateStatus").empty().removeAttr("style");
    var memberID = GetMemberID();
    $("div.memberUpdateErr").empty();
    
    var eMail = "";
    if($("#txtEmail").length > 0)
    {
        eMail = $("#txtEmail").val();
        if(eMail.length == 0){rtg = false; $("div.errEmail").append("Please enter your email address");}
        CheckEmail($("#txtEmail"));
        if($("#txtEmail").attr("valid") == "false"){rtg = false;}
    }
    else
    {
        eMail = $("div.emailLabel").siblings("span.valid").html();
    }
    
    var fName = "";
    if($("#txtFName").length > 0)
    {
        fName = $("#txtFName").val();
        if(fName.length == 0){rtg = false; $("div.errFName").append("Please enter your first name");}    
    }
    else
    {
        fName = $("div.fNameLabel").siblings("span.valid").html();
    }
    
    var lName = "";
    if($("#txtLName").length > 0)
    {
        lName = $("#txtLName").val();
        if(lName.length == 0){rtg = false;$("div.errLName").append("Please enter your last name");}
    }
    else
    {
       lName = $("div.lNameLabel").siblings("span.valid").html();
    }
    if(rtg)
    {
        var url = "ajax.aspx?updateMemberInfo=" + memberID + "&email=" + encodeURIComponent(eMail) + "&fname=" + encodeURIComponent(fName) + "&lname=" + encodeURIComponent(lName);
        var xhrReq = xhrRequest("text");
        xhrReq.open("GET", url, true);
        xhrReq.onreadystatechange = function(){if(xhrReq.readyState == 4 && xhrReq.status == 200){EnableCreditForm(xhrReq.responseText)};}
        sendRequest(xhrReq);
    }
    else
    {
        $("div.memberUpdateStatus").empty().append("Please check your entries and try again.").css("color","#5F0C17");    
    }
}

function EnableCreditForm(rText)
{
    var myJSON = rText;var func = new Function("return " + myJSON);
    var jsonObj = func();
    if(jsonObj.length > 0)
    {
        if(parseInt(jsonObj[0]["response"]) == 1)
        {
            $("div.memberUpdateStatus").empty().append("Ok, you're good to go.");
            window.setTimeout(HideMemberUpdateForm, 2000);
            $("div.submitForm").css("display","block");    
        }
        else
        {
            $("div.memberUpdateStatus").empty().append("Please check your entries and try again.");
        }
    }
    else
    {
        $("div.memberUpdateStatus").empty().append("Sorry, something happened. Please try again.");
    }    
}

function HideMemberUpdateForm()
{
    $("div.memberUpdateCreditPage").slideUp(500, function(){$("div.memberUpdateCreditPage").remove();})
}
function CheckEmail(evt)
{
    $(evt).removeAttr("style").attr("valid","true");
    $("div.errEmail").empty();
    var val = $(evt).val();
    if(val.length > 0)
    {                
        var eml = new Email(val);
        eml.validateEmail();
        var rtg = eml.valid;    
        if(!rtg)
        {
            $(evt).css("border","2px solid #5F0C17").attr("valid","false");
            $("div.errEmail").append("  Please check your email address");                        
        }
    }
}
function ResetErrors()
{
    $("div.memberUpdateErr").empty();
    $("div.memberUpdateStatus").empty();
}

/*email validation */
function Email(e){this.emailAddr=e;this.message="";this.valid = false;}
function validateEmail()
{
    //basic check for null, zero-length string, ".","@" and absence of spaces
    if(this.emailAddr == null || this.emailAddr.length == 0 || this.emailAddr.indexOf(".", 0) == -1 || this.emailAddr.indexOf("@", 0) == -1 || this.emailAddr.indexOf(" ", 0) > -1)
    {
        this.message="Make sure the email address does not contain any spaces and is otherwise valid.";
        this.valid = false;
        return;
    }
    //get the local part of the email address
    regex=/(^\w{1,}\.?\w{1,})@/;
    _match = regex.exec(this.emailAddr);
    if(_match){user=RegExp.$1;}
    else
    {
        this.message="Make sure the user name is at least two characters, does not begin or end with a period (.), or is not otherwise invalid.";
        this.valid = false;
        return;
    }
    //get the domain part of the email address
    regex=/@(\[\d{1,3}\.\d{1,3}\.\d{1,3}.\d{1,3}\])$/;
    _match = regex.exec(this.emailAddr);
    if(_match){domain=RegExp.$1;this.valid=true;}    
    else
    {
        regex=/@(\w{2,}\.(\w{2,}\.)?[a-zA-Z]{2,3})$/;
        _match = regex.exec(this.emailAddr);
        if(_match){domain=RegExp.$1;}
        else
        {
            this.message="The domain portion of the email has less than 2 characters or is otherwise invalid.";
            this.valid=false;
            return;
        }
    }
    this.valid=true;
}
//make validate() an instance method of the Email object
Email.prototype.validateEmail=validateEmail;

//ajax functions

var req;
function createXMLHttpRequest()
{
    try{return new ActiveXObject("Msxml2.XMLHTTP");} catch (e){}
    try{return new ActiveXObject("Microsoft.XMLHTTP");} catch (e){}
    try{return new XMLHttpRequest();} catch (e){}
    alert("Your browser does not support this application.");
    return null;
}

function sendRequest(xhrReq)
{
    if(window.XMLHttpRequest){xhrReq.send(null);}
    else if(window.ActiveXObject){xhrReq.send();}
}

function xhrRequest(type) {
	var xhrSend;
	if (!type) {type = 'text';}
	xhrSend = createXMLHttpRequest();
	if(xhrSend.overrideMimeType){xhrSend.overrideMimeType('text/' + type);}	
	return (xhrSend);
}