/**
submits the form, specified with 'form_name'
*/
function OM_submitForm(form_name) 
{
  var form_dom = OM_findObj(form_name);

  if (form_dom != null) 
  {
   form_dom.submit();
  }
}//end of function

function OM_test()
{
  alert("test");
}

/**
removes all instances of 'toRem' in 'arr' and returns the cleaned array 
*/
function OM_arrRemove(arr, toRem)
{
  var retArr = new Array();
  for(var i = 0; i < arr.length; ++i)
  {
    if(arr[i] != toRem)
    {
      retArr[i] = arr[i];
    }
  }
  return retArr;
}//end of function

/**
finds the object 'n' in destination 'd' ('d' is default. document)
*/
function OM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=OM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}//end of function

/**
checks if 'toCheck' is allready in 'arr'
returns true, if 'toCheck' was found or false if not
*/
function OM_inArray(arr, toCheck)
{
  var retVal = false;
  for(var i = 0; i < arr.length; ++i)
  {
    if(arr[i] == toCheck)
    {
      retVal = true;
    }
  }
  return retVal;
}//end of function

/*==========================================================================# 
# * Function for adding a Filter to an Input Field                          # 
# * @param  : [filterType  ] Type of filter 0=>Alpha, 1=>Num, 2=>AlphaNum   # 
# * @param  : [evt         ] The Event Object                               # 
# * @param  : [allowDecimal] To allow Decimal Point set this to true        # 
# * @param  : [allowCustom ] Custom Characters that are to be allowed       # 
#==========================================================================*/ 
function OM_filterInput(filterType, evt, allowDecimal, allowCustom){ 
    var keyCode, Char, inputField, filter = ''; 
    var alpha = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
    var num   = '0123456789'; 
    // Get the Key Code of the Key pressed if possible else - allow 
    if(window.event){ 
        keyCode = window.event.keyCode; 
        evt = window.event; 
    }else if (evt)keyCode = evt.which; 
    else return true; 
    // Setup the allowed Character Set 
    if(filterType == 0) filter = alpha; 
    else if(filterType == 1) filter = num; 
    else if(filterType == 2) filter = alpha + num; 
    if(allowCustom)filter += allowCustom; 
    if(filter == '')return true; 
    // Get the Element that triggered the Event 
    inputField = evt.srcElement ? evt.srcElement : evt.target || evt.currentTarget; 
    // If the Key Pressed is a CTRL key like Esc, Enter etc - allow 
    if((keyCode==null) || (keyCode==0) || (keyCode==8) || (keyCode==9) || (keyCode==13) || (keyCode==27) )return true; 
    // Get the Pressed Character 
    Char = String.fromCharCode(keyCode); 
    // If the Character is a number - allow 
    if((filter.indexOf(Char) > -1)) return true; 
    // Else if Decimal Point is allowed and the Character is '.' - allow 
    else if(filterType == 1 && allowDecimal && (Char == '.') && inputField.value.indexOf('.') == -1)return true; 
    else return false; 
}
/*===========================================================================# 
# * Function to convert decimal values to hexadecimal                        # 
# * @param : [dec]  value in decimal                                         # 
# * @return : [hex] value as hex-code                                        # 
#===========================================================================*/
function OM_dechex(dec) {
  var z = new Array("0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
    "A", "B", "C", "D", "E", "F");
  var x = "";
  var i = 1, v = dec, r = 0;
  while (v > 15) {
    v = Math.floor(v / 16);
    i++;
  }
  v = dec;
  for (j=i; j >= 1; j--) {
    x = x + z[Math.floor(v / Math.pow(16, j-1))];
    v = v - (Math.floor(v / Math.pow(16, j-1)) * Math.pow(16, j-1));
  }
  return x;
}

/*===========================================================================# 
# * Functions to enable highlight on mose-over for element x                 # 
# * @param : [x]  the element to be highlighted on mouse-over                # 
#===========================================================================*/
function OM_ein(x) {document.getElementById(x).style.backgroundColor="#8BC1ED";}
function OM_aus(x)
{
  if( (x % 2) == 0) {
    document.getElementById(x).style.backgroundColor="#ffffff";
  } else {
    document.getElementById(x).style.backgroundColor="#EEEEEE";
  }
}

/* sets the id of 'obj' to value of 'hidden_obj' 
 * if obj.id == hidden_obj.value, sets hidden_obj.value to undefined 
 * @param ['obj']
 * @param ['hidden_obj']
 */
function OM_setHidden(obj, hidden_obj)
{
  var hidden = OM_findObj(hidden_obj);
  if (hidden.value == obj.id) {
    hidden.value = "undefined";
  } else {
  hidden.value = obj.id;
  }
}

function OM_getUrlParam(name, default_value) {
  var retval = default_value;
  var urlquery = location.href.split("?");
  if(urlquery[1]) {
    var params = urlquery[1].split("&");
    
    for(var i = 0; i < params.length; i++) {
      var pSet = params[i].split("=");
      if ((pSet.length == 2) && (pSet[0] == name)) {
        retval= pSet[1]; 
        break;
      }
    }
  }
  return retval;
}
	
function OM_closePopup() {
  if(opener) opener.focus();
  window.close();
}

function OM_grades(current_grade_pos, current_grade, all_grades, hidden_field_to_set, value_for_hidden_field, toggle_image) {
   //to make inquires on the state of an object we first need to find the DOM object
   var x=OM_findObj(current_grade);
   
   if (x != null) {
     if(!x.isSet) {
       //set own state
       x.oSrc=x.src; 
       x.src=toggle_image;
       x.isSet = true;
       //unset all others
       var array_all_grades = all_grades.split(",");
       
       for(i=0; i<(array_all_grades.length); i++) {
         var grade_name = array_all_grades[i];
         if (i != current_grade_pos) {
           //Find elelent in DOM
           var grade=OM_findObj(grade_name);
           if (grade.isSet) {
             grade.src = grade.oSrc;
             grade.oSrc = false;    
             grade.isSet = false;
           }
         }//end of if
       }//end of for
       
       //set hidden field for post
       //we overwrite whatever it was set to before (may it be another value or nothing)
       var hidden_field=OM_findObj(hidden_field_to_set); 
       if (hidden_field != null) {
         hidden_field.value =  value_for_hidden_field;
       }       
     } //end of x is set
     
     else { // if it is not set --------------------------------------------------------------------------
       x.src = x.oSrc;
       x.oSrc = false;    
       x.isSet = false;   
       
       //we need to set the hidden field back to nothing, or else the
       //form check will not detect that a section might be unanswered
       var hidden_field=OM_findObj(hidden_field_to_set); 
       if (hidden_field != null) {
         hidden_field.value =  "";
       }     
     }//end of x is unset   ------------------------------------------------------------------------------
   }       
}//end of function OM_grades 

//This function ads obj to a list, or removes it, if its already in there
function OM_clickDel(obj) {
  var del_list = OM_findObj("del_list");
  if (del_list != null) 
  {
    if (obj.checked == true) 
    {
      var del_array = del_list.value.split(",");
      del_array.push(obj.name);
      if(del_list.value == "") {
        del_list.value = del_array.join(""); 
      }else{
        del_list.value = del_array.join(",");
      }
    }
    else 
    {
      var del_array = del_list.value.split(",");
      del_array = OM_arrRemove(del_array, obj.name);
      del_list.value = del_array.join(",");
    }
  }
}

/**
*This function check emailvalidity 
*@var email
*@return bool true for email valid false for email invalid
*/
function OM_checkEmail(Email)
{
	var retVal = false;
  var sQtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]';
  var sDtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]';
  var sAtom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+';
  var sQuotedPair = '\\x5c[\\x00-\\x7f]';
  var sDomainLiteral = '\\x5b(' + sDtext + '|' + sQuotedPair + ')*\\x5d';
  var sQuotedString = '\\x22(' + sQtext + '|' + sQuotedPair + ')*\\x22';
  var sDomain_ref = sAtom;
  var sSubDomain = '(' + sDomain_ref + '|' + sDomainLiteral + ')';
  var sWord = '(' + sAtom + '|' + sQuotedString + ')';
  var sDomain = sSubDomain + '(\\x2e' + sSubDomain + ')*';
  var sLocalPart = sWord + '(\\x2e' + sWord + ')*';
  var sAddrSpec = sLocalPart + '\\x40' + sDomain; // complete RFC822 email address spec
  var sValidEmail = '^' + sAddrSpec + '$'; // as whole string
  
  var reValidEmail = new RegExp(sValidEmail);
  
  if (reValidEmail.test(Email))
	{
    retVal = true;
  }
  return retVal;
}

/**
*This function adds time to an date in string format and returns new datestring
*@var datestring e.g = 25-08-2009 11:00
*@var years
*@var months
*@var days
*@var hours
*@var minutes
*@var seconds
*@return datestring e.g 01-09-2009 11:00
*/
function OM_addTimeIntervall(datestring, years, days, hours, minutes, seconds) 
{
  //alert(datestring,years,months,days,hours,minutes,seconds)
  //rreplace chars with ":"
  datestring = datestring.replace(/-/g,":");
  datestring = datestring.replace(/\s/,":");
  //split with ":"
  var dateArray = datestring.split(":");
  //Create and set the date, is in milliseconds
  var startDate = new Date();
  startDate.setDate(dateArray[0]);
  startDate.setMonth(dateArray[1]-1);
  startDate.setYear(dateArray[2]);
  startDate.setHours(dateArray[3]);
  startDate.setMinutes(dateArray[4]);
  //If second are set in string set them also to newdate
  if (dateArray.length == 6 ) {
    startDate.setSeconds(dateArray[5]);
  }
  
  //Get time in milliseconds since 1970
  var dateInMs = startDate.getTime();
  //Add time intervall
  dateInMs = dateInMs + (years*days*hours*minutes*seconds*1000);
  
  //Init enddate
  var endDate = new Date();
  //Set date from milliseconds
  endDate.setTime(dateInMs);
  //Get Values from Endate
  var day = new String(endDate.getDate());
  var month = new String(endDate.getMonth() + 1);
  var year = new String(endDate.getFullYear());
  var hour = new String(endDate.getHours());
  var minute = new String(endDate.getMinutes());
  var second = new String(endDate.getSeconds());
  
  //Format values
  if (day.length == 1) {
  day = '0'+day;
  }
  if (month.length == 1) {
  month = '0'+month;
  }
  if (hour.length == 1) {
  hour = '0'+hour;
  }
  if (minute.length == 1) {
  minute = '0'+minute;
  }
  if (second.length == 1) {
  second = '0'+second;
  }
  
  var retVal = day + '-' + month +'-'+ year +' '+ hour +':'+ minute;  
  if (dateArray.length == 6 ) {
    retVal = retVal + ':' + second;
  }
  return retVal;

}

function OM_getDateForIndex(selectedIndex)
{
  var myDate = new Date();
	
  var now = myDate.getTime();
  var theDate = 0;
  var startDate = "";
  var endDate = "";
	
  switch(selectedIndex)
  {		
	  case 0: //today
	    var y = myDate.getFullYear();
	    var m = myDate.getMonth()+1;
	    var d = myDate.getDate();
	    startDate = d + '.' + m + '.' + y;
	    
	    var y = myDate.getFullYear();
	    var m = myDate.getMonth()+1;
	    var d = myDate.getDate();
	    endDate = d + '.' + m + '.' + y;
	  break;
		
	  case 1: //yesterday
	    theDate = now - (1000*60*60*24);
	    myDate.setTime(theDate);
			
	    var y = myDate.getFullYear();
	    var m = myDate.getMonth() + 1;
	    var d = myDate.getDate();
	    startDate = d + '.' + m + '.' + y;
	    
	    var y = myDate.getFullYear();
	    var m = myDate.getMonth()+1;
	    var d = myDate.getDate();
	    endDate = d + '.' + m + '.' + y;
	  break;
	
	  case 2: //this week (MO - SO)
	    if(myDate.getDay() == 0)
      {
        theDate = now - ((myDate.getDay() - 1) * 1000*60*60*24); // noch nicht sicher
        tempDate = theDate;
        theDate = theDate - (7*1000*60*60*24);
      
        startDate = new Date(); 
        startDate.setTime(theDate);   
        var y = startDate.getFullYear();
        var m = startDate.getMonth() + 1;
        var d = startDate.getDate();
        startDate = d + '.' + m + '.' + y;
        
        endDate = new Date(); 
        endDate.setTime(tempDate - 1000*60*60*24);
        var y = endDate.getFullYear();
        var m = endDate.getMonth() + 1;
        var d = endDate.getDate();
        endDate = d + '.' + m + '.' + y;
      }
      else
      {
        startDate = new Date(); 
        startDate.setTime(myDate.getTime());
        
        theDate = now - ((startDate.getDay() - 1) * 1000*60*60*24);
        startDate.setTime(theDate);
        var y = startDate.getFullYear();
        var m = startDate.getMonth() + 1;
        var d = startDate.getDate();
        startDate = d + '.' + m + '.' + y;
        
        var y = myDate.getFullYear();
        var m = myDate.getMonth() + 1;
        var d = myDate.getDate();
        endDate = d + '.' + m + '.' + y;
      }
	  break;
		
		case 3:  //last week (MO - SO)
			if(myDate.getDay() == 0)
			{
        theDate = now - (6 * 1000*60*60*24);
        tempDate = theDate;      
        theDate = theDate - (7*1000*60*60*24);
           
        startDate = new Date(); 
        startDate.setTime(theDate);   
        var y = startDate.getFullYear();
        var m = startDate.getMonth() + 1;
        var d = startDate.getDate();
        startDate = d + '.' + m + '.' + y;
        
        endDate = new Date(); 
        endDate.setTime(tempDate - 1000*60*60*24);
        var y = endDate.getFullYear();
        var m = endDate.getMonth() + 1;
        var d = endDate.getDate();
        endDate = d + '.' + m + '.' + y;
			}
			else
			{
        theDate = now - ((myDate.getDay() - 1) * 1000*60*60*24);
        tempDate = theDate;
        theDate = theDate - (7*1000*60*60*24);
        
        startDate = new Date(); 
        startDate.setTime(theDate);   
        var y = startDate.getFullYear();
        var m = startDate.getMonth() + 1;
        var d = startDate.getDate();
        startDate = d + '.' + m + '.' + y;
        
        endDate = new Date(); 
        endDate.setTime(tempDate - 1000*60*60*24);
        var y = endDate.getFullYear();
        var m = endDate.getMonth() + 1;
        var d = endDate.getDate();
        endDate = d + '.' + m + '.' + y;
			}
		break;
		
    case 4:   //last 7 days
			startDate.setTime(now - (7 * 1000*60*60*24) );    
	    var y = startDate.getFullYear();
	    var m = startDate.getMonth() + 1;
	    var d = startDate.getDate();
	    startDate = d + '.' + m + '.' + y;
	    
	    var y = myDate.getFullYear();
	    var m = myDate.getMonth() + 1;
	    var d = myDate.getDate();
	    endDate = d + '.' + m + '.' + y;
    break;
		
		case 5:  //this month
			var y = myDate.getFullYear();
			var m = myDate.getMonth() + 1;
			startDate = 1 + '.' + m + '.' + y;
			
			var y = myDate.getFullYear();
			var m = myDate.getMonth() + 1;
			var d = myDate.getDate();
			endDate = d + '.' + m + '.' + y;
		break;
		
		case 6:  //last month
			var y = myDate.getFullYear();
			var m = myDate.getMonth();
					
			if (m > 0)
			{
	  	  startDate = '1.' + m + '.' + y;
		  }
			else
			{
				startDate = '1.12.' + (y - 1);
			}		
				
			endDate = new Date();
			endDate.setDate(1);
			theDate = endDate.getTime();
			theDate = theDate - (1000*60*60*24);
			endDate.setTime(theDate);
			var y = endDate.getFullYear();
			var m = endDate.getMonth() + 1;
			var d = endDate.getDate();
			endDate = d + '.' + m + '.' + y;
		break;
  }
  var dates = new Array(startDate, endDate);
  
  return dates;
}
