﻿var $j = jQuery.noConflict();
$j(document).ready(function() {
    /*KeyListener.init();*/
    progressBar.Init();
    initFaders();

    var requestManager = Sys.WebForms.PageRequestManager.getInstance();
    /* begin request */
    requestManager.add_beginRequest(function(sender, args) {
        Sys.WebForms.PageRequestManager.getInstance()._scrollPosition = null;
        window.progress.BeginRequest();
    });
    /* end request */
    requestManager.add_endRequest(function(sender, args) {
        window.progress.EndRequest();
        progressBar.Init();
        initFaders();
        $j('#up_container').animate({ opacity: 'toggle' }, 5020);
        /*KeyListener.init();*/
    });
});

progressBar = function() {
  var _formCheckForm = null;
  this.get_FormCheckForm = function() {
    if (!_formCheckForm) { _formCheckForm = []; }
    return _formCheckForm;
  };

  var _summaryCheckForm = null;
  this.get_SummaryCheckForm = function() {
    if (!_summaryCheckForm) { _summaryCheckForm = []; }
    return _summaryCheckForm;
  };

  var _isLoadingNow = false;
  this.get_IsLoadingNow = function() { return _isLoadingNow; };
  this.set_IsLoadingNow = function(value) { _isLoadingNow = value; };

  var _prevElement = null;
  this.get_PrevElement = function() { return _prevElement; };
  this.set_PrevElement = function(value) { _prevElement = value; };

  /* Change History Begin */
  var _h = new Object();
  this.addHistory = function(form, name, value) {
    if (form && name && form != '' && name != '') {
      if (!_h[form] || _h[form] == "undefined") _h[form] = new Object();
      _h[form][name] = value;
    }
  }
  this.getHistroy = function(form, name) {
    if (!_h[form] || _h[form] == "undefined") return null;
    return _h[form][name];
  }
  this.clearHistory = function(form) {
    if (_h[form] || _h[form] == "undefined")
      _h[form] = null;
  }

  this.changeHistory = function(form) {
    this.clearHistory(form);
    var inputs = this.GetAllInputElements(form);
    for (var i = 0; i < inputs.length; i++) {
      this.addHistory(form, inputs[i].id, inputs[i].value);
    }
  }
  this.isHistoryChange = function(form) {
    var inputs = this.GetAllInputElements(form);
    for (var i = 0; i < inputs.length; i++) {
      var curr = inputs[i].value;
      var prev = this.getHistroy(form, inputs[i].id);

      if (prev == null) return false;
      if (curr != prev) return true;
    }
    return false;
  }
 
  this.GetAllInputElements = function(form) {
    return $j("#" + form).find("input:text, input:file, input:checkbox, input:radio, select, textarea");
  }
  /* Change History End */

  /* PostBack Query Begin */
  var _Query;
  this.pushQuery = function(element) {
    if (!_Query) _Query = new Array();
    _Query.push(element);
  }
  this.popQuery = function() {
    return _Query ? _Query.shift() : null;
  }
  /* PostBack Query End */

  progressBar.prototype.Initialize = function() {
    $j("input:text, input:file, input:password, textarea").bind("focus", { object: this }, this.elementActivated);
    $j("a, input:button, input:submit, input:radio, input:checkbox").bind("click", { object: this }, this.elementActivated);
    $j("select").bind("change", { object: this }, this.elementActivated );
  }
  progressBar.prototype.AddForm = function(area) {
    this.get_FormCheckForm().unshift(area);
    this.changeHistory(area);
  }
  progressBar.prototype.AddSummaryForm = function(summary) {
    this.get_SummaryCheckForm().unshift(summary);
    $j("#" + summary).bind("mouseover", { object: this }, this.summaryActivated);
    /*$j("#" + summary).bind("mousemove", {object: this}, this.summaryActivated);*/
  }

  progressBar.prototype.summaryActivated = function(event) {
    event.data.object.elementActivated(event);
  }
  progressBar.prototype.elementActivated = function(event) {
    if ((event.srcElement == null || event.srcElement == "undefined") &&
           (event.currentTarget == null || event.currentTarget == "undefined")) return;

    var eventElement = (event.srcElement != null) ? event.srcElement : event.currentTarget;
    var currArea = event.data.object.getFormByElement(eventElement.id);
    var prev = event.data.object.get_PrevElement();

    if (prev && prevArea != 'undefined') {
      var prevArea = event.data.object.getFormByElement(prev.id);
      if (prevArea != currArea) {
        event.data.object.saveForm(event.data.object, prevArea, this.id);
        event.data.object.changeHistory(prevArea);
      }
    }
    else
    {
			var forms = event.data.object.get_FormCheckForm();
			for(var i = 0; i < forms.length; i++)
			{
				if(event.data.object.isHistoryChange(forms[i]))
				{				
					event.data.object.saveForm(event.data.object, forms[i], this.id);
					event.data.object.changeHistory(forms[i]);
				}
			}
		}
    event.data.object.set_PrevElement(eventElement);
  }
  
  var focused;
  
  progressBar.prototype.saveForm = function(obj, prevArea, postBackElementId) { 
		focused = postBackElementId;
  
    if (obj.isHistoryChange(prevArea)) {
      /* hidden button must be server control 'Button' with UseSubmitBehavior="false" */
      var hiddenButton = $j("#" + prevArea).find(".hiddenButton");
      if (hiddenButton.length != 0) {
				if(postBackElementId != 'undefined')
				{
					var postBackElement = $j("#" + postBackElementId);
					if (postBackElement.length != 0) {
						var script = postBackElement[0].onclick ? postBackElement[0].onclick.toString() : postBackElement[0].toString();
						if (script.indexOf("__doPostBack") != -1 || script.indexOf("_DoPostBack") != -1) {
							script = script.toString().replace("function anonymous()", "").replace("\n", "").replace("\n", "").replace("\n", "").replace("{", "").replace("}", "");
							obj.pushQuery(script);
						}
					}
				}
        try 
        { 
					for(var i = 0; i < hiddenButton.length; i++)
						hiddenButton[i].onclick.call(); 
        }
        catch (e) { }
      }
    }
  }

  progressBar.prototype.getFormByElement = function(elementId) {
    var forms = this.get_FormCheckForm();
    if (elementId != '') {
      for (var i = 0; i < forms.length; i++) {
        if ($j("#" + forms[i]).find("#" + elementId).length != 0) { return forms[i]; }
      }
    }
    return null;
  };

  progressBar.prototype.BeginRequest = function() {
    $j("input:text").unmask();
    $j('.jq-block').hide();
    
    window.progress.set_IsLoadingNow(true);
    if ($j(".invisible").length == 0) {
      $j(document.body).prepend("<div class='invisible'><div class='wait-txt'>Please Wait...</div><div class='invWait'>&nbsp;</div></div>");
      $j(".invisible").bind("click", { object: this }, function() { return false; });
    }
    $j("body").bind('keypress', function(e) { return false; });
    $j("body").bind('keydown', function(e) { return false; });
    $j("input, select, a").bind('focus', function(e) { return false; });
  }

  progressBar.prototype.EndRequest = function() {
    var historyElement = this.popQuery();
    if (historyElement) {
      try { eval(historyElement); }
      catch (e) { }
    }
    else {
      $j(".invisible").css("display", "none");
      $j(".invisible").remove("");

      $j("body").unbind('keypress');
      $j("body").unbind('keydown');
      $j("input, select, a").unbind('focus');
      
      if(focused)
      {    
				var allowFocus = $j('#' + focused).is('input:text, input:password, textarea, select'); 
				if(allowFocus == true) 
				{				
					var focusedElement = $j('#' + focused);
					
					var timer = setTimeout(function() {
							clearTimeout(timer);
							var value = focusedElement.val();
							focusedElement.focus().val(value);
						}, 1000);
				}
				focused = null;
      }
      $j("input:text[@mask_attr]").each(function() {
        var mask = $j(this).attr('mask_attr');
        var isSet = $j(this).attr('mask_attr_set');
        if(mask && mask != 'undefined' && mask != '' && isSet == '0')
        {        
            $j(this).mask(mask);
        }
      });
     
      window.progress.set_IsLoadingNow(false);
    }
  }
}  
/* static member */
progressBar.Init = function()  
{
    if(window.progress == null)
        window.progress = new progressBar();

    var formsHiddenField = $j("#formIDsHiddenField");
    if(formsHiddenField.length != 0)
    {
        var forms = formsHiddenField[0].value.split(",");
        for(var i = 0; i < forms.length; i++)
            window.progress.AddForm(forms[i]);
    }    
    
    var summaryHiddenField = $j("#summaryIDsHiddenField");
    if(summaryHiddenField.length != 0)
    {
        var summary = summaryHiddenField[0].value.split(",");
        for(var j = 0; j < summary.length; j++)
            window.progress.AddSummaryForm(summary[j]);
    }
    window.progress.Initialize(); 
}

KeyListener = function() {}

	KeyListener.init = function() {
		$j("body").bind('keypress', KeyListener.eventHandler);
       }

    KeyListener.eventHandler = function(e) {
            var key = e.charCode ? e.charCode : e.keyCode ? e.keyCode : 0;
            var target = e.target.tagName.toLowerCase();
            if (key == 13 && target == "input")
            {
                e.preventDefault();
                var parentFieldset = $j(e.target).parents("fieldset ul div");
                parentFieldset = parentFieldset.find('input:submit.apply, input:submit.signin, input:submit.go, input:submit.submit, input:submit.update, input:submit.emptyCssClassForScriptSuppport, a.continue, input:button.submit').eq(0);
                if (parentFieldset.length > 0)
                {
                    var button = $j('#' + parentFieldset[0].id);
                    button.click();
                }
            }
		}
  
	/*--------------------------------------------------------------*/
  
  Vallidation = function() {}
  
  Vallidation.IsNumberKey = function(event) 
  {
      var charCode = (event.which) ? event.which : event.keyCode
     if (charCode > 31 && (charCode < 48 || charCode > 57) 
	 && (charCode < 96 || charCode > 105))
        return false;
     return true;    
  }

	/*--------------------------------------------------------------*/
  
  var isCtrl = false;
  function checkCreditCard(e, someEvent) {
    
    if (someEvent.keyCode == 17) {
      isCtrl = false;
      return false;
    }
    
    if (!/\d$/.test(e.value)) {
      e.value = '';
    }
        
    // Visa: length 16, prefix 4   
    if (/^4\d{0,15}$/.test(e.value)) {
      e.maxLength = '16';    
      return;
    }

    // Mastercard: length 16, prefix 51-55   
    if (/^5[1-5]\d{0,14}$/.test(e.value)) {
      e.maxLength = '16'; 
      return;
    }

    // Discover: length 16, prefix 6011   
    if (/^6011\d{0,12}$/.test(e.value)) {
      e.maxLength = '16';   
      return;
    }

    // American Express: length 15, prefix 34 or 37.    
    if (/^3[4,7]\d{0,13}$/.test(e.value)) {
      e.maxLength = '15';   
      return;
    }
  }
  function checkDigit(someEvent) {
    var result = ((someEvent.keyCode >= 48 && someEvent.keyCode <= 57)
       		 || (someEvent.keyCode >= 96 && someEvent.keyCode <= 105)
                      || someEvent.keyCode == 8
                      || someEvent.keyCode == 9
                      || someEvent.keyCode == 13
                      || someEvent.keyCode == 46
                      || someEvent.keyCode == 35
                      || someEvent.keyCode == 36
                      || someEvent.keyCode == 37
                      || someEvent.keyCode == 116
                      || (someEvent.keyCode == 67 && isCtrl == true)
                      || (someEvent.keyCode == 86 && isCtrl == true)
                      || (someEvent.keyCode == 88 && isCtrl == true)
                      || (someEvent.keyCode == 84 && isCtrl == true)
                      || (someEvent.keyCode == 78 && isCtrl == true)
                      || (someEvent.keyCode == 90 && isCtrl == true)
                      || someEvent.keyCode == 39);
    if (someEvent.keyCode == 17) {
      isCtrl = true;
      return true;
    }
    someEvent.returnValue = result;
    return result;
}

function ExtensionTextBoxHandler(e, someEvent) {    
    var result = /^[ \x00-\x80]*$/.test(e.value);
    someEvent.returnValue = result;
    return result;
}
  

