/*
** siteMenusetClasses("containerID or empty", "className for li with subclass", "className for a which is active according to the url", "(part of) url to match against href, to set active class on");    
** Usage: setMenusetClasses("", "hasSubClass", "activeClass", "/site/whatever");
*/

// siteMenusetClasses('','hasSubClass', 'active', '&{SELF}');

      function siteMenusetClasses(containerID, hasSubClassName, activeClassName, activeURL) {
        if (!hasSubClassName.length || !activeClassName.length) {
          return;
        }
        var containerObj;
        if (containerID.length) { containerObj = document.getElementById(containerID); } else { containerObj = document.body; }
        if (containerObj) {
          // alert(containerObj +" "+ containerObj.id +"\n"+activeURL);
          var divObjs = containerObj.getElementsByTagName("div");
          if (divObjs.length) {
            for(di = 0; di < divObjs.length; di++) {
              // alert(divObjs[di].outerHTML);
              if (divObjs[di].className == "submenu") {
                activeURL = activeURL.replace(/http:..[^\/]*/,"");
                var activeRE = new RegExp(activeURL);
                var ulObjs = containerObj.getElementsByTagName("ul")[0];
                var ulChildren = ulObjs.childNodes;
                if (ulChildren.length) {
                  // alert("Found : "+ulChildren.length);
                  for(i = 0; i < ulChildren.length; i++) {
                      if (ulChildren[i].tagName && ulChildren[i].tagName.toLowerCase() == 'li') {
                        /* Check if top level LI has a child UL element */
                        var subUlObj = ulChildren[i].getElementsByTagName("ul");
                        if (subUlObj && subUlObj.length) {
                          // alert("Found sub ul with: "+ ulChildren[i].outerHTML);
                          ulChildren[i].className = hasSubClassName;
                        }
                      }
                   }
                   // alert("Check 0"+divObjs[di].outerHTML);
                }
                /* Check if top level anchor is same as specified (uses regexp) */
                var anchorElements = ulObjs.getElementsByTagName("a");
                if (anchorElements && activeURL.length) {
                  for(j = 0; j < anchorElements.length; j++) {
                    // alert("Check 3:"+anchorElements[j].href +"\nMatch: "+anchorElements[j].href.match(activeRE) +" \n "+ anchorElements[j].className +" \n "+ activeURL);
                    if (anchorElements[j].href.match(activeRE) && anchorElements[j].className != activeClassName) {
                      // alert("Check 4:"+anchorElements[j].parentNode.outerHTML);
                      anchorElements[j].className = anchorElements[j].className +" "+ activeClassName;
                      if (anchorElements[j].parentNode.tagName.toLowerCase() == "li") {
                          anchorElements[j].parentNode.className = anchorElements[j].parentNode.className +" "+ activeClassName;
                      }
                      siteMenu_setParentClasses(anchorElements[j], activeClassName);
                    }
                  }
                }
                //alert(divObjs[di].outerHTML);
                di = divObjs.length;
              }
            }
          }
        }
}
      
function siteMenu_setParentClasses(startobj, objClass) {
  // alert("setParent "+startobj.outerHTML +","+ objClass);
  /* traverse parent of startObj. if parent has child of type a, change class. Do same with parent of startObj */
  if (startobj) {
    var parent = startobj.parentNode;
    if (parent.tagName.toLowerCase() != "div") {
      // alert(parent.tagName);
      var children = parent.childNodes;
      if (children && children.length) {
        for(i = 0; i < children.length; i++) {
          if (children[i].tagName && children[i].tagName.toLowerCase() == "a") {
            children[i].className = objClass;
          }
        }
      }
      siteMenu_setParentClasses(parent, objClass);
    } else if (parent.className == "sub" ) {
      parent.parentNode.className = parent.parentNode.className +" "+ objClass;
    }
  }
}

//**********************
// CHECKFORM
//**********************
function checkForm(param){
  // v1.01 2011-02-28
  // author: René Weteling / Caret CMS
  // currently supports check values: char, int, float, zip, tel, email, checked, date (yyyy-mm-dd)
  // needs Jquery and Jquery Color: http://plugins.jquery.com/project/color
  // set default values if none exist.
  param['inputBad'] = param['inputBad'] || '#FF0000';
  param['inputOk'] = param['inputOk'] || '#FFF'; 
  param['labelBad'] = param['labelBad'] || '#FF0000'; 
  param['labelOk'] = param['labelOk'] || '#000'; 
  var retval = true;
  var error = '';
  // check if there is a form.      
  if(param['form']){              
    // for each input field
    $('input, textarea, select', param['form']).each(function(){       
      var re = undefined;
      var tmpval = true;
      switch($(this).attr('check')){
        case 'char':
          re=/^.+$/; 
          break;          
            case 'int':
          re=/^\d+$/;
          break;
            case 'float':
          re=/^\d+\.?\d+?$/;
          break;
            case 'zip':
          re=/^\d{4}\s?\w{2}$/;
          break;
            case 'tel':
          re=/^\d{10}$/;
          break;
            case 'email':
          re= /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}$/;
          break;
            case 'date':
          re= /^[0-9]{4}-[0-9]{2}-[0-9]{2}$/;
          break;
            case 'time':
          re= /^[0-9]{2}:[0-9]{2}$/;
          break;
            case 'checked':
	  re= /^/;
          if(!$(this).attr("checked")){
            tmpval = false;
          }
          break;
            default:
	    re = undefined;
          //skip becouse this one has no check
      }       
      // handle regex
      if(re != undefined){      
        if(!re.test($(this).val())){
          tmpval = false;
        }  
          
      // handle visual 
      if(tmpval){
        $(this).animate({ backgroundColor: param['inputOk']});
        $('label[for='+$(this).attr('name')+']').animate({ color: param['labelOk']});        
      }else{           
        $(this).animate({ backgroundColor: param['inputBad']});   
        $('label[for='+$(this).attr('name')+']').animate({ color: param['labelBad']});        
        if($('label[for='+$(this).attr('name')+']').attr('error')){
          error+=$('label[for='+$(this).attr('name')+']').attr('error')+"\n";
        }
        retval = false;
      }    
  }    
    });    
  }  
  if(error.length > 0){
    alert(error);
  }  
  // return if the form passed the test of not.
  return retval;
}


//**********************
// INPUT VALUE FIELDS
//**********************
function inpFocus(obj, stdText) {
  if (obj.value == stdText) {
    obj.value = '';
  }
}

function inpBlur(obj, stdText) {
  if (obj.value == '') {
    obj.value = stdText;
  }
}
