// $Revision: 5675 $

var NumOfPages = 3;
var CurPage = 0;
var Sort = 0;
var SortOrder = "desc";
function RatingUpdatePageNumber(num)
{
    var res = "";
    var i;
    if(NumOfPages <= 9) i = num;
    else  i = num - 5;
    if(i > NumOfPages - 10) i = NumOfPages - 10;
    if(i < 0) i = 0;
      
    for(var j = 0; j < 10 && i < NumOfPages; i++, j++)
    {
      if(i == num)
      {
        res += "<FONT COLOR='black'>" + String(i+1) + "</FONT>&nbsp;";
      }
      else
      {
        if( (j > 0 && j < 9) || i == 0 || i == NumOfPages - 1)
        {
          res += "<FONT COLOR='#3B91D3'><span onclick='RatingUpdatePageNumber(" + String(i) + 
            ");' style='cursor: pointer'><U>" + String(i+1) + "</U></span></FONT>&nbsp;"
        }
        else
        {
          res += "<FONT COLOR='#3B91D3'><span onclick='RatingUpdatePageNumber(" + String(i) + 
            ");' style='cursor: pointer'><U>...</U></span></FONT>&nbsp;"          
        }
      }
    }
    CurPage = num;
    var sort = GetSortByNumber(Sort); 
    if(sort == "errors")  SortOrder = "asc";
    alert("sort="+sort);
    RatingRequestAJAX('/rating/rating1.html?page='+String(CurPage+1)+'&sort='+sort+'&sort_order='+SortOrder);

}

function RatingUpdatePage()
{
  RatingRequestAJAX('/rating/rating1.html');
}

var IDExercise = -1;

function InitIDExercise(id)
{
   IDExercise = id;
}

var RatingUpdateTm = "";

function RatingUpdatePCrit(page, tmCrit, crit, course)
{ 
  if(course == undefined)	
  	course = 1;
  
  var script;
  var oRdAll;               

  var pg = "";
  if(page != -1  &&  page != undefined)
    pg = "page="+String(page+1)+"&";    
  
  if(IDExercise == -1)
  {
    script = '/rating/rating1.html?';
    oRdAll = document.getElementById('radio-max_exercises-0');
  }    
  else
  {
    script = '/rating/exercise/rating.html?';
    oRdAll = document.getElementById('radio-max_exercises-0');
  }
  
  if(tmCrit != undefined  ||  parseInt(tmCrit) == -1)
  {
     RatingUpdateTm = "&period="+tmCrit;
//     pg = "";
  }
  else
  if(page == undefined  ||  parseInt(page) == -1)
  {
//    pg = "";
  }
  else
  {    
    pg = "page="+String(page+1)+"&";
    CurPage = page;
  }
    
  var oChbPaymOnly = document.getElementById('checkbox-payment-1');
  var oChbOnlOnly = document.getElementById('checkbox-online-1');
  
// parameters to send
  var sPaymentOnly = '&payment_only=';
  var sOnlineOnly = '&online_only=';
  var sMaxExercise = '&max_exercise=';
  var sExerciseID = '&exercise_id=';
//
  
  var req = script+pg+RatingUpdateTm;
  
  var arr10 = [];
  arr10['true'] = "1";
  arr10['false'] = "0";
  
  try
  {
  req += sPaymentOnly + arr10[oChbPaymOnly.checked];
  }
  catch(e)
  {
     req += sPaymentOnly + "0";
  }
  try
  {
    req += sOnlineOnly + arr10[oChbOnlOnly.checked];
  }
  catch(e)
  {
     req += sOnlineOnly + "0";
  }
  try
  {
    req += sMaxExercise + arr10[oRdAll.checked];
  }
  catch(e) 
  {
    req += sMaxExercise + "0";
  }
  
  if(IDExercise != undefined  &&  IDExercise != -1)
    req += sExerciseID + String(IDExercise);
  
  var sCrit = "";
  var sortOrder = "";
  if(crit != undefined && crit != -1)
  {
    if(crit == "errors")
      sortOrder = "&sort_order=asc";
    sCrit = "&sort="+crit;
  }
    
  req += sCrit + sortOrder;
  
  req += "&course="+course;    
  //alert(req);
  RatingRequestAJAX(req);
}

var numOfTableRows = 10;

function SortByCrit(num)
{
  Sort = num;
  
  if(IDExercise == -1)
  {
    req = '/rating/rating1.html?sort='+GetSortByNumber(Sort)+'&sort_order=desc'+RatingUpdateTm;
  }
  else
    req = '/rating/exercise/rating.html?sort='+GetSortByNumber(Sort)+'&sort_order=desc'+RatingUpdateTm;
  
//  prompt('', '/rating/rating.html?page='+String(CurPage+1)+'&sort='+GetSortByNumber(Sort)+'&sort_order=desc');
  //RequestAJAX('/rating/rating.html?page='+String(CurPage+1)+'&sort='+GetSortByNumber(Sort)+'&sort_order=desc');
  RatingRequestAJAX(req);
}

function GetSortByNumber(sort)
{
  switch(sort)
  {
  case 0:  return "rating";
  case 1:  return "name";
  case 2:  return "max_exercise";
  case 3:  return "max_exercise";
  case 4:  return "errors";
  case 5:  return "avg_speed";
  case 6:  return "length";
  case 7:  return "duration";
  case 8:  return "dt";
  case 9:  return "payment_sum";
  default: 
    alert("Wrong sort parameter to GetSortByNumber()");
  }
}

function RatingUpdate()
{
    if (req.readyState == 4) {
        if (req.status == 200) {
          
          document.getElementById('IDSpanRatingTable').innerHTML = req.responseText;
          // show table
          document.getElementById('IDSpanRatingTable').style.display = "";
  }
  
  else {
            alert("Could not receive data from server:\n" + req.statusText);
        }
    } 
}

function RatingRequestAJAX(url)
{
    req = null;
    if (window.XMLHttpRequest) {
        try {
            req = new XMLHttpRequest();
        } catch (e){}
    } else if (window.ActiveXObject) {
        try {
            req = new ActiveXObject('Msxml2.XMLHTTP');
        } catch (e){
            try {
                req = new ActiveXObject('Microsoft.XMLHTTP');
            } catch (e){}
        }
    }
    
    if(req)
    {
      req.onreadystatechange = RatingUpdate;  
      req.open("GET", url, true);
      req.send(null);
    } else {
        alert("Ваш браузер не поддерживает AJAX. Пришлите описание проблемы на zaharov@ergosolo.ru");
    }
}

function GetXMLElement(xmlDoc, element, index)
{
//  alert("element = " + element);
  if(index == undefined)
  {
    if(xmlDoc.getElementsByTagName(element)[0].firstChild != null)
    {
      return xmlDoc.getElementsByTagName(element)[0].firstChild.nodeValue;
    }
    else
    {
      return "";
    }
  }
  else
  {
    if(xmlDoc.getElementsByTagName(element)[index] == undefined)  return "";
    if(xmlDoc.getElementsByTagName(element)[index].firstChild != null)
    {
      return xmlDoc.getElementsByTagName(element)[index].firstChild.nodeValue;
    }
    else
    {
      return "";
    }    
  }
}

function RatingUpdateWithCourse(pagePar, tmCritPar, critPar)
{
  
  var course_count=document.getElementsByName('course_radio');
  
  for(i = 0; i < course_count.length; i++)
  {
	if(course_count[i].checked)
	{
		var courseID = i+1;
		break;
	}
  }
 
  RatingUpdatePCrit(pagePar, tmCritPar, critPar, courseID)
}

function GetLastExercise()
{
  
  var course_count=document.getElementsByName('course_radio');
  
  for(i = 0; i < course_count.length; i++)
  {
	if(course_count[i].checked)
	{
		var courseID = i+1;
		break;
	}
  }
  request = null;
  if (window.XMLHttpRequest) {
 	 try {
		request = new XMLHttpRequest();
	} catch (e){}
  } else if (window.ActiveXObject) {
	try {
            	request = new ActiveXObject('Msxml2.XMLHTTP');
        } catch (e){
        try {
                request = new ActiveXObject('Microsoft.XMLHTTP');
        } catch (e){}
    }
  }
  
  var url = '/rating/update_last_exercise.html?course='+ courseID;
	  
  if(request)
  {
      	
      request.onreadystatechange = UpdateLastExercise;  
      request.open("GET", url, true);
      request.send(null);
  } else {
      alert("Ваш браузер не поддерживает AJAX. Пришлите описание проблемы на zaharov@ergosolo.ru");
  }
  	  
}

function UpdateLastExercise()
{
	//если не пройдено ни одного уражнения по данному курсу
	if(request.responseText == '.'){
		
		//убирается рейтиг до последнего пройденного упражнения
		document.getElementById('radio-max_exercises-0').style.display = 'none';
		document.getElementById('IDRatingLastEx1').style.display = 'none';
		document.getElementById('IDRatingLastEx2').style.display = 'none';
		document.getElementById('IDLastExercise').style.display = 'none';
		
		//выставляется показ полного рейтинга по всем пользователям
		if(document.getElementById('radio-max_exercises-0').checked)
		{
			document.getElementById('radio-max_exercises-1').checked = 'true';
			RatingUpdateWithCourse(undefined, undefined, undefined);		
		}
	}
	//иначе
        else
	{
		//возвращается показ рейтинга до последнего пройденного упражнения
		document.getElementById('radio-max_exercises-0').style.display = 'inline';
		document.getElementById('IDRatingLastEx1').style.display = 'inline';
		document.getElementById('IDRatingLastEx2').style.display = 'inline';
		document.getElementById('IDLastExercise').style.display = 'inline';
		
                //выставляется показ рейтинга до упражнения request.responseText		
		//document.getElementById('radio-max_exercises-0').checked = 'true';
		
		//показ упражнения, до которого формируется рейтинг
		document.getElementById('IDLastExercise').innerHTML = ' '+request.responseText;
	}
}
