Index: casetracker.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/casetracker/casetracker.module,v
retrieving revision 1.64
diff -u -F^f -r1.64 casetracker.module
--- casetracker.module	30 Jun 2006 09:20:43 -0000	1.64
+++ casetracker.module	16 Aug 2006 21:48:12 -0000
@@ -1,2998 +1,3024 @@
-<?php
-  // $Id: casetracker.module,v 1.64 2006/06/30 09:20:43 killes Exp $
-  /**
-   * The below function invokes the appropriate help
-   */
-function casetracker_help($section) {
-  switch ($section) {
-    case 'admin/modules#description':
-      return t('Enables the handling of projects and their cases.');
-
-    case 'admin/help#casetracker':
-      $help = '<h3>Case Tracker</h3>'.
-      '<p>Basic casetracker module structure :</p>'.
-      '<pre>'.
-      'project nodes >>> casetracker_project'.
-      '<br />cases nodes >>>> casetracker_case';
-      return $help;
-    case 'search/casetracker/case':
-      return t('Enter the keyword "case" to search for cases');
-    case 'search/casetracker':
-      return t('Enter the keyword "case" to search for cases');
-    /* case 'node/add#casetracker_project':
-       return t('Create a project that you can then place cases under.'); */
-
-    case 'node/add#casetracker_case':
-      return t('Open a new case.');
-    
-  }
-}
-
-/**
- * The menu system of the casetracker module
- */
-function casetracker_menu($may_cache) {
-  $items = array();
-
-  if ($may_cache) {
-    $access = user_access('access casetracker');
-    /*$items[] = array('path' => 'node/add/casetracker_project',
-      'title' => t('project') ,
-      'access' => user_access('create projects'));*/
-    $items[] = array(
-      'path' => 'node/add/casetracker_case',
-      'title' => t('case') ,
-      'access' =>user_access('create project cases'));
-    $items[] = array(
-      'path' => 'casetracker',
-      'title' => t('case tracker'),
-      'callback' => 'casetracker_show_mycases',
-      'access' => $access);
-    $items[] = array(
-      'path' => 'casetracker/projects',
-      'title' => t('projects'),
-      'callback' => 'casetracker_projects_table',
-      'callback arguments' => 'all_projects',
-      'access' => $access);
-    $items[] = array(
-      'path' => 'casetracker/projects/myprojects',
-      'title' => t('my projects'),
-      'callback' => 'casetracker_projects_table',
-      'access' => $access);
-    $items[] = array(
-      'path' => 'casetracker/cases',
-      'title' => t('cases'),
-      'callback' => 'casetracker_cases_table',
-      'callback arguments' => 'all_cases',
-      'access' => $access);
-    $items[] = array(
-      'path' => 'casetracker/cases/mycase',
-      'title' => t('my cases'),
-      'callback' => 'casetracker_cases_table',
-      'access' => $access);
-    $items[] = array(
-      'path' => 'casetracker/cases/mycase/all',
-      'title' => t('all'),
-      'callback' => 'casetracker_cases_table',
-      'type' => MENU_DEFAULT_LOCAL_TASK,
-      'access' => $access); 
-    $items[] = array(
-      'path' => 'casetracker/cases/mycase/opened_by_me',
-      'title' => t('opened by me'),
-      'callback' => 'casetracker_cases_table',
-      'type' => MENU_LOCAL_TASK,
-      'access' => $access);   				    
-    $items[] = array(
-      'path' => 'casetracker/cases/mycase/assigned_to_me',
-      'title' => t('assigned to me'),
-      'callback' => 'casetracker_cases_table',
-      'type' => MENU_LOCAL_TASK,
-      'access' => $access);   				               
-    $items[] = array(
-      'path' => 'casetracker/search',
-      'title' => t('search cases'),
-      'callback' => 'casetracker_search_form',
-      'access' => $access);
-    $items[] = array(
-      'path' => 'casetracker/comments',
-      'title' => t('comments'),
-      'callback' => 'casetracker_comment_form',
-      'access' => $access,
-      'type' => MENU_CALLBACK);
-    $items[] = array(
-      'path' => 'admin/case',
-      'title' => t('case'),
-      'callback' => 'casetracker_case_detail');
-    /* ##########################  NEW UI FOR ADMINISTERING CASE FIELDS ##################################*/  
-    $items[] = array(
-      'path' => 'admin/case/states',
-      'title' => t('Administer case fields'),
-      'callback' => 'casetracker_administer_case_fields');
-    $items[] = array(
-      'path' => 'admin/case/states/edit',
-      'title' => t('case state view'),
-	  'type' => MENU_DEFAULT_LOCAL_TASK);  
-    $items[] = array(
-      'path' => 'admin/case/states/add',
-      'title' => t('case state add'),
-      'callback' => 'casetracker_case_state_add',
-      'type' => MENU_LOCAL_TASK
-	  ); 
-	$items[] = array(
-      'path' => 'admin/case/states/delete',
-      'title' => t('case state delete'),
-      'callback' => 'casetracker_case_state_delete',
-      'type' => MENU_CALLBACK
-	  ); 
-	$items[] = array(
-      'path' => 'casetracker/cases/all',
-      'title' => t(''),
-      'callback' => 'casetracker_cases_table',
-      'type' => MENU_CALLBACK
-	  );   
-	  
-    /*################################################################################################*/  
-   /* $items[] = array(
-      'path' => 'admin/case/casetracker_case_status',
-      'title' => t('case status'),
-      'callback' => 'casetracker_case_table_view',
-      'callback arguments' => arg(2));
-    $items[] = array(
-      'path' => 'admin/case/casetracker_case_status/view',
-      'title' => t('view'),
-      'weight' => -10,
-      'type' => MENU_DEFAULT_LOCAL_TASK);
-    $items[] = array(
-      'path' => 'admin/case/casetracker_case_status/add',
-      'title' => t('add'),
-      'callback' => 'casetracker_status_add',
-      'type' => MENU_LOCAL_TASK);
-    $items[] = array(
-      'path' => 'admin/case/casetracker_case_status/edit',
-      'title' => t('edit'), 'callback' => 'casetracker_case_table_edit',
-      'callback arguments' => arg(2),
-      'weight' => -9,
-      'type' => MENU_LOCAL_TASK);
-    $items[] = array(
-      'path' => 'admin/case/casetracker_case_priority',
-      'title' => t('case priority'),
-      'callback' => 'casetracker_case_table_view',
-      'callback arguments' => arg(2));
-    $items[] = array(
-      'path' => 'admin/case/casetracker_case_priority/view',
-      'title' => t('view'),
-      'weight' => -10,
-      'type' => MENU_DEFAULT_LOCAL_TASK);
-    $items[] = array(
-      'path' => 'admin/case/casetracker_case_priority/add',
-      'title' => t('add'),
-      'callback' => 'casetracker_priority_add',
-      'type' => MENU_LOCAL_TASK);
-    $items[] = array(
-      'path' => 'admin/case/casetracker_case_priority/edit',
-      'title' => t('edit'), 'callback' => 'casetracker_case_table_edit',
-      'callback arguments' => arg(2),
-      'weight' => -9,
-      'type' => MENU_LOCAL_TASK);
-    $items[] = array(
-      'path' => 'admin/case/casetracker_case_type',
-      'title' => t('case type'),
-      'callback' => 'casetracker_case_table_view',
-      'callback arguments' => arg(2));
-    $items[] = array(
-      'path' => 'admin/case/casetracker_case_type/view',
-      'title' => t('view'),
-      'weight' => -10,
-      'type' => MENU_DEFAULT_LOCAL_TASK);
-    $items[] = array(
-      'path' => 'admin/case/casetracker_case_type/add',
-      'title' => t('add'),
-      'callback' => 'casetracker_type_add',
-      'type' => MENU_LOCAL_TASK);
-    $items[] = array(
-      'path' => 'admin/case/casetracker_case_type/edit',
-      'title' => t('edit'), 'callback' => 'casetracker_case_table_edit',
-      'callback arguments' => arg(2),
-      'weight' => -9,
-      'type' => MENU_LOCAL_TASK);
-    $items[] = array(
-      'path' => 'admin/case/delete',
-      'title' => t('Deletion of case fields'),
-      'callback' => 'casetracker_case_table_delete',
-      'access' => $access,
-      'type' => MENU_CALLBACK); */
-    $items[] = array(
-      'path' => 'casetracker/jump_to_case',
-      'title' => t('Following case found'),
-      'callback' => 'jump_to_case_form_submit',
-      'access' => $access,
-      'type' => MENU_CALLBACK);
-    $items[] = array(
-      'path' => 'casetracker/jump_to_case/no_record',
-      'title' => t('No matching records found'),
-      'callback' => 'jump_to_case_no_result',
-      'access' => $access,
-      'type' => MENU_CALLBACK);
-    $items[] = array(
-      'path' => 'casetracker/jump_to_case/found_record',
-      'title' => t('Following records found'),
-      'callback' => 'jump_to_case_found_result',
-      'access' => $access,
-
-      'type' => MENU_CALLBACK);				 
-   $items[] = array(
-     'path' => 'project/cases',
-     'title' => 'Cases for',
-     'callback' => 'casetracker_cases_table',
-     //'callback arguments' => arg(2),
-     'access' => $access,
-     'type' => MENU_CALLBACK);	
-   $items[] = array(
-     'path' => 'casetracker/autocomplete', 
-     'title' => t('user autocomplete'),
-     'callback' => 'casetracker_autocomplete', 
-     'access' => 1, 
-     'type' => MENU_CALLBACK);	
-  }
-  return $items;
-}
-
-/**
- *  Function to call the serach form
- */
- 
-function casetracker_search_form() {
-  drupal_goto("search/casetracker");
-}
-
-/**
- * Setting the appropriate permission
- */
-
-function casetracker_perm() {
-  $perms = array(
-                 'create projects',
-                 'access own projects',
-                 'create project cases',
-                 'edit own project cases',
-                 'edit own projects',
-                 'access casetracker',
-                 'assign case',
-                 'set case status'
-				 );
-  return $perms;
-}
-
-function casetracker_case_access($op, $node) {
-  global $user;
-  if ($op == 'create') {
-    return user_access('create project cases');
-  }
-  if ($op == 'update' || $op == 'delete') {
-    if (user_access('edit own project cases') && ($user->uid == $node->uid)) {
-      return TRUE;
-    }
-  }
-}
-
-/**
- * Function to display all the cases created by the logged in user in a tabular form
- */
- 
-function casetracker_cases_table($argument = null) {
-   global $user;
-   theme_add_style(drupal_get_path('module', 'casetracker') .'/casetracker.css');
-   $status_arr = casetracker_case_state_option('status');
-   $status_id_arr = array_keys($status_arr);
-   $classes = array($status_id_arr[0] => 'opened',$status_id_arr[1]=>'closed',$status_id_arr[2]=>'resolvedstaging',$status_id_arr[3]=>'resolvedproduction',$status_id_arr[4]=>'tested_staging',$status_id_arr[5]=>'resolved');
-   $headers = array(
-   array('data' => t('Case ID'), 'field' => 'cs.case_id'),
-   array('data' => t('Title'), 'field' => 'n.title'),
-   array('data' => t('Last updated'), 'field' => 'c.last_comment_timestamp', 'sort' => 'desc'),
-   array('data' => t('Priority'), 'field' => 'cs.case_priority_id'),
-   array('data' => t('Status'), 'field' => 'cs.case_status_id'),
-   array('data' => t('Type'), 'field' => 'cs.case_type_id'),
-   array('data' => t('Assigned to'), 'field' => 'cs.assign_to')
-   );
-   switch(arg(3)) {
-     case 'assigned_to_me': 
-       $sql = db_rewrite_sql("SELECT * FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE cs.assign_to = %d and n.type ='%s'");
-       $arguments = array($user->uid, 'casetracker_case');
-       break;
-     case 'opened_by_me':
-       $sql = db_rewrite_sql("SELECT * FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE n.uid = %d and n.type ='%s'");
-       $arguments = array($user->uid, 'casetracker_case');
-       break;
-     case 'priority':
-       $case_id = (int)arg(4);
-       $sql = db_rewrite_sql("SELECT * FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE n.type ='%s' AND cs.case_priority_id = %d");
-       $arguments = array('casetracker_case',$case_id);	  	 
-	   break; 
-	 case 'state':
-       $case_id = (int)arg(4);
-       $sql = db_rewrite_sql("SELECT * FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE n.type ='%s' AND cs.case_status_id = %d");
-       $arguments = array('casetracker_case',$case_id);	  	 
-	   break;
-	 case 'type':
-       $case_id = (int)arg(4);
-       $sql = db_rewrite_sql("SELECT * FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE n.type ='%s' AND cs.case_type_id = %d");
-       $arguments = array('casetracker_case',$case_id);
-	   break;       
-     default :
-       if (is_numeric(arg(2))) {
-         $argument = arg(2);
-       }
-       if (!$argument ) {
-         $sql = db_rewrite_sql("SELECT * FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE ( n.uid = %d OR cs.assign_to = %d ) AND n.type ='%s'");
-         $arguments = array($user->uid, $user->uid, 'casetracker_case');
-       }
-      if($argument == 'all_cases'){
-         $sql = db_rewrite_sql("SELECT * FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE n.type ='%s'");
-         $arguments = array('casetracker_case');
-       }  
-      if(is_numeric($argument)) {
-        $project_name_for_case_listing = db_result(db_query("SELECT title FROM {node} WHERE nid = %d",arg(2)));
-        drupal_set_title("Cases for"." ".$project_name_for_case_listing);
-        if ( arg(3) == 'all') {
-  // ########################################################################################################### 
-  // project/cases/170/all/state/6
-        //var_dump(arg(4));
-        if(arg(4)==t('state')){
-            drupal_set_title(t('Cases for '.$project_name_for_case_listing.'<br>'.l(t('Click here to view all cases'),'project/cases/'.arg(2).'/all')));
-        $case_id = arg(5);
-        $sql = db_rewrite_sql("SELECT * FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE n.type ='%s' AND p_id = %d AND cs.case_status_id = %d");
-        $arguments = array('casetracker_case', $argument,$case_id);	
-         }
-         else if(arg(4)=='priority'){
-            drupal_set_title(t('Cases for '.$project_name_for_case_listing.'<br>'.l(t('Click here to view all cases'),'project/cases/'.arg(2).'/all')));
-        $case_id = arg(5);
-        $sql = db_rewrite_sql("SELECT * FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE n.type ='%s' AND p_id = %d AND cs.case_priority_id = %d");
-        $arguments = array('casetracker_case', $argument,$case_id);	
-         }
-         else if(arg(4)==t('type')){
-            drupal_set_title(t('Cases for '.$project_name_for_case_listing.'<br>'.l(t('Click here to view all cases'),'project/cases/'.arg(2).'/all')));
-        $case_id = arg(5);
-        $sql = db_rewrite_sql("SELECT * FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE n.type ='%s' AND p_id = %d AND cs.case_type_id = %d");
-        $arguments = array('casetracker_case', $argument,$case_id);	
-         }
-         else {        
-          $project_name_for_case_listing = db_result(db_query("SELECT title FROM {node} WHERE nid = %d",arg(2)));
-          drupal_set_title("Cases for"." ".$project_name_for_case_listing);
-		  $sql = db_rewrite_sql("SELECT * FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE n.type ='%s' AND p_id = %d ");
-		  $arguments = array('casetracker_case', $argument);
-		}  
-        }
-       
- // #############################################################################################################       
-        else {          
-         $sql = db_rewrite_sql("SELECT n.nid, n.* FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE n.type ='%s' AND p_id = %d AND n.uid = %d ");
-         $arguments = array('casetracker_case', $argument, $user->uid);
-        }
-      }  
-    }
-    //echo $sql;
-   $tablesort = tablesort_sql($headers);
-   //echo $sql;
-   $result = pager_query($sql.$tablesort, 10, 0, NULL, $arguments);
-   while ($node = db_fetch_object($result)) {
-     $project_no = db_result(db_query("SELECT max(project_no) FROM {casetracker_project} WHERE  nid = %d ", $node->p_id)        	);
-     $disp = arg(1);
-     if(arg(2) == t('mycase')){
-	     $disp = t('mycases');
-	 }
-	 else if(arg(2)==t('all')) {
-	     $disp = t('all_filtered_case');
-	 }
-	 else if($disp=t('cases') && is_numeric(arg(2)) && arg(3)==t('all')) {
-	     $disp = 'tttt'; // just transfering the control to default case of the below switch stmt;
-	 }
-	 else {
-	     $disp = arg(1);
-	 }  
-	 //var_dump($disp);    
-	 switch($disp) {  
-	 case t('cases'): //Gives a listing of all cases
-	 drupal_set_title('All cases listing');
-	 $rows[] = array('data' => array($project_no.'-'.$node->case_id, l(t(truncate_utf8($node->title, 50)),'node/'.$node->nid).theme('mark', node_mark($node->nid, $node->changed)),format_interval(time() - $node->last_comment_timestamp, 2),l(casetracker_get_value($node->case_priority_id),'casetracker/cases/'.'all'.'/'.'priority/'.$node->case_priority_id),l(casetracker_get_value($node->case_status_id),'project/cases/'.'all'.'/'.'state'.'/'.htmlentities(urlencode($node->case_status_id))),l(casetracker_get_value($node->case_type_id),'project/cases/'.'all'.'/'.'type'.'/'.htmlentities(urlencode($node->case_type_id))),l(casetracker_get_name($node->assign_to),'user/'.$node->assign_to)), 'class' => $classes[$node->case_status_id]);	
-	 break;
-	 
-	 case t('all_filtered_case'):
-	   $filter_basis = arg(3);
-	   switch($filter_basis) {
-	    case t('state'): 
-	     $filter_basis = t('case status');
-	     break;
-	    case t('priority'):
-	     $filter_basis = t('case priority');
-	     break;
-	    case t('type'):
-	     $filter_basis = t('case type');
-	     break;
-	   }  
-	   drupal_set_title(t('The cases has been filtered on the basic of '.$filter_basis).'<br />'.l(t('Click here to view all cases'),'casetracker/cases'));
-	   $rows[] = array('data' => array($project_no.'-'.$node->case_id, l(t(substr($node->title, 0, 50)),'node/'.$node->nid).theme('mark',node_mark($node->nid, $node->changed)),format_interval(time() - $node->last_comment_timestamp, 2),casetracker_get_value($node->case_priority_id),casetracker_get_value($node->case_status_id),casetracker_get_value($node->case_type_id),l(casetracker_get_name($node->assign_to),'user/'.$node->assign_to)), 'class' => $classes[$node->case_status_id]);	
-	 break;
-	  
-	 case t('mycases'): // Gives a listing of all cases either assigned to me or created by me
-	 $rows[] = array('data' => array($project_no.'-'.$node->case_id, l(t(substr($node->title, 0, 50)),'node/'.$node->nid).theme('mark',node_mark($node->nid, $node->changed)),format_interval(time() - $node->last_comment_timestamp, 2),casetracker_get_value($node->case_priority_id),casetracker_get_value($node->case_status_id),casetracker_get_value($node->case_type_id),l(casetracker_get_name($node->assign_to),'user/'.$node->assign_to)), 'class' => $classes[$node->case_status_id]);	
-	 break;
-	 
-	 default:  
-	 $rows[] = array('data' => array($project_no.'-'.$node->case_id, l(t(substr($node->title, 0, 50)),'node/'.$node->nid).theme('mark', node_mark($node->nid, $node->changed)),format_interval(time() - $node->last_comment_timestamp, 2),l(casetracker_get_value($node->case_priority_id),'project/cases/'.$node->p_id.'/'.'all'.'/'.'priority/'.$node->case_priority_id),l(casetracker_get_value($node->case_status_id),'project/cases/'.$node->p_id.'/'.'all'.'/'.'state'.'/'.htmlentities(urlencode($node->case_status_id))),l(casetracker_get_value($node->case_type_id),'project/cases/'.$node->p_id.'/'.'all'.'/'.'type'.'/'.htmlentities(urlencode($node->case_type_id))),l(casetracker_get_name($node->assign_to),'user/'.$node->assign_to)), 'class' => $classes[$node->case_status_id]);	
-   }
-   }
-   if(count($rows)==0) {
-     $output = t('You have no cases');
-   }
-   else {
-     //project/cases/145/all
-   if(is_numeric(arg(2))) {
-    $output = l(t('Add case on %s ', array('%s' => $project_name_for_case_listing)),'node/add/casetracker_case/'.arg(2));    
-    $output .= t('<br><br>');
-    }  
-     $output .= theme('table', $headers, $rows);
-     $output .= theme('pager', NULL, 15, 0);
-   }
-   return $output;
-}
-
-/**
- * Function to display all the projects created by logged in user in tabular form.
- */
- 
-function casetracker_projects_table($argument = null) {
-  global $user;
-  theme_add_style(drupal_get_path('module', 'casetracker') .'/casetracker.css');
-  $classes = array(1 => 'opened','closed','resolvedstaging','resolvedproduction','tested_staging','resolved');
-
-  $headers = array(
-                   array('data' => t('Project ID'), 'field' => 'cp.project_no'),
-                   array('data' => t('Title'), 'field' => 'n.title'),
-   				   array('data' => t('Last updated'), 'field' => 'c.last_comment_timestamp'),
-                   array('data' => t('Edit')),
-                   array('data' => t('Add a case to this project')));
-  if ($argument == 'all_projects') {
-    $sql = db_rewrite_sql("SELECT n.*, cp.* FROM {node} n INNER JOIN {casetracker_project} cp on n.vid = cp.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE n.type IN (".str_pad('', count(variable_get('casetracker_project_node_types',array('casetracker_project'))) * 5 - 1, "'%s',").")");
-    $arguments = variable_get('casetracker_project_node_types',array('casetracker_project'));
-
-  }
-  else {
-    $sql = db_rewrite_sql("SELECT n.*, cp.* FROM {node} n INNER JOIN {casetracker_project} cp on n.vid = cp.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE n.uid = %d AND n.type IN (".str_pad('', count(variable_get('casetracker_project_node_types',array('casetracker_project'))) * 5 - 1, "'%s',").")");
-    $arguments = array_merge(array($user->uid), variable_get('casetracker_project_node_types',array('casetracker_project')));
-  } 
-  $tablesort = tablesort_sql($headers);
-  $result = pager_query($sql . $tablesort,10, 0, NULL, $arguments);
-  while ($node = db_fetch_object($result)) {
-    // var_dump($node);
-     if ($argument == 'all_projects') {
-       $link = 'project/cases/'.$node->nid.'/all';
-     }
-	 else {
-	   $link = 'project/cases/'.$node->nid.'/all';
-	 }
-     $rows[] = array('data' => array($node->project_no, l(t($node->title), $link),date('m/d/Y-h:i',$node->changed),l(t('Edit'), 'node/'.$node->nid), l(t('Add case to this project'), 'node/add/casetracker_case/'.$node->nid)));
-  }
-  if(count($rows)==0) {
-    $output = t('You have no projects');
-  }
-  else {
-    $output .= theme('table', $headers, $rows);
-    $output .= theme('pager', NULL, 15, 0);
-  }
-  return $output;
-}
-
-/**
- * This function is used to display a links visible in the middle portion of the page.
- */
-
-function theme_casetracker_casetracking_links() {
-  $title = t('Use the following links to track the current user\'s cases.');
-  $items[] = l(t('My Cases'), 'casetracker/cases/mycase');
-  $items[] = l(t('My Projects'), 'casetracker/projects');
-  $items[] = l(t('Search Cases'), 'casetracker/search');
-  return theme('item_list', $items, $title, 'ul');
-}
-
-/**
- * The below function calls the above theme function
- */
-
-function casetracker_show_mycases() {
-  return theme('casetracker_casetracking_links');
-}
-
-/**
- * The following function provides a link in the central page to add/edit/view
- * case_type, case_priority & case_status
- */
-
-function casetracker_case_detail() {
-  drupal_set_title(t('Administering case fields'));
-  $title = t('Click on the link below to administer case states');
-  $items[] = l('Case state add ', 'admin/case/states/add');
-  $items[] = l('Case state edit', 'admin/case/states');
-  $items[] = l('Case state delete', 'admin/case/states');
-  return theme('item_list', $items, $title, 'ul');
-}
-
-/**
- * Implementation of hook_view
- */
- 
-function casetracker_case_view(&$node, $teaser = false, $page = false) {
-  if ($page) {
-    $project_name_breadcrumb = db_result(db_query("SELECT title FROM {node} WHERE nid = %d",$node->p_id));
-    drupal_set_breadcrumb(array(l(t('Home'), NULL), l(t('projects'), 'casetracker/projects'), l(t('%name', array('%name' => $project_name_breadcrumb)), 'node/'.$node->p_id),l(t('all cases'),'project/cases/'.$node->p_id.'/all')));
-    $node = node_prepare($node, $teaser);
-    $project = node_load(array('nid' => $node->p_id));
-    $project_no = db_result(db_query("SELECT max(project_no) FROM {casetracker_project} WHERE  nid = %d", $node->p_id));
-    $output = '<div class="case">';
-    $rows = array();
-    $rows[] = array(t('Case no'), $project_no.'-'.$node->case_id);
-    $rows[] = array(t('Project:'), l($project->title,'node/'.$node->p_id));
-    $rows[] = array(t('Title:'), $node->title);
-    $rows[] = array(t('Opened by:'), check_plain(casetracker_get_name($node->uid)));
-    $rows[] = array(t('Status:'), casetracker_get_value($node->case_status_id));
-    $rows[] = array(t('Assigned:'), casetracker_get_name($node->assign_to));
-    $rows[] = array(t('Priority:'), casetracker_get_value($node->case_priority_id));
-    $rows[] = array(t('Type:'), casetracker_get_value($node->case_type_id)); 
-    $rows[] = array(t('Opened on:'), date('D, d F Y , g:i A', $node->created)); 
-    $rows[] = array(t('Last modified:'), date('D, d F Y , g:i A', $node->changed)); 
-    $output .= '<div class="summary">'. theme('table', array(), $rows) .'</div>';
-    $output .= '<p>'. t('Case Description') .'</p>';
-    $output .= '<p>'. $node->body .'</p>';
-    $output .= '</div>';
-    $node->body = $output;
-  }
-}
-
-/**
- * This  function returns the human readable name of the node types present in the casetracker module namely
- * casetracker_project & casetracker_case
- */
-
-function casetracker_node_info() {
-  return array(
-               'casetracker_case' => array('name' => t('case'), 'base' => 'casetracker_case')         
-              // 'casetracker_project' => array('name' => t('project'), 'base' => 'casetracker_project'),
-               );
-}
-
-/**
- * The function display form of the casetracker_project node
- */
-
-/*
-function casetracker_project_form(&$node) {
-  $form['title'] = array(
-                                           '#type' => 'textfield',
-                                           '#title' => t('Title'),
-                                           '#required' => TRUE,
-                                           '#default_value' => $node->title);
-  $form['body_filter']['body'] = array(
-                                          '#type' => 'textarea',
-                                          '#title' => t('Body'),
-                                          '#default_value' => $node->body,
-                                          '#rows' => 20,
-                                          '#required' => TRUE);
-  $form['body_filter']['format'] = filter_form($node->format);
-
-  if (module_exist('og') && variable_get('og_node_type', 'og') == 'casetracker_project') {
-    $form = og_form($node);
-  }
-
-  return $form;
-}
-*/
-
-/**
- * Display form of the casetracker_case node
- */
-
-function casetracker_case_form(&$node) {
-  global $user;
-  $form['case_detail'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Case information'),
-    '#collapsible' => FALSE,
-    '#collapsed' => TRUE);
-  $case_status_options = casetracker_case_state_option('status');
-  $keys = array_keys($case_status_options); 
-  $result = db_query(db_rewrite_sql("SELECT * FROM {node} n WHERE n.type IN (".str_pad('', count(variable_get('casetracker_project_node_types', array('casetracker_project')))* 5 - 1, "'%s',").")"), variable_get('casetracker_project_node_types',array('casetracker_project')));
-  while ($row = db_fetch_array($result)) {
-     $project_options[$row['nid']] = $row['title'];
-  }  
-  $default_project =  arg(3);
-  $form['case_detail']['p_id'] = array(
-    '#type' => 'select',
-    '#title' => t('Project'),
-    '#default_value' => isset($default_project) ? $default_project : $node->p_id,
-    '#options' => $project_options,
-    '#description' => t(''));
-												   
-  if(user_access('assign case')) {
-  $form['case_detail']['assign_to'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Assign to'),
-    '#maxlength' => 60,
-    '#autocomplete_path' => 'casetracker/autocomplete',
-    '#attributes' => $arr_assign_yes,
-    '#required' => TRUE,
-    '#default_value' => isset($node->assign_to) ? casetracker_get_name($node->assign_to) : $node->name
-    );    
-	}
-	else {
-	  $default_assign_to_label = isset($node->assign_to)?casetracker_get_name($node->assign_to):variable_get('casetracker_default_assign_to','anonymous');
-	  $form['case_detail']['assign_to1'] = array(
-      '#value' => t('<b>Assign to:</b> %assign_to <br /><br /> ', array('%assign_to' => $default_assign_to_label)),
-      '#description' => t('foo'));
-    $form['case_detail']['assign_to'] = array(
-      '#type' => 'hidden',
-      '#value' => $default_assign_to_label,
-      '#description' => t('foo')
-      ); 
-	}  										
-   if(user_access('set case status')) {
-     $form['case_detail']['case_status_id'] = array(
-       '#type' => 'select',
-       '#title' => t('Status'),
-       '#default_value' => $node->case_status_id,
-       '#options' => $case_status_options,
-       '#description' => t(''));
-   } 
-   else {
-     $default_case_status_label = isset($node->case_status_id)?$case_status_options[$node->case_status_id]:$case_status_options[variable_get('casetracker_default_case_status',$keys[0])];
-     $default_case_status_label1 = isset($node->case_status_id)?$node->case_status_id:variable_get('casetracker_default_case_status',$keys[0]);
-     $form['case_detail']['case_status_id1'] = array(
-       '#value' => t('<b>Status:</b> %status ', array('%status' => $default_case_status_label)),
-       '#description' => t('foo'));
-      $form['case_detail']['case_status_id'] = array(
-       '#type' => 'hidden',
-       '#value' => $default_case_status_label1,
-       '#description' => t(''));
-   }   
-                                            
-                                             
-  $case_priority_options = casetracker_case_state_option('priority');
-  $form['case_detail']['case_priority_id'] = array(
-                                                   '#type' => 'select',
-                                                   '#title' => t('Priority'),
-                                                   '#default_value' => isset($node->case_priority_id)?$node->case_priority_id:3,
-                                                   '#options' => $case_priority_options,
-                                                   '#description' => t(''));
-  $case_type_options =  casetracker_case_state_option('type');
-  $form['case_detail']['case_type_id'] = array(
-
-                                               '#type' => 'select',
-                                               '#title' => t('Type'),
-                                               '#default_value' => $node->case_type_id,
-                                               '#options' => $case_type_options,
-                                               '#description' => t(''));
-  $form['case_detail']['title'] = array(
-                                        '#type' => 'textfield',
-                                        '#title' => t('Title'),
-                                        '#required' => TRUE,
-                                        '#default_value' => $node->title);
-  $form['case_detail']['body'] = array(
-                                       '#type' => 'textarea',
-                                       '#title' => t('Body'),
-                                       '#default_value' => $node->body,
-                                       '#rows' => 20,
-                                       '#required' => TRUE);
-  $form['case_detail']['format'] = filter_form($node->format);
-  return $form;
-}
-/**
- * The following function validate the case creation form.
- */
-
-function casetracker_case_validate(&$node) {
-  if ($node->title) {
-    if (is_numeric($node->title)) {
-      form_set_error('title', t('The title must be a string.'));
-    }
-  }
-}
-
-/**
- *  Implementation of hook_validate
- */
-/** function casetracker_project_validate(&$node) {
-  if (module_exist('og') && variable_get('og_node_type', 'og') == 'casetracker_project') {
-    og_validate($node);
-  }
-}
-*/
-
-/**
- *  Implementation of hook_insert
- */
-
-function casetracker_case_insert($node) {
-  global $user;
-  db_query("INSERT INTO {casetracker_case} (nid, vid, p_id, case_sender_uid, case_priority_id, case_type_id, case_status_id, assign_to, case_id) VALUES (%d, %d, %d, %d, %d, %d, %d, %d, %d)", $node->nid, $node->vid, $node->p_id, $node->uid, $node->case_priority_id, $node->case_type_id, $node->case_status_id, casetracker_get_uid($node->assign_to), db_next_id('case_id'));
-
-  //Sending mail when the case is created.
-  $project_name = db_result(db_query('SELECT title FROM {node} WHERE nid = %d ', $node->p_id));
-  casetracker_mail($node, 'insert', $project_name);
-}
-
-
-/**
- *  Implementation of hook_delete
- */
-
-function casetracker_case_delete($node) {
-  $project_name = db_result(db_query("SELECT title FROM {node} n WHERE n.nid = %d", $node->nid));
-  casetracker_mail($node, 'delete', $project_name);
-  
-  // Deleting the corresponding comment
-  $result = db_query("SELECT cid FROM {comments} WHERE nid = %d", $node->nid);
-  while ($row = db_fetch_array($result)) {
-  $sid = db_result(db_query("SELECT sid FROM {casetracker_comment} WHERE cid = %d", $row['cid']));
-  db_query("DELETE FROM {casetracker_comment_status} WHERE sid = %d", $sid);
-  db_query('DELETE FROM {casetracker_comment} WHERE cid = %d', $row['cid']);
-  }
-  db_query('DELETE FROM {casetracker_case} WHERE nid = %d', $node->nid); 
-   
-
-}
-
-/**
- * Implementation of hook_update
- */
-
-function casetracker_case_update($node) {
-  if ($node->revision) {
-    global $user;
-     if(arg(4)=='revert') {
-       db_query("INSERT INTO {casetracker_case} (nid, vid, p_id, case_sender_uid, case_priority_id, case_type_id, case_status_id, assign_to, case_id) VALUES (%d, %d, %d, %d, %d, %d, %d, %d, %d)", $node->nid, $node->vid, $node->p_id, $user->uid, $node->case_priority_id, $node->case_type_id, $node->case_status_id,$node->assign_to, $node->case_id);
-     }
-     else {
-       db_query("INSERT INTO {casetracker_case} (nid, vid, p_id, case_sender_uid, case_priority_id, case_type_id, case_status_id, assign_to, case_id) VALUES (%d, %d, %d, %d, %d, %d, %d, %d, %d)", $node->nid, $node->vid, $node->p_id, $user->uid, $node->case_priority_id, $node->case_type_id, $node->case_status_id,casetracker_get_uid($node->assign_to), $node->case_id);
-     }  
-	  
-  }
-  else {
-    db_query('UPDATE {casetracker_case} SET p_id = %d, case_priority_id = %d, case_type_id = %d, case_status_id = %d, assign_to = %d, vid = %d WHERE nid = %d AND vid = %d', $node->p_id, $node->case_priority_id, $node->case_type_id, $node->case_status_id, casetracker_get_uid($node->assign_to), $node->vid, $node->nid, $node->vid);
-  }
-  $result = db_query('SELECT n.title FROM {node} n INNER JOIN {casetracker_case} c ON n.nid = c.p_id WHERE c.nid = %d AND c.vid = %d ', $node->nid, $node->vid);
-  $row = db_fetch_array($result);
-  $project_name = $row['title'];
-  //Sending email notification when case updated.
-  casetracker_mail($node, 'update', $project_name);
-}
-
-/**
- *  Implementation of hook_load
- */
- 
-function casetracker_case_load($node) {
-  $additions = db_fetch_object(db_query('SELECT p_id, case_priority_id, case_type_id, assign_to, case_status_id, case_sender_uid, case_id FROM {casetracker_case} WHERE nid = %d AND vid = %d', $node->nid, $node->vid));
-  return $additions;
-}
-
-/**
- *  Implementation of hook_access
- */
- 
-/* function casetracker_case_access($op, $node) {
-  global $user;
-  if ($op == 'create') {
-    return user_access('create project cases');
-  }
-  if ($op == 'update' || $op == 'delete') {
-    if (user_access('edit own project cases') && ($user->uid == $node->uid)) {
-      return TRUE;
-    }
-  }
-}
-*/
-
-/**
- *  Implementation of hook_access
- */
- 
-/* function casetracker_project_access($op, $node) {
-  global $user;
-  if ($op == 'create') {
-    return user_access('create projects');
-  }
-  if ($op == 'update' || $op == 'delete') {
-    if (user_access('edit own projects') && ($user->uid == $node->uid)) {
-      return TRUE;
-    }
-  }
-}
-*/
-/**
- *  Implementation of hook_link
- */
- 
-function casetracker_case_link($type, $node = 0, $main) {
-  $links = array();
-  if ($type == 'node' && $node->type == 'casetracker_case') {
-    if (casetracker_case_access('update', $node) && !user_access('administer nodes')) {
-      $links[] = l(t('edit this case node'), "node/$node->nid/edit");
-    }
-  }
-  return $links;
-}
-
-/**
- * Implementation of hook_insert for casetracker_project
- */
-  
-
-/**
- * Implementation of hook_delete for the casetracker_project
- */
-
-/*function casetracker_project_delete($node) {
-  // Deleting all the cases with in the project and thereafter deleting all the comments on the deleting cases.
-  $result = db_query("SELECT nid from {casetracker_case} WHERE p_id = %d", $node->nid);
-  // deleting all the cases under the project & all the comments under the case.
-  while ($row = db_fetch_array($result)) {
-    if ($row['nid']) {
-      db_query("DELETE FROM {casetracker_case} where nid = %d", $row['nid']);
-      $result = db_query("SELECT cid FROM {comments} WHERE nid = %d", $row['nid']);
-      while ($row1 = db_fetch_array($result)) {
-        $sid = db_result(db_query("SELECT sid FROM {casetracker_comment} WHERE cid = %d", $row1['cid']));
-        db_query("DELETE FROM {casetracker_comment_status} WHERE sid = %d", $sid);
-        db_query('DELETE FROM {casetracker_comment} WHERE cid = %d', $row1['cid']);     }
-      node_delete($row['nid']);
-    }
-  }
- 
-   db_query("DELETE FROM {casetracker_project} WHERE nid = %d", $node->nid);
-}
- */
-
-/**
- * Implementing hook_node for the node casetracker_project
- */
-
-/* function casetracker_project_load(&$node) {
-  $result = db_query('SELECT tid, project_no FROM {casetracker_project} WHERE nid = %d AND vid = %d', $node->nid, $node->vid);
-  $node = (object) array_merge((array)$node, db_fetch_array($result));
-
-  if (module_exist('og') && variable_get('og_node_type', 'og') == 'casetracker_project') {
-    og_update($node);
-  }
-}
-*/
-/**
- *  Function for email notification.
- */
-
-function casetracker_mail($node, $operation_type, $project_name = null, $arg1= '') {
-   $msg_id = '<'. time() .'.'. mt_rand() .'@'. strtolower($_SERVER['SERVER_NAME']) .'>';
-  $headers  = "MIME-Version: 1.0\n";
-  $headers .= "content-type: text/plain; charset=utf-8; format=flowed\ncontent-transfer-encoding: 8bit\n";
-  //$headers .= "from: ". variable_get('site_mail', 'dave@digital202.com') ." \r\n";
-  $headers .= "from: ". variable_get('site_mail', 'sanjeevpro@gmail.com') ." \r\n";
-  $headers .= "Reply-To: ".variable_get('casetracker_mailbox', 'sandbox@HotPOP.com') ."\r\n";
-  $headers .= "Message-Id: ".$msg_id ."\r\n";
-  //$body = "<html><body>";
-  $body = "";
- 
-  //Getting the project no of the project under which the case falls
-  // max(project_no) => always takes project_no of the current version.
-  //sleep(5);
-  if ($operation_type == 'insert') {
-     $project_id = db_result(db_query("SELECT p_id FROM {casetracker_case} WHERE  nid = %d", $node->nid));
-     $project_no = db_result(db_query("SELECT max(project_no) FROM {casetracker_project} WHERE  nid = %d ", $project_id));
-     $case_id = db_result(db_query("SELECT case_id from {casetracker_case} WHERE nid = %d AND vid = %d", $node->nid, $node->vid));
-     $project_no .= "-".$case_id;
-  }
-  else {
-    $project_no = db_result(db_query("SELECT max(project_no) FROM {casetracker_project} WHERE  nid = %d", $node->p_id));
-    $project_no .= "-".$node->case_id;
-  }
-
-
-  // Case creator name
-  $creator_name = casetracker_get_name($node->uid);
-  // Getting the name of the project under which case falls
-  $result = db_query("SELECT p_id FROM {casetracker_case} WHERE nid = %d AND vid = %d", $node->nid, $node->vid);
-  $case_project_id = db_fetch_array($result);
-  $result = db_query("SELECT title FROM {node} WHERE nid = %d AND vid = %d", $case_project_id['title'], $node->vid);
-  $case_project_title = db_fetch_array($result);
-  if ($case_project_title['title'] != '') {
-    $project_name = $case_project_title['title'];
-  }
-  $assigned_to_name = is_numeric($node->assign_to) ? casetracker_get_name($node->assign_to) : $node->assign_to;
-   if ($operation_type == 'insert') {
-    //$subject =  "Creation of new case (Title:".$node->title."Project: $project_name, Case Id: $project_no   )";
-    //$body = "Information of newly created case"."\r\n";
-    $subject =  t('Creation of new case') .' '. t('(Title: %title Project: %project_name, Case Id: %case_id)', array('%title' => $node->title, '%project_name' => $project_name, '%case_id' => $project_no));
-    $body = t('Information of newly created case') ."\r\n";
-    db_query("INSERT INTO {casetracker_mail} (msg_id, nid, cid) values('%s', %d, %d)", $msg_id, $node->nid, 0 );
-  }
-  else if ($operation_type == 'update') {
-    //$subject = "Case Update (Title:".$node->title."Project: $project_name, Case Id: $project_no   )";
-    //$body = "Information of case updation"."\r\n";
-     $subject =  t('Case Update') .' '. t('(Title: %title Project: %project_name, Case Id: %case_id)', array('%title' => $node->title, '%project_name' => $project_name, '%case_id' => $project_no));
-     $body = t('Information of case updation') ."\r\n";
-    db_query("INSERT INTO {casetracker_mail} (msg_id, nid, cid) values('%s', %d, %d)", $msg_id, $node->nid, 0);
-  }
-  else if ($operation_type == 'delete') {
-    //$subject = "Case Delete(Title:".$node->title."Project: $project_name, Case Id: $project_no   )";
-    //$body = "Information of case deletion"."\r\n";
-    $subject =  t('Case Delete') .' '. t('(Title: %title Project: %project_name, Case Id: %case_id)', array('%title' => $node->title, '%project_name' => $project_name, '%case_id' => $project_no));
-    $body = t('Information of case deletion') ."\r\n";
-  }
-  else if ($operation_type == 'comment') {
-    //$subject = "Comment on Case Added( Title:".$node->title."Project: $project_name, Case Id: $project_no   )";
-    //$body = "Information about comment on case"."\r\n";
-    $subject =  t('Comment on Case Added') .' '. t('(Title: %title Project: %project_name, Case Id: %case_id)', array('%title' => $node->title, '%project_name' => $project_name, '%case_id' => $project_no));
-    $body = t('Information about comment on case') ."\r\n";
-    db_query("INSERT INTO {casetracker_mail} (msg_id, nid, cid) values('%s', %d, %d)", $msg_id, $node->nid, $arg1);
-  }
-  $body .= "Case #$project_no "."\r\n";
-  $body .= "Project Name   : $project_name"."\r\n";
-  $body .= "Case Name      : $node->title"."\r\n";
-  $body .= "Case Creator   : $creator_name"."\r\n";
-  $case_status = casetracker_get_value($node->case_status_id);
-  $body .= "Case Status     : $case_status"."\r\n";
-  $body .= "Assigned to      : $assigned_to_name"."\r\n";
-  $case_priority = casetracker_get_value($node->case_priority_id);
-  $body .= "Priority               : $case_priority"."\r\n";
-  $case_type = casetracker_get_value($node->case_type_id);
-  $body .= "Case Type      : $case_type" ."\r\n";
-  $body .= "Opened on      : ".date('D, d F Y , g:i A', $node->created)."\r\n";
-  $body .= "Last modified  : ".date('D, d F Y , g:i A', $node->changed)."\r\n";
-  $body .= "Case body  : ".$node->body."\r\n";
-  if($arg1) {
-    $comment_obj = _comment_load($arg1);
-    $body .= "Comment added by  : ".casetracker_get_name($comment_obj->uid)."\r\n";
-    $body .= "Comment title  : ".$comment_obj->subject."\r\n";
-    $body .= "Comment body  : ".$comment_obj->comment."\r\n";
-  }  
-  $str = $_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
-  $addr = explode('/',$str);
-  $view = 'http://'.$addr[0].'/'.$addr[1]; //.'/'.'node/'.$node->nid;
-  $edit ='http://'.$addr[0].'/'.$addr[1];//.'/'.'node/'.$node->nid."/edit";
-  $view_arr = pathinfo($view);
-  $edit_arr = pathinfo($edit);
-  $view1 = $view_arr[dirname];
-  $view1 = $view1.'/'.'node/'.$node->nid;
-  $edit1 = $edit_arr[dirname];
-  $edit1 = $edit1.'/'.'node/'.$node->nid.'/edit';
-  //print_r($view_arr);
-  $body .= "Click to view  : ".$view1."\r\n";
-  $body .= "Click to edit  : ".$edit1."\r\n";
-  //echo $view;
-  //$body .= "</body></html>";
-  $res = db_query("SELECT * FROM {users} WHERE uid != 0");
-  $email_sent_to = 0;
-  while ($info = db_fetch_array($res)) {
-    $mailto = $info['mail'];
-
-
-if($info['uid'] == $node->uid || $info['uid'] == casetracker_get_uid($assigned_to_name)) {
-      $mail_status = user_mail($mailto, $subject, $body, $headers);
-      //var_dump($mail_status);
-      if(!$mail_status) {
-        watchdog('debug','Email notification on case failed to'.'  '.$mailto);
-      }
-      else {
-        ++$email_sent_to;
-      }
-     }
-  }
-  if($node->type=='casetracker_case') {
-  $str = format_plural($email_sent_to, t('1 person has been notified'), t(" %count persons have been notified",array('%count' =>$email_sent_to))); 
-  drupal_set_message($str);
-  }
-}
-
-/**
- * Return the case status form .
- */
-
-function casetracker_status_form() {
-  $form['casetracker_case_status'] = array(
-                                           '#type' => 'fieldset',
-                                           '#title' => t('case status'),
-                                           '#collapsible' => FALSE,
-                                           '#collapsed' => TRUE);
-  $form['casetracker_case_status']['casetracker_case_status'] = array(
-                                                                      '#type' => 'textfield',
-                                                                      '#title' => t('New Case Status'),
-                                                                      '#required' => TRUE,
-                                                                      '#default_value' => $node->case_status,
-                                                                      '#size' => 40);
-  return $form;
-}
-
-/**
- * Renders the form for the addition of case status.
- */
-
-function casetracker_status_add() {
-  $form = casetracker_status_form();
-  $form['casetracker_case_status']['casetracker_submit'] = array(
-                                                                 '#type' => 'submit',
-                                                                 '#value' => t('Add New Case status'));
-  return drupal_get_form('casetracker_status_add', $form);
-}
-
-/**
- * Validate the case status form
- */
-
-function casetracker_status_add_validate($form_id, $form_values) {
-  if (!$form_values['casetracker_case_status']) {
-    form_set_error('casetracker_case_status', t('Please enter the case status.'));
-  }
-
-  return true;
-}
-
-/**
- * Submit function for case status form
- */
-
-function casetracker_status_add_submit($form_id, $form_values) {
- if (casetracker_status_add_validate($form_id, $form_values)) {
-   $result = db_query("INSERT INTO {casetracker_case_status} (case_status_name) VALUES('%s')", $form_values['casetracker_case_status']);
-   if ($result) {
-     drupal_set_message(t('Case type has been added successfully.'));
-     drupal_goto('admin/case/casetracker_case_status');
-   }
-  }
-}
-
-/**
- * Returns the priority form for case priority.
- */
-
-function casetracker_priority_form(){
-  $form['casetracker_priority'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('case priority'),
-    '#collapsible' => FALSE,
-    '#collapsed' => TRUE);
-  $form['casetracker_priority']['casetracker_case_priority'] = array(
-    '#type' => 'textfield',
-    '#title' => t('New Case priority'),
-    '#required' => TRUE,
-    '#default_value' => $node->case_priority,
-    '#size' => 40);
-  $form['casetracker_priority']['casetracker_priority'] = array(
-    '#type' => 'submit',
-    '#value' => t('Add New case priority'));
-  return $form;
-}
-
-/**
- * Renders the form for the addition of priority.
- */
-
-function casetracker_priority_add() {
-  $form = casetracker_priority_form();
-  $form['casetracker_priority']['casetracker_priority'] = array(
-    '#type' => 'submit',
-    '#value' => t('Add New case priority'));
-  return drupal_get_form('casetracker_priority_add', $form);
-}
-
-/**
- * Validate the case priority form
- */
-
-function casetracker_priority_add_validate($form_id, $form_values) {
-  if (!$form_values['casetracker_case_priority']) {
-    form_set_error('casetracker_case_priority', t('Please enter the case priority.'));
-  }
-  return true;
-}
-
-/**
- * Submit function for case priority form
- */
-function casetracker_priority_add_submit($form_id, $form_values) {
- if (casetracker_priority_add_validate($form_id, $form_values)) {
-   $result = db_query("INSERT INTO {casetracker_case_priority} (case_priority) VALUES('%s')", $form_values['casetracker_case_priority']);
-   if($result) {
-     drupal_set_message(t('Case priority has been added successfully.'));
-     drupal_goto('admin/case/casetracker_case_priority');
-   }
-  }
-}
-
-/**
- * Return the form for the addition of case type .
- */
-function casetracker_type_form() {
-  $form['casetracker_type'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('case type'),
-    '#collapsible' => FALSE,
-    '#collapsed' => TRUE);
-
-  $form['casetracker_type']['casetracker_case_type'] = array(
-    '#type' => 'textfield',
-    '#title' => t('New Case type'),
-    '#required' => TRUE,
-    '#default_value' => $node->case_type,
-    '#size' => 40);
-  return $form;
-}
-
-/**
- * Renders the case type form
- */
-function casetracker_type_add() {
-  $form = casetracker_type_form();
-  $form['casetracker_type']['casetracker_type'] = array(
-    '#type' => 'submit',
-    '#value' => t('Add New case type'));
-  return drupal_get_form('casetracker_type_add', $form);
-}
-
-/**
- * Function for validating the case type form .
- */
-function casetracker_type_add_validate($form_id, $form_values) {
-  if (!$form_values['casetracker_case_type']) {
-    form_set_error('casetracker_case_type', t('Please enter the case type.'));
-  }
-  return true;
-}
-
-/**
- * Submit function for case type form
- */
-function casetracker_type_add_submit($form_id, $form_values) {
- if (casetracker_type_add_validate($form_id, $form_values)) {
-   $result = db_query("INSERT INTO {casetracker_case_type} (case_type) VALUES('%s')", $form_values['casetracker_case_type']);
-   if ($result) {
-     drupal_set_message(t('Case type has been added successfully.'));
-     drupal_goto('admin/case/casetracker_case_type');
-   }
-  }
-}
-
-/**
- * Display the contents of the a selected table.
- */
-function casetracker_case_table_view($table) {
-  $rows = array();
-  $fields = casetracker_get_fields($table);
-  foreach ($fields as $field) {
-    $header[] = array('data' => "$field", 'field' => "$field");
-  }
-  //$header[] = array('data'=>'TextBox');
-
-  //$sql = "SELECT * FROM {$table}";
-  $sql = "SELECT * FROM {".$table."}";
-  $sql .= tablesort_sql($header);
-  $result = pager_query($sql, 20);
-
-  if (db_num_rows($result)) {
-    while ($row = db_fetch_array($result)) {
-      $line = array_values($row);
-      $rows[] = $line;
-      unset($line);
-    }
-    $output .= theme('table', $header, $rows);
-  }
-  else {
-    $output = t('The table is empty.');
-  }
-
-  print theme('page', $output);
-}
-
-/**
- *  Return as array all fields in specified table
- */
-function casetracker_get_fields($table) {
-  $fields = array();
-  //$result = db_query("DESCRIBE $table");
-  $result = db_query("DESCRIBE {%s}", $table);
-  while ($row = db_fetch_object($result)) {
-    $fields[] = $row->Field;
-  }
-  return $fields;
-}
-
-/**
- * The following function is used for editing case status, case
- *  priority, case type
- */
-function casetracker_case_table_edit($table) {
-  $form['casetracker_edit_form'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('%tablename', array('%tablename' => $str)),
-    '#collapsible' => FALSE,
-    '#collapsed' => TRUE);
-  $result = db_query("SELECT * FROM {%s}", $table);
-  while ($row = mysql_fetch_array($result)) {
-    $field_values[$row['0']] = $row['1'];
-  }
-  $form['casetracker_edit_form']['casetracker_old_values'] = array(
-    '#type' => 'select',
-    '#title' => t('Values'),
-    '#default_value' => isset($node->casetracker_old_values) ? $node->casetracker_old_values : 1,
-    '#options' => $field_values);
-  $form['casetracker_edit_form']['casetracker_new_values'] = array(
-    '#type' => 'textfield',
-    '#title' => t('New Values'),
-    '#required' => FALSE,
-    '#default_value' => $node->title,
-    '#size' => 40);
-  $form['casetracker_edit_form']['casetracker_table_name'] = array(
-    '#type' => 'hidden',
-    '#value' => $table);
-  $form['casetracker_edit_form']['casetracker_type'] = array(
-    '#type' => 'submit',
-    '#value' => t('Update'));
-  $form['casetracker_edit_form']['casetracker_delete'] = array(
-    '#type' => 'submit',
-    '#value' => t('Delete'));                                                           
-  return drupal_get_form('casetracker_case_table_edit', $form);
-}
-
-function casetracker_case_table_edit_validate($form_id, $form_values) {
-  if (!$form_values['casetracker_new_values'] && $_POST['op'] == t('Update')) {
-    form_set_error('casetracker_new_values', t('Please enter the new value.'));
-  }
-  return TRUE;
-}  
-
-/**
- * Implementation of submit function for casetracker_case_table_edit
- */
-function casetracker_case_table_edit_submit($form_id, $form_values) {
-  $str = str_replace("_", " ", $form_values['casetracker_table_name']);
-  $pos = strpos($str, ' ');
-  $str = substr($str, $pos);
-  if ($_POST['op'] == t('Delete')) {
-    $result = db_query('DESCRIBE {%s}', $form_values['casetracker_table_name']);
-    while ($row = db_fetch_array($result)) {
-      $fields[] = $row['Field'];
-    }
-    if (db_num_rows(db_query("SELECT nid FROM {casetracker_case} WHERE $fields[0] = %d",$form_values['casetracker_old_values']))){
-      drupal_set_message('Cannot delete!! First delete all the cases having the selected '.$str);
-    }
-    else {
-      drupal_goto('admin/case/delete'.'/'.$form_values['casetracker_table_name'].'/'.$form_values['casetracker_old_values']);
-    }  
-
-  }  
-  if ($form_values['casetracker_new_values'] && $_POST['op'] == t('Update') && casetracker_case_table_edit_validate($form_id, $form_values)) {
-    $result = db_query('DESCRIBE {%s}', $form_values['casetracker_table_name']);
-    while ($row = db_fetch_array($result)) {
-      $fields[] = $row['Field'];
-    }
-    $result = db_query("UPDATE {%s} SET $fields[1] = '%s' WHERE $fields[0] = %d", $form_values['casetracker_table_name'], $form_values['casetracker_new_values'], $form_values['casetracker_old_values']);
-    if ($result) {
-      drupal_set_message(t('%name has been edited successfully.', array('%name' => $str)));
-      drupal_goto('admin/case/' .$form_values['casetracker_table_name']);
-    }
-  }
- 
-}
-
-/**
- * Function to implement the deletion of case fields.
- */
-function casetracker_case_table_delete() {
-   $form['casetracker_old_values'] = array('#type' => 'hidden', '#value' => arg(4)); 
-   $form['casetracker_table_name'] = array('#type' => 'hidden', '#value' => arg(3)); 
-   $info = casetracker_get_value(arg(3),arg(4));
-   return confirm_form('casetracker_case_table_delete_confirm', $form, t('Are you sure you want to delete %name?', array('%name' => theme('placeholder', $info))), 'admin/case/'.arg(3), '', t('Delete'), t('Cancel'));
-} 
-
-/**
- * Submit function for the form casetracker_case_table_delete_confirm
- */
-function casetracker_case_table_delete_confirm_submit($form_id, $form_values) {
-  // $result = db_query('DESCRIBE %s', $form_values['casetracker_table_name']);
-   $result = db_query('DESCRIBE {%s}', $form_values['casetracker_table_name']);
-   while ($row = db_fetch_array($result)) {
-      $fields[] = $row[Field];
-   }
-   $result = db_query("DELETE FROM {".$form_values['casetracker_table_name']."} WHERE $fields[0] =  %d ", $form_values['casetracker_old_values']);
-   $str = str_replace("_", " ", $form_values['casetracker_table_name']);
-   $pos = strpos($str, ' ');
-   $str = substr($str, $pos);
-   if ($result) {
-      drupal_set_message(t('%name has been deleted successfully.', array('%name' => $str)), 'error');
-      drupal_goto('admin/case/' .$form_values['casetracker_table_name']);
-   }
-}  
-
-/**
- * Function to get the option values for select box
- */
-function casetracker_options_select($table, $value_field, $disp_field, $filter = null) {
-  if (!$filter) { 
-    $result = db_query("SELECT * FROM {%s}", $table);
-  }
-  else if ($filter == 'term_type') {
-    $result = db_query("SELECT * FROM {%s} WHERE vid = %d", $table, _casetracker_get_vid()); 
-  }  
-  $options = Array();
-  while ($row = db_fetch_array($result)) {
-    $options[$row[$value_field]] = $row[$disp_field];
-  }
-  if ($table == 'users') {
-    unset($options[0]);
-  }
-  return $options;
-}
-
-/**
- * Implementaion of hook_form_alter
- */
-function casetracker_form_alter($form_id, &$form) {
-  $node_id = $form['nid']['#value'];
-  switch ($form_id) {
-    case 'comment_form':
-      $node = node_load($node_id);
-      if ($node->type == 'casetracker_case') {
-        $form['case_detail'] = array(
-          '#type' => 'fieldset',
-          '#title' => t('Case information'),
-          '#collapsible' => FALSE,
-          '#collapsed' => TRUE,
-        '#weight' => -10);
-
-        $result = db_query(db_rewrite_sql("SELECT * FROM {node} n WHERE n.type IN (".str_pad('', count(variable_get('casetracker_project_node_types',array('casetracker_project')))* 5 - 1, "'%s',").")"),variable_get('casetracker_project_node_types',array('casetracker_project')));
-        while($row = db_fetch_array($result)) {
-          $project_options[$row['nid']] = $row['title'];
-        }
-        $form['case_detail']['p_id'] = array(
-          '#type' => 'select',
-          '#title' => t('Project'),
-          '#default_value' => isset($node->p_id) ? $node->p_id : '',
-          '#options' => $project_options,
-          '#description' => t(''));
-        $form['case_detail']['case_title'] = array(
-          '#type' => 'textfield',
-          '#title' => t('Case Title'),
-          '#maxlength' => 120,
-          '#size' => 70,
-          '#required' => TRUE,
-          '#default_value' => isset($node->title) ? $node->title : '');
-        $case_status_options = casetracker_case_state_option('status');
-        $keys = array_values($case_status_options);
-        if(user_access('set case status')) {   
-          $form['case_detail']['case_status_id'] = array(
-            '#type' => 'select',
-            '#title' => t('Status'),
-            '#default_value' => $node->case_status_id,
-            '#options' => $case_status_options,
-            '#attributes' => $arr_set_status_yes,
-            '#description' => t(''));
-        }
-        else {
-          $default_case_status_label = isset($node->case_status_id)?$case_status_options[$node->case_status_id]:$case_status_options[variable_get('casetracker_default_case_status',$keys[0])];
-          $default_case_status_label1 = isset($node->case_status_id)?$node->case_status_id:variable_get('casetracker_default_case_status',$keys[0]);
-          $form['case_detail']['case_status_id1'] = array(
-            '#value' => t('<b>Status:</b> %status <br /><br /> ', array('%status' => $default_case_status_label)),
-            '#description' => t('foo'));
-          $form['case_detail']['case_status_id'] = array(
-            '#type' => 'hidden',
-            '#value' => $default_case_status_label1,
-            '#description' => t(''));
-        }
-        if(user_access('assign case')) {
-          $form['case_detail']['assign_to'] = array(
-            '#type' => 'textfield',
-            '#title' => t('Assign to'),
-            '#maxlength' => 60,
-            '#autocomplete_path' => 'casetracker/autocomplete',
-            '#required' => TRUE,
-            '#attributes' => $arr_assign_yes,
-            '#default_value' => isset($node->assign_to) ? casetracker_get_name($node->assign_to) : $node->name);
-        }
-        else {
-          $default_assign_to_label = isset($node->assign_to)?casetracker_get_name($node->assign_to):variable_get('casetracker_default_assign_to', 'anonymous');
-          $form['case_detail']['assign_to1'] = array(
-            '#value' => t('<b>Assign to:</b> %assign_to <br /> ', array('%assign_to' => $default_assign_to_label)),
-            '#description' => t('foo'));
-          $form['case_detail']['assign_to'] = array(
-            '#type' => 'hidden',
-            '#value' => $default_assign_to_label,
-            '#description' => t('foo')
-            );
-        }
-
-        $case_priority_options = casetracker_case_state_option('priority');
-        $form['case_detail']['case_priority_id'] = array(
-          '#type' => 'select',
-          '#title' => t('Priority'),
-          '#default_value' => isset($node->case_priority_id)?$node->case_priority_id:3,
-          '#options' => $case_priority_options,
-          '#description' => t(''));
-        $case_type_options = casetracker_case_state_option('type');
-        $form['case_detail']['case_type_id'] = array(
-          '#type' => 'select',
-          '#title' => t('Type'),
-          '#default_value' => $node->case_type_id,
-          '#options' => $case_type_options,
-          '#description' => t(''));
-        $form['nid']= array(
-          '#type' => 'hidden',
-          '#value' => $node->nid);
-        $form['case_id']= array(
-          '#type' => 'hidden',
-          '#value' => $node->case_id);
-        $form['version_id']= array(
-          '#type' => 'hidden',
-          '#value' => $node->vid);
-        $form['comment_filter']['comment']['#required'] =  FALSE;
-      }
-      break;
-    case 'search_form':
-      if(arg(1) == 'casetracker') {
-        // Keyword boxes:
-        $form['advanced'] = array('#type' => 'fieldset',
-          '#title' => t('Advanced'),
-          '#collapsible' => TRUE,
-          '#collapsed' => TRUE,
-          '#attributes' => array('class' => 'search-advanced'));
-        $form['advanced']['keywords'] = array('#type' => 'markup',
-          '#prefix' => '<div class="criterium">',
-          '#suffix' => '</div>');
-        $form['advanced']['keywords']['or'] = array('#type' => 'textfield',
-          '#title' => t('Containing any of the words'),
-          '#size' => 30, '#maxlength' => 255);
-        $form['advanced']['keywords']['phrase'] = array('#type' => 'textfield',
-          '#title' => t('Containing the phrase'),
-          '#size' => 30, '#maxlength' => 255);
-        $form['advanced']['keywords']['negative'] = array('#type' => 'textfield',
-          '#title' => t('Containing none of the words'),
-          '#size' => 30, '#maxlength' => 255);
-        $form['advanced']['submitted_by'] = array('#type' => 'textfield',
-          '#title' => t('Submitted by'),
-          '#prefix' => '<div class="criterium">',
-          '#suffix' => '</div>',
-          '#size' => 30, '#autocomplete_path' => 'casetracker/autocomplete',
-          '#maxlength' => 255);
-        $form['advanced']['assigned_to'] = array('#type' => 'textfield',
-          '#title' => t('Assigned to'),
-          '#prefix' => '<div class="criterium">',
-          '#suffix' => '</div>', '#size' => 30,
-          '#autocomplete_path' => 'casetracker/autocomplete',
-          '#maxlength' => 255);
-        $form['advanced']['participated_by'] = array('#type' => 'textfield',
-          '#title' => t('Participant'),
-          '#prefix' => '<div class="criterium">',
-          '#suffix' => '</div>', '#size' => 30,
-          '#autocomplete_path' => 'casetracker/autocomplete',
-          '#maxlength' => 255);
-        // Taxonomy box
-        if ($taxonomy =  casetracker_taxonomy_form()) {
-          $form['advanced']['category'] = array('#type' => 'select',
-            '#title' => t('Categories'),
-            '#prefix' => '<div class="criterium">',
-        '#suffix' => '</div>',
-            '#options' => $taxonomy,
-            '#extra' => 'size="10"',
-            '#multiple' => true);
-        }
-        $status = casetracker_case_state_option('status');
-        $form['advanced']['status'] = array('#type' => 'select',
-          '#title' => t('Status'),
-          '#prefix' => '<div class="criterium">',
-          '#suffix' => '</div>',
-          '#options' => $status,
-      '#multiple' => false, '#multiple' => true);
-        $priorities = casetracker_case_state_option('priority');
-        $form['advanced']['priority'] = array('#type' => 'select',
-          '#title' => t('Priorities'),
-          '#prefix' => '<div class="criterium">',
-          '#suffix' => '</div>',
-          '#options' => $priorities,
-          '#multiple' => false,
-          '#multiple' => true);
-        $case_types = casetracker_case_state_option('type');
-        $form['advanced']['case_type'] = array('#type' => 'select',
-          '#title' => t('Types'),
-          '#prefix' => '<div class="criterium">',
-          '#suffix' => '</div>',
-          '#options' => $case_types,
-          '#multiple' => true);
-        $form['advanced']['advs'] = array('#type' => 'hidden', '#value' => 1);
-        $form['advanced1']['date_range'] = array('#type' => 'fieldset',
-          '#title' => t('Date range'),
-          '#collapsible' => TRUE,
-          '#collapsed' => TRUE,
-          '#attributes' => array('class' => 'search-advanced'),
-          '#description' => t('The year will default to the current one if left blank.'));
-
-        /*************** Getting Lower Limit Year ************************/
-        $form['advanced1']['date_range']['lower_limit_year'] = array('#type' => 'textfield',
-          '#title' => t('Year'),
-          '#maxlength' => 4, '#size' => 4,
-          '#description' => t(''),
-          '#prefix' => '<div class="criterium">',
-          '#suffix' => '</div>',
-          '#required' => FALSE);
-
-        /****************Getting Lower Limit Month **********************/
-        $form['advanced1']['date_range']['lower_limit_month'] = array('#type' => 'select',
-          '#title' => t('Month'),
-          '#prefix' => '<div class="criterium">',
-          '#suffix' => '</div>', '#multiple' => FALSE,
-          '#options' => array(0 => t('Select...'), 1 => t('January'), t('February'), t('March'), t('April'), t('May'), t('June'), t('July'), t('August'), t('September'), t('October'), t('November'), t('December')));
-
-        /*****************Getting the lower limit date *********************/
-        $form['advanced1']['date_range']['lower_limit_date'] = array('#type' => 'textfield',
-          '#title' => t('Day'),
-          '#maxlength' => 2, '#size' => 4,
-          '#description' => t(''),
-          '#prefix' => '<div class="criterium">',
-          '#suffix' => '</div><br/><br/>',
-          '#required' => FALSE );
-        
-        /******************Getting the upper limit year ********************/
-        $form['advanced1']['date_range']['upper_limit_year'] = array('#type' => 'textfield',
-          '#title' => t('Year'),
-          '#maxlength' => 4, '#size' => 4,
-          '#description' => t(''),
-          '#prefix' => '<div class="criterium">',
-          '#suffix' => '</div>',
-          '#required' => FALSE );
-
-        /******************Getting the upper limit month *******************/
-        $form['advanced1']['date_range']['upper_limit_month'] = array('#type' => 'select',
-          '#title' => t('Month'),
-          '#prefix' => '<div class="criterium">',
-          '#suffix' => '</div>',
-          '#multiple' => FALSE,
-          '#options' => array(0 => t('Select...'), 1 => t('January'), t('February'), t('March'), t('April'), t('May'), t('June'), t('July'), t('August'), t('September'), t('October'), t('November'), t('December')));
-
-        /***************Getting the upper limit date *********************/
-        $form['advanced1']['date_range']['upper_limit_date'] = array('#type' => 'textfield',
-          '#title' => t('Day'),
-          '#maxlength' => 2, '#size' => 4,
-          '#description' => t(''),
-          '#prefix' => '<div class="criterium">',
-          '#suffix' => '</div>',
-          '#required' => FALSE);
-
-        $form['#validate']['casetracker_search_validate'] = array(); 
-      }
-      break;
-    case 'casetracker_case_node_form':
-      $count = db_fetch_object(db_query(db_rewrite_sql("SELECT COUNT(*) AS count FROM {node} n WHERE n.type IN (".str_pad('', count(variable_get('casetracker_project_node_types', array('casetracker_project')))* 5 - 1, "'%s',").")"), variable_get('casetracker_project_node_types',array('casetracker_project'))));
-      if ($count->count == 0) {
-        unset($form['case_detail'], $form['og_nodeapi'], $form['submit'], $form['preview']);
-        $type = array_shift(variable_get('casetracker_project_node_types', array('casetracker_project')));
-        drupal_set_message(t('You must %create-a-project before adding cases.', array('%create-a-project' => l(t('create a project'), 'node/add/'. $type))), 'error');
-      }
-      break;
-  }
-}
-
-function casetracker_search_validate($form_id, $form_values, $form) {
-  $keys = $form_values['processed_keys'];
-  /*  if (isset($form_values['type']) && is_array($form_values['type'])) {
-   $keys = search_query_insert($keys, 'type', implode(',', array_keys($form_values['type'])));
-   }*/
-  if ((count($form_values['category']))!=0 && is_array($form_values['category'])) {
-    $keys = search_query_insert($keys, 'category', implode(',', $form_values['category']));
-  }
-
-  if ((count($form_values['status']))!=0 && is_array($form_values['status'])) {
-    $keys = search_query_insert($keys, 'status', implode(',', $form_values['status']));
-  }
-  if ((count($form_values['priority']))!=0 && is_array($form_values['priority'])) {
-    $keys = search_query_insert($keys, 'priority', implode(',', $form_values['priority']));
-     }
-     if ((count($form_values['case_type']))!=0 && is_array($form_values['case_type'])) {
-        $keys = search_query_insert($keys, 'case_type', implode(',', $form_values['case_type']));
-     }
-     if ($form_values['or'] != '') {
-       if (preg_match_all('/ ("[^"]+"|[^" ]+)/i', ' '. $form_values['or'], $matches)) {
-          $keys = $keys .' '. implode(' OR ', $matches[1]);
-        }
-	 }
-     if (isset($form_values['submitted_by']) && $form_values['submitted_by'] != '') {
-        $keys = search_query_insert($keys, 'submitted_by', $form_values['submitted_by']);
-     }
-     if (isset($form_values['assigned_to']) && $form_values['assigned_to'] != '') {
-        $keys = search_query_insert($keys, 'assigned_to', $form_values['assigned_to']);
-     }
-     if (isset($form_values['participated_by']) && $form_values['participated_by'] != '') {
-         $keys = search_query_insert($keys, 'participated_by', $form_values['participated_by']);
-     }
-     if ((isset($form_values['lower_limit_month']) && isset($form_values['lower_limit_date']) && isset($form_values['upper_limit_month']) && isset($form_values['upper_limit_date'])) && ($form_values['lower_limit_month'] != '' && $form_values['lower_limit_date'] != '' && $form_values['upper_limit_month'] != '' && $form_values['upper_limit_date'] != '')) {
-       if($form_values['lower_limit_year'] == '') {
-          $form_values['lower_limit_year'] = _casetracker_date('Y', time(), $offset);
-       }
-       if($form_values['upper_limit_year'] == '') {
-         $form_values['upper_limit_year'] = _casetracker_date('Y', time(), $offset);
-       }       
-       $date_range_timestamp = $form_values['lower_limit_month']."_".$form_values['lower_limit_date']."_".$form_values['lower_limit_year'].'-'.$form_values['upper_limit_month']."_". $form_values['upper_limit_date']."_".$form_values['upper_limit_year'];
-       $keys = search_query_insert($keys, 'date_range', $date_range_timestamp);       
-	   }
-     if ($form_values['negative'] != '') {
-         if (preg_match_all('/ ("[^"]+"|[^" ]+)/i', ' '. $form_values['negative'], $matches)) {
-          $keys = $keys .' -'. implode(' -', $matches[1]);
-          }       }
-         if ($form_values['phrase'] != '') {
-          $keys .= ' "'. str_replace('"', ' ', $form_values['phrase']) .'"';
-     }
-
-if (!empty($keys)) {
-  form_set_value($form['basic']['inline']['processed_keys'], trim($keys));
-}
-}
-
-/**
- * Implementaion of hook_comment
- */
-
-function casetracker_comment(&$comment, $op) {
-  /**************** Recording the changes made in case fields ***************/
-  if ($op == 'insert' || $op == 'update') {
-    $node = node_load(Array('nid' => $comment['nid'], 'type' => 'casetracker_case'));
-    $tempedit = $comment;
-    $tempedit = (Object)$tempedit;
-    unset($data);
-    $data = Array();
-    $case_fields = Array( 'case_priority_id', 'case_type_id','case_status_id','p_id');
-    foreach ($case_fields as $var) {
-      $data['old']->$var = $node->$var;
-      $data['new']->$var = $tempedit->$var;
-    }
-    $data['old']->assign_to = $node->assign_to;
-    $data['new']->assign_to = casetracker_get_uid($comment['assign_to']);
-    $data['old']->case_title = $node->title;
-    $data['new']->case_title = $tempedit->case_title;
-    // Saving the changes to the cases.
-    db_query("UPDATE {casetracker_case} SET assign_to = %d, case_status_id = %d, case_priority_id = %d, case_type_id = %d, p_id = %d WHERE nid = %d AND vid = %d ", casetracker_get_uid($comment['assign_to']), $comment['case_status_id'], $comment['case_priority_id'], $comment['case_type_id'], $comment['p_id'], $comment['nid'], $comment['version_id'] );
-    db_query("UPDATE {node} SET title = '%s' WHERE nid = %d AND vid = %d", $comment['case_title'], $comment['nid'], $comment['version_id']);
-    db_query("UPDATE {node_revisions} SET title = '%s' WHERE nid = %d AND vid = %d", $comment['case_title'], $comment['nid'], $comment['version_id']);
-  }
-   /********************** Inserting data into the auxiliary comment table ***********************/
-  switch($op) {
-    case 'insert':
-      db_query("INSERT INTO {casetracker_comment} (cid) values(%d)", $comment['cid']);
-      $sid = mysql_insert_id();
-      db_query("INSERT INTO {casetracker_comment_status} (sid, project_term_id, assign_to, case_priority_id, case_type_id, case_status_id, state, title)
-   VALUES(%d, %d, '%d', %d, %d, '%d', %d, '%s')", $sid, $data['old']->p_id, $data['old']->assign_to, $data['old']->case_priority_id, $data['old']->case_type_id, $data['old']->case_status_id, 0, $data['old']->case_title );
-      db_query("INSERT INTO {casetracker_comment_status} (sid, project_term_id, assign_to, case_priority_id, case_type_id, case_status_id, state, title)
-   VALUES(%d, %d, '%d', %d, %d, '%d', %d, '%s')", $sid, $data['new']->p_id, $data['new']->assign_to, $data['new']->case_priority_id, $data['new']->case_type_id, $data['new']->case_status_id, 1, $data['new']->case_title );
-      $node = node_load(Array('nid' => $comment['nid'], 'type' => 'casetracker_case'));
-      $project_name = db_result(db_query("SELECT title FROM {node} WHERE nid = %d", $node->p_id));
-      casetracker_mail($node, 'comment', $project_name, $comment['cid']);
-      break;
-    case 'update':
-      if( $data['old']->case_priority_id != $data['new']->case_priority_id ||
-        $data['old']->case_type_id != $data['new']->case_type_id ||
-        $data['old']->case_status_id != $data['new']->case_status_id ||
-        $data['old']->p_id != $data['new']->p_id ||
-        $data['old']->assign_to != $data['new']->assign_to ||
-        $data['old']->case_title != $data['new']->case_title ) {
-        $sid = db_result(db_query("SELECT sid FROM {casetracker_comment} where cid = %d", $comment['cid']));
-        db_query("UPDATE {casetracker_comment_status} SET project_term_id = %d, assign_to = %d , case_priority_id = %d, case_type_id = %d, case_status_id = %d, title = '%s' where sid = %d AND state = %d", $data['old']->p_id, $data['old']->assign_to, $data['old']->case_priority_id, $data['old']->case_type_id, $data['old']->case_status_id, $data['old']->case_title, $sid, 0);
-        db_query("UPDATE {casetracker_comment_status} set project_term_id = %d, assign_to = %d , case_priority_id = %d, case_type_id = %d, case_status_id = %d, title = '%s' where sid = %d AND state = %d", $data['new']->p_id, $data['new']->assign_to, $data['new']->case_priority_id, $data['new']->case_type_id, $data['new']->case_status_id, $data['new']->case_title, $sid, 1);
-      }
-      break;
-    case 'delete':
-      $sid = db_result(db_query("SELECT sid FROM {casetracker_comment} WHERE cid = %d", $comment->cid));
-      db_query("DELETE FROM {casetracker_comment_status} WHERE sid = %d ", $sid);
-      db_query("DELETE FROM {casetracker_comment} WHERE cid = %d", $comment->cid);
-      break;
-    case 'view':
-      $sid = db_result(db_query("SELECT sid FROM {casetracker_comment} WHERE cid = %d", $comment->cid));
-      if ($comment->cid) {
-        $result_before = db_query("SELECT project_term_id, assign_to, case_priority_id, case_type_id, case_status_id, title FROM {casetracker_comment_status} WHERE sid = %d AND state = %d", $sid, 0);
-        $case_field_old_new_value['old'] = db_fetch_object($result_before);
-        $result_after = db_query("SELECT project_term_id, assign_to, case_priority_id, case_type_id, case_status_id, title FROM {casetracker_comment_status} WHERE sid = %d AND state = %d", $sid, 1);
-        $case_field_old_new_value['new'] = db_fetch_object($result_after);
-        $comment1 = $comment->comment;
-        $comment->comment = '';
-        $comment->comment .= casetracker_changed_case_fields($case_field_old_new_value);
-        $comment->comment .= '<br>'.$comment1;
-      }
-      if ($comment->comment) {
-        return $comment->comment;
-      }
-  }
-}
-
-/**
- * Tracking of the case fields that have been changed whilw submitting comments.
- */
-
-function casetracker_changed_case_fields($case_field_old_new_value) {
-  if ($case_field_old_new_value) {
-    foreach ($case_field_old_new_value as $key => $value) {
-      $data[$key] = $value;
-    }
-  }
-  $rows = array();
-  $old_project_title = db_result(db_query("SELECT title FROM {node} WHERE nid = %d",$data['old']->project_term_id));
-  $new_project_title = db_result(db_query("SELECT title FROM {node} WHERE nid = %d",$data['new']->project_term_id));
-
-  if ($data['new']->project_term_id != $data['old']->project_term_id) {
-    $rows[] = array(t('Project Name :: '), $old_project_title .t('>>>>').$new_project_title);
-  }
-  if ($data['new']->title != $data['old']->title) {
-    $rows[] = array(t('Title :: '), $data['old']->title .t('>>>>').$data['new']->title);
-  }
-  if ($data['new']->case_status_id != $data['old']->case_status_id) {
-    $rows[] =  array('Case Status ::', casetracker_get_value($data['old']->case_status_id) .t('>>>>').
-      casetracker_get_value($data['new']->case_status_id));
-  }
-  if ($data['new']->assign_to != $data['old']->assign_to ) {
-    $rows[] = array('Assigned To :: ', casetracker_get_name($data['old']->assign_to) .t('>>>>').
-      casetracker_get_name($data['new']->assign_to));
-  }
-  if ($data['new']->case_priority_id != $data['old']->case_priority_id ) {
-    $rows[] = array('Case Priority :: ',  casetracker_get_value($data['old']->case_priority_id).t('>>>>').
-        casetracker_get_value($data['new']->case_priority_id));
-  }
-  if ($data['new']->case_type_id != $data['old']->case_type_id ) {
-    $rows[] = array('Case Type :: ', casetracker_get_value($data['old']->case_type_id) .t('s>>>>').
-        casetracker_get_value($data['new']->case_type_id));
-  }
-  $output = '';
-  $output .= '<div class="case">'. theme('table', array(), $rows) .'</div>';
-  return $output;
-}
-
-
-function casetracker_search($op = 'search', $keys = null) {
-  $flag = 0;
-  $date_flag = 0;
-  switch ($op) {
-    case 'name':
-      return t('cases');
-    case 'search':
-      list($join1, $where1) = _db_rewrite_sql();
-      $arguments1 = array();
-      $conditions1 = 'n.status = 1';
-      $types = array();
-      foreach (array('casetracker_case', 'casetracker_project') as $t) {
-        $types[] = "n.type = '%s'";
-        $arguments1[] = $t;
-      }
-      $conditions1 .= ' AND ('. implode(' OR ', $types) .')';
-      $keys = search_query_insert($keys, 'type');
-      if ($category = search_query_extract($keys, 'category')) {
-        $categories = array();
-        foreach (explode(',', $category) as $c) {
-          $categories[] = "cs.p_id = %d";
-          $arguments1[] = $c;
-        }
-        $conditions1 .= ' AND ('. implode(' OR ', $categories) .')';
-        //$join1 .= ' INNER JOIN {casetracker_case} cs ON n.vid = cs.vid';
-        //$join1 .= ' INNER JOIN {casetracker_project} cp ON cp.nid = cs.p_id';
-        $keys = search_query_insert($keys, 'category');
-      }
-      $values = array();
-      if ($status = search_query_extract($keys, 'status')) {
-        $state_of_cases = array();
-        foreach (explode(',', $status) as $c) {
-          $state_of_cases[] = "cs.case_status_id = %d ";
-          $arguments1[] = $c;
-        }
-        $conditions1 .= ' AND ('. implode(' OR ',  $state_of_cases) .')';
-        $keys = search_query_insert($keys, 'status');
-      }
-      if ($priority = search_query_extract($keys, 'priority')) {
-        $priorities = array();
-        foreach (explode(',', $priority) as $c) {
-          $priorities[] = " cs.case_priority_id = %d ";
-          $arguments1[] = $c;
-        }
-        $conditions1 .= ' AND ('. implode(' OR ', $priorities) .')';
-        $keys = search_query_insert($keys, 'priority');
-      }
-      if ($case_type = search_query_extract($keys, 'case_type')) {
-        $case_types = array();
-        foreach (explode(',', $case_type) as $c) {
-          $case_types[] = "cs.case_type_id = %d";
-          $arguments1[] = $c;
-        }
-        $conditions1 .= ' AND ('. implode(' OR ', $case_types) .')';
-        $keys = search_query_insert($keys, 'case_type');
-      }
-      if ($assigned_to = search_query_extract($keys, 'assigned_to')) {
-          $assigned = array();
-        foreach (explode(',', $assigned_to) as $c) {
-          $assigned[] = "cs.assign_to = %d";
-          $arguments1[] = casetracker_get_uid($c);
-        }
-        $conditions1 .= ' AND ('. implode(' OR ', $assigned) .')';
-        $keys = search_query_insert($keys, 'assigned_to');
-      }
-      if ($submitted_by = search_query_extract($keys, 'submitted_by')) {
-        $submitted = array();
-        foreach (explode(',', $submitted_by) as $c) {
-          $submitted[] = "cs.case_sender_uid = %d";
-          $arguments1[] = casetracker_get_uid($c);
-        }
-        $conditions1 .= ' AND ('. implode(' OR ', $submitted) .')';
-        $keys = search_query_insert($keys, 'submitted_by');
-      }
-      if ($participated_by = search_query_extract($keys, 'participated_by')) {
-        foreach (explode(',', $participated_by) as $c) {
-          $values[] = "cs.case_sender_uid = %d ";
-          $arguments1[] = casetracker_get_uid($c);
-          $values[] = " cmt.uid = %d ";
-          $arguments1[] = casetracker_get_uid($c);
-          $flag = 1;
-        }
-        $keys = search_query_insert($keys, 'participated_by');
-      }
-      if ($date_range = search_query_extract($keys, 'date_range')) {
-        foreach (explode('-', $date_range) as $c) {
-          $date_parts = array();
-          $timestamp = '';
-          foreach(explode('_', $c) as $date ) {
-            $date_parts[] = $date;
-          }
-          $timestamp = mktime(0, 0, 0, $date_parts[0], $date_parts[1], $date_parts[2]);
-          $arguments1[] = $timestamp;
-        }
-        foreach (explode('-', $date_range) as $c) {
-          $date_parts = array();
-          $timestamp = '';
-          foreach(explode('_', $c) as $date ) {
-            $date_parts[] = $date;
-          }
-          $timestamp = mktime(0, 0, 0, $date_parts[0], $date_parts[1], $date_parts[2]);
-          $temp_arguments1[] = $timestamp;
-        }
-        $arguments1 = array_merge($arguments1, $temp_arguments1);
-        $arguments1 = array_merge($arguments1, $temp_arguments1);
-        $values[] = " ( n.changed >= %d";
-        $values[] = " AND n.changed <= %d) ";
-        $values[] = "OR ( n.created >= %d";
-        $values[] = " AND n.created <= %d ) ";
-        $values[] = " OR ( ncs.last_comment_timestamp >= %d ";
-        $values[] = " AND ncs.last_comment_timestamp <= %d )";
-        $date_flag = 1;
-        $keys = search_query_insert($keys, 'date_range');
-      }
-      if (!$flag && !$date_flag) {
-        //$conditions1 .= ' AND ('. implode(' AND ', $values) .')';
-        $join1 .= ' INNER JOIN {casetracker_case} cs ON n.vid = cs.vid';
-      }
-      // Incorporating participated by search facility.
-      if (count($values) && $flag) {
-        $conditions1 .= ' AND ('. implode(' OR ', $values) .')';
-        $join1 .= ' LEFT JOIN {casetracker_case} cs ON n.vid = cs.vid';
-        $join1 .= ' LEFT JOIN {comments} cmt ON n.nid = cmt.nid';
-        $flag = 0;
-      }
-      // Incorporating date_range search facility.
-      if (count($values) && $date_flag) {
-        //var_dump($arguments1);
-        $conditions1 .= ' AND ('. implode(' ', $values) .')';
-        $join1 .= ' INNER JOIN {node_comment_statistics} ncs ON n.nid = ncs.nid';
-        $join1 .= ' INNER JOIN {casetracker_case} cs ON n.vid = cs.vid';
-        $date_flag = 0;
-      }
-      $ranking = array();
-      $arguments2 = array();
-      $join2 = '';
-      // Used to avoid joining on node_comment_statistics twice
-      $stats_join = false;
-      if ($weight = (int)variable_get('node_rank_relevance', 5)) {
-        // Average relevance values hover around 0.15
-        $ranking[] = '%d * i.relevance';
-        $arguments2[] = $weight;
-      }
-      if ($weight = (int)variable_get('node_rank_recent', 5)) {
-        // Exponential decay with half-life of 6 months, starting at last indexed node
-        $ranking[] = '%d * POW(2, (GREATEST(n.created, n.changed, c.last_comment_timestamp) - %d) * 6.43e-8)';
-        $arguments2[] = $weight;
-        $arguments2[] = (int)variable_get('node_cron_last', 0);
-        $join2 .= ' INNER JOIN {node} n ON n.nid = i.sid LEFT JOIN {node_comment_statistics} c ON c.nid = i.sid';
-        $stats_join = true;
-      }
-      if (module_exist('comment') && $weight = (int)variable_get('node_rank_comments', 5)) {
-        // Inverse law that maps the highest reply count on the site to 1 and 0 to 0.
-        $scale = variable_get('node_cron_comments_scale', 0.0);
-        $ranking[] = '%d * (2.0 - 2.0 / (1.0 + c.comment_count * %f))';
-        $arguments2[] = $weight;
-        $arguments2[] = $scale;
-        if (!$stats_join) {
-          $join2 .= ' LEFT JOIN {node_comment_statistics} c ON c.nid = i.sid';
-        }
-      }
-      if (module_exist('statistics') && variable_get('statistics_count_content_views', 0) && $weight = (int)variable_get('node_rank_views', 5)) {
-        // Inverse law that maps the highest view count on the site to 1 and 0 to 0.
-        $scale = variable_get('node_cron_views_scale', 0.0);
-        $ranking[] = '%d * (2.0 - 2.0 / (1.0 + nc.totalcount * %f))';
-        $arguments2[] = $weight;
-        $arguments2[] = $scale;
-        $join2 .= ' LEFT JOIN {node_counter} nc ON n.nid = nc.nid';
-      }
-
-      if (module_exist('casetracker')) {
-       $join2 .= ' LEFT JOIN {casetracker_case} cs ON n.vid = cs.vid';
-      }
-
-      $select2 = (count($ranking) ? implode(' + ', $ranking) : 'i.relevance') . ' AS score';
-      // Do search
-      $find = do_search($keys, 'node', 'INNER JOIN {node} n ON n.nid = i.sid '. $join1 .' INNER JOIN {users} u ON n.uid = u.uid', $conditions1 . (empty($where1) ? '' : ' AND '. $where1), $arguments1, $select2, $join2, $arguments2, tablesort_sql(casetracker_search_page_header()));
-      //var_dump($find);
-      // Load results
-      $results = array();
-      foreach ($find as $item) {
-        $node = node_load($item->sid);
-        // Get node output (filtered and with module-specific fields).
-        if (node_hook($node, 'view')) {
-          node_invoke($node, 'view', false, false);
-        }
-        else {
-          $node = node_prepare($node, false);
-        }
-        // Allow modules to change $node->body before viewing.
-        node_invoke_nodeapi($node, 'view', false, false);
-
-        // Fetch comments for snippet
-        $node->body .= module_invoke('comment', 'nodeapi', $node, 'update index');
-        $extra = node_invoke_nodeapi($node, 'search result');
-        $project_name = db_result(db_query("SELECT title from {node} where nid = %d", $node->p_id));
-        // max(project_no) => always takes project_no of the current version.
-        $project_no = db_result(db_query("SELECT max(project_no) FROM {casetracker_project} WHERE  nid = %d", $node->p_id));
-        $results[] = array('link' => url('node/'. $item->sid),
-          'type' => node_get_name($node),
-          'title' => l($node->title, 'node/'.$node->nid),
-          'user' => theme('username', $node),
-          'date' => $node->changed,
-          'node' => $node,
-          'extra' => $extra,
-          'score' => $item->score,
-          'case_id' => $project_no.'-'.$node->case_id,
-          'last_updated' => date('m/d/Y-h:i',$node->last_comment_timestamp),
-          'assign_to' => casetracker_get_name($node->assign_to),
-          'case_priority' => casetracker_get_value($node->case_priority_id),
-          'case_status' => casetracker_get_value($node->case_status_id),
-          'case_colour' => $node->case_status_id,
-          'case_type' => casetracker_get_value($node->case_type_id),
-          'snippet' => search_excerpt($keys, $node->body));
-      }
-
-      return $results;
-  }
-}
-
-/**
- * Displaying the search result  in a tabular form.
- */
-function casetracker_search_page($results) {
-   theme_add_style(drupal_get_path('module', 'casetracker') .'/casetracker.css');
-   $status_arr = casetracker_case_state_option('status');
-   $status_id_arr = array_keys($status_arr);
-   $classes = array($status_id_arr[0] => 'opened',$status_id_arr[1]=>'closed',$status_id_arr[2]=>'resolvedstaging',$status_id_arr[3]=>'resolvedproduction',$status_id_arr[4]=>'tested_staging',$status_id_arr[5]=>'resolved');
-   if (count($results)) {
-    $rows = array();
-    foreach ($results as $entry) {
-      $rows[] = Array('data' => Array($entry['case_id'], $entry['title'], $entry['last_updated'], $entry['case_priority'], $entry['case_status'], $entry['case_type'],  $entry['assign_to']), 'class' => $classes[$entry['case_colour']]);
-    }
-    $output = theme('table', casetracker_search_page_header(), $rows);
-    $output .= theme('pager', NULL, 15, 0);
-    return $output;
-  }
-}
-
-
-/**
- * Displaying the header of the tables on which sorting is to be done
- */
-function casetracker_search_page_header() {
-  $header = array(
-    /*array('data' => t('Score'), 'field' => 'score', 'sort' => 'desc'),*/
-    array('data' => t('Case ID'), 'field' => 'cs.case_id'),
-    array('data' => t('Title'), 'field' => 'n.title'),
-    array('data' => t('Last updated'), 'field' => 'c.last_comment_timestamp'),
-    array('data' => t('Priority'), 'field' => 'cs.case_priority_id'),
-    array('data' => t('Status'), 'field' => 'cs.case_status_id'),
-    array('data' => t('Type'), 'field' => 'cs.case_type_id'),
-    array('data' => t('Assigned to'), 'field' => 'cs.assign_to'),
-  );
-  return $header;
-}
-
-/**
- * Fetching the option values for projects to be displayed in advanced
- * search form
- */
-function casetracker_taxonomy_form() {
-  $options = array();
-  $result = db_query(db_rewrite_sql("SELECT * FROM {node} n WHERE n.type = 'casetracker_project'"));
-  while($row = db_fetch_array($result)) {
-    $options[$row['nid']] = $row['title'];
-  }  
-  return $options;
-}
-
-/**
- * Function to get user id given user name
- */
-function casetracker_get_uid($name) {
-  $uid = db_result(db_query("SELECT uid FROM {users} WHERE name = '%s'", trim($name)));
-  if($uid) {
-    return $uid;
-  }
-  else {
-    return 0;
-  }  	  
-}
-
-/**
- * Function to get user name given user id
- */
-function casetracker_get_name($uid) {
-  $name = db_result(db_query("SELECT name FROM {users} WHERE uid = %d", $uid));
-  if($name) {
-    return $name;
-  }
-  else {
-    return 'Anonymous';
-  }    
-}
-
-/**
- * Function to get name corresponding to a give id
- */
-function casetracker_get_value($id) {
-  static $fields = array();
-
-  if (!isset($fields[$id])) {
-    $fields[$id] = db_result(db_query("SELECT case_state_name FROM {casetracker_case_states} WHERE csid = %d",$id));
-  }
-
-  return $fields[$id];
-}
-
-/**
- * Implementation of theme function for project.
- */
-
-/** function theme_casetracker_project_info($node) {
-  $edit['taxonomy'] = $node->tid;
-  $items[] = l(t('Project #%p_no', Array('%p_no' => $node->project_no)), 'node/add/casetracker_case/'.$edit['taxonomy']);
-  $items[] = l(t('Add a case to this project'), 'node/add/casetracker_case/'.$edit['taxonomy']);
-  return theme('item_list', $items, t('project details'), 'ul' );
-}*/
-
-/**
- * Implementation of hook_view for project.
- */
- 
-/*function casetracker_project_view(&$node, $teaser = FALSE, $page = FALSE) {
-  $node = node_prepare($node, $teaser);
-  $output = '<div class="case">';
-  $rows = array();
-  $rows[] = array(t('Project no'), l($node->project_no, 'project/cases/'.$node->nid.'/all', array('title' => t('Views all cases in this project'))));
-  $rows[] = array(t('Project Title:'), l($node->title, 'project/cases/'.$node->nid.'/all',array('title' => t('Views all cases in this project'))));
-  $rows[] = array(t('Opened by:'), check_plain(casetracker_get_name($node->uid)));
-  $rows[] = array(t('Opened on:'), date('D, d F Y , g:i A', $node->created)); 
-  $rows[] = array(t('Last modified:'), date('D, d F Y , g:i A', $node->changed)); 
-  $rows[] = array(t('Add a case to this project:'), l($node->title, 'node/add/casetracker_case/'.$node->nid));
-  $output .= '<div class="summary">'. theme('table', array(), $rows) .'</div>';
-  $output .= '<p>'. t('Case Description') .'</p>';
-  $output .= '<p>'. $node->body .'</p>';
-  $output .= '</div>';
-  $node->body = $output;
-}*/
-/** function casetracker_project_view(&$node, $teaser = FALSE, $page = FALSE) {
-  $node = node_prepare($node, $teaser);
-  $order_info = theme('casetracker_project_info',$node);
-  $node->body .= $order_info;
-  $node->teaser .= $order_info;
-
-  if (module_exist('og') && variable_get('og_node_type', 'og') == 'casetracker_project') {
-    $node = og_view($node, $teaser, $page);
-  }
-}
-*/
-/**
- * Implementation of hook_xmlrpc
- */
-function casetracker_xmlrpc() {
-  $xmlrpc = array();
-  $xmlrpc[] = array(
-    'casetracker.externalcase',
-    'casetracker_externalcase',
-    array('int','struct','struct'),
-    t('Enabling case creation from an external site')
-    );
-  $xmlrpc[] = array(
-    'casetracker.login',
-    'casetracker_login',
-    array('int','string','string'),
-    t('Enabling login into casetracker')
-    );
-  return $xmlrpc;
-}
-
-/**
- * Implementation of casetracker_externalcase the xmlrpc call
- */
-function casetracker_externalcase(&$system, &$client) {
-  watchdog('message','External case created at'.time());
-  $uid = db_result(db_query("SELECT uid FROM { casetracker_external_user} WHERE duid = %d ",$client['user_id']));
-  if(!$uid) {
-    $checkuid = db_result(db_query("SELECT uid FROM {users} WHERE name ='%s' OR mail ='%s'",$client['name'], $client['mail']));
-    if(!$checkuid) {
-      $external_user = array('name' => $client['name'], 'mail' => $client['mail']);
-      $extuser = user_save('',$external_user);
-      $uid = $extuser->uid;
-      db_query("INSERT INTO { casetracker_external_user}(uid,duid) values(%d, %d)", $uid, $client['user_id']);
-    }
-    else {
-      $uid = $checkuid;
-      db_query("INSERT INTO { casetracker_external_user}(uid,duid) values(%d, %d)", $checkuid, $client['user_id']);
-    }
-  }
-  // Checking  whether the user whom the case has been assigned exists or not.If not
-  // create the assign_to user.
-  $assign_to_id = db_result(db_query("SELECT uid FROM {users} WHERE name ='%s'",$system['assign_to']));
-  if(!$assign_to_id) {
-    $external_user = array('name' => $system['assign_to']);
-    $extuser = user_save('',$external_user);
-  }
-  $system['type'] = 'casetracker_case';
-  $system['uid'] = $uid;
-  $p_id = db_result(db_query('SELECT DISTINCT nid FROM {casetracker_project} where tid = %d',variable_get('project_xmlrpc', 0)));
-  $system['p_id'] =  $p_id;
-  $system['status'] = 1;
-  $system['promote'] = 1;
-  $system['teaser'] = $system['body'];
-  $vid = _casetracker_get_vid();
-  $system['taxonomy'][$vid][0] = variable_get('project_xmlrpc', 0);
-  $node = (object)$system;
-  if( $client['password'] != variable_get('externalsite_xmlrpc_password','sandbox')) {
-    //echo "Access denied";
-    watchdog('message', 'Acess denied for the external site to create case at case tracker with password '.$client['password']);
-    return -1;
-  }
-  else {
-    node_save($node);
-    return 6;
-  }
-}
-
-/**
- * Implementation of remote login from dewlist
- */
-function casetracker_login($username, $password) {
-  if ($user = user_load(array('name' => $username, 'pass' => $password, 'status' => 1))) {
-    return $user->uid;
-  }
-  else {
-    return 0;
-  }
-}
-
-/**
- *Function for getting the year option.
- */
-function casetracker_date_options($low,$high) {
-  $options = Array();
-  $options[''] = t('Please Select');
-  for($i = $low; $i <= $high; $i++ ) {
-    $options[$i] = $i;
-  }
-  return $options;
-}
-
-/**
- * Function to get the next project no.The next project no being 100 more than the earlier.
- * The script for adding two tuples ('project_no', 0) & ('case_id', 0) into the sequences table has to be added into the .install file.
- */
-function casetracker_project_next_id($name) {
-  $name = db_prefix_tables($name);
-  db_query('LOCK TABLES {sequences} WRITE');
-  $id = db_result(db_query("SELECT id FROM {sequences} WHERE name = '%s'", $name)) + 100;
-  db_query("REPLACE INTO {sequences} VALUES ('%s', %d)", $name, $id);
-  db_query('UNLOCK TABLES');
-  return $id;
-}
-
-/**
- * Function to get the value of current date item.
- */
-function _casetracker_date($format, $timestamp, $offset = null) {
-  global $user;
-
-  if (isset($offset)) {
-    $timestamp += $offset;
-  }
-  elseif (variable_get('configurable_timezones', 1) && $user->uid && strlen($user->timezone)) {
-    $timestamp += $user->timezone;
-  }
-  else {
-    $timestamp += variable_get('date_default_timezone', 0);
-  }
-
-  // make sure we apply the site first day of the week setting for dow requests
-  if ($format == 'w') {
-    $result = _event_day_of_week($timestamp);
-  }
-  else {
-    $result = gmdate($format, $timestamp);
-  }
-  return  $result;
-}
-
-/**
- * Implementation of hook_settings().
- */
-function casetracker_settings() {
-  $result = db_query("SELECT nid, title FROM {node} n WHERE n.type IN (".str_pad('', count(variable_get('casetracker_project_node_types',array('casetracker_project'))) * 5 - 1, "'%s',").")",variable_get('casetracker_project_node_types',array('casetracker_project')));
-  $options = array();
-  $options[0] = t('None');
-  while($row = db_fetch_array($result)) {
-    $options[$row['nid']] = $row['title'];
-  }
-  $form['project_xmlrpc'] = array(
-    '#type' => 'select',
-    '#title' => t('Select the project under which the cases will fall that are created at sandbox through xmlrpc request'),
-    '#default_value' => variable_get('project_xmlrpc', 0),
-    '#options' => $options,
-    '#description' => t('Select the project under which the cases created through xmlrpc calls.')
-    );
-  $form['externalsite_xmlrpc_password'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Enter the password which will be used by the external site to  create case externally on this site'),
-    '#default_value' => variable_get('externalsite_xmlrpc_password', ''),
-    '#description' => t('This password will be used by the external site as an access control to create case on this site')
-    );
-  $form['casetracker_mailbox'] = array(
-    '#type' => 'textfield',
-
-    '#title' => t('Enter the email address from where the replies to email notification sent by casetracker will be received'),
-    '#default_value' => variable_get('casetracker_mailbox', ''),
-    '#description' => t('This is the email address from where mailhandler will receive mails sent as replies to email nofifications sent by casetracker')
-    );
-  $case_status_options = casetracker_case_state_option('status');
-  $keys = array_keys($case_status_options); 
-  $form['casetracker_default_case_status'] = array(
-    '#type' => '',
-    '#title' => t('Select the default status value of the case'),
-    '#default_value' => variable_get('casetracker_default_case_status', $keys[0]),
-    '#options' => $case_status_options,
-    '#description' => t('This status value will be assigned to those cases which has not be explicitly assigned a case status by the user.')
-    ); 
-  $form['casetracker_default_assign_to'] = array(
-    '#type' => 'textfield',
-    '#title' => t('Enter the name of the person to whom the case will be assigned'),
-    '#maxlength' => 60,
-    '#autocomplete_path' => 'casetracker/autocomplete',
-    '#required' => TRUE,
-    '#default_value' => variable_get('casetracker_default_assign_to','anonymous'),
-    '#description' => t('This person is will be assigned the case if the case creator does not explicitly mention the name of the person to whom the case has to be assigned'));
-
-  foreach (node_get_types() as $type => $name) {
-    if ($type != 'casetracker_case') {
-      $options_types[$type] = t($name);
-    }
-  }
-  $form['casetracker_project_node_types'] = array(
-    '#type' => 'checkboxes',
-    '#title' => t('Select the node types which will be used as projects'),
-    '#default_value' => variable_get('casetracker_project_node_types', array('casetracker_project')),
-    '#options' => $options_types,
-    '#description' => t('Select the node types that will be used as project.')
-    ); 							  
-  return $form;
-}
-
-/**
- * Implementation of hook_block
- */
-function casetracker_block($op = 'list', $delta = 0, $edit = array()) {
-  $block = array();
-  if ($op == 'list') {
-    $block[0]['info'] = t('Jump to case');
-    $block[1]['info'] = t('Latest cases');
-    return $block;
-  }
-  else if ($op == 'view') {
-    $block = array();
-    switch ($delta) {
-      case 0:  
-        $form['#id'] = 'jump_to_case_form';
-        $form['case_id'] = array(
-          '#type' => 'textfield',
-          '#title' => t(''),
-          '#maxlength' => 60,
-          '#size' => 15,
-          '#required' => TRUE,
-          '#description' => t('Enter case id'));
-        $form['submit'] = array(
-          '#type' => 'submit',
-          '#value' => t('Go'));    
-        $block['subject'] = t('Jump to case');
-        $block['content'] = drupal_get_form('jump_to_case_form', $form, 'jump_to_case_form_submit1');
-        return $block;
-      case 1:
-        $result = db_query(db_rewrite_sql("SELECT * FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid WHERE type = 'casetracker_case' order by created desc LIMIT 0, 10"));
-        $items = array();
-        while( $row = db_fetch_array($result)) {
-          $project_no = db_result(db_query("SELECT max(project_no) FROM {casetracker_project} WHERE nid = %d", $row['p_id']));
-          $project_name = db_result(db_query("SELECT title FROM {node} WHERE nid = %d", $row['p_id']));
-          $items[] = t('<a href= "%link" class = "%cls">['.$project_no.'-'.$row['case_id'].']<br />'
-            . substr($row['title'], 0, 50).'<br />'.'('
-            . substr($project_name, 0, 50).')<br /></a>',array('%link' => url('node/'.$row['nid']), '%cls' => "project"));
-        }  
-        $output = theme('item_list', $items, t(''));  
-        $block['subject'] = t('Latest Cases');
-        $block['content'] = t($output);
-        return $block;
-    }
-  }
-}
-
-/**
- *  The submit function for jump to case block
- */
-function jump_to_case_form_submit() {
-  $case_id = $_POST['edit']['case_id'];
-  $arr = explode('-', $case_id);
-  if(!$arr[1]) {
-    $case_id1 = $arr[0];
-    $case_id_case = $arr[0] % 100;
-  }
-  else {  
-    $case_id_case = $arr[1];
-  }
-  $result = db_query("SELECT nid FROM {casetracker_case} WHERE case_id = %d",$case_id_case); 
-  $row = db_fetch_array($result);
-  if ($row) { 
-    $case_id_to_be_passed = $row['nid'];
-    $rows[] = l(t($case_node->title),'node/'.$case_node->nid);
-    return 'casetracker/jump_to_case/found_record/'.$case_id_to_be_passed;
-  }
-  else {
-    return 'casetracker/jump_to_case/no_record';
-  }
-}
-
-/**
- *  Function invoked if no case found in jump to case block
- */
-function jump_to_case_no_result() {
-  print theme('page', t('The case you entered was not found'));
-}
-
-/**
- * Function invoked if case found in jump to case block
- */
-function jump_to_case_found_result() {
-  $case_id = arg(3);
-  $case_node = node_load($case_id);
-  drupal_goto('node/'.$case_id);
-}
-
-/**
- * Implementation of hook_mailhandler.
- */
-function casetracker_mailhandler($node, $result, $i, $header, $mailbox) {
-  $fromaddress = mailhandler_get_fromaddress($header, $mailbox);
-  // if($node->mailcommand) {//
-  $mail = new StdClass();
-  $from = $header->from;
-  $mail->from_address = strtolower(sprintf('%s@%s', $from[0]->mailbox, $from[0]->host));
-  $mail->to_address = $header->toaddress;
-  $mail->from_name = imap_mime_header_decode($header->from[0]->personal);
-  $mail->subject = $node->title;
-  $mail->body = $node->body;
-  $mail->content_type = 'text/plain';
-  $mail->msg_id = $header->references;
-  //var_dump($header->message-id);
-  casetracker_process_mail($mail, $node);
-  // }//
-}
-
-function casetracker_process_mail($mail, &$node) {
-  /*************************************************************************  
-   The following section helps creation of new case from mail
-   The case details to be mentioned by the user in the following format
-   project_no:  500
-   case_title:  Seeing whether case can be created from mail
-   assign_to:  sanjeev
-   case_status: open
-   case_priority: high
-   case_type: bug
-  ***************************************************************************/   
-  $entry = new StdClass();
-  $p_id = db_result(db_query("SELECT nid FROM {casetracker_project} WHERE project_no = %d", $node->project_no));
-  if ($p_id) {
-    $entry->p_id = $p_id;
-    //Setting the title
-    $entry->title = $node->case_title;
-    if (!isset($entry->title) ) {
-      $entry->title = t('case creation from mail');
-    }   
-    //Setting the assign_to field
-    //$entry->assign_to = casetracker_get_uid($node->assign_to);
-    $entry->assign_to = $node->assign_to;
-    if (!isset($entry->assign_to)) {
-      $entry->assign_to = casetracker_get_name($node->uid);  
-    }
-    //Setting the priority
-    $case_priority_id = db_result(db_query("SELECT case_priority_id FROM {casetracker_case_priority} WHERE case_priority = '%s'", $node->case_priority));
-    $entry->case_priority_id = $case_priority_id;
-    if (!isset($entry->case_priority_id)) {
-      $entry->case_priority_id = 3; 
-    }  
-    //Setting the case status
-    $case_status_id = db_result(db_query("SELECT case_status_id FROM {casetracker_case_status} WHERE case_status_name = '%s'", $node->case_status));
-    $entry->case_status_id = $case_status_id;
-    if (!isset($entry->case_status_id)) {
-      $entry->case_status_id = 1;
-    }  
-    //Setting the case type
-    $case_type_id = db_result(db_query("SELECT case_type_id FROM {casetracker_case_type} WHERE case_type = '%s'", $node->case_type)); 
-    $entry->case_type_id = $case_type_id;
-    if(!isset($entry->case_type_id)) {
-      $entry->case_type_id = 1; 
-    }  
-    //Setting other information
-    //Setting the node type
-    $entry->type = 'casetracker_case';
-    //Setting the status
-    $entry->status = 1;
-    //Setting the user id
-    $entry->uid = $node->uid;
-    // Setting the publising option
-    $entry->promote = 1;
-    //Setting the teaser
-    $entry->teaser = $node->teaser;
-    $vid = _casetracker_get_vid();
-    $tid = db_result(db_query("SELECT tid FROM {casetracker_project} WHERE nid = %d", $p_id));
-    //setting the taxonomy term
-    $entry->taxonomy[$vid][0] = $tid;
-    //seetting the body of the project
-    $entry->body = $node->body;
-    if($entry->body == "") {
-      $entry->body = t('This case has been created on casetracker via email from %name', array('%name' => casetracker_get_name($node->uid)));
-    } 
-    if($entry->teaser == "") {
-      $entry->teaser = t('This case has been created on casetracker via email from %name', array('%name' => casetracker_get_name($node->uid)));
-    }   
-    node_save($entry);
-  }
-  else {
-    watchdog('debug','Failure of case creation by mail by the user '.casetracker_get_name($node->uid));
-  }
- /****************************************************************************
-   The following section helps you to put comment on the cases present at    casetracker via mail .From putting the comment on the case just reply to the email notification received.The replied mail content being the comment body only
-******************************************************************************/  
-  //var_dump($node);
-  if ($mail->msg_id) {
-    $result = db_query("SELECT * FROM {casetracker_mail} WHERE msg_id = '%s'", $mail->msg_id);
-    $row = db_fetch_array($result);
-    $nid = $row['nid'];
-    $cid = $row['cid'];
-    $edit['nid'] = $nid;
-    //$edit['cid'] = $cid;
-    $edit['pid'] = $cid;
-    // $edit['comment'] = $node->cmt_message;
-    $edit['comment'] = $node->body;
-    $edit['uid'] = $node->uid;
-    $node = node_load(Array('nid' => $nid));
-    //$edit['subject'] = t('Comment from mail');
-    $edit['subject'] = $mail->subject;
-    $edit['case_priority_id'] = $node->case_priority_id;
-    $edit['case_type_id'] = $node->case_type_id;
-    $edit['case_status_id'] = $node->case_status_id;
-    $edit['case_title'] = $node->title;
-	$edit['assign_to'] = casetracker_get_name($node->assign_to); 
-	$term_id = db_result(db_query("SELECT tid FROM {casetracker_project} WHERE nid = %d ", $node->p_id));  
-	$edit['taxonomy'] = $term_id;
-    comment_save($edit);
-  } 
-}
-
-/**
- * Retrieve a pipe delimited string of autocomplete suggestions for existing users
- */
-function casetracker_autocomplete($string) {
-  $matches = array();
-  $result = db_query_range("SELECT name FROM {users} WHERE LOWER(name) LIKE LOWER('%s%%')", $string, 0, 10);
-  while ($user = db_fetch_object($result)) {
-    $matches[$user->name] = check_plain($user->name);
-  }
-  print drupal_to_js($matches);
-  exit();
-}
- 
-/**
- *  Function to get the case state/priority/type based on releam passed to the function.
- */
-function casetracker_case_state_option($realm) {
-   $result = db_query("SELECT * FROM {casetracker_case_states} WHERE case_state_realm = '%s'", $realm);
-   while($row = db_fetch_array($result)) {
-    $options[$row['csid']] = $row['case_state_name'];
-    }
-	return $options;  
-}
-
-/**
- * Function provides the UI for administering of case fields(Editing/Deletion)
- */
- 
-function casetracker_administer_case_fields() {
-  $headers = array(
-  array('data' => t('Case state id')),
-  array('data' => t('Case state name')),
-  array('data' => t('Case state realm')));
-  $result = db_query("SELECT * FROM {casetracker_case_states}");
-  $result1 = db_query("select distinct case_state_realm from {casetracker_case_states}");
-  while ($row1 = mysql_fetch_array($result1)) {
-    $field_values[$row1['case_state_realm']] = $row1['case_state_realm'];
-  }
-  $form = array();
-  $form['case_state_name'] = array('#tree' => TRUE);
-  $form['case_state_realm'] = array('#tree' => TRUE);
-  while($row = db_fetch_array($result)) {
-    $form['case_state_name'][$row[csid]] = array('#type' => 'textfield',
-        '#default_value' => $row[case_state_name],
-        '#size' => 20,
-        '#required' => TRUE,
-        '#maxlength' => 64,
-    );
-    
-    $form['case_state_realm'][$row['csid']] = array('#type' => 'select',
-    '#options' => $field_values,
-    '#required' => TRUE,
-    '#attributes' => array('disabled'=>'disabled','style'=>"background-color: #ffffff; color: #000000;" ),
-    '#default_value' => $row['case_state_realm'],
-    );
-    //$form['case_state_id'][$row[csid]] = array('#type' => 'hidden',
-    //'#default_value' => $row[csid],
-    //);
-   }
-   $form['submit'] = array('#type' => 'submit', '#value' => t('Save configuration'));
-   return drupal_get_form('casetracker_administer_case_fields', $form,'casetracker_administer_case_fields1');   
-}
-
-/**
- * The submit function for editing/deletion of case states
- */ 
-function casetracker_administer_case_fields_submit($form_id, $form_values) {
-  foreach($form_values as $key=>$value) {
-    if($key==t('Save configuration') || $key==t('casetracker_administer_case_fields')) 
-      continue;
-    $info[$key] =$value;
-  }
-  foreach($info['case_state_name'] as $key=> $value){
-    db_query("UPDATE {casetracker_case_states} SET case_state_name='%s' WHERE csid=%d",$value,$key);
-  }
-  // foreach($info['case_state_realm'] as $key=> $value){
-  //  db_query("UPDATE {casetracker_case_states} SET case_state_realm='%s' WHERE csid=%d",$value,$key);
-  // }    
-  
-}  
-
-/**
- * Function renders the UI for editing of case states in a tabular form.
- */
-function theme_casetracker_administer_case_fields1($form) {
-  foreach ($form['case_state_name'] as $key => $element) {
-    if (is_array($element) && element_child($key)) {
-      $rows[] = array(check_plain($key),form_render($form['case_state_name'][$key]), form_render($form['case_state_realm'][$key]),l(t('delete'), 'admin/case/states/delete/'.$key));
-    }
-  }
-  $header = array(array('data' => t('Case state id')), array('data' => t('Case state name')), array('data' => t('Case state realm')), array('data' => t('Operation')));
-  $output = theme('table', $header, $rows);
-  $output .= form_render($form);
-  return $output;
-}
-
-/**
- * Function renders the form for addition of case state values. 
- */  
- 
-function casetracker_case_state_add() {
-  $form['casetracker_state'] = array(
-    '#type' => 'fieldset',
-    '#title' => t('Adding a new case state'),
-    '#collapsible' => FALSE,
-    '#collapsed' => TRUE);
-  $form['casetracker_state']['casetracker_state_name'] = array(
-    '#type' => 'textfield',
-    '#title' => t('New Case State Name'),
-    '#required' => TRUE,
-    '#default_value' => '',
-    '#size' => 40);
-  $result = db_query("select distinct case_state_realm from {casetracker_case_states}");
-  while ($row = mysql_fetch_array($result)) {
-    $field_values[$row['case_state_realm']] = $row['case_state_realm'];
-  }
-  $form['casetracker_state']['casetracker_state_realm'] = array(
-    '#type' => 'select',
-    '#title' => t('Select case state realm'),
-    '#default_value' => '',
-    '#options' => $field_values);
-  $form['casetracker_case']['casetracker_state_submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Add New Case State'));
-  return drupal_get_form('casetracker_case_state_add', $form);                                                                 
-  
-}
-
-/**
- * The submit function for addition of case state values.
- */
-function casetracker_case_state_add_submit($form_id, $form_values) {
-  $result = db_query("INSERT INTO {casetracker_case_states} SET case_state_name='%s', case_state_realm='%s'",$form_values['casetracker_state_name'],$form_values['casetracker_state_realm']);
-  if ($result) {
-     drupal_set_message(t('Case state has been added successfully.'));
-     drupal_goto('admin/case/states');
-   }
-}
-
-/**
- * The function to ask for a confirmation to delete case state
- */
-function casetracker_case_state_delete(){
-  $info = db_result(db_query("SELECT case_state_name FROM {casetracker_case_states} WHERE csid=%d",arg(4)));
-  $form['csid'] = array(
-    '#type' => 'hidden',
-    '#default_value' => arg(4)
-  );
-  return confirm_form('casetracker_case_state_delete_confirm', $form, t('Are you sure you want to delete the case state %name?', array('%name' => theme('placeholder', $info))), 'admin/case/states', '', t('Delete'), t('Cancel'));  
-}
-
-/**
- * The submit function for deletion of case states
- */  
-function casetracker_case_state_delete_confirm_submit($form_id,$form_values) {
-  $result = db_query("DELETE FROM {casetracker_case_states} WHERE csid=%d", $form_values['csid']);
-  if($result) {
-    drupal_set_message('The case state has been successfully deleted');
-    drupal_goto('admin/case/states');
-  }  
-}     
-
-/**
- * Implementation of hook_nodeapi().
- *
- */
-function casetracker_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
-  switch ($op) {
-    case 'view':
-      if(in_array($node->type, variable_get('casetracker_project_node_types',array('casetracker_project')),TRUE)){
-        //$node = node_prepare($node, $teaser);
-        $output = '<div class="case">';
-        $rows = array();
-        $rows[] = array(t('Project no'), l($node->project_no, 'project/cases/'.$node->nid.'/all', array('title' => t('Views all cases in this project'))));
-        $rows[] = array(t('Project Title:'), l($node->title, 'project/cases/'.$node->nid.'/all',array('title' => t('Views all cases in this project'))));
-        $rows[] = array(t('Opened by:'), check_plain(casetracker_get_name($node->uid)));
-        $rows[] = array(t('Opened on:'), date('D, d F Y , g:i A', $node->created)); 
-        $rows[] = array(t('Last modified:'), date('D, d F Y , g:i A', $node->changed)); 
-        $rows[] = array(t('Add a case to this project:'), l($node->title, 'node/add/casetracker_case/'.$node->nid));
-        $output .= '<div class="summary">'. theme('table', array(), $rows) .'</div>';
-        $output .= '<p>'. t('Case Description') .'</p>';
-        $output .= '<p>'. $node->body .'</p>';
-        $output .= '</div>';
-        $node->body = $output;
-      }
-      break;
-    case 'delete':
-      if(in_array($node->type, variable_get('casetracker_project_node_types',array('casetracker_project')),TRUE)){ 
-        $result = db_query("SELECT nid from {casetracker_case} WHERE p_id = %d", $node->nid);
-        // deleting all the cases under the project & all the comments under the case.
-        while ($row = db_fetch_array($result)) {
-          if ($row['nid']) {
-            db_query("DELETE FROM {casetracker_case} where nid = %d", $row['nid']);
-            $result = db_query("SELECT cid FROM {comments} WHERE nid = %d", $row['nid']);
-            while ($row1 = db_fetch_array($result)) {
-              $sid = db_result(db_query("SELECT sid FROM {casetracker_comment} WHERE cid = %d", $row1['cid']));
-              db_query("DELETE FROM {casetracker_comment_status} WHERE sid = %d", $sid);
-              db_query('DELETE FROM {casetracker_comment} WHERE cid = %d', $row1['cid']);     }
-            node_delete($row['nid']);
-          }
-        }
-        db_query("DELETE FROM {casetracker_project} WHERE nid = %d", $node->nid);
-      }
-      break;
-    case 'insert':
-      if(in_array($node->type, variable_get('casetracker_project_node_types',array('casetracker_project')),TRUE)){ 
-        //casetracker_project_insert1($node);
-        db_query('INSERT INTO {casetracker_project} (nid, vid, project_no) VALUES (%d, %d, %d)',$node->nid, $node->vid, casetracker_project_next_id('project_no'));
-      }
-      break;
-    case 'update':
-      if(in_array($node->type, variable_get('casetracker_project_node_types',array('casetracker_project')),TRUE)){ 
-        //casetracker_project_update1($node);
-        if($node->revision) {
-          db_query('INSERT INTO {casetracker_project} (nid, vid, project_no) VALUES (%d, %d, %d )', $node->nid, $node->vid, $node->project_no);
-    }
-      }
-      break;
-    case 'load':
-       //casetracker_project_load($node);
-      if(in_array($node->type, variable_get('casetracker_project_node_types',array('casetracker_project')),TRUE)){ 
-        $result = db_query('SELECT project_no FROM {casetracker_project} WHERE nid = %d AND vid = %d', $node->nid, $node->vid); 
-        return db_fetch_array($result);
-      }
-      break;
-  }
-}
-/**
- *  Implememntation of hook_views_table
- */
-function casetracker_views_tables() {
-  $tables['casetracker_case'] = array(
-    'name' => 'casetracker_case',
-    'provider' => 'internal',
-    'join' => array(
-      'left' => array(
-        'table' => 'node',
-        'field' => 'vid',
-        ),
-      'right' => array(
-        'field' => 'vid',
-        'type' => 'inner'
-        )
-      ),
-    'fields' => array(
-      'p_id' => array(
-        'name' => t('Casetracker: Parent project'),
-        'sortable' => TRUE,
-        'handler' => 'casetracker_get_project_name',
-        'p_id' => "p_id", 
-        'addlfields' => array("p_id"),
-        'help' => t('This will display the name of the parent project.')
-        ),
-      'case_id' => array(
-        'name' => t('Casetracker: Case ID'),
-        'sortable' => TRUE,
-        'addlfields' => array("case_id"),
-        //'handler' => 'casetracker_get_case_id',
-        'help' => t('This allows you to filter cases based on case id.'),
-        ),
-      'assign_to' => array(
-        'name' => t('Casetracker: Assigned To'),
-        'sortable' => TRUE,
-        'handler' => 'casetracker_get_user_name',
-        'addlfields' => array("assign_to"),
-        'help' => t('We can view all the cases assigned to a person.'),
-        ),
-      'case_priority_id' => array(
-        'name' => t('Casetracker: Case priority'),
-        'sortable' => TRUE,
-        'addlfields' => array("case_priority_id"),
-        'handler' => 'casetracker_get_priority',
-        'help' => t('We can filter cases by priority.'),
-        ),
-      'case_status_id' => array(
-        'name' => t('Casetracker: Case status'),
-        'sortable' => TRUE,
-        'addlfields' => array("case_status_id"),
-        'handler' => 'casetracker_get_status',
-        'help' => t('We can filter cases by status.'),
-        ),
-      'case_type_id' => array(
-        'name' => t('Casetracker: Case type'),
-        'sortable' => TRUE,
-        'addlfields' => array("case_type_id"),
-        'handler' => 'casetracker_get_type',
-        'help' => t('We can filter cases by type.'),
-        )    
-      ),
-    'filters' => array(
-      'case_priority_id' => array(
-        'name' => t('Case Tracker: View the cases with selected priority'),
-        'list' => 'casetracker_get_priority_options',
-        'operator' => 'views_handler_operator_andor',
-        'help' => t('This allows you to filter case based on its priority.'),
-        ),
-      'case_status_id' => array(
-        'name' => t('Case Tracker: View the cases with selected status'),
-        'list' => 'casetracker_get_status_options',
-        'operator' => 'views_handler_operator_andor',
-        'help' => t('This allows you to filter case based on its status.'),
-        ),
-      'case_type_id' => array(
-        'name' => t('Case Tracker: View the case with selected type'),
-        'list' => 'casetracker_get_type_options',
-        'operator' => 'views_handler_operator_andor',
-        'help' => t('This allows you to filter case based on its state.'),
-        ),
-      'assign_to' => array(
-        'name' => t('Case Tracker: Assigned to'),
-        'list' => 'casetracker_get_users_options',
-        'value-type' => 'array',
-        'operator' => 'views_handler_operator_andor',
-        'help' => t('This allows you to filter case based on the assigned user.')
-        ),
-      ),
-    'sorts' => array(
-      'case_id' => array(
-        'name' => t('Casetracker: case_id'),
-        'handler' => 'casetracker_views_handler_sort_case_id',
-        'help' => t('This will sort the cases by case id'),
-        ),
-      'case_status_id' => array(
-        'name' => t('Case Tracker: Case Status'),
-        'handler' => 'casetracker_views_handler_sort_status',
-        'help' => t('This allows you to sort cases based on its case status.'),
-        ),
-      )
-    );
-  $tables['casetracker_project'] = array(
-    'name' => 'casetracker_project',
-    'provider' => 'internal',
-    'join' => array(
-      'left' => array(
-        'table' => 'casetracker_case',
-        'field' => 'p_id',
-        ),
-      'right' => array(
-        'field' => 'nid',
-        'type' => 'inner'
-        )
-      ),
-    'fields' => array(
-      'project_no' => array(
-        'name' => t('Casetracker: Project no'),
-        'sortable' => TRUE,
-        'handler' => 'casetracker_get_case_id',
-        'project_no' => 'project_no',
-        'addlfields' => array('project_no'),
-        'help' => t('This will sort project based on project no.')
-        )
-      ),
-    'filters' => array(
-      'project_no' => array(
-        'name' => t('Case Tracker: Filter on selected project'),
-        'list' => 'casetracker_get_projects_options',
-        'operator' => 'views_handler_operator_andor',
-        'value-type' => 'array',
-        'help' => t('This allows you to filter cases based on their projects.'),
-        ),
-      )
-	 );
-	$tables['casetracker_case_states'] = array(
-    'name' => 'casetracker_case_states',
-    'provider' => 'internal',
-    'join' => array(
-      'left' => array(
-        'table' => 'casetracker_case',
-        'field' => 'case_status_id'
-        ), 
-      'right' => array(
-        'field' => 'csid',
-        'type' => 'inner'
-        )
-      ),
-    'sorts' => array(
-      'case_state_name' => array(
-        'name' => t('Casetracker: State name'),
-        'help' => t('This will sort the states by their name'),
-        )
-      )
-	 );
-
-  return $tables;
-}
-
-function casetracker_get_users_options() {
-  $options = array();
-  $result = db_query('SELECT uid, name FROM {users} WHERE status > 0 AND uid > 0');
-  $options[0] = variable_get('anonymous', 'Anonymous');
-  while ($obj = db_fetch_object($result)) {
-    $options[$obj->uid] = check_plain($obj->name);
-  }
-  return $options;
-}
-
-function casetracker_get_project_name($fieldinfo, $fielddata, $value, $data) {
-  $node = db_fetch_object(db_query(db_rewrite_sql("SELECT n.nid, n.title FROM {node} n WHERE n.nid = %d"), $data->casetracker_case_p_id));
-  
-  if ($node->nid) {
-    return l($node->title, "node/$node->nid");
-  }
-}
-
-function casetracker_get_status($fieldinfo, $fielddata, $value, $data) {
-  return check_plain(casetracker_get_value($data->casetracker_case_case_status_id));
-}
-
-function casetracker_get_priority($fieldinfo, $fielddata, $value, $data) {
-  return check_plain(casetracker_get_value($data->casetracker_case_case_priority_id));
-}
-
-function casetracker_get_type($fieldinfo, $fielddata, $value, $data) {
-  return check_plain(casetracker_get_value($data->casetracker_case_case_type_id));
-}
-
-/**
- * Function to retrive the user name corresponding to user id
- */
- 
-function casetracker_get_user_name($fieldinfo, $fielddata, $value, $data) {
-   static $user_name = array();
-   if(!isset($user_name[$data->casetracker_case_assign_to])) { 
-     if($data->casetracker_case_assign_to == 0) {
-       $user_name[$data->casetracker_case_assign_to] = check_plain( variable_get('anonymous', 'Anonymous'));
-     }
-     else {
-       $user_name[$data->casetracker_case_assign_to] = db_result(db_query("SELECT name FROM {users} WHERE uid = %d",$data->casetracker_case_assign_to));
-     }
-   }
-   return $user_name[$data->casetracker_case_assign_to];       
-}
-
-function casetracker_get_case_id($fieldinfo, $fielddata, $value, $data) {
-#  static $case_id = array();
-  $case_id = array();
-  if(!isset($case_id[$data->casetracker_case_p_id])) {
-  $project_no = db_result(db_query("SELECT max(project_no) FROM {casetracker_project} WHERE  nid = %d", $data->casetracker_case_p_id));
-  $case_id[$data->casetracker_case_p_id] = $project_no.'-'.$data->casetracker_case_case_id;
-  }
-  return $case_id[$data->casetracker_case_p_id]; 
-} 
-// The following is not in use
-function casetracker_get_case_id1($fieldinfo, $fielddata, $value, $data) {
-  //var_dump($data);
-  // object(stdClass)#2 (9) { ["nid"]=>  string(3) "188" ["casetracker_case_p_id"]=>  string(3) "183" ["casetracker_case_case_priority_id"]=>  string(1) "3" ["casetracker_case_case_status_id"]=>  string(1) "6" ["casetracker_case_case_type_id"]=>  string(2) "12" ["casetracker_case_assign_to"]=>  string(1) "1" ["node_title"]=>  string(26) "The first case on sandbox." ["node_changed"]=>  string(10) "1148631643" ["casetracker_project_project_no"]=>  NULL }
-  $project_no = db_result(db_query("SELECT max(project_no) FROM {casetracker_project} WHERE  nid = %d", $data->casetracker_case_p_id));
-  return $project_no.'-'.$data->casetracker_case_case_id;
-   
-}     
-
-/*function casetracker_get_type($fieldinfo, $fielddata, $value, $data) {
-  //  print_r(serialize($fieldinfo) .' '. serialize($fielddata) .' '. serialize($value) .' '. serialize($data));
-  return check_plain(casetracker_get_value($data->casetracker_case_case_type_id));
-}*/
-
-function casetracker_get_priority_options() {
-  $options = array();
-  $result = db_query("SELECT csid, case_state_name FROM {casetracker_case_states} WHERE case_state_realm='%s'",'priority');
-  while ($obj = db_fetch_object($result)) {
-    $options[$obj->csid] = "$obj->case_state_name";
-  }
-  return $options;  
-} 
-
-function casetracker_get_status_options() {
-  $options = array();
-  $result = db_query("SELECT csid, case_state_name FROM {casetracker_case_states} WHERE case_state_realm='%s'",'status');
-  while ($obj = db_fetch_object($result)) {
-    $options[$obj->csid] = "$obj->case_state_name";
-  }
-  return $options;
-}
-
-function casetracker_get_type_options() {
-  $options = array();
-  $result = db_query("SELECT csid, case_state_name FROM {casetracker_case_states} WHERE case_state_realm='%s'",'type');
-  while ($obj = db_fetch_object($result)) {
-    $options[$obj->csid] = "$obj->case_state_name";
-  }
-  return $options;
-} 
-
-function casetracker_get_projects_options() {
-  $options = array();
-  $result = db_query(db_rewrite_sql("SELECT n.nid, p.project_no, n.title, CONCAT(p.project_no, ' ', n.title) AS project FROM {node} n INNER JOIN {casetracker_project} p ON n.nid = p.nid"));
-  while ($obj = db_fetch_object($result)) {
-    $options[$obj->project_no] = "$obj->title";
-  }
-  return $options;
-}
-
-function casetracker_views_handler_sort_case_id($action, &$query, $sortinfo, $sort) {
-  switch ($GLOBALS['db_type']) {
-    case 'mysql':
-    case 'mysqli':
-      $query->add_orderby('', "case_id", "ASC");
-      break;  
-  }
+<?php
+  // $Id: casetracker.module,v 1.68 2006/08/15 20:48:06 killes Exp $
+  /**
+   * The below function invokes the appropriate help
+   */
+function casetracker_help($section) {
+  switch ($section) {
+    case 'admin/modules#description':
+      return t('Enables the handling of projects and their cases.');
+
+    case 'admin/help#casetracker':
+      $help = '<h3>Case Tracker</h3>'.
+      '<p>Basic casetracker module structure :</p>'.
+      '<pre>'.
+      'project nodes >>> casetracker_project'.
+      '<br />cases nodes >>>> casetracker_case';
+      return $help;
+    case 'search/casetracker/case':
+      return t('Enter the keyword "case" to search for cases');
+    case 'search/casetracker':
+      return t('Enter the keyword "case" to search for cases');
+    /* case 'node/add#casetracker_project':
+       return t('Create a project that you can then place cases under.'); */
+    case 'admin/settings/casetracker':
+      return t('This sets overall settings for the casetracker module. If you would like to customize the various workflow options for case status, priority, and type, use the %link page', array('%link' => l('case status settings', 'admin/case')));
+    case 'node/add#casetracker_case':
+      return t('Open a new case.');
+
+  }
+}
+
+/**
+ * The menu system of the casetracker module
+ */
+function casetracker_menu($may_cache) {
+  $items = array();
+
+  if ($may_cache) {
+    $access = user_access('access casetracker');
+    /*$items[] = array('path' => 'node/add/casetracker_project',
+      'title' => t('project') ,
+      'access' => user_access('create projects'));*/
+    $items[] = array(
+      'path' => 'node/add/casetracker_case',
+      'title' => t('case') ,
+      'access' =>user_access('create project cases'));
+    $items[] = array(
+      'path' => 'casetracker',
+      'title' => t('case tracker'),
+      'callback' => 'casetracker_show_mycases',
+      'access' => $access);
+    $items[] = array(
+      'path' => 'casetracker/projects',
+      'title' => t('projects'),
+      'callback' => 'casetracker_projects_table',
+      'callback arguments' => 'all_projects',
+      'access' => $access);
+    $items[] = array(
+      'path' => 'casetracker/projects/myprojects',
+      'title' => t('my projects'),
+      'callback' => 'casetracker_projects_table',
+      'access' => $access);
+    $items[] = array(
+      'path' => 'casetracker/cases',
+      'title' => t('cases'),
+      'callback' => 'casetracker_cases_table',
+      'callback arguments' => 'all_cases',
+      'access' => $access);
+    $items[] = array(
+      'path' => 'casetracker/cases/mycase',
+      'title' => t('my cases'),
+      'callback' => 'casetracker_cases_table',
+      'access' => $access);
+    $items[] = array(
+      'path' => 'casetracker/cases/mycase/all',
+      'title' => t('all'),
+      'callback' => 'casetracker_cases_table',
+      'type' => MENU_DEFAULT_LOCAL_TASK,
+      'access' => $access);
+    $items[] = array(
+      'path' => 'casetracker/cases/mycase/opened_by_me',
+      'title' => t('opened by me'),
+      'callback' => 'casetracker_cases_table',
+      'type' => MENU_LOCAL_TASK,
+      'access' => $access);
+    $items[] = array(
+      'path' => 'casetracker/cases/mycase/assigned_to_me',
+      'title' => t('assigned to me'),
+      'callback' => 'casetracker_cases_table',
+      'type' => MENU_LOCAL_TASK,
+      'access' => $access);
+    $items[] = array(
+      'path' => 'casetracker/search',
+      'title' => t('search cases'),
+      'callback' => 'casetracker_search_form',
+      'access' => $access);
+    $items[] = array(
+      'path' => 'casetracker/comments',
+      'title' => t('comments'),
+      'callback' => 'casetracker_comment_form',
+      'access' => $access,
+      'type' => MENU_CALLBACK);
+/* ##########################  NEW UI FOR ADMINISTERING CASE FIELDS ##################################*/
+    $items[] = array(
+      'path' => 'admin/case',
+      'title' => t('casetracker states'),
+      'callback' => 'casetracker_administer_case_fields');
+    $items[] = array(
+      'path' => 'admin/case/states/edit',
+      'title' => t('case state view'),
+      'type' => MENU_DEFAULT_LOCAL_TASK);
+    $items[] = array(
+      'path' => 'admin/case/states/add',
+      'title' => t('case state add'),
+      'callback' => 'casetracker_case_state_add',
+      'type' => MENU_LOCAL_TASK
+      );
+    $items[] = array(
+      'path' => 'admin/case/states/delete',
+      'title' => t('case state delete'),
+      'callback' => 'casetracker_case_state_delete',
+      'type' => MENU_CALLBACK
+      );
+    $items[] = array(
+      'path' => 'casetracker/cases/all',
+      'title' => t(''),
+      'callback' => 'casetracker_cases_table',
+      'type' => MENU_CALLBACK
+      );
+    /*################################################################################################*/
+   /* $items[] = array(
+      'path' => 'admin/case/casetracker_case_status',
+      'title' => t('case status'),
+      'callback' => 'casetracker_case_table_view',
+      'callback arguments' => arg(2));
+    $items[] = array(
+      'path' => 'admin/case/casetracker_case_status/view',
+      'title' => t('view'),
+      'weight' => -10,
+      'type' => MENU_DEFAULT_LOCAL_TASK);
+    $items[] = array(
+      'path' => 'admin/case/casetracker_case_status/add',
+      'title' => t('add'),
+      'callback' => 'casetracker_status_add',
+      'type' => MENU_LOCAL_TASK);
+    $items[] = array(
+      'path' => 'admin/case/casetracker_case_status/edit',
+      'title' => t('edit'), 'callback' => 'casetracker_case_table_edit',
+      'callback arguments' => arg(2),
+      'weight' => -9,
+      'type' => MENU_LOCAL_TASK);
+    $items[] = array(
+      'path' => 'admin/case/casetracker_case_priority',
+      'title' => t('case priority'),
+      'callback' => 'casetracker_case_table_view',
+      'callback arguments' => arg(2));
+    $items[] = array(
+      'path' => 'admin/case/casetracker_case_priority/view',
+      'title' => t('view'),
+      'weight' => -10,
+      'type' => MENU_DEFAULT_LOCAL_TASK);
+    $items[] = array(
+      'path' => 'admin/case/casetracker_case_priority/add',
+      'title' => t('add'),
+      'callback' => 'casetracker_priority_add',
+      'type' => MENU_LOCAL_TASK);
+    $items[] = array(
+      'path' => 'admin/case/casetracker_case_priority/edit',
+      'title' => t('edit'), 'callback' => 'casetracker_case_table_edit',
+      'callback arguments' => arg(2),
+      'weight' => -9,
+      'type' => MENU_LOCAL_TASK);
+    $items[] = array(
+      'path' => 'admin/case/casetracker_case_type',
+      'title' => t('case type'),
+      'callback' => 'casetracker_case_table_view',
+      'callback arguments' => arg(2));
+    $items[] = array(
+      'path' => 'admin/case/casetracker_case_type/view',
+      'title' => t('view'),
+      'weight' => -10,
+      'type' => MENU_DEFAULT_LOCAL_TASK);
+    $items[] = array(
+      'path' => 'admin/case/casetracker_case_type/add',
+      'title' => t('add'),
+      'callback' => 'casetracker_type_add',
+      'type' => MENU_LOCAL_TASK);
+    $items[] = array(
+      'path' => 'admin/case/casetracker_case_type/edit',
+      'title' => t('edit'), 'callback' => 'casetracker_case_table_edit',
+      'callback arguments' => arg(2),
+      'weight' => -9,
+      'type' => MENU_LOCAL_TASK);
+    $items[] = array(
+      'path' => 'admin/case/delete',
+      'title' => t('Deletion of case fields'),
+      'callback' => 'casetracker_case_table_delete',
+      'access' => $access,
+      'type' => MENU_CALLBACK); */
+    $items[] = array(
+      'path' => 'casetracker/jump_to_case',
+      'title' => t('Following case found'),
+      'callback' => 'jump_to_case_form_submit',
+      'access' => $access,
+      'type' => MENU_CALLBACK);
+    $items[] = array(
+      'path' => 'casetracker/jump_to_case/no_record',
+      'title' => t('No matching records found'),
+      'callback' => 'jump_to_case_no_result',
+      'access' => $access,
+      'type' => MENU_CALLBACK);
+    $items[] = array(
+      'path' => 'casetracker/jump_to_case/found_record',
+      'title' => t('Following records found'),
+      'callback' => 'jump_to_case_found_result',
+      'access' => $access,
+
+      'type' => MENU_CALLBACK);
+    $items[] = array(
+     'path' => 'project/cases',
+     'title' => 'Cases for',
+     'callback' => 'casetracker_cases_table',
+     //'callback arguments' => arg(2),
+     'access' => $access,
+     'type' => MENU_CALLBACK);
+    $items[] = array(
+     'path' => 'casetracker/autocomplete',
+     'title' => t('user autocomplete'),
+     'callback' => 'casetracker_autocomplete',
+     'access' => 1,
+     'type' => MENU_CALLBACK);
+  }
+  return $items;
+}
+
+/**
+ *  Function to call the serach form
+ */
+
+function casetracker_search_form() {
+  drupal_goto("search/casetracker");
+}
+
+/**
+ * Setting the appropriate permission
+ */
+
+function casetracker_perm() {
+  $perms = array(
+                 'create projects',
+                 'access own projects',
+                 'create project cases',
+                 'edit own project cases',
+                 'edit own projects',
+                 'access casetracker',
+                 'assign case',
+                 'set case status'
+                 );
+  return $perms;
+}
+
+function casetracker_case_access($op, $node) {
+  global $user;
+  if ($op == 'create') {
+    return user_access('create project cases');
+  }
+  if ($op == 'update' || $op == 'delete') {
+    if (user_access('edit own project cases') && ($user->uid == $node->uid)) {
+      return TRUE;
+    }
+  }
+}
+
+/**
+ * Function to display all the cases created by the logged in user in a tabular form
+ */
+
+function casetracker_cases_table($argument = null) {
+   global $user;
+   theme_add_style(drupal_get_path('module', 'casetracker') .'/casetracker.css');
+   $status_arr = casetracker_case_state_option('status');
+   foreach ($status_arr as $key => $value) {
+     $classes[$key] = preg_replace('/\W/', '', strtolower($value));
+   }
+   $headers = array(
+   array('data' => t('Case ID'), 'field' => 'cs.case_id'),
+   array('data' => t('Title'), 'field' => 'n.title'),
+   array('data' => t('Last updated'), 'field' => 'c.last_comment_timestamp', 'sort' => 'desc'),
+   array('data' => t('Priority'), 'field' => 'cs.case_priority_id'),
+   array('data' => t('Status'), 'field' => 'cs.case_status_id'),
+   array('data' => t('Type'), 'field' => 'cs.case_type_id'),
+   array('data' => t('Assigned to'), 'field' => 'cs.assign_to')
+   );
+   switch(arg(3)) {
+     case 'assigned_to_me':
+       $sql = db_rewrite_sql("SELECT * FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE cs.assign_to = %d and n.type ='%s'");
+       $arguments = array($user->uid, 'casetracker_case');
+       break;
+     case 'opened_by_me':
+       $sql = db_rewrite_sql("SELECT * FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE n.uid = %d and n.type ='%s'");
+       $arguments = array($user->uid, 'casetracker_case');
+       break;
+     case 'priority':
+       $case_id = (int)arg(4);
+       $sql = db_rewrite_sql("SELECT * FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE n.type ='%s' AND cs.case_priority_id = %d");
+       $arguments = array('casetracker_case',$case_id);
+       break;
+     case 'state':
+       $case_id = (int)arg(4);
+       $sql = db_rewrite_sql("SELECT * FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE n.type ='%s' AND cs.case_status_id = %d");
+       $arguments = array('casetracker_case',$case_id);
+       break;
+     case 'type':
+       $case_id = (int)arg(4);
+       $sql = db_rewrite_sql("SELECT * FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE n.type ='%s' AND cs.case_type_id = %d");
+       $arguments = array('casetracker_case',$case_id);
+       break;
+     default :
+       if (is_numeric(arg(2))) {
+         $argument = arg(2);
+       }
+       if (!$argument ) {
+         $sql = db_rewrite_sql("SELECT * FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE ( n.uid = %d OR cs.assign_to = %d ) AND n.type ='%s'");
+         $arguments = array($user->uid, $user->uid, 'casetracker_case');
+       }
+      if($argument == 'all_cases'){
+         $sql = db_rewrite_sql("SELECT * FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE n.type ='%s'");
+         $arguments = array('casetracker_case');
+       }
+      if(is_numeric($argument)) {
+        $project_name_for_case_listing = db_result(db_query("SELECT title FROM {node} WHERE nid = %d",arg(2)));
+        drupal_set_title("Cases for"." ".$project_name_for_case_listing);
+        if ( arg(3) == 'all') {
+  // ###########################################################################################################
+  // project/cases/170/all/state/6
+        //var_dump(arg(4));
+        if(arg(4)==t('state')){
+            drupal_set_title(t('Cases for '.$project_name_for_case_listing.'<br>'.l(t('Click here to view all cases'),'project/cases/'.arg(2).'/all')));
+        $case_id = arg(5);
+        $sql = db_rewrite_sql("SELECT * FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE n.type ='%s' AND p_id = %d AND cs.case_status_id = %d");
+        $arguments = array('casetracker_case', $argument,$case_id);
+        }
+         else if(arg(4)=='priority'){
+            drupal_set_title(t('Cases for '.$project_name_for_case_listing.'<br>'.l(t('Click here to view all cases'),'project/cases/'.arg(2).'/all')));
+        $case_id = arg(5);
+        $sql = db_rewrite_sql("SELECT * FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE n.type ='%s' AND p_id = %d AND cs.case_priority_id = %d");
+        $arguments = array('casetracker_case', $argument,$case_id);
+         }
+         else if(arg(4)==t('type')){
+            drupal_set_title(t('Cases for '.$project_name_for_case_listing.'<br>'.l(t('Click here to view all cases'),'project/cases/'.arg(2).'/all')));
+        $case_id = arg(5);
+        $sql = db_rewrite_sql("SELECT * FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE n.type ='%s' AND p_id = %d AND cs.case_type_id = %d");
+        $arguments = array('casetracker_case', $argument,$case_id);
+         }
+         else {
+           $project_name_for_case_listing = db_result(db_query("SELECT title FROM {node} WHERE nid = %d",arg(2)));
+           drupal_set_title("Cases for"." ".$project_name_for_case_listing);
+           $sql = db_rewrite_sql("SELECT * FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE n.type ='%s' AND p_id = %d ");
+           $arguments = array('casetracker_case', $argument);
+         }
+        }
+
+ // #############################################################################################################
+        else {
+         $sql = db_rewrite_sql("SELECT n.nid, n.* FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE n.type ='%s' AND p_id = %d AND n.uid = %d ");
+         $arguments = array('casetracker_case', $argument, $user->uid);
+        }
+      }
+    }
+    //echo $sql;
+   $tablesort = tablesort_sql($headers);
+   //echo $sql;
+   $result = pager_query($sql.$tablesort, 10, 0, NULL, $arguments);
+   while ($node = db_fetch_object($result)) {
+     $project_no = db_result(db_query("SELECT max(project_no) FROM {casetracker_project} WHERE  nid = %d ", $node->p_id));
+     $disp = arg(1);
+     if(arg(2) == t('mycase')){
+       $disp = t('mycases');
+     }
+     else if(arg(2)==t('all')) {
+       $disp = t('all_filtered_case');
+     }
+     else if($disp=t('cases') && is_numeric(arg(2)) && arg(3)==t('all')) {
+       $disp = 'tttt'; // just transfering the control to default case of the below switch stmt;
+     }
+     else {
+       $disp = arg(1);
+     }
+     switch($disp) {
+       case t('cases'): //Gives a listing of all cases
+       drupal_set_title('All cases listing');
+       $rows[] = array('data' => array($project_no.'-'.$node->case_id, l(t(truncate_utf8($node->title, 50)),'node/'.$node->nid).theme('mark', node_mark($node->nid, $node->changed)),format_interval(time() - $node->last_comment_timestamp, 2),l(casetracker_get_value($node->case_priority_id),'casetracker/cases/'.'all'.'/'.'priority/'.$node->case_priority_id),l(casetracker_get_value($node->case_status_id),'project/cases/'.'all'.'/'.'state'.'/'.htmlentities(urlencode($node->case_status_id))),l(casetracker_get_value($node->case_type_id),'project/cases/'.'all'.'/'.'type'.'/'.htmlentities(urlencode($node->case_type_id))),l(casetracker_get_name($node->assign_to),'user/'.$node->assign_to)), 'class' => $classes[$node->case_status_id]);
+       break;
+       case t('all_filtered_case'):
+       $filter_basis = arg(3);
+       switch($filter_basis) {
+         case t('state'):
+         $filter_basis = t('case status');
+         break;
+         case t('priority'):
+         $filter_basis = t('case priority');
+         break;
+         case t('type'):
+         $filter_basis = t('case type');
+         break;
+       }
+       drupal_set_title(t('The cases has been filtered on the basic of '.$filter_basis).'<br />'.l(t('Click here to view all cases'),'casetracker/cases'));
+       $rows[] = array('data' => array($project_no.'-'.$node->case_id, l(t(substr($node->title, 0, 50)),'node/'.$node->nid).theme('mark',node_mark($node->nid, $node->changed)),format_interval(time() - $node->last_comment_timestamp, 2),casetracker_get_value($node->case_priority_id),casetracker_get_value($node->case_status_id),casetracker_get_value($node->case_type_id),l(casetracker_get_name($node->assign_to),'user/'.$node->assign_to)), 'class' => $classes[$node->case_status_id]);
+       break;
+       case t('mycases'): // Gives a listing of all cases either assigned to me or created by me
+       $rows[] = array('data' => array($project_no.'-'.$node->case_id, l(t(substr($node->title, 0, 50)),'node/'.$node->nid).theme('mark',node_mark($node->nid, $node->changed)),format_interval(time() - $node->last_comment_timestamp, 2),casetracker_get_value($node->case_priority_id),casetracker_get_value($node->case_status_id),casetracker_get_value($node->case_type_id),l(casetracker_get_name($node->assign_to),'user/'.$node->assign_to)), 'class' => $classes[$node->case_status_id]);
+       break;
+       default:
+         $rows[] = array('data' => array($project_no.'-'.$node->case_id, l(t(substr($node->title, 0, 50)),'node/'.$node->nid).theme('mark', node_mark($node->nid, $node->changed)),format_interval(time() - $node->last_comment_timestamp, 2),l(casetracker_get_value($node->case_priority_id),'project/cases/'.$node->p_id.'/'.'all'.'/'.'priority/'.$node->case_priority_id),l(casetracker_get_value($node->case_status_id),'project/cases/'.$node->p_id.'/'.'all'.'/'.'state'.'/'.htmlentities(urlencode($node->case_status_id))),l(casetracker_get_value($node->case_type_id),'project/cases/'.$node->p_id.'/'.'all'.'/'.'type'.'/'.htmlentities(urlencode($node->case_type_id))),l(casetracker_get_name($node->assign_to),'user/'.$node->assign_to)), 'class' => $classes[$node->case_status_id]);
+     }
+   }
+   if(count($rows)==0) {
+     $output = t('You have no cases');
+   }
+   else {
+     //project/cases/145/all
+     if(is_numeric(arg(2))) {
+       $output = l(t('Add case on %s ', array('%s' => $project_name_for_case_listing)),'node/add/casetracker_case/'.arg(2));
+       $output .= t('<br><br>');
+     }
+     $output .= theme('table', $headers, $rows);
+     $output .= theme('pager', NULL, 15, 0);
+   }
+   return $output;
+}
+
+/**
+ * Function to display all the projects created by logged in user in tabular form.
+ */
+
+function casetracker_projects_table($argument = null) {
+  global $user;
+  theme_add_style(drupal_get_path('module', 'casetracker') .'/casetracker.css');
+  $headers = array(
+    array('data' => t('Project ID'), 'field' => 'cp.project_no'),
+    array('data' => t('Title'), 'field' => 'n.title'),
+    array('data' => t('Last updated'), 'field' => 'c.last_comment_timestamp'),
+    array('data' => t('Edit')),
+    array('data' => t('Add a case to this project')));
+  if ($argument == 'all_projects') {
+    $sql = db_rewrite_sql("SELECT n.*, cp.* FROM {node} n INNER JOIN {casetracker_project} cp on n.vid = cp.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE n.type IN (".str_pad('', count(variable_get('casetracker_project_node_types',array('casetracker_project'))) * 5 - 1, "'%s',").")");
+    $arguments = variable_get('casetracker_project_node_types',array('casetracker_project'));
+  }
+  else {
+    $sql = db_rewrite_sql("SELECT n.*, cp.* FROM {node} n INNER JOIN {casetracker_project} cp on n.vid = cp.vid LEFT JOIN {node_comment_statistics} c ON c.nid = n.nid WHERE n.uid = %d AND n.type IN (".str_pad('', count(variable_get('casetracker_project_node_types',array('casetracker_project'))) * 5 - 1, "'%s',").")");
+    $arguments = array_merge(array($user->uid), variable_get('casetracker_project_node_types',array('casetracker_project')));
+  }
+  $tablesort = tablesort_sql($headers);
+  $result = pager_query($sql . $tablesort,10, 0, NULL, $arguments);
+  while ($node = db_fetch_object($result)) {
+    // var_dump($node);
+    if ($argument == 'all_projects') {
+      $link = 'project/cases/'.$node->nid.'/all';
+    }
+    else {
+      $link = 'project/cases/'.$node->nid.'/all';
+    }
+    $rows[] = array('data' => array($node->project_no, l(t($node->title), $link),date('m/d/Y-h:i',$node->changed),l(t('Edit'), 'node/'.$node->nid), l(t('Add case to this project'), 'node/add/casetracker_case/'.$node->nid)));
+  }
+  if(count($rows)==0) {
+    $output = t('You have no projects');
+  }
+  else {
+    $output .= theme('table', $headers, $rows);
+    $output .= theme('pager', NULL, 15, 0);
+  }
+  return $output;
+}
+
+/**
+ * This function is used to display a links visible in the middle portion of the page.
+ */
+
+function theme_casetracker_casetracking_links() {
+  $title = t('Use the following links to track the current user\'s cases.');
+  $items[] = l(t('My Cases'), 'casetracker/cases/mycase');
+  $items[] = l(t('My Projects'), 'casetracker/projects');
+  $items[] = l(t('Search Cases'), 'casetracker/search');
+  return theme('item_list', $items, $title, 'ul');
+}
+
+/**
+ * The below function calls the above theme function
+ */
+
+function casetracker_show_mycases() {
+  return theme('casetracker_casetracking_links');
+}
+
+/**
+ * The following function provides a link in the central page to add/edit/view
+ * case_type, case_priority & case_status
+ */
+
+function casetracker_case_detail() {
+  drupal_set_title(t('Administering case fields'));
+  $title = t('Click on the link below to administer case states');
+  $items[] = l('Case state add ', 'admin/case/states/add');
+  $items[] = l('Case state edit', 'admin/case/states');
+  $items[] = l('Case state delete', 'admin/case/states');
+  return theme('item_list', $items, $title, 'ul');
+}
+
+/**
+ * Implementation of hook_view
+ */
+
+function casetracker_case_view(&$node, $teaser = false, $page = false) {
+  if ($page) {
+    $project_name_breadcrumb = db_result(db_query("SELECT title FROM {node} WHERE nid = %d",$node->p_id));
+    drupal_set_breadcrumb(array(l(t('Home'), NULL), l(t('projects'), 'casetracker/projects'), l(t('%name', array('%name' => $project_name_breadcrumb)), 'node/'.$node->p_id),l(t('all cases'),'project/cases/'.$node->p_id.'/all')));
+    $node = node_prepare($node, $teaser);
+    $project = node_load(array('nid' => $node->p_id));
+    $project_no = db_result(db_query("SELECT max(project_no) FROM {casetracker_project} WHERE  nid = %d", $node->p_id));
+    $output = '<div class="case">';
+    $rows = array();
+    $rows[] = array(t('Case no'), $project_no.'-'.$node->case_id);
+    $rows[] = array(t('Project:'), l($project->title,'node/'.$node->p_id));
+    $rows[] = array(t('Title:'), $node->title);
+    $rows[] = array(t('Opened by:'), check_plain(casetracker_get_name($node->uid)));
+    $rows[] = array(t('Status:'), casetracker_get_value($node->case_status_id));
+    $rows[] = array(t('Assigned:'), casetracker_get_name($node->assign_to));
+    $rows[] = array(t('Priority:'), casetracker_get_value($node->case_priority_id));
+    $rows[] = array(t('Type:'), casetracker_get_value($node->case_type_id));
+    $rows[] = array(t('Opened on:'), date('D, d F Y , g:i A', $node->created));
+    $rows[] = array(t('Last modified:'), date('D, d F Y , g:i A', $node->changed));
+    $output .= '<div class="summary">'. theme('table', array(), $rows) .'</div>';
+    $output .= '<p>'. t('Case Description') .'</p>';
+    $output .= '<p>'. $node->body .'</p>';
+    $output .= '</div>';
+    $node->body = $output;
+  }
+}
+
+/**
+ * This  function returns the human readable name of the node types present in the casetracker module namely
+ * casetracker_project & casetracker_case
+ */
+
+function casetracker_node_info() {
+  return array(
+               'casetracker_case' => array('name' => t('case'), 'base' => 'casetracker_case')
+              // 'casetracker_project' => array('name' => t('project'), 'base' => 'casetracker_project'),
+               );
+}
+
+/**
+ * The function display form of the casetracker_project node
+ */
+
+/*
+function casetracker_project_form(&$node) {
+  $form['title'] = array(
+                                           '#type' => 'textfield',
+                                           '#title' => t('Title'),
+                                           '#required' => TRUE,
+                                           '#default_value' => $node->title);
+  $form['body_filter']['body'] = array(
+                                          '#type' => 'textarea',
+                                          '#title' => t('Body'),
+                                          '#default_value' => $node->body,
+                                          '#rows' => 20,
+                                          '#required' => TRUE);
+  $form['body_filter']['format'] = filter_form($node->format);
+
+  if (module_exist('og') && variable_get('og_node_type', 'og') == 'casetracker_project') {
+    $form = og_form($node);
+  }
+
+  return $form;
+}
+*/
+
+/**
+ * Display form of the casetracker_case node
+ */
+
+function casetracker_case_form(&$node) {
+  global $user;
+  $form['case_detail'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Case information'),
+    '#collapsible' => FALSE,
+    '#collapsed' => TRUE);
+  $case_status_options = casetracker_case_state_option('status');
+  $keys = array_keys($case_status_options);
+  $result = db_query(db_rewrite_sql("SELECT * FROM {node} n WHERE n.type IN (".str_pad('', count(variable_get('casetracker_project_node_types', array('casetracker_project')))* 5 - 1, "'%s',").")"), variable_get('casetracker_project_node_types',array('casetracker_project')));
+  while ($row = db_fetch_array($result)) {
+     $project_options[$row['nid']] = $row['title'];
+  }
+  $default_project =  arg(3);
+  $form['case_detail']['p_id'] = array(
+    '#type' => 'select',
+    '#title' => t('Project'),
+    '#default_value' => isset($default_project) ? $default_project : $node->p_id,
+    '#options' => $project_options,
+    '#description' => t(''));
+  if(user_access('assign case')) {
+    $form['case_detail']['assign_to'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Assign to'),
+      '#maxlength' => 60,
+      '#autocomplete_path' => 'casetracker/autocomplete',
+      '#attributes' => $arr_assign_yes,
+      '#required' => TRUE,
+      '#default_value' => isset($node->assign_to) ? casetracker_get_name($node->assign_to) : $node->name
+      );
+  }
+  else {
+    $default_assign_to_label = isset($node->assign_to)?casetracker_get_name($node->assign_to):variable_get('casetracker_default_assign_to','anonymous');
+    $form['case_detail']['assign_to1'] = array(
+      '#value' => t('<b>Assign to:</b> %assign_to <br /><br /> ', array('%assign_to' => $default_assign_to_label)),
+      '#description' => t('foo'));
+    $form['case_detail']['assign_to'] = array(
+      '#type' => 'hidden',
+      '#value' => $default_assign_to_label,
+      '#description' => t('foo')
+      );
+  }
+  if(user_access('set case status')) {
+    $form['case_detail']['case_status_id'] = array(
+      '#type' => 'select',
+      '#title' => t('Status'),
+      '#default_value' => $node->case_status_id,
+      '#options' => $case_status_options,
+      '#description' => t(''));
+   }
+   else {
+     $default_case_status_label = isset($node->case_status_id)?$case_status_options[$node->case_status_id]:$case_status_options[variable_get('casetracker_default_case_status',$keys[0])];
+     $default_case_status_label1 = isset($node->case_status_id)?$node->case_status_id:variable_get('casetracker_default_case_status',$keys[0]);
+     $form['case_detail']['case_status_id1'] = array(
+       '#value' => t('<b>Status:</b> %status ', array('%status' => $default_case_status_label)),
+       '#description' => t('foo'));
+      $form['case_detail']['case_status_id'] = array(
+       '#type' => 'hidden',
+       '#value' => $default_case_status_label1,
+       '#description' => t(''));
+   }
+
+
+  $case_priority_options = casetracker_case_state_option('priority');
+  $form['case_detail']['case_priority_id'] = array(
+                                                   '#type' => 'select',
+                                                   '#title' => t('Priority'),
+                                                   '#default_value' => isset($node->case_priority_id)?$node->case_priority_id:3,
+                                                   '#options' => $case_priority_options,
+                                                   '#description' => t(''));
+  $case_type_options =  casetracker_case_state_option('type');
+  $form['case_detail']['case_type_id'] = array(
+
+                                               '#type' => 'select',
+                                               '#title' => t('Type'),
+                                               '#default_value' => $node->case_type_id,
+                                               '#options' => $case_type_options,
+                                               '#description' => t(''));
+  $form['case_detail']['title'] = array(
+                                        '#type' => 'textfield',
+                                        '#title' => t('Title'),
+                                        '#required' => TRUE,
+                                        '#default_value' => $node->title);
+  $form['case_detail']['body'] = array(
+                                       '#type' => 'textarea',
+                                       '#title' => t('Body'),
+                                       '#default_value' => $node->body,
+                                       '#rows' => 20,
+                                       '#required' => TRUE);
+  $form['case_detail']['format'] = filter_form($node->format);
+  return $form;
+}
+/**
+ * The following function validate the case creation form.
+ */
+
+function casetracker_case_validate(&$node) {
+  if ($node->title) {
+    if (is_numeric($node->title)) {
+      form_set_error('title', t('The title must be a string.'));
+    }
+  }
+}
+
+/**
+ *  Implementation of hook_validate
+ */
+/** function casetracker_project_validate(&$node) {
+  if (module_exist('og') && variable_get('og_node_type', 'og') == 'casetracker_project') {
+    og_validate($node);
+  }
+}
+*/
+
+/**
+ *  Implementation of hook_insert
+ */
+
+function casetracker_case_insert($node) {
+  global $user;
+  db_query("INSERT INTO {casetracker_case} (nid, vid, p_id, case_sender_uid, case_priority_id, case_type_id, case_status_id, assign_to, case_id) VALUES (%d, %d, %d, %d, %d, %d, %d, %d, %d)", $node->nid, $node->vid, $node->p_id, $node->uid, $node->case_priority_id, $node->case_type_id, $node->case_status_id, casetracker_get_uid($node->assign_to), db_next_id('case_id'));
+
+  //Sending mail when the case is created.
+  $project_name = db_result(db_query('SELECT title FROM {node} WHERE nid = %d ', $node->p_id));
+  casetracker_mail($node, 'insert', $project_name);
+}
+
+
+/**
+ *  Implementation of hook_delete
+ */
+
+function casetracker_case_delete($node) {
+  $project_name = db_result(db_query("SELECT title FROM {node} n WHERE n.nid = %d", $node->nid));
+  casetracker_mail($node, 'delete', $project_name);
+
+  // Deleting the corresponding comment
+  $result = db_query("SELECT cid FROM {comments} WHERE nid = %d", $node->nid);
+  while ($row = db_fetch_array($result)) {
+  $sid = db_result(db_query("SELECT sid FROM {casetracker_comment} WHERE cid = %d", $row['cid']));
+  db_query("DELETE FROM {casetracker_comment_status} WHERE sid = %d", $sid);
+  db_query('DELETE FROM {casetracker_comment} WHERE cid = %d', $row['cid']);
+  }
+  db_query('DELETE FROM {casetracker_case} WHERE nid = %d', $node->nid);
+
+
+}
+
+/**
+ * Implementation of hook_update
+ */
+
+function casetracker_case_update($node) {
+  if ($node->revision) {
+    global $user;
+     if(arg(4)=='revert') {
+       db_query("INSERT INTO {casetracker_case} (nid, vid, p_id, case_sender_uid, case_priority_id, case_type_id, case_status_id, assign_to, case_id) VALUES (%d, %d, %d, %d, %d, %d, %d, %d, %d)", $node->nid, $node->vid, $node->p_id, $user->uid, $node->case_priority_id, $node->case_type_id, $node->case_status_id,$node->assign_to, $node->case_id);
+     }
+     else {
+       db_query("INSERT INTO {casetracker_case} (nid, vid, p_id, case_sender_uid, case_priority_id, case_type_id, case_status_id, assign_to, case_id) VALUES (%d, %d, %d, %d, %d, %d, %d, %d, %d)", $node->nid, $node->vid, $node->p_id, $user->uid, $node->case_priority_id, $node->case_type_id, $node->case_status_id,casetracker_get_uid($node->assign_to), $node->case_id);
+     }
+
+  }
+  else {
+    db_query('UPDATE {casetracker_case} SET p_id = %d, case_priority_id = %d, case_type_id = %d, case_status_id = %d, assign_to = %d, vid = %d WHERE nid = %d AND vid = %d', $node->p_id, $node->case_priority_id, $node->case_type_id, $node->case_status_id, casetracker_get_uid($node->assign_to), $node->vid, $node->nid, $node->vid);
+  }
+  $result = db_query('SELECT n.title FROM {node} n INNER JOIN {casetracker_case} c ON n.nid = c.p_id WHERE c.nid = %d AND c.vid = %d ', $node->nid, $node->vid);
+  $row = db_fetch_array($result);
+  $project_name = $row['title'];
+  //Sending email notification when case updated.
+  casetracker_mail($node, 'update', $project_name);
+}
+
+/**
+ *  Implementation of hook_load
+ */
+
+function casetracker_case_load($node) {
+  $additions = db_fetch_object(db_query('SELECT p_id, case_priority_id, case_type_id, assign_to, case_status_id, case_sender_uid, case_id FROM {casetracker_case} WHERE nid = %d AND vid = %d', $node->nid, $node->vid));
+  return $additions;
+}
+
+/**
+ *  Implementation of hook_access
+ */
+
+/* function casetracker_case_access($op, $node) {
+  global $user;
+  if ($op == 'create') {
+    return user_access('create project cases');
+  }
+  if ($op == 'update' || $op == 'delete') {
+    if (user_access('edit own project cases') && ($user->uid == $node->uid)) {
+      return TRUE;
+    }
+  }
+}
+*/
+
+/**
+ *  Implementation of hook_access
+ */
+
+/* function casetracker_project_access($op, $node) {
+  global $user;
+  if ($op == 'create') {
+    return user_access('create projects');
+  }
+  if ($op == 'update' || $op == 'delete') {
+    if (user_access('edit own projects') && ($user->uid == $node->uid)) {
+      return TRUE;
+    }
+  }
+}
+*/
+/**
+ *  Implementation of hook_link
+ */
+
+function casetracker_case_link($type, $node = 0, $main) {
+  $links = array();
+  if ($type == 'node' && $node->type == 'casetracker_case') {
+    if (casetracker_case_access('update', $node) && !user_access('administer nodes')) {
+      $links[] = l(t('edit this case node'), "node/$node->nid/edit");
+    }
+  }
+  return $links;
+}
+
+/**
+ * Implementation of hook_insert for casetracker_project
+ */
+
+
+/**
+ * Implementation of hook_delete for the casetracker_project
+ */
+
+/*function casetracker_project_delete($node) {
+  // Deleting all the cases with in the project and thereafter deleting all the comments on the deleting cases.
+  $result = db_query("SELECT nid from {casetracker_case} WHERE p_id = %d", $node->nid);
+  // deleting all the cases under the project & all the comments under the case.
+  while ($row = db_fetch_array($result)) {
+    if ($row['nid']) {
+      db_query("DELETE FROM {casetracker_case} where nid = %d", $row['nid']);
+      $result = db_query("SELECT cid FROM {comments} WHERE nid = %d", $row['nid']);
+      while ($row1 = db_fetch_array($result)) {
+        $sid = db_result(db_query("SELECT sid FROM {casetracker_comment} WHERE cid = %d", $row1['cid']));
+        db_query("DELETE FROM {casetracker_comment_status} WHERE sid = %d", $sid);
+        db_query('DELETE FROM {casetracker_comment} WHERE cid = %d', $row1['cid']);     }
+      node_delete($row['nid']);
+    }
+  }
+
+   db_query("DELETE FROM {casetracker_project} WHERE nid = %d", $node->nid);
+}
+ */
+
+/**
+ * Implementing hook_node for the node casetracker_project
+ */
+
+/* function casetracker_project_load(&$node) {
+  $result = db_query('SELECT tid, project_no FROM {casetracker_project} WHERE nid = %d AND vid = %d', $node->nid, $node->vid);
+  $node = (object) array_merge((array)$node, db_fetch_array($result));
+
+  if (module_exist('og') && variable_get('og_node_type', 'og') == 'casetracker_project') {
+    og_update($node);
+  }
+}
+*/
+/**
+ *  Function for email notification.
+ */
+
+function casetracker_mail($node, $operation_type, $project_name = null, $arg1= '') {
+   $msg_id = '<'. time() .'.'. mt_rand() .'@'. strtolower($_SERVER['SERVER_NAME']) .'>';
+  $headers  = "MIME-Version: 1.0\n";
+  $headers .= "content-type: text/plain; charset=utf-8; format=flowed\ncontent-transfer-encoding: 8bit\n";
+  //$headers .= "from: ". variable_get('site_mail', 'dave@digital202.com') ." \r\n";
+  $headers .= "from: ". variable_get('site_mail', 'sanjeevpro@gmail.com') ." \r\n";
+  $headers .= "Reply-To: ".variable_get('casetracker_mailbox', 'sandbox@HotPOP.com') ."\r\n";
+  $headers .= "Message-Id: ".$msg_id ."\r\n";
+  //$body = "<html><body>";
+  $body = "";
+
+  //Getting the project no of the project under which the case falls
+  // max(project_no) => always takes project_no of the current version.
+  //sleep(5);
+  if ($operation_type == 'insert') {
+     $project_id = db_result(db_query("SELECT p_id FROM {casetracker_case} WHERE  nid = %d", $node->nid));
+     $project_no = db_result(db_query("SELECT max(project_no) FROM {casetracker_project} WHERE  nid = %d ", $project_id));
+     $case_id = db_result(db_query("SELECT case_id from {casetracker_case} WHERE nid = %d AND vid = %d", $node->nid, $node->vid));
+     $project_no .= "-".$case_id;
+  }
+  else {
+    $project_no = db_result(db_query("SELECT max(project_no) FROM {casetracker_project} WHERE  nid = %d", $node->p_id));
+    $project_no .= "-".$node->case_id;
+  }
+
+
+  // Case creator name
+  $creator_name = casetracker_get_name($node->uid);
+  // Getting the name of the project under which case falls
+  $result = db_query("SELECT p_id FROM {casetracker_case} WHERE nid = %d AND vid = %d", $node->nid, $node->vid);
+  $case_project_id = db_fetch_array($result);
+  $result = db_query("SELECT title FROM {node} WHERE nid = %d AND vid = %d", $case_project_id['title'], $node->vid);
+  $case_project_title = db_fetch_array($result);
+  if ($case_project_title['title'] != '') {
+    $project_name = $case_project_title['title'];
+  }
+  $assigned_to_name = is_numeric($node->assign_to) ? casetracker_get_name($node->assign_to) : $node->assign_to;
+   if ($operation_type == 'insert') {
+    //$subject =  "Creation of new case (Title:".$node->title."Project: $project_name, Case Id: $project_no   )";
+    //$body = "Information of newly created case"."\r\n";
+    $subject =  t('Creation of new case') .' '. t('(Title: %title Project: %project_name, Case Id: %case_id)', array('%title' => $node->title, '%project_name' => $project_name, '%case_id' => $project_no));
+    $body = t('Information of newly created case') ."\r\n";
+    db_query("INSERT INTO {casetracker_mail} (msg_id, nid, cid) values('%s', %d, %d)", $msg_id, $node->nid, 0 );
+  }
+  else if ($operation_type == 'update') {
+    //$subject = "Case Update (Title:".$node->title."Project: $project_name, Case Id: $project_no   )";
+    //$body = "Information of case updation"."\r\n";
+     $subject =  t('Case Update') .' '. t('(Title: %title Project: %project_name, Case Id: %case_id)', array('%title' => $node->title, '%project_name' => $project_name, '%case_id' => $project_no));
+     $body = t('Information of case updation') ."\r\n";
+    db_query("INSERT INTO {casetracker_mail} (msg_id, nid, cid) values('%s', %d, %d)", $msg_id, $node->nid, 0);
+  }
+  else if ($operation_type == 'delete') {
+    //$subject = "Case Delete(Title:".$node->title."Project: $project_name, Case Id: $project_no   )";
+    //$body = "Information of case deletion"."\r\n";
+    $subject =  t('Case Delete') .' '. t('(Title: %title Project: %project_name, Case Id: %case_id)', array('%title' => $node->title, '%project_name' => $project_name, '%case_id' => $project_no));
+    $body = t('Information of case deletion') ."\r\n";
+  }
+  else if ($operation_type == 'comment') {
+    //$subject = "Comment on Case Added( Title:".$node->title."Project: $project_name, Case Id: $project_no   )";
+    //$body = "Information about comment on case"."\r\n";
+    $subject =  t('Comment on Case Added') .' '. t('(Title: %title Project: %project_name, Case Id: %case_id)', array('%title' => $node->title, '%project_name' => $project_name, '%case_id' => $project_no));
+    $body = t('Information about comment on case') ."\r\n";
+    db_query("INSERT INTO {casetracker_mail} (msg_id, nid, cid) values('%s', %d, %d)", $msg_id, $node->nid, $arg1);
+  }
+  $body .= "Case #$project_no "."\r\n";
+  $body .= "Project Name   : $project_name"."\r\n";
+  $body .= "Case Name      : $node->title"."\r\n";
+  $body .= "Case Creator   : $creator_name"."\r\n";
+  $case_status = casetracker_get_value($node->case_status_id);
+  $body .= "Case Status     : $case_status"."\r\n";
+  $body .= "Assigned to      : $assigned_to_name"."\r\n";
+  $case_priority = casetracker_get_value($node->case_priority_id);
+  $body .= "Priority               : $case_priority"."\r\n";
+  $case_type = casetracker_get_value($node->case_type_id);
+  $body .= "Case Type      : $case_type" ."\r\n";
+  $body .= "Opened on      : ".date('D, d F Y , g:i A', $node->created)."\r\n";
+  $body .= "Last modified  : ".date('D, d F Y , g:i A', $node->changed)."\r\n";
+  $body .= "Case body  : ".$node->body."\r\n";
+  if($arg1) {
+    $comment_obj = _comment_load($arg1);
+    $body .= "Comment added by  : ".casetracker_get_name($comment_obj->uid)."\r\n";
+    $body .= "Comment title  : ".$comment_obj->subject."\r\n";
+    $body .= "Comment body  : ".$comment_obj->comment."\r\n";
+  }
+  $str = $_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
+  $addr = explode('/',$str);
+  $view = 'http://'.$addr[0].'/'.$addr[1]; //.'/'.'node/'.$node->nid;
+  $edit ='http://'.$addr[0].'/'.$addr[1];//.'/'.'node/'.$node->nid."/edit";
+  $view_arr = pathinfo($view);
+  $edit_arr = pathinfo($edit);
+  $view1 = $view_arr[dirname];
+  $view1 = $view1.'/'.'node/'.$node->nid;
+  $edit1 = $edit_arr[dirname];
+  $edit1 = $edit1.'/'.'node/'.$node->nid.'/edit';
+  //print_r($view_arr);
+  $body .= "Click to view  : ".$view1."\r\n";
+  $body .= "Click to edit  : ".$edit1."\r\n";
+  //echo $view;
+  //$body .= "</body></html>";
+  $res = db_query("SELECT * FROM {users} WHERE uid != 0");
+  $email_sent_to = 0;
+  while ($info = db_fetch_array($res)) {
+    $mailto = $info['mail'];
+
+
+if($info['uid'] == $node->uid || $info['uid'] == casetracker_get_uid($assigned_to_name)) {
+      $mail_status = user_mail($mailto, $subject, $body, $headers);
+      //var_dump($mail_status);
+      if(!$mail_status) {
+        watchdog('debug','Email notification on case failed to'.'  '.$mailto);
+      }
+      else {
+        ++$email_sent_to;
+      }
+     }
+  }
+  if($node->type=='casetracker_case') {
+  $str = format_plural($email_sent_to, t('1 person has been notified'), t(" %count persons have been notified",array('%count' =>$email_sent_to)));
+  drupal_set_message($str);
+  }
+}
+
+/**
+ * Return the case status form .
+ */
+
+function casetracker_status_form() {
+  $form['casetracker_case_status'] = array(
+                                           '#type' => 'fieldset',
+                                           '#title' => t('case status'),
+                                           '#collapsible' => FALSE,
+                                           '#collapsed' => TRUE);
+  $form['casetracker_case_status']['casetracker_case_status'] = array(
+                                                                      '#type' => 'textfield',
+                                                                      '#title' => t('New Case Status'),
+                                                                      '#required' => TRUE,
+                                                                      '#default_value' => $node->case_status,
+                                                                      '#size' => 40);
+  return $form;
+}
+
+/**
+ * Renders the form for the addition of case status.
+ */
+
+function casetracker_status_add() {
+  $form = casetracker_status_form();
+  $form['casetracker_case_status']['casetracker_submit'] = array(
+                                                                 '#type' => 'submit',
+                                                                 '#value' => t('Add New Case status'));
+  return drupal_get_form('casetracker_status_add', $form);
+}
+
+/**
+ * Validate the case status form
+ */
+
+function casetracker_status_add_validate($form_id, $form_values) {
+  if (!$form_values['casetracker_case_status']) {
+    form_set_error('casetracker_case_status', t('Please enter the case status.'));
+  }
+
+  return true;
+}
+
+/**
+ * Submit function for case status form
+ */
+
+function casetracker_status_add_submit($form_id, $form_values) {
+ if (casetracker_status_add_validate($form_id, $form_values)) {
+   $result = db_query("INSERT INTO {casetracker_case_status} (case_status_name) VALUES('%s')", $form_values['casetracker_case_status']);
+   if ($result) {
+     drupal_set_message(t('Case type has been added successfully.'));
+     drupal_goto('admin/case/casetracker_case_status');
+   }
+  }
+}
+
+/**
+ * Returns the priority form for case priority.
+ */
+
+function casetracker_priority_form(){
+  $form['casetracker_priority'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('case priority'),
+    '#collapsible' => FALSE,
+    '#collapsed' => TRUE);
+  $form['casetracker_priority']['casetracker_case_priority'] = array(
+    '#type' => 'textfield',
+    '#title' => t('New Case priority'),
+    '#required' => TRUE,
+    '#default_value' => $node->case_priority,
+    '#size' => 40);
+  $form['casetracker_priority']['casetracker_priority'] = array(
+    '#type' => 'submit',
+    '#value' => t('Add New case priority'));
+  return $form;
+}
+
+/**
+ * Renders the form for the addition of priority.
+ */
+
+function casetracker_priority_add() {
+  $form = casetracker_priority_form();
+  $form['casetracker_priority']['casetracker_priority'] = array(
+    '#type' => 'submit',
+    '#value' => t('Add New case priority'));
+  return drupal_get_form('casetracker_priority_add', $form);
+}
+
+/**
+ * Validate the case priority form
+ */
+
+function casetracker_priority_add_validate($form_id, $form_values) {
+  if (!$form_values['casetracker_case_priority']) {
+    form_set_error('casetracker_case_priority', t('Please enter the case priority.'));
+  }
+  return true;
+}
+
+/**
+ * Submit function for case priority form
+ */
+function casetracker_priority_add_submit($form_id, $form_values) {
+ if (casetracker_priority_add_validate($form_id, $form_values)) {
+   $result = db_query("INSERT INTO {casetracker_case_priority} (case_priority) VALUES('%s')", $form_values['casetracker_case_priority']);
+   if($result) {
+     drupal_set_message(t('Case priority has been added successfully.'));
+     drupal_goto('admin/case/casetracker_case_priority');
+   }
+  }
+}
+
+/**
+ * Return the form for the addition of case type .
+ */
+function casetracker_type_form() {
+  $form['casetracker_type'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('case type'),
+    '#collapsible' => FALSE,
+    '#collapsed' => TRUE);
+
+  $form['casetracker_type']['casetracker_case_type'] = array(
+    '#type' => 'textfield',
+    '#title' => t('New Case type'),
+    '#required' => TRUE,
+    '#default_value' => $node->case_type,
+    '#size' => 40);
+  return $form;
+}
+
+/**
+ * Renders the case type form
+ */
+function casetracker_type_add() {
+  $form = casetracker_type_form();
+  $form['casetracker_type']['casetracker_type'] = array(
+    '#type' => 'submit',
+    '#value' => t('Add New case type'));
+  return drupal_get_form('casetracker_type_add', $form);
+}
+
+/**
+ * Function for validating the case type form .
+ */
+function casetracker_type_add_validate($form_id, $form_values) {
+  if (!$form_values['casetracker_case_type']) {
+    form_set_error('casetracker_case_type', t('Please enter the case type.'));
+  }
+  return true;
+}
+
+/**
+ * Submit function for case type form
+ */
+function casetracker_type_add_submit($form_id, $form_values) {
+ if (casetracker_type_add_validate($form_id, $form_values)) {
+   $result = db_query("INSERT INTO {casetracker_case_type} (case_type) VALUES('%s')", $form_values['casetracker_case_type']);
+   if ($result) {
+     drupal_set_message(t('Case type has been added successfully.'));
+     drupal_goto('admin/case/casetracker_case_type');
+   }
+  }
+}
+
+/**
+ * Display the contents of the a selected table.
+ */
+function casetracker_case_table_view($table) {
+  $rows = array();
+  $fields = casetracker_get_fields($table);
+  foreach ($fields as $field) {
+    $header[] = array('data' => "$field", 'field' => "$field");
+  }
+  //$header[] = array('data'=>'TextBox');
+
+  //$sql = "SELECT * FROM {$table}";
+  $sql = "SELECT * FROM {".$table."}";
+  $sql .= tablesort_sql($header);
+  $result = pager_query($sql, 20);
+
+  if (db_num_rows($result)) {
+    while ($row = db_fetch_array($result)) {
+      $line = array_values($row);
+      $rows[] = $line;
+      unset($line);
+    }
+    $output .= theme('table', $header, $rows);
+  }
+  else {
+    $output = t('The table is empty.');
+  }
+
+  print theme('page', $output);
+}
+
+/**
+ *  Return as array all fields in specified table
+ */
+function casetracker_get_fields($table) {
+  $fields = array();
+  //$result = db_query("DESCRIBE $table");
+  $result = db_query("DESCRIBE {%s}", $table);
+  while ($row = db_fetch_object($result)) {
+    $fields[] = $row->Field;
+  }
+  return $fields;
+}
+
+/**
+ * The following function is used for editing case status, case
+ *  priority, case type
+ */
+function casetracker_case_table_edit($table) {
+  $form['casetracker_edit_form'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('%tablename', array('%tablename' => $str)),
+    '#collapsible' => FALSE,
+    '#collapsed' => TRUE);
+  $result = db_query("SELECT * FROM {%s}", $table);
+  while ($row = mysql_fetch_array($result)) {
+    $field_values[$row['0']] = $row['1'];
+  }
+  $form['casetracker_edit_form']['casetracker_old_values'] = array(
+    '#type' => 'select',
+    '#title' => t('Values'),
+    '#default_value' => isset($node->casetracker_old_values) ? $node->casetracker_old_values : 1,
+    '#options' => $field_values);
+  $form['casetracker_edit_form']['casetracker_new_values'] = array(
+    '#type' => 'textfield',
+    '#title' => t('New Values'),
+    '#required' => FALSE,
+    '#default_value' => $node->title,
+    '#size' => 40);
+  $form['casetracker_edit_form']['casetracker_table_name'] = array(
+    '#type' => 'hidden',
+    '#value' => $table);
+  $form['casetracker_edit_form']['casetracker_type'] = array(
+    '#type' => 'submit',
+    '#value' => t('Update'));
+  $form['casetracker_edit_form']['casetracker_delete'] = array(
+    '#type' => 'submit',
+    '#value' => t('Delete'));
+  return drupal_get_form('casetracker_case_table_edit', $form);
+}
+
+function casetracker_case_table_edit_validate($form_id, $form_values) {
+  if (!$form_values['casetracker_new_values'] && $_POST['op'] == t('Update')) {
+    form_set_error('casetracker_new_values', t('Please enter the new value.'));
+  }
+  return TRUE;
+}
+
+/**
+ * Implementation of submit function for casetracker_case_table_edit
+ */
+function casetracker_case_table_edit_submit($form_id, $form_values) {
+  $str = str_replace("_", " ", $form_values['casetracker_table_name']);
+  $pos = strpos($str, ' ');
+  $str = substr($str, $pos);
+  if ($_POST['op'] == t('Delete')) {
+    $result = db_query('DESCRIBE {%s}', $form_values['casetracker_table_name']);
+    while ($row = db_fetch_array($result)) {
+      $fields[] = $row['Field'];
+    }
+    if (db_num_rows(db_query("SELECT nid FROM {casetracker_case} WHERE $fields[0] = %d",$form_values['casetracker_old_values']))){
+      drupal_set_message('Cannot delete!! First delete all the cases having the selected '.$str);
+    }
+    else {
+      drupal_goto('admin/case/delete'.'/'.$form_values['casetracker_table_name'].'/'.$form_values['casetracker_old_values']);
+    }
+
+  }
+  if ($form_values['casetracker_new_values'] && $_POST['op'] == t('Update') && casetracker_case_table_edit_validate($form_id, $form_values)) {
+    $result = db_query('DESCRIBE {%s}', $form_values['casetracker_table_name']);
+    while ($row = db_fetch_array($result)) {
+      $fields[] = $row['Field'];
+    }
+    $result = db_query("UPDATE {%s} SET $fields[1] = '%s' WHERE $fields[0] = %d", $form_values['casetracker_table_name'], $form_values['casetracker_new_values'], $form_values['casetracker_old_values']);
+    if ($result) {
+      drupal_set_message(t('%name has been edited successfully.', array('%name' => $str)));
+      drupal_goto('admin/case/' .$form_values['casetracker_table_name']);
+    }
+  }
+
+}
+
+/**
+ * Function to implement the deletion of case fields.
+ */
+function casetracker_case_table_delete() {
+   $form['casetracker_old_values'] = array('#type' => 'hidden', '#value' => arg(4));
+   $form['casetracker_table_name'] = array('#type' => 'hidden', '#value' => arg(3));
+   $info = casetracker_get_value(arg(3),arg(4));
+   return confirm_form('casetracker_case_table_delete_confirm', $form, t('Are you sure you want to delete %name?', array('%name' => theme('placeholder', $info))), 'admin/case/'.arg(3), '', t('Delete'), t('Cancel'));
+}
+
+/**
+ * Submit function for the form casetracker_case_table_delete_confirm
+ */
+function casetracker_case_table_delete_confirm_submit($form_id, $form_values) {
+  // $result = db_query('DESCRIBE %s', $form_values['casetracker_table_name']);
+   $result = db_query('DESCRIBE {%s}', $form_values['casetracker_table_name']);
+   while ($row = db_fetch_array($result)) {
+      $fields[] = $row[Field];
+   }
+   $result = db_query("DELETE FROM {".$form_values['casetracker_table_name']."} WHERE $fields[0] =  %d ", $form_values['casetracker_old_values']);
+   $str = str_replace("_", " ", $form_values['casetracker_table_name']);
+   $pos = strpos($str, ' ');
+   $str = substr($str, $pos);
+   if ($result) {
+      drupal_set_message(t('%name has been deleted successfully.', array('%name' => $str)), 'error');
+      drupal_goto('admin/case/' .$form_values['casetracker_table_name']);
+   }
+}
+
+/**
+ * Function to get the option values for select box
+ */
+function casetracker_options_select($table, $value_field, $disp_field, $filter = null) {
+  if (!$filter) {
+    $result = db_query("SELECT * FROM {%s}", $table);
+  }
+  else if ($filter == 'term_type') {
+    $result = db_query("SELECT * FROM {%s} WHERE vid = %d", $table, _casetracker_get_vid());
+  }
+  $options = Array();
+  while ($row = db_fetch_array($result)) {
+    $options[$row[$value_field]] = $row[$disp_field];
+  }
+  if ($table == 'users') {
+    unset($options[0]);
+  }
+  return $options;
+}
+
+/**
+ * Implementaion of hook_form_alter
+ */
+function casetracker_form_alter($form_id, &$form) {
+  $node_id = $form['nid']['#value'];
+  switch ($form_id) {
+    case 'comment_form':
+      $node = node_load($node_id);
+      if ($node->type == 'casetracker_case') {
+        $form['case_detail'] = array(
+          '#type' => 'fieldset',
+          '#title' => t('Case information'),
+          '#collapsible' => FALSE,
+          '#collapsed' => TRUE,
+        '#weight' => -10);
+
+        $result = db_query(db_rewrite_sql("SELECT * FROM {node} n WHERE n.type IN (".str_pad('', count(variable_get('casetracker_project_node_types',array('casetracker_project')))* 5 - 1, "'%s',").")"),variable_get('casetracker_project_node_types',array('casetracker_project')));
+        while($row = db_fetch_array($result)) {
+          $project_options[$row['nid']] = $row['title'];
+        }
+        $form['case_detail']['p_id'] = array(
+          '#type' => 'select',
+          '#title' => t('Project'),
+          '#default_value' => isset($node->p_id) ? $node->p_id : '',
+          '#options' => $project_options,
+          '#description' => t(''));
+        $form['case_detail']['case_title'] = array(
+          '#type' => 'textfield',
+          '#title' => t('Case Title'),
+          '#maxlength' => 120,
+          '#size' => 70,
+          '#required' => TRUE,
+          '#default_value' => isset($node->title) ? $node->title : '');
+        $case_status_options = casetracker_case_state_option('status');
+        $keys = array_values($case_status_options);
+        if(user_access('set case status')) {
+          $form['case_detail']['case_status_id'] = array(
+            '#type' => 'select',
+            '#title' => t('Status'),
+            '#default_value' => $node->case_status_id,
+            '#options' => $case_status_options,
+            '#attributes' => $arr_set_status_yes,
+            '#description' => t(''));
+        }
+        else {
+          $default_case_status_label = isset($node->case_status_id)?$case_status_options[$node->case_status_id]:$case_status_options[variable_get('casetracker_default_case_status',$keys[0])];
+          $default_case_status_label1 = isset($node->case_status_id)?$node->case_status_id:variable_get('casetracker_default_case_status',$keys[0]);
+          $form['case_detail']['case_status_id1'] = array(
+            '#value' => t('<b>Status:</b> %status <br /><br /> ', array('%status' => $default_case_status_label)),
+            '#description' => t('foo'));
+          $form['case_detail']['case_status_id'] = array(
+            '#type' => 'hidden',
+            '#value' => $default_case_status_label1,
+            '#description' => t(''));
+        }
+        if(user_access('assign case')) {
+          $form['case_detail']['assign_to'] = array(
+            '#type' => 'textfield',
+            '#title' => t('Assign to'),
+            '#maxlength' => 60,
+            '#autocomplete_path' => 'casetracker/autocomplete',
+            '#required' => TRUE,
+            '#attributes' => $arr_assign_yes,
+            '#default_value' => isset($node->assign_to) ? casetracker_get_name($node->assign_to) : $node->name);
+        }
+        else {
+          $default_assign_to_label = isset($node->assign_to)?casetracker_get_name($node->assign_to):variable_get('casetracker_default_assign_to', 'anonymous');
+          $form['case_detail']['assign_to1'] = array(
+            '#value' => t('<b>Assign to:</b> %assign_to <br /> ', array('%assign_to' => $default_assign_to_label)),
+            '#description' => t('foo'));
+          $form['case_detail']['assign_to'] = array(
+            '#type' => 'hidden',
+            '#value' => $default_assign_to_label,
+            '#description' => t('foo')
+            );
+        }
+
+        $case_priority_options = casetracker_case_state_option('priority');
+        $form['case_detail']['case_priority_id'] = array(
+          '#type' => 'select',
+          '#title' => t('Priority'),
+          '#default_value' => isset($node->case_priority_id)?$node->case_priority_id:3,
+          '#options' => $case_priority_options,
+          '#description' => t(''));
+        $case_type_options = casetracker_case_state_option('type');
+        $form['case_detail']['case_type_id'] = array(
+          '#type' => 'select',
+          '#title' => t('Type'),
+          '#default_value' => $node->case_type_id,
+          '#options' => $case_type_options,
+          '#description' => t(''));
+        $form['nid']= array(
+          '#type' => 'hidden',
+          '#value' => $node->nid);
+        $form['case_id']= array(
+          '#type' => 'hidden',
+          '#value' => $node->case_id);
+        $form['version_id']= array(
+          '#type' => 'hidden',
+          '#value' => $node->vid);
+        $form['comment_filter']['comment']['#required'] =  FALSE;
+      }
+      break;
+    case 'search_form':
+      if(arg(1) == 'casetracker') {
+        // Keyword boxes:
+        $form['advanced'] = array('#type' => 'fieldset',
+          '#title' => t('Advanced'),
+          '#collapsible' => TRUE,
+          '#collapsed' => TRUE,
+          '#attributes' => array('class' => 'search-advanced'));
+        $form['advanced']['keywords'] = array('#type' => 'markup',
+          '#prefix' => '<div class="criterium">',
+          '#suffix' => '</div>');
+        $form['advanced']['keywords']['or'] = array('#type' => 'textfield',
+          '#title' => t('Containing any of the words'),
+          '#size' => 30, '#maxlength' => 255);
+        $form['advanced']['keywords']['phrase'] = array('#type' => 'textfield',
+          '#title' => t('Containing the phrase'),
+          '#size' => 30, '#maxlength' => 255);
+        $form['advanced']['keywords']['negative'] = array('#type' => 'textfield',
+          '#title' => t('Containing none of the words'),
+          '#size' => 30, '#maxlength' => 255);
+        $form['advanced']['submitted_by'] = array('#type' => 'textfield',
+          '#title' => t('Submitted by'),
+          '#prefix' => '<div class="criterium">',
+          '#suffix' => '</div>',
+          '#size' => 30, '#autocomplete_path' => 'casetracker/autocomplete',
+          '#maxlength' => 255);
+        $form['advanced']['assigned_to'] = array('#type' => 'textfield',
+          '#title' => t('Assigned to'),
+          '#prefix' => '<div class="criterium">',
+          '#suffix' => '</div>', '#size' => 30,
+          '#autocomplete_path' => 'casetracker/autocomplete',
+          '#maxlength' => 255);
+        $form['advanced']['participated_by'] = array('#type' => 'textfield',
+          '#title' => t('Participant'),
+          '#prefix' => '<div class="criterium">',
+          '#suffix' => '</div>', '#size' => 30,
+          '#autocomplete_path' => 'casetracker/autocomplete',
+          '#maxlength' => 255);
+        // Taxonomy box
+        if ($taxonomy =  casetracker_taxonomy_form()) {
+          $form['advanced']['category'] = array('#type' => 'select',
+            '#title' => t('Categories'),
+            '#prefix' => '<div class="criterium">',
+        '#suffix' => '</div>',
+            '#options' => $taxonomy,
+            '#extra' => 'size="10"',
+            '#multiple' => true);
+        }
+        $status = casetracker_case_state_option('status');
+        $form['advanced']['status'] = array('#type' => 'select',
+          '#title' => t('Status'),
+          '#prefix' => '<div class="criterium">',
+          '#suffix' => '</div>',
+          '#options' => $status,
+      '#multiple' => false, '#multiple' => true);
+        $priorities = casetracker_case_state_option('priority');
+        $form['advanced']['priority'] = array('#type' => 'select',
+          '#title' => t('Priorities'),
+          '#prefix' => '<div class="criterium">',
+          '#suffix' => '</div>',
+          '#options' => $priorities,
+          '#multiple' => false,
+          '#multiple' => true);
+        $case_types = casetracker_case_state_option('type');
+        $form['advanced']['case_type'] = array('#type' => 'select',
+          '#title' => t('Types'),
+          '#prefix' => '<div class="criterium">',
+          '#suffix' => '</div>',
+          '#options' => $case_types,
+          '#multiple' => true);
+        $form['advanced']['advs'] = array('#type' => 'hidden', '#value' => 1);
+        $form['advanced1']['date_range'] = array('#type' => 'fieldset',
+          '#title' => t('Date range'),
+          '#collapsible' => TRUE,
+          '#collapsed' => TRUE,
+          '#attributes' => array('class' => 'search-advanced'),
+          '#description' => t('The year will default to the current one if left blank.'));
+
+        /*************** Getting Lower Limit Year ************************/
+        $form['advanced1']['date_range']['lower_limit_year'] = array('#type' => 'textfield',
+          '#title' => t('Year'),
+          '#maxlength' => 4, '#size' => 4,
+          '#description' => t(''),
+          '#prefix' => '<div class="criterium">',
+          '#suffix' => '</div>',
+          '#required' => FALSE);
+
+        /****************Getting Lower Limit Month **********************/
+        $form['advanced1']['date_range']['lower_limit_month'] = array('#type' => 'select',
+          '#title' => t('Month'),
+          '#prefix' => '<div class="criterium">',
+          '#suffix' => '</div>', '#multiple' => FALSE,
+          '#options' => array(0 => t('Select...'), 1 => t('January'), t('February'), t('March'), t('April'), t('May'), t('June'), t('July'), t('August'), t('September'), t('October'), t('November'), t('December')));
+
+        /*****************Getting the lower limit date *********************/
+        $form['advanced1']['date_range']['lower_limit_date'] = array('#type' => 'textfield',
+          '#title' => t('Day'),
+          '#maxlength' => 2, '#size' => 4,
+          '#description' => t(''),
+          '#prefix' => '<div class="criterium">',
+          '#suffix' => '</div><br/><br/>',
+          '#required' => FALSE );
+
+        /******************Getting the upper limit year ********************/
+        $form['advanced1']['date_range']['upper_limit_year'] = array('#type' => 'textfield',
+          '#title' => t('Year'),
+          '#maxlength' => 4, '#size' => 4,
+          '#description' => t(''),
+          '#prefix' => '<div class="criterium">',
+          '#suffix' => '</div>',
+          '#required' => FALSE );
+
+        /******************Getting the upper limit month *******************/
+        $form['advanced1']['date_range']['upper_limit_month'] = array('#type' => 'select',
+          '#title' => t('Month'),
+          '#prefix' => '<div class="criterium">',
+          '#suffix' => '</div>',
+          '#multiple' => FALSE,
+          '#options' => array(0 => t('Select...'), 1 => t('January'), t('February'), t('March'), t('April'), t('May'), t('June'), t('July'), t('August'), t('September'), t('October'), t('November'), t('December')));
+
+        /***************Getting the upper limit date *********************/
+        $form['advanced1']['date_range']['upper_limit_date'] = array('#type' => 'textfield',
+          '#title' => t('Day'),
+          '#maxlength' => 2, '#size' => 4,
+          '#description' => t(''),
+          '#prefix' => '<div class="criterium">',
+          '#suffix' => '</div>',
+          '#required' => FALSE);
+
+        $form['#validate']['casetracker_search_validate'] = array();
+      }
+      break;
+    case 'casetracker_case_node_form':
+      $count = db_fetch_object(db_query(db_rewrite_sql("SELECT COUNT(*) AS count FROM {node} n WHERE n.type IN (".str_pad('', count(variable_get('casetracker_project_node_types', array('casetracker_project')))* 5 - 1, "'%s',").")"), variable_get('casetracker_project_node_types',array('casetracker_project'))));
+      if ($count->count == 0) {
+        unset($form['case_detail'], $form['og_nodeapi'], $form['submit'], $form['preview']);
+        $type = array_shift(variable_get('casetracker_project_node_types', array('casetracker_project')));
+        drupal_set_message(t('You must %create-a-project before adding cases.', array('%create-a-project' => l(t('create a project'), 'node/add/'. $type))), 'error');
+      }
+      break;
+  }
+}
+
+function casetracker_search_validate($form_id, $form_values, $form) {
+  $keys = $form_values['processed_keys'];
+  /*  if (isset($form_values['type']) && is_array($form_values['type'])) {
+   $keys = search_query_insert($keys, 'type', implode(',', array_keys($form_values['type'])));
+   }*/
+  if ((count($form_values['category']))!=0 && is_array($form_values['category'])) {
+    $keys = search_query_insert($keys, 'category', implode(',', $form_values['category']));
+  }
+
+  if ((count($form_values['status']))!=0 && is_array($form_values['status'])) {
+    $keys = search_query_insert($keys, 'status', implode(',', $form_values['status']));
+  }
+  if ((count($form_values['priority']))!=0 && is_array($form_values['priority'])) {
+    $keys = search_query_insert($keys, 'priority', implode(',', $form_values['priority']));
+     }
+     if ((count($form_values['case_type']))!=0 && is_array($form_values['case_type'])) {
+        $keys = search_query_insert($keys, 'case_type', implode(',', $form_values['case_type']));
+     }
+     if ($form_values['or'] != '') {
+       if (preg_match_all('/ ("[^"]+"|[^" ]+)/i', ' '. $form_values['or'], $matches)) {
+          $keys = $keys .' '. implode(' OR ', $matches[1]);
+        }
+   }
+     if (isset($form_values['submitted_by']) && $form_values['submitted_by'] != '') {
+        $keys = search_query_insert($keys, 'submitted_by', $form_values['submitted_by']);
+     }
+     if (isset($form_values['assigned_to']) && $form_values['assigned_to'] != '') {
+        $keys = search_query_insert($keys, 'assigned_to', $form_values['assigned_to']);
+     }
+     if (isset($form_values['participated_by']) && $form_values['participated_by'] != '') {
+         $keys = search_query_insert($keys, 'participated_by', $form_values['participated_by']);
+     }
+     if ((isset($form_values['lower_limit_month']) && isset($form_values['lower_limit_date']) && isset($form_values['upper_limit_month']) && isset($form_values['upper_limit_date'])) && ($form_values['lower_limit_month'] != '' && $form_values['lower_limit_date'] != '' && $form_values['upper_limit_month'] != '' && $form_values['upper_limit_date'] != '')) {
+       if($form_values['lower_limit_year'] == '') {
+          $form_values['lower_limit_year'] = _casetracker_date('Y', time(), $offset);
+       }
+       if($form_values['upper_limit_year'] == '') {
+         $form_values['upper_limit_year'] = _casetracker_date('Y', time(), $offset);
+       }
+       $date_range_timestamp = $form_values['lower_limit_month']."_".$form_values['lower_limit_date']."_".$form_values['lower_limit_year'].'-'.$form_values['upper_limit_month']."_". $form_values['upper_limit_date']."_".$form_values['upper_limit_year'];
+       $keys = search_query_insert($keys, 'date_range', $date_range_timestamp);
+     }
+     if ($form_values['negative'] != '') {
+         if (preg_match_all('/ ("[^"]+"|[^" ]+)/i', ' '. $form_values['negative'], $matches)) {
+          $keys = $keys .' -'. implode(' -', $matches[1]);
+          }       }
+         if ($form_values['phrase'] != '') {
+          $keys .= ' "'. str_replace('"', ' ', $form_values['phrase']) .'"';
+     }
+
+if (!empty($keys)) {
+  form_set_value($form['basic']['inline']['processed_keys'], trim($keys));
+}
+}
+
+/**
+ * Implementaion of hook_comment
+ */
+
+function casetracker_comment(&$comment, $op) {
+  /**************** Recording the changes made in case fields ***************/
+  if ($op == 'insert' || $op == 'update') {
+    $node = node_load(Array('nid' => $comment['nid'], 'type' => 'casetracker_case'));
+    $tempedit = $comment;
+    $tempedit = (Object)$tempedit;
+    unset($data);
+    $data = Array();
+    $case_fields = Array( 'case_priority_id', 'case_type_id','case_status_id','p_id');
+    foreach ($case_fields as $var) {
+      $data['old']->$var = $node->$var;
+      $data['new']->$var = $tempedit->$var;
+    }
+    $data['old']->assign_to = $node->assign_to;
+    $data['new']->assign_to = casetracker_get_uid($comment['assign_to']);
+    $data['old']->case_title = $node->title;
+    $data['new']->case_title = $tempedit->case_title;
+    // Saving the changes to the cases.
+    db_query("UPDATE {casetracker_case} SET assign_to = %d, case_status_id = %d, case_priority_id = %d, case_type_id = %d, p_id = %d WHERE nid = %d AND vid = %d ", casetracker_get_uid($comment['assign_to']), $comment['case_status_id'], $comment['case_priority_id'], $comment['case_type_id'], $comment['p_id'], $comment['nid'], $comment['version_id'] );
+    db_query("UPDATE {node} SET title = '%s' WHERE nid = %d AND vid = %d", $comment['case_title'], $comment['nid'], $comment['version_id']);
+    db_query("UPDATE {node_revisions} SET title = '%s' WHERE nid = %d AND vid = %d", $comment['case_title'], $comment['nid'], $comment['version_id']);
+  }
+   /********************** Inserting data into the auxiliary comment table ***********************/
+  switch($op) {
+    case 'insert':
+      db_query("INSERT INTO {casetracker_comment} (cid) values(%d)", $comment['cid']);
+      $sid = mysql_insert_id();
+      db_query("INSERT INTO {casetracker_comment_status} (sid, project_term_id, assign_to, case_priority_id, case_type_id, case_status_id, state, title)
+   VALUES(%d, %d, '%d', %d, %d, '%d', %d, '%s')", $sid, $data['old']->p_id, $data['old']->assign_to, $data['old']->case_priority_id, $data['old']->case_type_id, $data['old']->case_status_id, 0, $data['old']->case_title );
+      db_query("INSERT INTO {casetracker_comment_status} (sid, project_term_id, assign_to, case_priority_id, case_type_id, case_status_id, state, title)
+   VALUES(%d, %d, '%d', %d, %d, '%d', %d, '%s')", $sid, $data['new']->p_id, $data['new']->assign_to, $data['new']->case_priority_id, $data['new']->case_type_id, $data['new']->case_status_id, 1, $data['new']->case_title );
+      $node = node_load(Array('nid' => $comment['nid'], 'type' => 'casetracker_case'));
+      $project_name = db_result(db_query("SELECT title FROM {node} WHERE nid = %d", $node->p_id));
+      casetracker_mail($node, 'comment', $project_name, $comment['cid']);
+      break;
+    case 'update':
+      if( $data['old']->case_priority_id != $data['new']->case_priority_id ||
+        $data['old']->case_type_id != $data['new']->case_type_id ||
+        $data['old']->case_status_id != $data['new']->case_status_id ||
+        $data['old']->p_id != $data['new']->p_id ||
+        $data['old']->assign_to != $data['new']->assign_to ||
+        $data['old']->case_title != $data['new']->case_title ) {
+        $sid = db_result(db_query("SELECT sid FROM {casetracker_comment} where cid = %d", $comment['cid']));
+        db_query("UPDATE {casetracker_comment_status} SET project_term_id = %d, assign_to = %d , case_priority_id = %d, case_type_id = %d, case_status_id = %d, title = '%s' where sid = %d AND state = %d", $data['old']->p_id, $data['old']->assign_to, $data['old']->case_priority_id, $data['old']->case_type_id, $data['old']->case_status_id, $data['old']->case_title, $sid, 0);
+        db_query("UPDATE {casetracker_comment_status} set project_term_id = %d, assign_to = %d , case_priority_id = %d, case_type_id = %d, case_status_id = %d, title = '%s' where sid = %d AND state = %d", $data['new']->p_id, $data['new']->assign_to, $data['new']->case_priority_id, $data['new']->case_type_id, $data['new']->case_status_id, $data['new']->case_title, $sid, 1);
+      }
+      break;
+    case 'delete':
+      $sid = db_result(db_query("SELECT sid FROM {casetracker_comment} WHERE cid = %d", $comment->cid));
+      db_query("DELETE FROM {casetracker_comment_status} WHERE sid = %d ", $sid);
+      db_query("DELETE FROM {casetracker_comment} WHERE cid = %d", $comment->cid);
+      break;
+    case 'view':
+      $sid = db_result(db_query("SELECT sid FROM {casetracker_comment} WHERE cid = %d", $comment->cid));
+      if ($comment->cid) {
+        $result_before = db_query("SELECT project_term_id, assign_to, case_priority_id, case_type_id, case_status_id, title FROM {casetracker_comment_status} WHERE sid = %d AND state = %d", $sid, 0);
+        $case_field_old_new_value['old'] = db_fetch_object($result_before);
+        $result_after = db_query("SELECT project_term_id, assign_to, case_priority_id, case_type_id, case_status_id, title FROM {casetracker_comment_status} WHERE sid = %d AND state = %d", $sid, 1);
+        $case_field_old_new_value['new'] = db_fetch_object($result_after);
+        $comment1 = $comment->comment;
+        $comment->comment = '';
+        $comment->comment .= casetracker_changed_case_fields($case_field_old_new_value);
+        $comment->comment .= '<br>'.$comment1;
+      }
+      if ($comment->comment) {
+        return $comment->comment;
+      }
+  }
+}
+
+/**
+ * Tracking of the case fields that have been changed whilw submitting comments.
+ */
+
+function casetracker_changed_case_fields($case_field_old_new_value) {
+  if ($case_field_old_new_value) {
+    foreach ($case_field_old_new_value as $key => $value) {
+      $data[$key] = $value;
+    }
+  }
+  $rows = array();
+  $old_project_title = db_result(db_query("SELECT title FROM {node} WHERE nid = %d",$data['old']->project_term_id));
+  $new_project_title = db_result(db_query("SELECT title FROM {node} WHERE nid = %d",$data['new']->project_term_id));
+
+  if ($data['new']->project_term_id != $data['old']->project_term_id) {
+    $rows[] = array(t('Project Name :: '), $old_project_title .t('>>>>').$new_project_title);
+  }
+  if ($data['new']->title != $data['old']->title) {
+    $rows[] = array(t('Title :: '), $data['old']->title .t('>>>>').$data['new']->title);
+  }
+  if ($data['new']->case_status_id != $data['old']->case_status_id) {
+    $rows[] =  array('Case Status ::', casetracker_get_value($data['old']->case_status_id) .t('>>>>').
+      casetracker_get_value($data['new']->case_status_id));
+  }
+  if ($data['new']->assign_to != $data['old']->assign_to ) {
+    $rows[] = array('Assigned To :: ', casetracker_get_name($data['old']->assign_to) .t('>>>>').
+      casetracker_get_name($data['new']->assign_to));
+  }
+  if ($data['new']->case_priority_id != $data['old']->case_priority_id ) {
+    $rows[] = array('Case Priority :: ',  casetracker_get_value($data['old']->case_priority_id).t('>>>>').
+        casetracker_get_value($data['new']->case_priority_id));
+  }
+  if ($data['new']->case_type_id != $data['old']->case_type_id ) {
+    $rows[] = array('Case Type :: ', casetracker_get_value($data['old']->case_type_id) .t('s>>>>').
+        casetracker_get_value($data['new']->case_type_id));
+  }
+  $output = '';
+  $output .= '<div class="case">'. theme('table', array(), $rows) .'</div>';
+  return $output;
+}
+
+
+function casetracker_search($op = 'search', $keys = null) {
+  $flag = 0;
+  $date_flag = 0;
+  switch ($op) {
+    case 'name':
+      return t('cases');
+    case 'search':
+      list($join1, $where1) = _db_rewrite_sql();
+      $arguments1 = array();
+      $conditions1 = 'n.status = 1';
+      $types = array();
+      foreach (array('casetracker_case', 'casetracker_project') as $t) {
+        $types[] = "n.type = '%s'";
+        $arguments1[] = $t;
+      }
+      $conditions1 .= ' AND ('. implode(' OR ', $types) .')';
+      $keys = search_query_insert($keys, 'type');
+      if ($category = search_query_extract($keys, 'category')) {
+        $categories = array();
+        foreach (explode(',', $category) as $c) {
+          $categories[] = "cs.p_id = %d";
+          $arguments1[] = $c;
+        }
+        $conditions1 .= ' AND ('. implode(' OR ', $categories) .')';
+        //$join1 .= ' INNER JOIN {casetracker_case} cs ON n.vid = cs.vid';
+        //$join1 .= ' INNER JOIN {casetracker_project} cp ON cp.nid = cs.p_id';
+        $keys = search_query_insert($keys, 'category');
+      }
+      $values = array();
+      if ($status = search_query_extract($keys, 'status')) {
+        $state_of_cases = array();
+        foreach (explode(',', $status) as $c) {
+          $state_of_cases[] = "cs.case_status_id = %d ";
+          $arguments1[] = $c;
+        }
+        $conditions1 .= ' AND ('. implode(' OR ',  $state_of_cases) .')';
+        $keys = search_query_insert($keys, 'status');
+      }
+      if ($priority = search_query_extract($keys, 'priority')) {
+        $priorities = array();
+        foreach (explode(',', $priority) as $c) {
+          $priorities[] = " cs.case_priority_id = %d ";
+          $arguments1[] = $c;
+        }
+        $conditions1 .= ' AND ('. implode(' OR ', $priorities) .')';
+        $keys = search_query_insert($keys, 'priority');
+      }
+      if ($case_type = search_query_extract($keys, 'case_type')) {
+        $case_types = array();
+        foreach (explode(',', $case_type) as $c) {
+          $case_types[] = "cs.case_type_id = %d";
+          $arguments1[] = $c;
+        }
+        $conditions1 .= ' AND ('. implode(' OR ', $case_types) .')';
+        $keys = search_query_insert($keys, 'case_type');
+      }
+      if ($assigned_to = search_query_extract($keys, 'assigned_to')) {
+          $assigned = array();
+        foreach (explode(',', $assigned_to) as $c) {
+          $assigned[] = "cs.assign_to = %d";
+          $arguments1[] = casetracker_get_uid($c);
+        }
+        $conditions1 .= ' AND ('. implode(' OR ', $assigned) .')';
+        $keys = search_query_insert($keys, 'assigned_to');
+      }
+      if ($submitted_by = search_query_extract($keys, 'submitted_by')) {
+        $submitted = array();
+        foreach (explode(',', $submitted_by) as $c) {
+          $submitted[] = "cs.case_sender_uid = %d";
+          $arguments1[] = casetracker_get_uid($c);
+        }
+        $conditions1 .= ' AND ('. implode(' OR ', $submitted) .')';
+        $keys = search_query_insert($keys, 'submitted_by');
+      }
+      if ($participated_by = search_query_extract($keys, 'participated_by')) {
+        foreach (explode(',', $participated_by) as $c) {
+          $values[] = "cs.case_sender_uid = %d ";
+          $arguments1[] = casetracker_get_uid($c);
+          $values[] = " cmt.uid = %d ";
+          $arguments1[] = casetracker_get_uid($c);
+          $flag = 1;
+        }
+        $keys = search_query_insert($keys, 'participated_by');
+      }
+      if ($date_range = search_query_extract($keys, 'date_range')) {
+        foreach (explode('-', $date_range) as $c) {
+          $date_parts = array();
+          $timestamp = '';
+          foreach(explode('_', $c) as $date ) {
+            $date_parts[] = $date;
+          }
+          $timestamp = mktime(0, 0, 0, $date_parts[0], $date_parts[1], $date_parts[2]);
+          $arguments1[] = $timestamp;
+        }
+        foreach (explode('-', $date_range) as $c) {
+          $date_parts = array();
+          $timestamp = '';
+          foreach(explode('_', $c) as $date ) {
+            $date_parts[] = $date;
+          }
+          $timestamp = mktime(0, 0, 0, $date_parts[0], $date_parts[1], $date_parts[2]);
+          $temp_arguments1[] = $timestamp;
+        }
+        $arguments1 = array_merge($arguments1, $temp_arguments1);
+        $arguments1 = array_merge($arguments1, $temp_arguments1);
+        $values[] = " ( n.changed >= %d";
+        $values[] = " AND n.changed <= %d) ";
+        $values[] = "OR ( n.created >= %d";
+        $values[] = " AND n.created <= %d ) ";
+        $values[] = " OR ( ncs.last_comment_timestamp >= %d ";
+        $values[] = " AND ncs.last_comment_timestamp <= %d )";
+        $date_flag = 1;
+        $keys = search_query_insert($keys, 'date_range');
+      }
+      if (!$flag && !$date_flag) {
+        //$conditions1 .= ' AND ('. implode(' AND ', $values) .')';
+        $join1 .= ' INNER JOIN {casetracker_case} cs ON n.vid = cs.vid';
+      }
+      // Incorporating participated by search facility.
+      if (count($values) && $flag) {
+        $conditions1 .= ' AND ('. implode(' OR ', $values) .')';
+        $join1 .= ' LEFT JOIN {casetracker_case} cs ON n.vid = cs.vid';
+        $join1 .= ' LEFT JOIN {comments} cmt ON n.nid = cmt.nid';
+        $flag = 0;
+      }
+      // Incorporating date_range search facility.
+      if (count($values) && $date_flag) {
+        //var_dump($arguments1);
+        $conditions1 .= ' AND ('. implode(' ', $values) .')';
+        $join1 .= ' INNER JOIN {node_comment_statistics} ncs ON n.nid = ncs.nid';
+        $join1 .= ' INNER JOIN {casetracker_case} cs ON n.vid = cs.vid';
+        $date_flag = 0;
+      }
+      $ranking = array();
+      $arguments2 = array();
+      $join2 = '';
+      // Used to avoid joining on node_comment_statistics twice
+      $stats_join = false;
+      if ($weight = (int)variable_get('node_rank_relevance', 5)) {
+        // Average relevance values hover around 0.15
+        $ranking[] = '%d * i.relevance';
+        $arguments2[] = $weight;
+      }
+      if ($weight = (int)variable_get('node_rank_recent', 5)) {
+        // Exponential decay with half-life of 6 months, starting at last indexed node
+        $ranking[] = '%d * POW(2, (GREATEST(n.created, n.changed, c.last_comment_timestamp) - %d) * 6.43e-8)';
+        $arguments2[] = $weight;
+        $arguments2[] = (int)variable_get('node_cron_last', 0);
+        $join2 .= ' INNER JOIN {node} n ON n.nid = i.sid LEFT JOIN {node_comment_statistics} c ON c.nid = i.sid';
+        $stats_join = true;
+      }
+      if (module_exist('comment') && $weight = (int)variable_get('node_rank_comments', 5)) {
+        // Inverse law that maps the highest reply count on the site to 1 and 0 to 0.
+        $scale = variable_get('node_cron_comments_scale', 0.0);
+        $ranking[] = '%d * (2.0 - 2.0 / (1.0 + c.comment_count * %f))';
+        $arguments2[] = $weight;
+        $arguments2[] = $scale;
+        if (!$stats_join) {
+          $join2 .= ' LEFT JOIN {node_comment_statistics} c ON c.nid = i.sid';
+        }
+      }
+      if (module_exist('statistics') && variable_get('statistics_count_content_views', 0) && $weight = (int)variable_get('node_rank_views', 5)) {
+        // Inverse law that maps the highest view count on the site to 1 and 0 to 0.
+        $scale = variable_get('node_cron_views_scale', 0.0);
+        $ranking[] = '%d * (2.0 - 2.0 / (1.0 + nc.totalcount * %f))';
+        $arguments2[] = $weight;
+        $arguments2[] = $scale;
+        $join2 .= ' LEFT JOIN {node_counter} nc ON n.nid = nc.nid';
+      }
+
+      if (module_exist('casetracker')) {
+       $join2 .= ' LEFT JOIN {casetracker_case} cs ON n.vid = cs.vid';
+      }
+
+      $select2 = (count($ranking) ? implode(' + ', $ranking) : 'i.relevance') . ' AS score';
+      // Do search
+      $find = do_search($keys, 'node', 'INNER JOIN {node} n ON n.nid = i.sid '. $join1 .' INNER JOIN {users} u ON n.uid = u.uid', $conditions1 . (empty($where1) ? '' : ' AND '. $where1), $arguments1, $select2, $join2, $arguments2, tablesort_sql(casetracker_search_page_header()));
+      //var_dump($find);
+      // Load results
+      $results = array();
+      foreach ($find as $item) {
+        $node = node_load($item->sid);
+        // Get node output (filtered and with module-specific fields).
+        if (node_hook($node, 'view')) {
+          node_invoke($node, 'view', false, false);
+        }
+        else {
+          $node = node_prepare($node, false);
+        }
+        // Allow modules to change $node->body before viewing.
+        node_invoke_nodeapi($node, 'view', false, false);
+
+        // Fetch comments for snippet
+        $node->body .= module_invoke('comment', 'nodeapi', $node, 'update index');
+        $extra = node_invoke_nodeapi($node, 'search result');
+        $project_name = db_result(db_query("SELECT title from {node} where nid = %d", $node->p_id));
+        // max(project_no) => always takes project_no of the current version.
+        $project_no = db_result(db_query("SELECT max(project_no) FROM {casetracker_project} WHERE  nid = %d", $node->p_id));
+        $results[] = array('link' => url('node/'. $item->sid),
+          'type' => node_get_name($node),
+          'title' => l($node->title, 'node/'.$node->nid),
+          'user' => theme('username', $node),
+          'date' => $node->changed,
+          'node' => $node,
+          'extra' => $extra,
+          'score' => $item->score,
+          'case_id' => $project_no.'-'.$node->case_id,
+          'last_updated' => date('m/d/Y-h:i',$node->last_comment_timestamp),
+          'assign_to' => casetracker_get_name($node->assign_to),
+          'case_priority' => casetracker_get_value($node->case_priority_id),
+          'case_status' => casetracker_get_value($node->case_status_id),
+          'case_colour' => $node->case_status_id,
+          'case_type' => casetracker_get_value($node->case_type_id),
+          'snippet' => search_excerpt($keys, $node->body));
+      }
+
+      return $results;
+  }
+}
+
+/**
+ * Displaying the search result  in a tabular form.
+ */
+function casetracker_search_page($results) {
+   theme_add_style(drupal_get_path('module', 'casetracker') .'/casetracker.css');
+   $status_arr = casetracker_case_state_option('status');
+   foreach ($status_arr as $key => $value) {
+     $classes[$key] = preg_replace('/\W/', '', strtolower($value));
+   }
+   if (count($results)) {
+    $rows = array();
+    foreach ($results as $entry) {
+      $rows[] = Array('data' => Array($entry['case_id'], $entry['title'], $entry['last_updated'], $entry['case_priority'], $entry['case_status'], $entry['case_type'],  $entry['assign_to']), 'class' => $classes[$entry['case_colour']]);
+    }
+    $output = theme('table', casetracker_search_page_header(), $rows);
+    $output .= theme('pager', NULL, 15, 0);
+    return $output;
+  }
+}
+
+
+/**
+ * Displaying the header of the tables on which sorting is to be done
+ */
+function casetracker_search_page_header() {
+  $header = array(
+    /*array('data' => t('Score'), 'field' => 'score', 'sort' => 'desc'),*/
+    array('data' => t('Case ID'), 'field' => 'cs.case_id'),
+    array('data' => t('Title'), 'field' => 'n.title'),
+    array('data' => t('Last updated'), 'field' => 'c.last_comment_timestamp'),
+    array('data' => t('Priority'), 'field' => 'cs.case_priority_id'),
+    array('data' => t('Status'), 'field' => 'cs.case_status_id'),
+    array('data' => t('Type'), 'field' => 'cs.case_type_id'),
+    array('data' => t('Assigned to'), 'field' => 'cs.assign_to'),
+  );
+  return $header;
+}
+
+/**
+ * Fetching the option values for projects to be displayed in advanced
+ * search form
+ */
+function casetracker_taxonomy_form() {
+  $options = array();
+  $result = db_query(db_rewrite_sql("SELECT * FROM {node} n WHERE n.type = 'casetracker_project'"));
+  while($row = db_fetch_array($result)) {
+    $options[$row['nid']] = $row['title'];
+  }
+  return $options;
+}
+
+/**
+ * Function to get user id given user name
+ */
+function casetracker_get_uid($name) {
+  $uid = db_result(db_query("SELECT uid FROM {users} WHERE name = '%s'", trim($name)));
+  if($uid) {
+    return $uid;
+  }
+  else {
+    return 0;
+  }
+}
+
+/**
+ * Function to get user name given user id
+ */
+function casetracker_get_name($uid) {
+  $name = db_result(db_query("SELECT name FROM {users} WHERE uid = %d", $uid));
+  if($name) {
+    return $name;
+  }
+  else {
+    return 'Anonymous';
+  }
+}
+
+/**
+ * Function to get name corresponding to a give id
+ */
+function casetracker_get_value($id) {
+  static $fields = array();
+
+  if (!isset($fields[$id])) {
+    $fields[$id] = db_result(db_query("SELECT case_state_name FROM {casetracker_case_states} WHERE csid = %d",$id));
+  }
+
+  return $fields[$id];
+}
+
+/**
+ * Implementation of theme function for project.
+ */
+
+/** function theme_casetracker_project_info($node) {
+  $edit['taxonomy'] = $node->tid;
+  $items[] = l(t('Project #%p_no', Array('%p_no' => $node->project_no)), 'node/add/casetracker_case/'.$edit['taxonomy']);
+  $items[] = l(t('Add a case to this project'), 'node/add/casetracker_case/'.$edit['taxonomy']);
+  return theme('item_list', $items, t('project details'), 'ul' );
+}*/
+
+/**
+ * Implementation of hook_view for project.
+ */
+
+/*function casetracker_project_view(&$node, $teaser = FALSE, $page = FALSE) {
+  $node = node_prepare($node, $teaser);
+  $output = '<div class="case">';
+  $rows = array();
+  $rows[] = array(t('Project no'), l($node->project_no, 'project/cases/'.$node->nid.'/all', array('title' => t('Views all cases in this project'))));
+  $rows[] = array(t('Project Title:'), l($node->title, 'project/cases/'.$node->nid.'/all',array('title' => t('Views all cases in this project'))));
+  $rows[] = array(t('Opened by:'), check_plain(casetracker_get_name($node->uid)));
+  $rows[] = array(t('Opened on:'), date('D, d F Y , g:i A', $node->created));
+  $rows[] = array(t('Last modified:'), date('D, d F Y , g:i A', $node->changed));
+  $rows[] = array(t('Add a case to this project:'), l($node->title, 'node/add/casetracker_case/'.$node->nid));
+  $output .= '<div class="summary">'. theme('table', array(), $rows) .'</div>';
+  $output .= '<p>'. t('Case Description') .'</p>';
+  $output .= '<p>'. $node->body .'</p>';
+  $output .= '</div>';
+  $node->body = $output;
+}*/
+/** function casetracker_project_view(&$node, $teaser = FALSE, $page = FALSE) {
+  $node = node_prepare($node, $teaser);
+  $order_info = theme('casetracker_project_info',$node);
+  $node->body .= $order_info;
+  $node->teaser .= $order_info;
+
+  if (module_exist('og') && variable_get('og_node_type', 'og') == 'casetracker_project') {
+    $node = og_view($node, $teaser, $page);
+  }
+}
+*/
+/**
+ * Implementation of hook_xmlrpc
+ */
+function casetracker_xmlrpc() {
+  $xmlrpc = array();
+  $xmlrpc[] = array(
+    'casetracker.externalcase',
+    'casetracker_externalcase',
+    array('int','struct','struct'),
+    t('Enabling case creation from an external site')
+    );
+  $xmlrpc[] = array(
+    'casetracker.login',
+    'casetracker_login',
+    array('int','string','string'),
+    t('Enabling login into casetracker')
+    );
+  return $xmlrpc;
+}
+
+/**
+ * Implementation of casetracker_externalcase the xmlrpc call
+ */
+function casetracker_externalcase(&$system, &$client) {
+  watchdog('message','External case created at'.time());
+  $uid = db_result(db_query("SELECT uid FROM { casetracker_external_user} WHERE duid = %d ",$client['user_id']));
+  if(!$uid) {
+    $checkuid = db_result(db_query("SELECT uid FROM {users} WHERE name ='%s' OR mail ='%s'",$client['name'], $client['mail']));
+    if(!$checkuid) {
+      $external_user = array('name' => $client['name'], 'mail' => $client['mail']);
+      $extuser = user_save('',$external_user);
+      $uid = $extuser->uid;
+      db_query("INSERT INTO { casetracker_external_user}(uid,duid) values(%d, %d)", $uid, $client['user_id']);
+    }
+    else {
+      $uid = $checkuid;
+      db_query("INSERT INTO { casetracker_external_user}(uid,duid) values(%d, %d)", $checkuid, $client['user_id']);
+    }
+  }
+  // Checking  whether the user whom the case has been assigned exists or not.If not
+  // create the assign_to user.
+  $assign_to_id = db_result(db_query("SELECT uid FROM {users} WHERE name ='%s'",$system['assign_to']));
+  if(!$assign_to_id) {
+    $external_user = array('name' => $system['assign_to']);
+    $extuser = user_save('',$external_user);
+  }
+  $system['type'] = 'casetracker_case';
+  $system['uid'] = $uid;
+  $p_id = db_result(db_query('SELECT DISTINCT nid FROM {casetracker_project} where tid = %d',variable_get('project_xmlrpc', 0)));
+  $system['p_id'] =  $p_id;
+  $system['status'] = 1;
+  $system['promote'] = 1;
+  $system['teaser'] = $system['body'];
+  $vid = _casetracker_get_vid();
+  $system['taxonomy'][$vid][0] = variable_get('project_xmlrpc', 0);
+  $node = (object)$system;
+  if( $client['password'] != variable_get('externalsite_xmlrpc_password','sandbox')) {
+    //echo "Access denied";
+    watchdog('message', 'Acess denied for the external site to create case at case tracker with password '.$client['password']);
+    return -1;
+  }
+  else {
+    node_save($node);
+    return 6;
+  }
+}
+
+/**
+ * Implementation of remote login from dewlist
+ */
+function casetracker_login($username, $password) {
+  if ($user = user_load(array('name' => $username, 'pass' => $password, 'status' => 1))) {
+    return $user->uid;
+  }
+  else {
+    return 0;
+  }
+}
+
+/**
+ *Function for getting the year option.
+ */
+function casetracker_date_options($low,$high) {
+  $options = Array();
+  $options[''] = t('Please Select');
+  for($i = $low; $i <= $high; $i++ ) {
+    $options[$i] = $i;
+  }
+  return $options;
+}
+
+/**
+ * Function to get the next project no.The next project no being 100 more than the earlier.
+ * The script for adding two tuples ('project_no', 0) & ('case_id', 0) into the sequences table has to be added into the .install file.
+ */
+function casetracker_project_next_id($name) {
+  $name = db_prefix_tables($name);
+  db_query('LOCK TABLES {sequences} WRITE');
+  $id = db_result(db_query("SELECT id FROM {sequences} WHERE name = '%s'", $name)) + 100;
+  db_query("REPLACE INTO {sequences} VALUES ('%s', %d)", $name, $id);
+  db_query('UNLOCK TABLES');
+  return $id;
+}
+
+/**
+ * Function to get the value of current date item.
+ */
+function _casetracker_date($format, $timestamp, $offset = null) {
+  global $user;
+
+  if (isset($offset)) {
+    $timestamp += $offset;
+  }
+  elseif (variable_get('configurable_timezones', 1) && $user->uid && strlen($user->timezone)) {
+    $timestamp += $user->timezone;
+  }
+  else {
+    $timestamp += variable_get('date_default_timezone', 0);
+  }
+
+  // make sure we apply the site first day of the week setting for dow requests
+  if ($format == 'w') {
+    $result = _event_day_of_week($timestamp);
+  }
+  else {
+    $result = gmdate($format, $timestamp);
+  }
+  return  $result;
+}
+
+/**
+ * Implementation of hook_settings().
+ */
+function casetracker_settings() {
+  $result = db_query("SELECT nid, title FROM {node} n WHERE n.type IN (".str_pad('', count(variable_get('casetracker_project_node_types',array('casetracker_project'))) * 5 - 1, "'%s',").")",variable_get('casetracker_project_node_types',array('casetracker_project')));
+  $options = array();
+  $options[0] = t('None');
+  while($row = db_fetch_array($result)) {
+    $options[$row['nid']] = $row['title'];
+  }
+  $form['project_xmlrpc'] = array(
+    '#type' => 'select',
+    '#title' => t('Select the project under which the cases will fall that are created at sandbox through xmlrpc request'),
+    '#default_value' => variable_get('project_xmlrpc', 0),
+    '#options' => $options,
+    '#description' => t('Select the project under which the cases created through xmlrpc calls.')
+    );
+  $form['externalsite_xmlrpc_password'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Enter the password which will be used by the external site to  create case externally on this site'),
+    '#default_value' => variable_get('externalsite_xmlrpc_password', ''),
+    '#description' => t('This password will be used by the external site as an access control to create case on this site')
+    );
+  $form['casetracker_mailbox'] = array(
+    '#type' => 'textfield',
+
+    '#title' => t('Enter the email address from where the replies to email notification sent by casetracker will be received'),
+    '#default_value' => variable_get('casetracker_mailbox', ''),
+    '#description' => t('This is the email address from where mailhandler will receive mails sent as replies to email nofifications sent by casetracker')
+    );
+  $case_status_options = casetracker_case_state_option('status');
+  $keys = array_keys($case_status_options);
+  $form['casetracker_default_case_status'] = array(
+    '#type' => '',
+    '#title' => t('Select the default status value of the case'),
+    '#default_value' => variable_get('casetracker_default_case_status', $keys[0]),
+    '#options' => $case_status_options,
+    '#description' => t('This status value will be assigned to those cases which has not be explicitly assigned a case status by the user.')
+    );
+  $form['casetracker_default_assign_to'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Enter the name of the person to whom the case will be assigned'),
+    '#maxlength' => 60,
+    '#autocomplete_path' => 'casetracker/autocomplete',
+    '#required' => TRUE,
+    '#default_value' => variable_get('casetracker_default_assign_to','anonymous'),
+    '#description' => t('This person is will be assigned the case if the case creator does not explicitly mention the name of the person to whom the case has to be assigned'));
+
+  foreach (node_get_types() as $type => $name) {
+    if ($type != 'casetracker_case') {
+      $options_types[$type] = t($name);
+    }
+  }
+  $form['casetracker_project_node_types'] = array(
+    '#type' => 'checkboxes',
+    '#title' => t('Select the node types which will be used as projects'),
+    '#default_value' => variable_get('casetracker_project_node_types', array('casetracker_project')),
+    '#options' => $options_types,
+    '#description' => t('Select the node types that will be used as project.')
+    );
+
+  $form['casetracker_latest_cases_block_num_items'] = array(
+    '#type' => 'textfield',
+    '#title' => t('Number of items in the \'Latest Cases\' block'),
+    '#default_value' => variable_get('casetracker_latest_cases_block_num_items', '10'),
+    '#description' => t('Enter the number of items to be shown in the \'Latest Cases\' block.')
+    );
+
+  return $form;
+}
+
+/**
+ * Implementation of hook_block
+ */
+function casetracker_block($op = 'list', $delta = 0, $edit = array()) {
+  $block = array();
+  if ($op == 'list') {
+    $block[0]['info'] = t('Jump to case');
+    $block[1]['info'] = t('Latest cases');
+    return $block;
+  }
+  else if ($op == 'view') {
+    $block = array();
+    switch ($delta) {
+      case 0:
+        $form['#id'] = 'jump_to_case_form';
+        $form['case_id'] = array(
+          '#type' => 'textfield',
+          '#title' => t(''),
+          '#maxlength' => 60,
+          '#size' => 15,
+          '#required' => TRUE,
+          '#description' => t('Enter case id'));
+        $form['submit'] = array(
+          '#type' => 'submit',
+          '#value' => t('Go'));
+        $block['subject'] = t('Jump to case');
+        $block['content'] = drupal_get_form('jump_to_case_form', $form, 'jump_to_case_form_submit1');
+        return $block;
+      case 1:
+        $result = db_query(db_rewrite_sql("SELECT * FROM {node} n INNER JOIN {casetracker_case} cs on n.vid = cs.vid WHERE type = 'casetracker_case' order by created desc LIMIT 0, %d"), variable_get('casetracker_latest_cases_block_num_items', '10'));
+        $items = array();
+        while( $row = db_fetch_array($result)) {
+          $project_no = db_result(db_query("SELECT max(project_no) FROM {casetracker_project} WHERE nid = %d", $row['p_id']));
+          $project_result = db_query("SELECT * FROM {node} WHERE nid = %d", $row['p_id']);
+          $project_row = db_fetch_array($project_result);
+          $items[] = array(
+            'project_no' => $project_no,
+            'project_name' => $project_row['title'],
+            'project_node' => $project_row,
+            'case_no' => $row['case_id'],
+            'case_name' => $row['title'],
+            'case_node' => $row,
+            );
+        }
+        $output = theme('latest_cases', $items);
+        $block['subject'] = t('Latest Cases');
+        $block['content'] = t($output);
+        return $block;
+    }
+  }
+}
+
+/**
+ * Theme function for Latest Cases block
+ */
+function theme_latest_cases($items) {
+  $output = '';
+  $list_items = array();
+  foreach ($items as $item) {
+    $case_link = l('['.$item['project_no'].'-'.$item['case_no'].']'
+        . ' ' . substr($item['case_name'], 0, 50), 'node/'.$item['case_node']['nid'],
+        array('class' => 'project'));
+    $project_link = l('('.substr($item['project_name'], 0, 50).')',
+        'node/'.$item['project_node']['nid'],
+        array('class' => 'project'));
+
+    $list_items[] = $case_link . ' ' . $project_link;
+  }
+  if (count($list_items) > 0) {
+    $output = theme('item_list', $list_items, t(''));
+  }
+
+  return $output;
+}
+
+/**
+ *  The submit function for jump to case block
+ */
+function jump_to_case_form_submit() {
+  $case_id = $_POST['edit']['case_id'];
+  $arr = explode('-', $case_id);
+  if(!$arr[1]) {
+    $case_id1 = $arr[0];
+    $case_id_case = $arr[0] % 100;
+  }
+  else {
+    $case_id_case = $arr[1];
+  }
+  $result = db_query("SELECT nid FROM {casetracker_case} WHERE case_id = %d",$case_id_case);
+  $row = db_fetch_array($result);
+  if ($row) {
+    $case_id_to_be_passed = $row['nid'];
+    $rows[] = l(t($case_node->title),'node/'.$case_node->nid);
+    return 'casetracker/jump_to_case/found_record/'.$case_id_to_be_passed;
+  }
+  else {
+    return 'casetracker/jump_to_case/no_record';
+  }
+}
+
+/**
+ *  Function invoked if no case found in jump to case block
+ */
+function jump_to_case_no_result() {
+  print theme('page', t('The case you entered was not found'));
+}
+
+/**
+ * Function invoked if case found in jump to case block
+ */
+function jump_to_case_found_result() {
+  $case_id = arg(3);
+  $case_node = node_load($case_id);
+  drupal_goto('node/'.$case_id);
+}
+
+/**
+ * Implementation of hook_mailhandler.
+ */
+function casetracker_mailhandler($node, $result, $i, $header, $mailbox) {
+  $fromaddress = mailhandler_get_fromaddress($header, $mailbox);
+  // if($node->mailcommand) {//
+  $mail = new StdClass();
+  $from = $header->from;
+  $mail->from_address = strtolower(sprintf('%s@%s', $from[0]->mailbox, $from[0]->host));
+  $mail->to_address = $header->toaddress;
+  $mail->from_name = imap_mime_header_decode($header->from[0]->personal);
+  $mail->subject = $node->title;
+  $mail->body = $node->body;
+  $mail->content_type = 'text/plain';
+  $mail->msg_id = $header->references;
+  //var_dump($header->message-id);
+  casetracker_process_mail($mail, $node);
+  // }//
+}
+
+function casetracker_process_mail($mail, &$node) {
+  /*************************************************************************
+   The following section helps creation of new case from mail
+   The case details to be mentioned by the user in the following format
+   project_no:  500
+   case_title:  Seeing whether case can be created from mail
+   assign_to:  sanjeev
+   case_status: open
+   case_priority: high
+   case_type: bug
+  ***************************************************************************/
+  $entry = new StdClass();
+  $p_id = db_result(db_query("SELECT nid FROM {casetracker_project} WHERE project_no = %d", $node->project_no));
+  if ($p_id) {
+    $entry->p_id = $p_id;
+    //Setting the title
+    $entry->title = $node->case_title;
+    if (!isset($entry->title) ) {
+      $entry->title = t('case creation from mail');
+    }
+    //Setting the assign_to field
+    //$entry->assign_to = casetracker_get_uid($node->assign_to);
+    $entry->assign_to = $node->assign_to;
+    if (!isset($entry->assign_to)) {
+      $entry->assign_to = casetracker_get_name($node->uid);
+    }
+    //Setting the priority
+    $case_priority_id = db_result(db_query("SELECT case_priority_id FROM {casetracker_case_priority} WHERE case_priority = '%s'", $node->case_priority));
+    $entry->case_priority_id = $case_priority_id;
+    if (!isset($entry->case_priority_id)) {
+      $entry->case_priority_id = 3;
+    }
+    //Setting the case status
+    $case_status_id = db_result(db_query("SELECT case_status_id FROM {casetracker_case_status} WHERE case_status_name = '%s'", $node->case_status));
+    $entry->case_status_id = $case_status_id;
+    if (!isset($entry->case_status_id)) {
+      $entry->case_status_id = 1;
+    }
+    //Setting the case type
+    $case_type_id = db_result(db_query("SELECT case_type_id FROM {casetracker_case_type} WHERE case_type = '%s'", $node->case_type));
+    $entry->case_type_id = $case_type_id;
+    if(!isset($entry->case_type_id)) {
+      $entry->case_type_id = 1;
+    }
+    //Setting other information
+    //Setting the node type
+    $entry->type = 'casetracker_case';
+    //Setting the status
+    $entry->status = 1;
+    //Setting the user id
+    $entry->uid = $node->uid;
+    // Setting the publising option
+    $entry->promote = 1;
+    //Setting the teaser
+    $entry->teaser = $node->teaser;
+    $vid = _casetracker_get_vid();
+    $tid = db_result(db_query("SELECT tid FROM {casetracker_project} WHERE nid = %d", $p_id));
+    //setting the taxonomy term
+    $entry->taxonomy[$vid][0] = $tid;
+    //seetting the body of the project
+    $entry->body = $node->body;
+    if($entry->body == "") {
+      $entry->body = t('This case has been created on casetracker via email from %name', array('%name' => casetracker_get_name($node->uid)));
+    }
+    if($entry->teaser == "") {
+      $entry->teaser = t('This case has been created on casetracker via email from %name', array('%name' => casetracker_get_name($node->uid)));
+    }
+    node_save($entry);
+  }
+  else {
+    watchdog('debug','Failure of case creation by mail by the user '.casetracker_get_name($node->uid));
+  }
+ /****************************************************************************
+   The following section helps you to put comment on the cases present at    casetracker via mail .From putting the comment on the case just reply to the email notification received.The replied mail content being the comment body only
+******************************************************************************/
+  //var_dump($node);
+  if ($mail->msg_id) {
+    $result = db_query("SELECT * FROM {casetracker_mail} WHERE msg_id = '%s'", $mail->msg_id);
+    $row = db_fetch_array($result);
+    $nid = $row['nid'];
+    $cid = $row['cid'];
+    $edit['nid'] = $nid;
+    //$edit['cid'] = $cid;
+    $edit['pid'] = $cid;
+    // $edit['comment'] = $node->cmt_message;
+    $edit['comment'] = $node->body;
+    $edit['uid'] = $node->uid;
+    $node = node_load(Array('nid' => $nid));
+    //$edit['subject'] = t('Comment from mail');
+    $edit['subject'] = $mail->subject;
+    $edit['case_priority_id'] = $node->case_priority_id;
+    $edit['case_type_id'] = $node->case_type_id;
+    $edit['case_status_id'] = $node->case_status_id;
+    $edit['case_title'] = $node->title;
+  $edit['assign_to'] = casetracker_get_name($node->assign_to);
+  $term_id = db_result(db_query("SELECT tid FROM {casetracker_project} WHERE nid = %d ", $node->p_id));
+  $edit['taxonomy'] = $term_id;
+    comment_save($edit);
+  }
+}
+
+/**
+ * Retrieve a pipe delimited string of autocomplete suggestions for existing users
+ */
+function casetracker_autocomplete($string) {
+  $matches = array();
+  $result = db_query_range("SELECT name FROM {users} WHERE LOWER(name) LIKE LOWER('%s%%')", $string, 0, 10);
+  while ($user = db_fetch_object($result)) {
+    $matches[$user->name] = check_plain($user->name);
+  }
+  print drupal_to_js($matches);
+  exit();
+}
+
+/**
+ *  Function to get the case state/priority/type based on releam passed to the function.
+ */
+function casetracker_case_state_option($realm) {
+   $result = db_query("SELECT * FROM {casetracker_case_states} WHERE case_state_realm = '%s' ORDER BY case_state_name", $realm);
+   while($row = db_fetch_array($result)) {
+    $options[$row['csid']] = $row['case_state_name'];
+    }
+  return $options;
+}
+
+/**
+ * Function provides the UI for administering of case fields(Editing/Deletion)
+ */
+
+function casetracker_administer_case_fields() {
+  $headers = array(
+  array('data' => t('Case state name')),
+  array('data' => t('Case state realm')));
+  $result = db_query("SELECT * FROM {casetracker_case_states} order by case_state_realm");
+  $result1 = db_query("select distinct case_state_realm from {casetracker_case_states}");
+  while ($row1 = mysql_fetch_array($result1)) {
+    $field_values[$row1['case_state_realm']] = $row1['case_state_realm'];
+  }
+  $form = array();
+  $form['case_state_name'] = array('#tree' => TRUE);
+  $form['case_state_realm'] = array('#tree' => TRUE);
+  while($row = db_fetch_array($result)) {
+    $form['case_state_name'][$row[csid]] = array('#type' => 'textfield',
+        '#default_value' => $row[case_state_name],
+        '#size' => 20,
+        '#required' => TRUE,
+        '#maxlength' => 64,
+    );
+
+    $form['case_state_realm'][$row['csid']] = array('#type' => 'select',
+    '#options' => $field_values,
+    '#required' => TRUE,
+    '#attributes' => array('disabled'=>'disabled','style'=>"background-color: #ffffff; color: #000000;" ),
+    '#default_value' => $row['case_state_realm'],
+    );
+    //$form['case_state_id'][$row[csid]] = array('#type' => 'hidden',
+    //'#default_value' => $row[csid],
+    //);
+   }
+   $form['submit'] = array('#type' => 'submit', '#value' => t('Save configuration'));
+   return drupal_get_form('casetracker_administer_case_fields', $form,'casetracker_administer_case_fields1');
+}
+
+/**
+ * The submit function for editing/deletion of case states
+ */
+function casetracker_administer_case_fields_submit($form_id, $form_values) {
+  foreach($form_values as $key=>$value) {
+    if($key==t('Save configuration') || $key==t('casetracker_administer_case_fields'))
+      continue;
+    $info[$key] =$value;
+  }
+  foreach($info['case_state_name'] as $key=> $value){
+    db_query("UPDATE {casetracker_case_states} SET case_state_name='%s' WHERE csid=%d",$value,$key);
+  }
+  // foreach($info['case_state_realm'] as $key=> $value){
+  //  db_query("UPDATE {casetracker_case_states} SET case_state_realm='%s' WHERE csid=%d",$value,$key);
+  // }
+
+}
+
+/**
+ * Function renders the UI for editing of case states in a tabular form.
+ */
+function theme_casetracker_administer_case_fields1($form) {
+  foreach ($form['case_state_name'] as $key => $element) {
+    if (is_array($element) && element_child($key)) {
+      $rows[] = array(form_render($form['case_state_name'][$key]), form_render($form['case_state_realm'][$key]),l(t('delete'), 'admin/case/states/delete/'.$key));
+    }
+  }
+  $header = array(array('data' => t('Case state name')), array('data' => t('Case state realm')), array('data' => t('Operation')));
+  $output = theme('table', $header, $rows);
+  $output .= form_render($form);
+  return $output;
+}
+
+/**
+ * Function renders the form for addition of case state values.
+ */
+
+function casetracker_case_state_add() {
+  $form['casetracker_state'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Adding a new case state'),
+    '#collapsible' => FALSE,
+    '#collapsed' => TRUE);
+  $form['casetracker_state']['casetracker_state_name'] = array(
+    '#type' => 'textfield',
+    '#title' => t('New Case State Name'),
+    '#required' => TRUE,
+    '#default_value' => '',
+    '#size' => 40);
+  $result = db_query("select distinct case_state_realm from {casetracker_case_states}");
+  while ($row = mysql_fetch_array($result)) {
+    $field_values[$row['case_state_realm']] = $row['case_state_realm'];
+  }
+  $form['casetracker_state']['casetracker_state_realm'] = array(
+    '#type' => 'select',
+    '#title' => t('Select case state realm'),
+    '#default_value' => '',
+    '#options' => $field_values);
+  $form['casetracker_case']['casetracker_state_submit'] = array(
+    '#type' => 'submit',
+    '#value' => t('Add New Case State'));
+  return drupal_get_form('casetracker_case_state_add', $form);
+
+}
+
+/**
+ * The submit function for addition of case state values.
+ */
+function casetracker_case_state_add_submit($form_id, $form_values) {
+  $result = db_query("INSERT INTO {casetracker_case_states} SET case_state_name='%s', case_state_realm='%s'",$form_values['casetracker_state_name'],$form_values['casetracker_state_realm']);
+  if ($result) {
+     drupal_set_message(t('Case state has been added successfully.'));
+     drupal_goto('admin/case/states');
+   }
+}
+
+/**
+ * The function to ask for a confirmation to delete case state
+ */
+function casetracker_case_state_delete(){
+  $info = db_result(db_query("SELECT case_state_name FROM {casetracker_case_states} WHERE csid=%d",arg(4)));
+  $form['csid'] = array(
+    '#type' => 'hidden',
+    '#default_value' => arg(4)
+  );
+  return confirm_form('casetracker_case_state_delete_confirm', $form, t('Are you sure you want to delete the case state %name?', array('%name' => theme('placeholder', $info))), 'admin/case/states', '', t('Delete'), t('Cancel'));
+}
+
+/**
+ * The submit function for deletion of case states
+ */
+function casetracker_case_state_delete_confirm_submit($form_id,$form_values) {
+  $result = db_query("DELETE FROM {casetracker_case_states} WHERE csid=%d", $form_values['csid']);
+  if($result) {
+    drupal_set_message('The case state has been successfully deleted');
+    drupal_goto('admin/case/states');
+  }
+}
+
+/**
+ * Implementation of hook_nodeapi().
+ *
+ */
+function casetracker_nodeapi(&$node, $op, $teaser = NULL, $page = NULL) {
+  switch ($op) {
+    case 'view':
+      if(in_array($node->type, variable_get('casetracker_project_node_types',array('casetracker_project')),TRUE)){
+        //$node = node_prepare($node, $teaser);
+        $output = '<div class="case">';
+        $rows = array();
+        $rows[] = array(t('Project no'), l($node->project_no, 'project/cases/'.$node->nid.'/all', array('title' => t('Views all cases in this project'))));
+        $rows[] = array(t('Project Title:'), l($node->title, 'project/cases/'.$node->nid.'/all',array('title' => t('Views all cases in this project'))));
+        $rows[] = array(t('Opened by:'), check_plain(casetracker_get_name($node->uid)));
+        $rows[] = array(t('Opened on:'), date('D, d F Y , g:i A', $node->created));
+        $rows[] = array(t('Last modified:'), date('D, d F Y , g:i A', $node->changed));
+        $rows[] = array(t('Add a case to this project:'), l($node->title, 'node/add/casetracker_case/'.$node->nid));
+        $output .= '<div class="summary">'. theme('table', array(), $rows) .'</div>';
+        $output .= '<p>'. t('Case Description') .'</p>';
+        $output .= '<p>'. $node->body .'</p>';
+        $output .= '</div>';
+        $node->body = $output;
+      }
+      break;
+    case 'delete':
+      if(in_array($node->type, variable_get('casetracker_project_node_types',array('casetracker_project')),TRUE)){
+        $result = db_query("SELECT nid from {casetracker_case} WHERE p_id = %d", $node->nid);
+        // deleting all the cases under the project & all the comments under the case.
+        while ($row = db_fetch_array($result)) {
+          if ($row['nid']) {
+            db_query("DELETE FROM {casetracker_case} where nid = %d", $row['nid']);
+            $result = db_query("SELECT cid FROM {comments} WHERE nid = %d", $row['nid']);
+            while ($row1 = db_fetch_array($result)) {
+              $sid = db_result(db_query("SELECT sid FROM {casetracker_comment} WHERE cid = %d", $row1['cid']));
+              db_query("DELETE FROM {casetracker_comment_status} WHERE sid = %d", $sid);
+              db_query('DELETE FROM {casetracker_comment} WHERE cid = %d', $row1['cid']);     }
+            node_delete($row['nid']);
+          }
+        }
+        db_query("DELETE FROM {casetracker_project} WHERE nid = %d", $node->nid);
+      }
+      break;
+    case 'insert':
+      if(in_array($node->type, variable_get('casetracker_project_node_types',array('casetracker_project')),TRUE)){
+        //casetracker_project_insert1($node);
+        db_query('INSERT INTO {casetracker_project} (nid, vid, project_no) VALUES (%d, %d, %d)',$node->nid, $node->vid, casetracker_project_next_id('project_no'));
+      }
+      break;
+    case 'update':
+      if(in_array($node->type, variable_get('casetracker_project_node_types',array('casetracker_project')),TRUE)){
+        //casetracker_project_update1($node);
+        if($node->revision) {
+          db_query('INSERT INTO {casetracker_project} (nid, vid, project_no) VALUES (%d, %d, %d )', $node->nid, $node->vid, $node->project_no);
+    }
+      }
+      break;
+    case 'load':
+       //casetracker_project_load($node);
+      if(in_array($node->type, variable_get('casetracker_project_node_types',array('casetracker_project')),TRUE)){
+        $result = db_query('SELECT project_no FROM {casetracker_project} WHERE nid = %d AND vid = %d', $node->nid, $node->vid);
+        return db_fetch_array($result);
+      }
+      break;
+  }
+}
+/**
+ *  Implememntation of hook_views_table
+ */
+function casetracker_views_tables() {
+  $tables['casetracker_case'] = array(
+    'name' => 'casetracker_case',
+    'provider' => 'internal',
+    'join' => array(
+      'left' => array(
+        'table' => 'node',
+        'field' => 'vid',
+        ),
+      'right' => array(
+        'field' => 'vid',
+        'type' => 'inner'
+        )
+      ),
+    'fields' => array(
+      'p_id' => array(
+        'name' => t('Casetracker: Parent project'),
+        'sortable' => TRUE,
+        'handler' => 'casetracker_get_project_name',
+        'p_id' => "p_id",
+        'addlfields' => array("p_id"),
+        'help' => t('This will display the name of the parent project.')
+        ),
+      'case_id' => array(
+        'name' => t('Casetracker: Case ID'),
+        'sortable' => TRUE,
+        'addlfields' => array("case_id"),
+        //'handler' => 'casetracker_get_case_id',
+        'help' => t('This allows you to filter cases based on case id.'),
+        ),
+      'assign_to' => array(
+        'name' => t('Casetracker: Assigned To'),
+        'sortable' => TRUE,
+        'handler' => 'casetracker_get_user_name',
+        'addlfields' => array("assign_to"),
+        'help' => t('We can view all the cases assigned to a person.'),
+        ),
+      'case_priority_id' => array(
+        'name' => t('Casetracker: Case priority'),
+        'sortable' => TRUE,
+        'addlfields' => array("case_priority_id"),
+        'handler' => 'casetracker_get_priority',
+        'help' => t('We can filter cases by priority.'),
+        ),
+      'case_status_id' => array(
+        'name' => t('Casetracker: Case status'),
+        'sortable' => TRUE,
+        'addlfields' => array("case_status_id"),
+        'handler' => 'casetracker_get_status',
+        'help' => t('We can filter cases by status.'),
+        ),
+      'case_type_id' => array(
+        'name' => t('Casetracker: Case type'),
+        'sortable' => TRUE,
+        'addlfields' => array("case_type_id"),
+        'handler' => 'casetracker_get_type',
+        'help' => t('We can filter cases by type.'),
+        )
+      ),
+    'filters' => array(
+      'case_priority_id' => array(
+        'name' => t('Case Tracker: View the cases with selected priority'),
+        'list' => 'casetracker_get_priority_options',
+        'operator' => 'views_handler_operator_andor',
+        'help' => t('This allows you to filter case based on its priority.'),
+        ),
+      'case_status_id' => array(
+        'name' => t('Case Tracker: View the cases with selected status'),
+        'list' => 'casetracker_get_status_options',
+        'operator' => 'views_handler_operator_andor',
+        'help' => t('This allows you to filter case based on its status.'),
+        ),
+      'case_type_id' => array(
+        'name' => t('Case Tracker: View the case with selected type'),
+        'list' => 'casetracker_get_type_options',
+        'operator' => 'views_handler_operator_andor',
+        'help' => t('This allows you to filter case based on its state.'),
+        ),
+      'assign_to' => array(
+        'name' => t('Case Tracker: Assigned to'),
+        'list' => 'casetracker_get_users_options',
+        'value-type' => 'array',
+        'operator' => 'views_handler_operator_andor',
+        'help' => t('This allows you to filter case based on the assigned user.')
+        ),
+      ),
+    'sorts' => array(
+      'case_id' => array(
+        'name' => t('Casetracker: case_id'),
+        'handler' => 'casetracker_views_handler_sort_case_id',
+        'help' => t('This will sort the cases by case id'),
+        ),
+      'case_status_id' => array(
+        'name' => t('Case Tracker: Case Status'),
+        'handler' => 'casetracker_views_handler_sort_status',
+        'help' => t('This allows you to sort cases based on its case status.'),
+        ),
+      )
+    );
+  $tables['casetracker_project'] = array(
+    'name' => 'casetracker_project',
+    'provider' => 'internal',
+    'join' => array(
+      'left' => array(
+        'table' => 'casetracker_case',
+        'field' => 'p_id',
+        ),
+      'right' => array(
+        'field' => 'nid',
+        'type' => 'inner'
+        )
+      ),
+    'fields' => array(
+      'project_no' => array(
+        'name' => t('Casetracker: Project no'),
+        'sortable' => TRUE,
+        'handler' => 'casetracker_get_case_id',
+        'project_no' => 'project_no',
+        'addlfields' => array('project_no'),
+        'help' => t('This will sort project based on project no.')
+        )
+      ),
+    'filters' => array(
+      'project_no' => array(
+        'name' => t('Case Tracker: Filter on selected project'),
+        'list' => 'casetracker_get_projects_options',
+        'operator' => 'views_handler_operator_andor',
+        'value-type' => 'array',
+        'help' => t('This allows you to filter cases based on their projects.'),
+        ),
+      )
+   );
+  $tables['casetracker_case_states'] = array(
+    'name' => 'casetracker_case_states',
+    'provider' => 'internal',
+    'join' => array(
+      'left' => array(
+        'table' => 'casetracker_case',
+        'field' => 'case_status_id'
+        ),
+      'right' => array(
+        'field' => 'csid',
+        'type' => 'inner'
+        )
+      ),
+    'sorts' => array(
+      'case_state_name' => array(
+        'name' => t('Casetracker: State name'),
+        'help' => t('This will sort the states by their name'),
+        )
+      )
+   );
+
+  return $tables;
+}
+
+function casetracker_get_users_options() {
+  $options = array();
+  $result = db_query('SELECT uid, name FROM {users} WHERE status > 0 AND uid > 0');
+  $options[0] = variable_get('anonymous', 'Anonymous');
+  while ($obj = db_fetch_object($result)) {
+    $options[$obj->uid] = check_plain($obj->name);
+  }
+  return $options;
+}
+
+function casetracker_get_project_name($fieldinfo, $fielddata, $value, $data) {
+  $node = db_fetch_object(db_query(db_rewrite_sql("SELECT n.nid, n.title FROM {node} n WHERE n.nid = %d"), $data->casetracker_case_p_id));
+
+  if ($node->nid) {
+    return l($node->title, "node/$node->nid");
+  }
+}
+
+function casetracker_get_status($fieldinfo, $fielddata, $value, $data) {
+  return check_plain(casetracker_get_value($data->casetracker_case_case_status_id));
+}
+
+function casetracker_get_priority($fieldinfo, $fielddata, $value, $data) {
+  return check_plain(casetracker_get_value($data->casetracker_case_case_priority_id));
+}
+
+function casetracker_get_type($fieldinfo, $fielddata, $value, $data) {
+  return check_plain(casetracker_get_value($data->casetracker_case_case_type_id));
+}
+
+/**
+ * Function to retrive the user name corresponding to user id
+ */
+
+function casetracker_get_user_name($fieldinfo, $fielddata, $value, $data) {
+   static $user_name = array();
+   if(!isset($user_name[$data->casetracker_case_assign_to])) {
+     if($data->casetracker_case_assign_to == 0) {
+       $user_name[$data->casetracker_case_assign_to] = check_plain( variable_get('anonymous', 'Anonymous'));
+     }
+     else {
+       $user_name[$data->casetracker_case_assign_to] = db_result(db_query("SELECT name FROM {users} WHERE uid = %d",$data->casetracker_case_assign_to));
+     }
+   }
+   return $user_name[$data->casetracker_case_assign_to];
+}
+
+function casetracker_get_case_id($fieldinfo, $fielddata, $value, $data) {
+#  static $case_id = array();
+  $case_id = array();
+  if(!isset($case_id[$data->casetracker_case_p_id])) {
+  $project_no = db_result(db_query("SELECT max(project_no) FROM {casetracker_project} WHERE  nid = %d", $data->casetracker_case_p_id));
+  $case_id[$data->casetracker_case_p_id] = $project_no.'-'.$data->casetracker_case_case_id;
+  }
+  return $case_id[$data->casetracker_case_p_id];
+}
+// The following is not in use
+function casetracker_get_case_id1($fieldinfo, $fielddata, $value, $data) {
+  //var_dump($data);
+  // object(stdClass)#2 (9) { ["nid"]=>  string(3) "188" ["casetracker_case_p_id"]=>  string(3) "183" ["casetracker_case_case_priority_id"]=>  string(1) "3" ["casetracker_case_case_status_id"]=>  string(1) "6" ["casetracker_case_case_type_id"]=>  string(2) "12" ["casetracker_case_assign_to"]=>  string(1) "1" ["node_title"]=>  string(26) "The first case on sandbox." ["node_changed"]=>  string(10) "1148631643" ["casetracker_project_project_no"]=>  NULL }
+  $project_no = db_result(db_query("SELECT max(project_no) FROM {casetracker_project} WHERE  nid = %d", $data->casetracker_case_p_id));
+  return $project_no.'-'.$data->casetracker_case_case_id;
+
+}
+
+/*function casetracker_get_type($fieldinfo, $fielddata, $value, $data) {
+  //  print_r(serialize($fieldinfo) .' '. serialize($fielddata) .' '. serialize($value) .' '. serialize($data));
+  return check_plain(casetracker_get_value($data->casetracker_case_case_type_id));
+}*/
+
+function casetracker_get_priority_options() {
+  $options = array();
+  $result = db_query("SELECT csid, case_state_name FROM {casetracker_case_states} WHERE case_state_realm='%s'",'priority');
+  while ($obj = db_fetch_object($result)) {
+    $options[$obj->csid] = "$obj->case_state_name";
+  }
+  return $options;
+}
+
+function casetracker_get_status_options() {
+  $options = array();
+  $result = db_query("SELECT csid, case_state_name FROM {casetracker_case_states} WHERE case_state_realm='%s'",'status');
+  while ($obj = db_fetch_object($result)) {
+    $options[$obj->csid] = "$obj->case_state_name";
+  }
+  return $options;
+}
+
+function casetracker_get_type_options() {
+  $options = array();
+  $result = db_query("SELECT csid, case_state_name FROM {casetracker_case_states} WHERE case_state_realm='%s'",'type');
+  while ($obj = db_fetch_object($result)) {
+    $options[$obj->csid] = "$obj->case_state_name";
+  }
+  return $options;
+}
+
+function casetracker_get_projects_options() {
+  $options = array();
+  $result = db_query(db_rewrite_sql("SELECT n.nid, p.project_no, n.title, CONCAT(p.project_no, ' ', n.title) AS project FROM {node} n INNER JOIN {casetracker_project} p ON n.nid = p.nid"));
+  while ($obj = db_fetch_object($result)) {
+    $options[$obj->project_no] = "$obj->title";
+  }
+  return $options;
+}
+
+function casetracker_views_handler_sort_case_id($action, &$query, $sortinfo, $sort) {
+  switch ($GLOBALS['db_type']) {
+    case 'mysql':
+    case 'mysqli':
+      $query->add_orderby('', "case_id", "ASC");
+      break;
+  }
 }
\ No newline at end of file
