
var QuickMarkJsonUrl = 'http://diy.quickmark.com.tw/api/json/';
//var QuickMarkJsonUrl = 'http://beta/DIY/api/json/';

var QuickMarkJson;
var QuickMarkJsonAfterPlotEvent = null;
var QuickMarkJsonB64Serial='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789,.';
var QuickMarkJsonTimeOutID;

function QuickMarkJsonOnload() {

      if(QuickMarkJsonTimeOutID)
         window.clearTimeout(QuickMarkJsonTimeOutID);

      if(QuickMarkJson.stat=='ok') {
         if(QuickMarkJson.forID!='null')
            QuickMarkJsonPlotToDiv(QuickMarkJson.forID,QuickMarkJson.mSize,QuickMarkJson.compress);
      }
      else {
         if(QuickMarkJson.forID)
            document.getElementById(QuickMarkJson.forID).innerHTML = "<b>Error: </b>"+QuickMarkJson.notes;
          else
            alert("Error:\n\n"+QuickMarkJson.notes);
      }

      if(QuickMarkJsonAfterPlotEvent) QuickMarkJsonAfterPlotEvent();

}

function QuickMarkJsonPlotToDiv(htmlFor,msize,strCompress) {

   var attachHtml = (QuickMarkJsonPlotToDiv.arguments.length == 4)?QuickMarkJsonPlotToDiv.arguments[3]:'';

   var oHtmlFor = document.getElementById(htmlFor);

   var barcodeWidth = QuickMarkJsonB64Serial.indexOf(strCompress.substr(0,1)) * 64 +
                      QuickMarkJsonB64Serial.indexOf(strCompress.substr(1,1));

   strCompress = strCompress.substr(2);

   var strBit = strBit = strCompress.replace(/(.)/g,function ($1) {
      var v = QuickMarkJsonB64Serial.indexOf($1);
      var str6bit = '';
      for(var i=32;i>0;i>>=1) str6bit += (v & i)?'1':'0';
      return(str6bit);
   	});
   strBit = strBit.replace(RegExp("(.{"+barcodeWidth+"})","g"),function ($1) { return $1+"\n"});
   strBit = strBit.replace(/\n0{0,6}$/,'');
   
   var arrBit = strBit.split(/\r?\n/);

   if(arrBit[arrBit.length-4].indexOf('0000')==0 &&
      arrBit[arrBit.length-3].indexOf('1110')==0 &&
      arrBit[arrBit.length-2].indexOf('1010')==0 &&
      arrBit[arrBit.length-1].indexOf('1110')==0 ) {
      
      arrBit[arrBit.length-3] = "'Q'"+arrBit[arrBit.length-3].substr(3);
      arrBit[arrBit.length-2] = arrBit[arrBit.length-2].substr(3);
      arrBit[arrBit.length-1] = arrBit[arrBit.length-1].substr(3);
   }

   strBit = arrBit.join("\n");
	strBit = strBit.replace(/^(.+)$/mg,"<tr>$1</tr>");
	strBit = strBit.replace(/(\d)/mg,"<td bgcolor='$1' width="+msize+" height="+msize+"></td>");
	strBit = strBit.replace(/'0'/mg,"white");
	strBit = strBit.replace(/'1'/mg,"black");
   strBit = strBit.replace(/'Q'/mg,'<td ROWSPAN=3 COLSPAN=3><img src="'+QuickMarkJsonUrl+'Q/'+msize+'.png" border=0 width='+(msize*3)+' height='+(msize*3)+'></td>');
	
	strBit = '<img src="'+QuickMarkJsonUrl+'space.gif" border=0 height=0 width='+(arrBit[0].length * msize)+'><br>' +
	         '<table border=0 cellpadding=0 cellspacing=0 style="font-size:1px;table-layout:fixed;">' +
	         strBit+'</table>';
	
   oHtmlFor.innerHTML = strBit+attachHtml;

}


function QuickMark(){

   this.htmlFor = null;
   this.type = arguments.length>1?arguments[1]:'quickmark';

   if(arguments.length>0) this.htmlFor = arguments[0];

   this.content = "";
   this.char    = "utf8";
   this.ecc     = "M";
   this.ver     = 0;
   this.format  = "png";
   this.msize   = 4;
   this.CryptKey = '';
   this.PrivateID = '';
   this.IsPrivate = false;
   this.plotType = 'HTML';
   this.dmEnc = '';

   this.plot = function() {

      QuickMarkJsonAfterPlotEvent = this.onAfterPlot;
      
      if(arguments.length>0) this.content = arguments[0];

      var oHtmlFor = document.getElementById(this.htmlFor);
 
      if(this.type.match(/^qm.*/i)) this.type = "quickmark";
      if(this.type.match(/^qr.*/i)) this.type = "qrcode";
      if(this.type.match(/^dm.*/i)) this.type = "datamartix";
 
 
      var arg = 'method='+ this.type
           + '&content=' + encodeURIComponent(this.content)
           + '&char=' + this.char
           + '&ecc=' + this.ecc
           + '&ver=' + this.ver
           + '&format=' + this.format
           + '&msize=' + this.msize
           + '&for=' + this.htmlFor;
           
      if(this.CryptKey != '') arg += ('&CryptKey=' + encodeURIComponent(this.CryptKey));
      if(this.PrivateID != '') arg += ('&PrivateID=' + encodeURIComponent(this.PrivateID));
      if(this.IsPrivate) arg += '&IsPrivate=true';
      if(this.dmEnc != '') arg += ('&dmenc=' + encodeURIComponent(this.dmEnc));

      if(this.htmlFor == null) {
         QuickMarkJson = null;
         var sObj = document.createElement('script');
         sObj.language = 'javascript';
         sObj.type = 'text/javascript';
         sObj.src = QuickMarkJsonUrl+'?'+arg+'&response=compress';
         document.body.appendChild(sObj);
      }
      else if(this.plotType == 'HTML') {
         QuickMarkJsonTimeOutID = window.setTimeout("alert('Server Error: Timeout!')", 10000);
         oHtmlFor.innerHTML = '<img src="'+QuickMarkJsonUrl+'loading.gif" width=32 height=32/>';
         QuickMarkJson = null;
         var sObj = document.createElement('script');
         sObj.language = 'javascript';
         sObj.type = 'text/javascript';
         sObj.src = QuickMarkJsonUrl+'?'+arg+'&response=compress';
         //sObj.src = QuickMarkJsonUrl+'?'+arg;
         document.body.appendChild(sObj);
      }
      else if(this.plotType == 'JsonSource') {
         location.href = QuickMarkJsonUrl+'?'+arg+'&response=compress';
      }
      else if(this.plotType == 'XML') {
         location.href = QuickMarkJsonUrl+'?'+arg+'&response=XML';
      }
      else if(this.plotType == 'image') {
         oHtmlFor.innerHTML = '<img src="'+QuickMarkJsonUrl+'?'+arg+'&response=direct"/>';
      }
      else if(this.plotType == 'newpage') {
         location.href= QuickMarkJsonUrl+'?'+arg+'&response=direct';
         
      }


   }

}


function QuickMarkJsonDownload(imageName,imageFormat,msize,strCompress) {
   location.href= QuickMarkJsonUrl+'?method=download&file='+imageName+'&formate='+imageFormat+'&msize='+msize+'&content='+strCompress;
}


function QuickMarkJsonPlotToImg(htmlFor,msize,strCompress) {

   var attachHtml = (QuickMarkJsonPlotToImg.arguments.length == 4)?QuickMarkJsonPlotToImg.arguments[3]:'';

   var oHtmlFor = document.getElementById(htmlFor);

   var barcodeWidth = QuickMarkJsonB64Serial.indexOf(strCompress.substr(0,1)) * 64 +
                      QuickMarkJsonB64Serial.indexOf(strCompress.substr(1,1));

   var url = QuickMarkJsonUrl+'?method=view&formate=png&msize=1&content='+strCompress;
   
   oHtmlFor.innerHTML = '<img lowsrc="img/space.gif" src="'+url+'" width='+(msize*(barcodeWidth+8))+' border=0>'+attachHtml;
}