// *** Version 4.0 (10.11.2006)
// *** Written by Todor Stamatov, Webgate JSC.

var USER_CONFIRM = new Object();

USER_CONFIRM.isOpera = navigator.userAgent.indexOf("Opera") > -1;
USER_CONFIRM.isIE    = navigator.userAgent.indexOf("MSIE") > 1 && !USER_CONFIRM.isOpera; 
USER_CONFIRM.isMoz   = navigator.userAgent.indexOf("Mozilla/5.") == 0 && !USER_CONFIRM.isOpera; 

USER_CONFIRM.ctrlColor = "#FACDCD";

document.write('<sc'+'ript language="javascript" type="text/javascript" src="js/confirm_patterns.js"></script>');

USER_CONFIRM.init_confirm = function()
{
   // ------------------ CONFIRM & UNCHANGED---------------- //
   
   // href tags
   var tags = document.getElementsByTagName('a');
   var i, len = tags.length, str;
   for (i = 0; i < len; i++) {
      var str = tags[i].getAttribute("wgConfirm");
      if (str) {
          tags[i].oldOnclick = tags[i].onclick; 
		  tags[i].onclick = function () { 
		     var conf = confirm(this.getAttribute("wgConfirm"));
			 if (conf && typeof(this.oldOnclick) == 'function') this.oldOnclick();
			 return conf;
          }
      }
   }
   
   // form tags
   tags = document.getElementsByTagName('form');
   len = tags.length;
   for (i = 0; i < len; i++) {
      str = tags[i].getAttribute("wgConfirm");
	  if (tags[i].onsubmit) tags[i].oldOnsubmit = tags[i].onsubmit;
	  if (str) {
		  tags[i].onsubmit = function () { 
			 var response = confirm(this.getAttribute("wgConfirm"));
			 if (response && this.oldOnsubmit){
                 return this.oldOnsubmit;
		     } else { return response; }
	      }
      }
      
      str = tags[i].getAttribute("wgValidate");
      if (str) {
         tags[i].onsubmit = USER_CONFIRM.validatePatterns
      }
      
      str = tags[i].getAttribute("wgChanged");
      if (str){
         USER_CONFIRM.saveFormValues(tags[i]);
         var atags = document.getElementsByTagName('a');
         var alen = atags.length;
         for(j=0; j<alen; j++){
            atags[j].parentForm = tags[i];
            if (atags[j].onclick) atags[j].prevClick = atags[j].onclick;
            atags[j].onclick = function ()
            {
               var F = this.parentForm;
               if (USER_CONFIRM.checkFormValues(F))
                  return confirm(F.getAttribute("wgChanged"));
               else if (this.prevClick) return this.prevClick();
            }
         }
      }
   }

   // textarea tags
   tags = document.getElementsByTagName('textarea');
   len = tags.length;
   for (i = 0; i < len; i++) {
      var str = tags[i].getAttribute("wgPattern");
      if (str) {
	      tags[i].oldColor = tags[i].style.backgroundColor;
	      tags[i].changeVal = false;
	      tags[i].onkeyup = function ()
	      {
                    if (this.value.match(USER_CONFIRM.patterns[this.getAttribute("wgPattern")]) && this.changeVal){
	                this.style.backgroundColor = this.oldColor ? this.oldColor : "";
	            }
	      }
	
	      tags[i].onblur = function ()
	      {  
                    if (!this.value.match(USER_CONFIRM.patterns[this.getAttribute("wgPattern")])){
	                this.style.backgroundColor = USER_CONFIRM.ctrlColor;
	                this.changeVal = true;
	            }
	            else
	               this.style.backgroundColor = this.oldColor ? this.oldColor : "";
	      }
      }
         
   }

   // input tags
   tags = document.getElementsByTagName('input');
   len = tags.length;
   for (i = 0; i < len; i++) {
      
      // --- PATTERNS ---- //
      var str = tags[i].getAttribute("wgPattern");
      
      if (str && (tags[i].type == "text" || tags[i].type == "password")) {
         USER_CONFIRM.patternDefs(tags[i]);
      }
      
      // --- SAME AS --- //
      var sameElem = tags[i].getAttribute("wgSameAs")
      if (sameElem){
         tags[i].oldColor = tags[i].style.backgroundColor;
         var Obj = eval("tags[i].form."+sameElem)
         if (typeof(Obj) != "undefined"){
            Obj.oldColor = Obj.style.backgroundColor;
            Obj.otherOnblur = Obj.onblur;
            Obj.otherOnkeyup = Obj.onkeyup;
            Obj.boundElement = tags[i];
         }
         
         Obj.onkeyup = function()
         {
            if (typeof(this.otherOnkeyup) == "function") this.otherOnkeyup();
            var Obj = this.boundElement
            if (typeof(Obj) != "undefined" && Obj.value == this.value){
               this.style.backgroundColor = this.oldColor ? this.oldColor : "";
               Obj.style.backgroundColor = Obj.oldColor ? Obj.oldColor : "";
            }
         
         }
         
         Obj.onblur = function ()
         {
            if (typeof(this.otherOnblur) == "function") this.otherOnblur();
            var Obj = this.boundElement
            if (typeof(Obj) != "undefined" && Obj.value != this.value){
               this.style.backgroundColor = USER_CONFIRM.ctrlColor;
               Obj.style.backgroundColor = USER_CONFIRM.ctrlColor;
               this.changeVal = true;
            }
            else{
               this.style.backgroundColor = this.oldColor ? this.oldColor : "";
               Obj.style.backgroundColor = Obj.oldColor ? Obj.oldColor : "";
            }
         }
      }

      // --- SUBMIT BUTTON --- //
      
      if (tags[i].type!="submit") continue;
      
      var str1 = tags[i].getAttribute("wgUnchanged");
      if (str1) {
         USER_CONFIRM.saveFormValues(tags[i].form);
         tags[i].onclick = USER_CONFIRM.unchangedMessage;
      }

      var str2 = tags[i].getAttribute("wgConfirm");
      if (str2 && !str1) {
         tags[i].onclick = function () { return confirm(this.getAttribute("wgConfirm")); }
      }

      var str3 = tags[i].getAttribute("wgDisableunchanged");
      if (str3){
         tags[i].form.disabledButton = tags[i];
         tags[i].disabled = true;
         tags[i].form.onkeyup = function ()
         { 
            if (this.changeStatus) return;
            if (USER_CONFIRM.checkFormValues(this)){
               this.changeStatus = true;
               this.disabledButton.disabled = false;
            }
            else this.changeStatus = false;
         }
      }
      
      var str4 = tags[i].getAttribute("wgIgnoreValidate");
      if (str4){
          tags[i].onclick = function ()
          {
             var str = this.getAttribute("wgConfirm");
             if (str){
                 if (confirm(str)) {
	                 this.form.disableValidation = true;
					 if (this.form.oldOnsubmit) return this.form.oldOnsubmit(); else return true;
                 } else { return false; }
             }
             this.form.disableValidation = true;
             if (this.form.oldOnsubmit) return this.form.oldOnsubmit(); else return true;
          }
     }
   }
   

   // select tags
   tags = document.getElementsByTagName('select');
   len = tags.length;
   for (i = 0; i < len; i++) {

	  // ----------- AUTO SUBMIT ------------ //
      var str = tags[i].getAttribute("wgAutosubmit");
      if (str){
         tags[i].onchange = function ()
         {
            var att = this.getAttribute("wgAutosubmit");
            var Obj = document.getElementById(att);
            if (!Obj){
               var Objects = document.getElementsByName(att);
               if (Objects[0]) Obj = Objects[0];
            }
            if (Obj && Obj.click) Obj.click();
         }
      }
      
      // ----------- PATTERN VALIDATION ------------ //
      var str = tags[i].getAttribute("wgPattern");
      if (str){
	      USER_CONFIRM.patternDefs(tags[i]);
	  }
   }

   
   // ----------- FOCUS -------------- //
   
   USER_CONFIRM.set_focus('a');
   USER_CONFIRM.set_focus('input');
   USER_CONFIRM.set_focus('select');
   USER_CONFIRM.set_focus('textarea');
   
   // ---------- HOVER ----------- //
   USER_CONFIRM.set_other();
   
     
}

USER_CONFIRM.set_focus = function(tagName)
{
   var tags = document.getElementsByTagName(tagName);
   var len = tags.length;
   for (i = 0; i < len; i++) {
      var str = tags[i].getAttribute("wgSetfocus");
      if (str) {
         
         USER_CONFIRM.focusElem = tags[i];
         
         if (tagName=="a" || tagName=="select" || tagName=="img"){
            tags[i].focus();
            USER_CONFIRM.focusFunc = function (){ USER_CONFIRM.focusElem.focus(); }
            continue;
         }

         USER_CONFIRM.focusFunc = function () {
             var att_value = USER_CONFIRM.focusElem.getAttribute("wgSetfocus");
             if (att_value == "begin"){
                if (USER_CONFIRM.isMoz) USER_CONFIRM.focusElem.setSelectionRange(0,0);
                if (USER_CONFIRM.isOpera){
                   var range = USER_CONFIRM.focusElem.createTextRange();
                   var ln = USER_CONFIRM.focusElem.value.length;
                   range.moveStart("textedit", ln);
                   range.select();
                }
             }
             else if (att_value == "select") {
                 if (USER_CONFIRM.isIE || USER_CONFIRM.isOpera){
                    var range = USER_CONFIRM.focusElem.createTextRange();
                    range.select();
                 }
                 else if (USER_CONFIRM.isMoz) {
                   var ln = USER_CONFIRM.focusElem.value.length;
                   USER_CONFIRM.focusElem.setSelectionRange(0,ln);
                 }
             }
             else if (att_value == "clear") {
                 USER_CONFIRM.focusElem.value = "";
             }
             else { // --- (att_value == "end" or true) --- //
                if (USER_CONFIRM.isIE || USER_CONFIRM.isOpera){
                   var range = USER_CONFIRM.focusElem.createTextRange();
                   range.moveStart("character", range.text.length);
                   range.select()
                }
                else if (USER_CONFIRM.isMoz) {
                   var ln = USER_CONFIRM.focusElem.value.length;
                   USER_CONFIRM.focusElem.setSelectionRange(ln,ln);
                }
             }
             
             USER_CONFIRM.focusElem.focus();
         }
      }
   }
   if (USER_CONFIRM.focusElem) setTimeout("USER_CONFIRM.focusFunc()",100);
}

//-- check changes in values --//
USER_CONFIRM.unchangedMessage = function ()
{
   var changed = USER_CONFIRM.checkFormValues(this.form);

   if (!changed){
      return confirm(this.getAttribute("wgUnchanged"));
   }
   else if (this.getAttribute("wgConfirm")){
      return confirm(this.getAttribute("wgConfirm"));
   }
}

// validate patterns where
USER_CONFIRM.validatePatterns = function ()
{  
   if (this.disableValidation){
       this.disableValidation = false;
       return;
   }
   
   var focusElement = null
   // input tags
   var tags = this.getElementsByTagName('input');
   var len = tags.length, invalidCols = false;
   for(var i=0; i<len; i++){
      
      // -- SAME AS -- //
      var sameElem = tags[i].getAttribute("wgSameAs");
      var notMatch = false;
      if (sameElem){
         var Obj = eval("tags[i].form."+sameElem);
         if (typeof(Obj) != "undefined" && tags[i].value != Obj.value)
            notMatch = true;
      }

      // -- PATTERN CHECK -- //
      var str = tags[i].getAttribute("wgPattern");
      
      if ((USER_CONFIRM.patterns[str] && !tags[i].value.match(USER_CONFIRM.patterns[str])) || notMatch){
         invalidCols = true;
         tags[i].style.backgroundColor = USER_CONFIRM.ctrlColor;
         if (!focusElement) focusElement = tags[i];
      }
   }
   
   // textarea tags
   var tags = this.getElementsByTagName('textarea');
   var len = tags.length;
   for(var i=0; i<len; i++){
      // -- PATTERN CHECK -- //
      var str = tags[i].getAttribute("wgPattern");
      
      if ((USER_CONFIRM.patterns[str] && !tags[i].value.match(USER_CONFIRM.patterns[str])) || notMatch){
         invalidCols = true;
         tags[i].style.backgroundColor = USER_CONFIRM.ctrlColor;
         if (!focusElement) focusElement = tags[i];
      }
   }
   
   // select tags
   var tags = this.getElementsByTagName('select');
   var len = tags.length;
   for(var i=0; i<len; i++){
      // -- PATTERN CHECK -- //
      var str = tags[i].getAttribute("wgPattern");
      
      if ((USER_CONFIRM.patterns[str] && !tags[i].value.match(USER_CONFIRM.patterns[str])) || notMatch){
         invalidCols = true;
         tags[i].style.backgroundColor = USER_CONFIRM.ctrlColor;
         if (!focusElement) focusElement = tags[i];
      }
   }
   
   if (invalidCols){
      alert(this.getAttribute("wgValidate"));
      focusElement.focus();
      return false;
   }
   
   if (this.oldOnsubmit) return this.oldOnsubmit();

}

USER_CONFIRM.patternDefs = function (tag)
{
     tag.oldColor = tag.style.backgroundColor;
     tag.changeVal = false;
     tag.onkeyup = function ()
     {
        if (this.value.match(USER_CONFIRM.patterns[this.getAttribute("wgPattern")]) && this.changeVal){
           this.style.backgroundColor = this.oldColor ? this.oldColor : "";
           //search childs for match
           USER_CONFIRM.setHighlight(this);
        }
     }

     tag.onblur = function ()
     {  
        if (!this.value.match(USER_CONFIRM.patterns[this.getAttribute("wgPattern")])){
           this.style.backgroundColor = USER_CONFIRM.ctrlColor;
           this.changeVal = true;
        }
        else
           this.style.backgroundColor = this.oldColor ? this.oldColor : "";
        
        USER_CONFIRM.setHighlight(this);
     }
}

USER_CONFIRM.set_other = function ()
{
    var elems = document.body.getElementsByTagName("*");
    var len = elems.length;
    for(var i=0; i<len; i++){
       
       var att = elems[i].getAttribute("wgHighlight");

       if (att){
          var childs = elems[i].getElementsByTagName("*");
          var len_childs = childs.length
          if (len_childs>0){
             elems[i].highlightChilds = []
             var pos1 = att.indexOf(":");
             var pos2 = att.indexOf(":",pos1+1);
             elems[i].highlightStyles = {correct:att.substr(0,pos1), wrong:att.substring(pos1+1,pos2), empty:att.substr(pos2+1)}
          }
       	  for(var j=0; j<len_childs; j++){
       	     att_child = childs[j].getAttribute("wgPattern");
       	     if (att_child){
       	        childs[j].highlightParent = elems[i];
       	        elems[i].highlightChilds[elems[i].highlightChilds.length] = childs[j];
       	     }
       	  }
       }
       
       if (elems[i].tagName!="FORM" && elems[i].tagName!="INPUT" && elems[i].tagName!="TEXTAREA" &&
           elems[i].tagName!="SELECT" && elems[i].tagName!="IFRAME" && elems[i].tagName!="OPTION" &&
           elems[i].tagName!="FRAME"){
       
	       //set hover
    	   var att = elems[i].getAttribute("wgHover");
       	   if (att){
        	  elems[i].oldClass = elems[i].className ? elems[i].className : "";
	          elems[i].onmouseover = function ()
    	      {
              this.className = this.getAttribute("wgHover");
        	  }
	          elems[i].onmouseout = function ()
    	      {
        	      this.className = this.oldClass;
	          }
	       }
       }
    }

}

USER_CONFIRM.setHighlight = function(E)
{
   if (E.highlightParent){
      var parentElem = E.highlightParent;
      var allCorrect = true, allEmpty = true;
      for(j in parentElem.highlightChilds){
         cElem = parentElem.highlightChilds[j]
         if (!cElem.value.match(USER_CONFIRM.patterns[cElem.getAttribute("wgPattern")] )){
            allCorrect = false;
         }
         if (!cElem.value.match("^\s*$")){
            allEmpty = false;
         }
      }
      if (allEmpty)
         parentElem.className = parentElem.highlightStyles.empty ? parentElem.highlightStyles.empty : ""
      else if (allCorrect)
         parentElem.className = parentElem.highlightStyles.correct
      else
         parentElem.className = parentElem.highlightStyles.wrong
   }
}

USER_CONFIRM.saveFormValues = function (F)
{
	 if (F.savedState) return;
	 var ftags = F.getElementsByTagName('input');
	 var flen = ftags.length;
	 for(var j=0; j<flen; j++){
	    ftags[j].old_value = ftags[j].value;
	    if (ftags[j].type=="text" || ftags[j].type=="radio" || ftags[j].type=="password")
	       ftags[j].old_value = ftags[j].value;
	    else if (ftags[j].type=="checkbox")
	       ftags[j].old_value = ftags[j].checked;
	 }
	 
	 ftags = F.getElementsByTagName('select');
	 flen = ftags.length;
	 for(var j=0; j<flen; j++){
	    ftags[j].old_value = ftags[j].selectedIndex;
	 }
	
	 ftags = F.getElementsByTagName('textarea');
	 flen = ftags.length;
	 for(var j=0; j<flen; j++){
	    ftags[j].old_value = ftags[j].value;
	 }
	 
	 F.savedState = true;
}

USER_CONFIRM.checkFormValues = function (F)
{
   var ftags = F.getElementsByTagName('input');
   var flen = ftags.length;
   for(var j=0; j<flen; j++){
      if (ftags[j].type=="text" || ftags[j].type=="radio" || ftags[j].type=="password"){
         if (ftags[j].old_value != ftags[j].value) return true;
      }
      else if (ftags[j].type=="checkbox" && ftags[j].old_value != ftags[j].checked){
            return true;
      }
   }
   
   ftags = F.getElementsByTagName('select');
   flen = ftags.length;
   for(var j=0; j<flen; j++){
      if (ftags[j].old_value != ftags[j].selectedIndex) return true;
   }

   ftags = F.getElementsByTagName('textarea');
   flen = ftags.length;
   for(var j=0; j<flen; j++){
      if (ftags[j].old_value != ftags[j].value) return true;
   }
   
   return false;
}

// START SEARCHING
if ( typeof(USER_CONFIRM.init_confirm) == "function" ) USER_CONFIRM.init_confirm();
