/*
Скрипт предназначен для сбора рецептов на сайте http://cookie.szenprogs.ru/ для последующего их вывода на печать.
*/

collect={
// script info
  version: '1.10',
  autor: 'Szen',
  web: 'http://szenprogs.ru/',

// variables
  cname: 'rec',
  domain: 'szenprogs.ru',
  textoffA: '<img src="/img/collect/tr.gif" style="background:url(/img/collect/collectsel.jpg) no-repeat scroll bottom;" width="19" height="19" border="0" alt="sel" align="middle"> <span style="display:inline-block;width:80px;text-align:left;">Снять отметку<\/span>',
  textonA: '<img src="/img/collect/tr.gif" style="background:url(/img/collect/collectsel.jpg) no-repeat scroll top;" width="19" height="19" border="0" alt="sel" align="middle"> <span style="display:inline-block;width:80px;text-align:left;">Отметить<\/span>',
  textoffB: '<img src="/img/collect/tr.gif" style="background:url(/img/collect/collectsel.jpg) no-repeat scroll bottom;" width="19" height="19" border="0" alt="sel" align="middle">',
  textonB: '<img src="/img/collect/tr.gif" style="background:url(/img/collect/collectsel.jpg) no-repeat scroll top;" width="19" height="19" border="0" alt="sel" align="middle">',
  textprn: '<img src="/img/collect/collectprint.jpg" width="19" height="19" alt="prn" border="0" align="middle">', 
  titleprn: 'Версия для печати',
  titleon: 'Добавить в избранное',
  titleoff: 'Удалить из избранного',
  idcap: '#messHeadLnk',
  iding: '#messIngrid',
  idrec: '#messRecept',
  idimg: '#messScr img',
  idframe: '#collframe',
  idblock: '#collblock',
  tpall: 0,
  tphead: 1,
  tpbody: 2,
  tpfoo: 3, 

  prndot: function(title,caption,ingrid,recept,comment,img,type){
    if(img==undefined || !img) img=''; 
    if(type==undefined) type=this.tpall;
    var s='';
    if(type==this.tpall || type==this.tphead) s+='<html><head><title>'+title+'<\/title><\/head><body style="font-size:10pt;padding:10px;margin:0;color:#000000;background:#ffffff;"><div><a href="javascript:window.print();">Печать<\/a> &middot; <a href="javascript:window.close();">Закрыть<\/a><\/div><hr>';
    if(type==this.tpall || type==this.tpbody) s+='<div style="page-break-inside:avoid;"><div style="font-size:12pt;font-weight:bold;padding-bottom:10px;">'+caption+'<\/div><table width="780" border="0"><tr><td width="220" style="padding:5px 10px 5px 5px;vertical-align:top;font-size:9pt;">'+((img!='')?'<img src="'+img+'" width="150" style="border:2px solid #cccccc;padding:1px;"><br>':'')+ingrid+'<\/td><td style="padding:5px;vertical-align:top;text-align:justify;">'+recept+'<\/td><\/tr><tr><td style="text-align:left;vertical-align:bottom;font-weight:bold;font-size:8pt;">cookie.szenprogs.ru<br>кулинария для всех<\/td><td style="text-align:right;vertical-align:bottom;font-weight:bold;font-size:8pt;">'+comment+'<\/td><\/tr><\/table><hr><\/div>';
    if(type==this.tpall || type==this.tpfoo) s+='<div><a href="javascript:window.print();">Печать<\/a> &middot; <a href="javascript:window.close();">Закрыть<\/a><\/div><\/body><\/html>';
    return s;
  },

  listitemdot: function(url,cap){
    var s='<table width="100%" border="0"><tr><td width="175"><\/div> <a href="'+url+'">'+cap+'<\/a><\/td><td align="right"><a href="javascript://" onclick="collect.delitem(\''+url+'\',\''+cap+'\');" title="Удалить из избранного"><img src="/img/collect/collectdel.jpg" width="16" height="16" alt="D" border="0"><\/a><\/td><\/tr><\/table>';
    return s;
  },

// inside functions
  setCookie: function(name,value,exp_y,exp_m,exp_d,path,domain,secure){
    var cookie_string=name+"="+escape(value); 
    if(exp_y){
      var expires=new Date(exp_y,exp_m,exp_d);
      cookie_string+="; expires="+expires.toGMTString();
    } 
    if(path) cookie_string+="; path="+escape(path); 
    if(domain) cookie_string+="; domain="+escape(domain); 
    if(secure) cookie_string+="; secure"; 
    document.cookie=cookie_string;
  },

  getCookie: function(cookie_name){
    var results=document.cookie.match('(^|;) ?'+cookie_name+'=([^;]*)(;|$)'); 
    if(results) return (unescape(results[2])); else return null;
  },

  arrtocookie: function(arr){ 
    if(arr.length==0) s='';
    if(arr[0]==undefined || arr[0]=='') s='';
    var s='';
    for(var i=0;i<arr.length;i++){
      for(var j=0;j<arr[i].length;j++){
        s+=arr[i][j];
        if(j<arr[i].length-1) s+=',';
      }
      if(i<arr.length-1) s+='%';
    }
    this.setCookie(this.cname,s,2020,12,31,'\/',this.domain,null);
  },

  cookietoarr: function(){
    var s=this.getCookie(this.cname);
    if(s==undefined) return [];
    if(s=='') return [];
    arr=new Array();
    var x=s.split('%');
    for(var i=0;i<x.length;i++){
      arr[i]=x[i].split(','); 
    }
    return arr;
  },

//outside functions
  printwin: function(htm){
    var win=window.open('','','width=800,toolbar=0,location=0,directories=0,menubar=0,status=0');
    win.document.open();
    win.document.write(htm);
    win.document.close();
  },

  itemprint: function(){
    var cap=$(this.idcap).text();
    var ing=$(this.iding).html();
    var rec=$(this.idrec).html();
    if($(this.idimg).length!=0) var img=$(this.idimg).attr('src'); else var img='';
    var s=this.prndot('Версия для печати: '+cap,cap,ing,rec,'',img,this.tpall);
    this.printwin(s);
    return s;
  },

  set: function(url,cap,el){
    arr=this.cookietoarr();
    arr[arr.length]=new Array(url,cap);
    collect.arrtocookie(arr); 
    $(el).html(($(el).attr('class')=='collectlinkA')?this.textoffA:this.textoffB); 
    $(el).attr('title',this.titleoff);
    el.onclick=function anonymous(){collect.del(url,cap,el);};
    this.showlist();
  },

  del: function(url,cap,el){
    arr=this.cookietoarr();
    for(var i=0;i<arr.length;i++){
      if(arr[i][0]==url) arr.splice(i,1); 
    } 
    if(arr.length==1 && arr[0]=='') arr=[];
    collect.arrtocookie(arr); 
    $(el).html(($(el).attr('class')=='collectlinkA')?this.textonA:this.textonB); 
    $(el).attr('title',this.titleon);
    el.onclick=function anonymous(){collect.set(url,cap,el);};
    this.showlist();
  },

  delall: function(){
    arr=this.cookietoarr();
    $('.collectlinkA, .collectlinkB').each(function(){
      $(this).html(($(this).attr('class')=='collectlinkA')?collect.textonA:collect.textonB); 
      $(this).attr('title',collect.titleon);    
      var url=$(this).attr('rel');
      var cap='';
      for(var i=0;i<arr.length;i++){
        if(arr[i][0]==url){
          cap=arr[i][1];
          break;
        }
      }
      if(cap!='') this.onclick=function(){collect.set(url,cap,this);};
    });
    this.arrtocookie([]);
    this.showlist();
  },

  exist: function(url){ 
    arr=this.cookietoarr();
    for(var i=0;i<arr.length;i++){
      if(arr[i][0]==url) return true;
    }
    return false;
  },

  showbarA: function(url,cap){
    if(url==undefined || cap==undefined) return false;
    if(url=='' || cap=='') return false;
    b=this.exist(url);
    document.write('<a href="javascript://" rel="'+url+'" class="collectlinkA" onclick="collect.'+(b?'del':'set')+'(\''+url+'\',\''+cap+'\',this);" title="'+(b?this.titleoff:this.titleon)+'">'+(b?this.textoffA:this.textonA)+'<\/a> &middot; <a href="javascript://" onclick="collect.itemprint();" title="'+this.titleprn+'">'+this.textprn+'<\/a>');
    return true;
  },

  showbarB: function(url,cap){
    if(url==undefined || cap==undefined) return false;
    if(url=='' || cap=='') return false;
    if(url.indexOf('//')!=-1){
      url=url.substr(url.indexOf('//')+2);
      url=url.substr(url.indexOf('/'));
    }
    b=this.exist(url);
    document.write('<a href="javascript://" rel="'+url+'" class="collectlinkB" onclick="collect.'+(b?'del':'set')+'(\''+url+'\',\''+cap+'\',this);" title="'+(b?this.titleoff:this.titleon)+'">'+(b?this.textoffB:this.textonB)+'<\/a>');
    return true;
  },

  delitem: function(url,cap){
    arr=this.cookietoarr();
    for(var i=0;i<arr.length;i++){
      if(arr[i][0]==url) arr.splice(i,1); 
    } 
    if(arr.length==1 && arr[0]=='') arr=[];
    collect.arrtocookie(arr);
    $('.collectlinkA, .collectlinkB').each(function(){
      var s=$(this).attr('rel');
      if(s.indexOf(url)!=-1){
        $(this).html(($(this).attr('class')=='collectlinkA')?collect.textonA:collect.textonB); 
        $(this).attr('title',collect.titleon);
        this.onclick=function(){collect.set(url,cap,this);};
      }
    });
    this.showlist();
  },

  loaditems: function(dom,id,arr){
    var pos=id+1;
    $('#collectWaitNum').html(pos);
    if(id==0) dom=this.prndot('Версия для печати: избранное','','','','','',this.tphead);
    if(id==arr.length){
      dom+=this.prndot('','','','','','',this.tpfoo);
      _uWnd.close('collectWait');
      this.printwin(dom);
      return true;
    }
    $.get(arr[id][0],function(data){
      var cap=$(data).find(collect.idcap).text();
      var rec=$(data).find(collect.idrec).html();
      var ing=$(data).find(collect.iding).html();
      var img=$(data).find(collect.idimg).attr('src');
      dom+=collect.prndot('',cap,ing,rec,'Рецепт '+pos+' из '+arr.length,img,collect.tpbody);
      id++;
      collect.loaditems(dom,id,arr);
    });
  },

  listprint: function(){
    arr=this.cookietoarr(); 
    if(arr.length!=0){
      new _uWnd('collectWait','',400,200,{autosize:0,header:0,modal:1,resize:0,nomove:1,center:1,align:'center',waitimages:1},'<div style="margin-top:12px;font-size:12pt;">Подождите немного!<br>Идет формирование списка для печати...<br><br><img src="/img/sys/wait.gif" width="48" height="48" alt="Идет загрузка..." border="0"><br><br>Обрабатывается рецепт № <span id="collectWaitNum" style="font-weight:bold;">1<\/span> из <span style="font-weight:bold;">'+arr.length+'<\/span>.<div style="font-size:10pt;"><a href="">Отменить<\/a><\/div><\/div>');
      this.loaditems('',0,arr);
    }else{
      window.alert('Избранных рецептов не найдено!');
    }
  },

  showlist: function(){
    arr=this.cookietoarr(); 
    if(arr.length!=0){
      var s='';
      for(var i=0;i<arr.length;i++){
        s+=this.listitemdot(arr[i][0],arr[i][1]); 
      }
      s+='<br><div style="text-align:center;font-size:10pt;"><a href="javascript://" onclick="collect.listprint();" title="Вывод на печать">На печать<\/a> &middot; <a href="javascript://" onclick="collect.delall();" title="Удалить все из избранного">Удалить все<\/a><\/div>';
      $(this.idframe).html(s);
      $(this.idblock).show('normal');
    }else{
      $(this.idblock).hide('normal'); 
      $(this.idframe).html(''); 
    }
  }
}

$(function(){
  collect.domain=document.location.host;
  collect.showlist();
});
