var article_links;
var qtimer;
var switchBlock = 0;
var kwsearchTimer = 0;
var mark_rows = new Array();
var quotes = new Array();
var checkTimer = 0;

function KeywordSearch(query)
  {
  var icon   = dojo.byId('kwsearch_icon');
  icon.innerHTML = '';
  mark_rows = new Array();
  mygrid.render();

  if (kwsearchTimer)
    {
    window.clearTimeout(kwsearchTimer);
    kwsearchTimer = 0;
    }

  if (query.length >= 3)
    {
    kwsearchTimer = window.setTimeout("dojo.xhrGet({url: 'ajax/dbquery.php?query=" + query + "&sid=" + sid + "&hid=" + hid + "&mode=keyword', load: KeywordSearchCallback, error: AjaxError})", 300);
    }
  }

function KeywordSearchCallback(data, ioArgs)
  {
  var mygrid = dijit.byId('aGrid');
  var icon   = dojo.byId('kwsearch_icon');

  if (data)
    {
    icon.innerHTML = '<img src="/images/icons/kwsearch_results.png" />';
    
    var articles = data.split(';;');

    for (var a in articles)
      {
      mark_rows[articles[a]] = 1;
      }
    
    }
  else
    icon.innerHTML = '<img src="/images/icons/kwsearch_noresults.png" />';

  mygrid.render();
  }

function switch_article_tab(id)
  {
  if (id)
    {
		//dojo.query("#grSubjectDivs div.grTabContent").style("display", "none");
		dojo.query("#grSubjectDivs ul li.selected").forEach("item.className = 'unselected';");
	
		//dojo.query("#grSubjectDivs #grSC" + id)[0].style.display = 'block';
		dojo.query(".grTabs ul li#grST" + id)[0].className = 'selected';
	
    dojo.byId('subject_icon_own').innerHTML = '';
    dojo.byId('subject_icon_watch').innerHTML = '';
    
		dojo.byId('subject_genre').innerHTML = '';
		dojo.byId('subject_developer').innerHTML = '';
		dojo.byId('subject_publisher').innerHTML = '';
		dojo.byId('subject_release').innerHTML = '';

    dojo.byId('gamerank_overall').innerHTML = '';
    dojo.byId('gamerank_overall_genre').innerHTML = '';
    dojo.byId('gamerank_overall_counter').innerHTML = '';
    dojo.byId('gamerank_overall_genre_counter').innerHTML = '';
  
    dojo.byId('rating_overall').innerHTML = '';
    dojo.byId('rating_locale').innerHTML = '';

    dojo.byId('infobox_link').href = '#';
    dojo.byId('infobox_price').style.display = 'none';
    dojo.byId('infobox_packshot').style.backgroundImage = '';
	  }
	else
	  id = hid;

  console.log('ID = ' + id);

  articleid = 0;
  AjaxGetQuote(sid, id, 0, 0);
	
  var franchise = dijit.byId('gr_franchise');
  //franchise.setHref('/ajax/franchise_gfx.php?subjectid=' + sid + '&hid=' + id);
  franchise.attr('href', '/ajax/franchise_gfx.php?ccode=' + ccode + '&subjectid=' + sid + '&hid=' + id + '&rand=' + Math.round(Math.random()*1000));

  switchBlock = 1;
  mygrid      = dijit.byId('aGrid');
  datastore   = new dojo.data.ItemFileReadStore({url:'ajax/getarticles.php?sid=' + sid + '&hid=' + id + '&ccode=' + ccode});
  dojo.connect(datastore,"onLoad",grSetNewDataStore(datastore)); 

  hid = id;  
  grInfoboxRefresh();
  grSetValue('currenthw', hid, 1);
  //mygrid.render();  
  }

function grInfoboxRefresh()
  {
  dojo.xhrGet({url: 'ajax/getrrs.php?sid=' + sid + '&hid=' + hid + '&ccode=' + ccode, load: RRCallback});      
  }

function grSetNewDataStore(datastore)
  {
  //console.dir(datastore);
  
  mygrid = dijit.byId('aGrid');
  mygrid.setStore(datastore);
  mygrid.sizeChange();
  
  window.setTimeout("switchBlock=0", 1000);
  }

function tab_click(e)
  {
  var id = e.target.parentNode.id.match(/[0-9]+/i);

  if ((id) && (switchBlock == 0) && (id != hid))
    switch_article_tab(id);  
  }

function grInitSubject()
  {
  article_links = dojo.query("div.grTabs ul li a");  
  article_links.connect("onclick", tab_click);
	dojo.query("div.grTabs ul li a").forEach("dojo.setSelectable(item, false)");

  mygrid = dijit.byId('aGrid');
  mygrid.setStore(new dojo.data.ItemFileReadStore({url:'ajax/getarticles.php?sid=' + sid + '&hid=' + hid + '&ccode=' + ccode}));

  mygrid.sizeChange();

  dojo.connect(mygrid,"onRowClick",GridLink); 
  dojo.connect(mygrid,"onRowMouseOver",GridQuote);  

  dojo.connect(mygrid, 'onStyleRow', styleRow);  

  dojo.connect(dojo.byId('recommend_nickname'),'onkeyup','checkNickname');    
  dojo.connect(dojo.byId('recommend_nickname'),'onblur','checkNickname');    
  dojo.connect(dojo.byId('recommend_nickname'),'onfocus','checkNickname');    

  //window.setTimeout("dijit.byId('aGrid').sizeChange()", 2000);

  //switch_article_tab();
  }

// *****************************************************************************
// * Grid Functions

function GridFormatDate(value)
  {
  return FormatDate(value);
  }

function GridRating(value)
  {    
  // var pbid = Math.floor(Math.random()*2000);

  //return '<div class="grSearchRatingBg" style="margin-left: 2px;"><div class="grSearchRatingFill" style="width: ' + Math.round(50 - (value / 2)) + 'px"></div></div>' + value + '%';
  //return '<div style="width:57px; float: left; margin: 5px 4px 0px 4px; padding: 0px;" maximum="100" id="activityprogressbar' + i + '" progress="' + Math.round(value) + '" dojoType="dijit.ProgressBar"><!--x--></div>';
  
  return '<a class="grRating1" style="background-position: 0px -' + Math.round(100 - value) * 11 + 'px;" title="' + Math.round(value) + '%">&nbsp;</a>';
  
  
  //set+(function() { var bar = new dijit.ProgressBar({progress: value, maximum: 100, width: 55}, "PB_" + pbid); }, 2);

  //return '<div style="width: 55px;" id="PB_' + pbid + '"></div>';
  
  //<div style="width:57px; float: left; margin: 5px 4px 0px 4px; padding: 0px;" maximum="100" id="activityprogressbar' + parts[0] + '" progress="' + Math.round(parts[2]) + '" dojoType="dijit.ProgressBar"><!--x--></div>
  }

function QuoteCallback(data, ioArgs)
  {
  var div_shadow = dojo.byId("grSubjectQuoteShadow");
  var div = dojo.byId("grSubjectQuote");
  
  if (!data || (data.length == 0))
    {
    if (quotes[articleid] && (quotes[articleid].length > 0))
      data = quotes[articleid];
    }
  
  if (data)
    {
    quotes[articleid] = data;
    
    var info = data.split('||');
    var newhtml = info[0] + '<br/><span class="grQuoteInfo">(Quelle: ' + info[1] + ', ' + info[2] + '-Review)</span>';

    if ((data != olddata) && info[1].length > 5)
      {
      div.style.opacity = 0;
      div.innerHTML = newhtml;
      dojo.anim(div, { opacity: 1 }, 1000);    

      div_shadow.style.opacity = 0;
      div_shadow.innerHTML = newhtml;
      dojo.anim(div_shadow, { opacity: 0.3 }, 1000);    
      
      olddata = data;
      }
    }
  } 

function AddSubject(sid, hid, mode, newstatus)
  {
  dojo.xhrGet({url: 'ajax/addsubject.php?sid=' + sid + '&hid=' + hid + '&mode=' + mode + '&newstatus=' + newstatus});    

  if (newstatus == 1)
    dojo.byId('subject_icon_' + mode).innerHTML = '<a href="#" onClick="AddSubject(sid, hid, \'' + mode + '\', 0); return false;"><img src="/images/icons/gr_' + mode + '_' + newstatus + '.png" border="0" /></a>';
  else
    dojo.byId('subject_icon_' + mode).innerHTML = '<a href="#" onClick="AddSubject(sid, hid, \'' + mode + '\', 1); return false;"><img src="/images/icons/gr_' + mode + '_' + newstatus + '.png" border="0" /></a>';
  }
  
function AjaxGetQuote(sid, hid, mid, aid)
  {
  if (!hid) hid = 0;
  
  if (sid)
    {
    if (mid)
      dojo.xhrGet({url: 'ajax/getquote.php?sid=' + sid + '&hid=' + hid + '&mid=' + mid + '&aid=' + aid, load: QuoteCallback, error: AjaxError});    
    else
      dojo.xhrGet({url: 'ajax/getquote.php?sid=' + sid + '&hid=' + hid + '&aid=' + aid, load: QuoteCallback, error: AjaxError});    
    }
  }

function GridFormatCountry(value)
  {
  var cid = "" + value + "";  
  var results = cid.match(/[0-9]{1}[0-9]{4}([0-9]{4})/);  

  if (results)
    return '<img src="/images/flags/' + results[1] + '.png" style="boder: 1px solid #666;" />';

  return 1;
  }

function GridFormatMagazine(value)
  {
  var data = value.split(';;');  

  if (data[1])
    return (data[0] + '<br/><b>' + data[1] + '</b>');
  else
    return data[0];
  }
  
function GridLink(e)
  {
  if (!e.grid.store) { return; }

  var item = e.grid.getItem(e.rowIndex);

  // e.grid.rows.setOverRow(e.rowIndex);
  
  //item.customClasses += 'TestClass';
   
  //if (e.cellIndex == 2)
  //  {
  //  var url = "/magazine.php?mid=" + e.grid.store.getValue(item, "magazineid");  
  //  document.location.href=url;
  //  }
  //else
  //  {
    var url = e.grid.store.getValue(item, "url");    
    window.open(url);
  //  }  
  }

function GridQuote(e)
  {
  if (!e.grid.store) { return; }

  var item = e.grid.getItem(e.rowIndex);
  var mid = e.grid.store.getValue(item, "magazineid");  
  var aid = e.grid.store.getValue(item, "articleid");  

  articleid = aid;    

  if (quotes[aid] && (quotes[aid].length > 0))
    {
    window.clearTimeout(qtimer);  
    qtimer = window.setTimeout("QuoteCallback()", 400);
    }
  else
    {
    window.clearTimeout(qtimer);  
    qtimer = window.setTimeout("AjaxGetQuote(" + sid + ", " + hid + ", " + mid + ", " + aid + ")", 400);
    }
  }

function styleRow(row)
  {
  var mygrid = dijit.byId('aGrid');

  // console.log(row.customClasses);

  if (mygrid)
    {
    var item   = mygrid.getItem(row.index);  

    if (item)
      {
      var articleid = mygrid.store.getValue(item, "articleid");    

      if (mark_rows[articleid] > 0)
        {
        row.customClasses += ' MarkGridRow';
        }
      else
        {
        row.customClasses.replace(" MarkGridRow", "")
        //row.customClasses = '';        
        }
      }
    }
  }

function handleRowSelect(selectionModel, rowIndex, selectedRecord) 
  {
  //assuming the record has a field named 'url' or build it as you need to
  var url = selectedRecord.get('url');
  //if you want to open another window
  window.open(url);
  }

function ShowScreenshot(e, subjectid, title)
  {
  dojo.stopEvent(e);
  var viewerName = "ScreenshotDialog";
  var show = 1;

  if (!dijit.byId(viewerName))
     {
     var viewport = dijit.getViewport();
     var width = 1000; 
     var height = 700;

     var top = Math.floor((viewport.t + (viewport.h - 800)/2));       
     var margin = Math.floor(viewport.h/30);
       
     if (top - margin < viewport.t)
        {
        top = viewport.t + margin;
        }

     var myDialog = new dijit.Dialog({
         id: viewerName,
         title: "GRanks Screenshots Viewer V0.7 (" + title + ")",
         duration: 50,
         onLoad: function() {
           this._position = function() {
           var style = this.domNode.style;
           style.position = "absolute";
           style.width = width + "px";
           style.height = height + "px";           
           style.left = Math.floor((viewport.l + (viewport.w - width)/2)) + "px";
           style.top = top + "px";
           };
         dijit.byId(viewerName).show();
         }
     });
     }
  
  //dojo.fromJson()
  dijit.byId(viewerName).setContent('<div align="center"><a href="#" onClick="return swapScreenshot(' + subjectid + ', ' + (show - 1) + ');"><img src="/images/grPrevShot.png" /></a>&nbsp;&nbsp;&nbsp;<a href="#" onClick="return swapScreenshot(' + subjectid + ', ' + (show + 1) + ');"><img src="/images/grNextShot.png" /></a><br/><br/><img onclick="dijit.byId(\'' + viewerName + '\').hide()" src="/sshot.php?sid=' + subjectid + '&format=3&show=' + show + '" id="ScreenshotImage"></div>');

  return (false);
  }

function Recommendation(e, subjectid, subjectiid, title)
  {
  dojo.stopEvent(e);
  var viewerName = "RecommendationDialog";
  var show = 1;

  var dialog = dijit.byId(viewerName);

  var viewport = dijit.getViewport();
  var width = 500; 
  var height = 400;

  var top = Math.floor((viewport.t + (viewport.h - 800)/2));       
  var margin = Math.floor(viewport.h/30);
       
  if (top - margin < viewport.t)
    {
    top = viewport.t + margin;
    }
    
  dialog.style.position = "absolute";
  dialog.style.width = width + "px";
  dialog.style.height = height + "px";
  dialog.left = Math.floor((viewport.l + (viewport.w - width)/2)) + "px";
  dialog.top = top + "px";
  
  dialog.show();
  
  //dojo.fromJson()
  //dijit.byId(viewerName).setContent('<div align="center"><a href="#" onClick="return swapScreenshot(' + subjectid + ', ' + (show - 1) + ');"><img src="/images/grPrevShot.png" /></a>&nbsp;&nbsp;&nbsp;<a href="#" onClick="return swapScreenshot(' + subjectid + ', ' + (show + 1) + ');"><img src="/images/grNextShot.png" /></a><br/><br/><img onclick="dijit.byId(\'' + viewerName + '\').hide()" src="/sshot.php?sid=' + subjectid + '&format=3&show=' + show + '" id="ScreenshotImage"></div>');

  return (false);
  }

function checkNickname(e)
  {
  window.clearTimeout(checkTimer);
  checkTimer = 0;

  if (e.target.value.length > 2)
    {
    checkTimer = window.setTimeout("dojo.xhrGet({url: '/ajax/recommendcheck.php?mode=data&nickname=" + e.target.value + "&ccode=" + ccode + "', load: checkCallback, error: AjaxError})", 1000);
    }
  }

function AjaxError() {}

function checkCallback(data, ioArgs)
  {
  var info   = dojo.byId('nickname_info');  
  var button = dojo.byId('recommend_button');  
  var rdata  = dojo.byId('recommend_data');  
  var msgdiv = dojo.byId('recommend_message_div');  
  var status = dojo.byId('recommend_status');  

  status.style.display = 'none';
  
  if (data.length > 10)
    {
    var parts = data.split(';;;');
    var userid  = parts[0];
    var tuserid = parts[1];
    data = parts[2];

    rdata.value = userid + ';' + tuserid;

    if (data != info.innerHTML)
      info.innerHTML = data;    
    
    if (info.style.display == 'none')
      {
      info.style.opacity = '0';
      info.style.display = 'block';
      button.style.display = 'block';
      msgdiv.style.display = 'block';
      dojo.anim(info, { opacity: 1 }, 1000);    
      }
    }  
  else
    {
    info.innerHTML = "";    
    info.style.display = 'none';    
    button.style.display = 'none';
    msgdiv.style.display = 'none';
    }  
  }

function SendRecommendation(subjectid, hid)
  {
  var rdata  = dojo.byId('recommend_data');  
  var info   = rdata.value.split(';');
  
  var userid  = info[0];
  var tuserid = info[1];
 
  var msg     = dojo.byId('recommend_message');  
  var message = "";
  
  if (msg.value.length > 1)
    message = encodeURIComponent(msg.value);
  
  if ((userid > 0) && (tuserid > 0))
    {
    dojo.xhrGet({url: '/ajax/recommend.php?subjectid=' + subjectid + '&hid=' + hid + '&userid=' + userid + '&tuserid=' + tuserid + '&message=' + message, load: recommendCallback, error: AjaxError})
    }
  }

function recommendCallback(data, ioArgs)
  {
  var info   = dojo.byId('nickname_info');  
  var msgdiv = dojo.byId('recommend_message_div');  
  var button = dojo.byId('recommend_button');  
  var status = dojo.byId('recommend_status');  
  
  status.innerHTML = data;
  
  info.style.display = 'none';
  msgdiv.style.display = 'none';
  button.style.display = 'none';
  
  status.style.display = 'block';
  }

function swapScreenshot(subjectid, show)
  {
  var viewerName = "ScreenshotDialog";
  dijit.byId(viewerName).setContent('<div align="center"><a href="#" onClick="return swapScreenshot(' + subjectid + ', ' + (show - 1) + ');"><img src="/images/grPrevShot.png" /></a>&nbsp;&nbsp;&nbsp;<a href="#" onClick="return swapScreenshot(' + subjectid + ', ' + (show + 1) + ');"><img src="/images/grNextShot.png" /></a><br/><br/><img onclick="dijit.byId(\'' + viewerName + '\').hide()" src="/sshot.php?sid=' + subjectid + '&format=3&show=' + show + '" id="ScreenshotImage"></div>');  
  
  return (false);
  }

//dijit.Tooltip.defaultPosition=['before', 'before'];
//ShowScreenshot(e, 'http://web.gamerank.eu/sshot.php?sid=6460&format=2');

var mygrid = null;
var layout = [{
        noscroll: true,
        cells: [[
                {name: ' ', field: "countryid", width: "30px", noresize: true, formatter: GridFormatCountry},
                {name: 'Published', field: "published", width: "70px", noresize: true, formatter: GridFormatDate},
                {name: 'Magazine', field: "magazine", width: "190px", noresize: true, formatter: GridFormatMagazine},
                {name: 'Author', field: "author", width: "125px", noresize: true},
                {name: 'Rating', field: "rating", width: "90px", noresize: true, formatter: GridRating}                                
          ]
        ]
}];