//
//                Copyright (c) 2003 Smartlink Corp.
//                       All rights reserved.
//

//
// Definitions
//
var CROSS_DOMAIN   = false; // true;
var DECODER_PATH   = ""; "http://localhost/decoder_local/";
var MIME_ENCODING  = "base64";
var BROWSER_IE     = (window.showModalDialog ? true : false);
var ASP_EXT        = ".asp";
var MAX_TEXT_LEN   = 655;
var decoder        = null;
var CLIENT_LN      = typeof(RES_LN) != 'undefined' && RES_LN ? RES_LN : "ru";
//////////////////////////////////////////////////////////////////////////////
//
// Decoder (client)
//
   
function invokeDecoder (ctrl) {
   closeDecoder ();
   if (CROSS_DOMAIN && !DECODER_PATH) {
      alert ("DECODER_PATH should be set for CROSS_DOMAIN.");
      return;
   }

   var ctrlName = "";
   if (typeof (ctrl) == "string") {
      ctrlName = ctrl;
      ctrl = findCtrlEx (ctrl);
   }
   else {
      ctrlName = ctrl.name;
   }
   if (!ctrl) {
      alert ("Cannot find text to decode.");
      return;
   }
   decoder = { ctrl : ctrl, text : ctrl.value };
      
   // Build query string
   var query = "";
   if (!CROSS_DOMAIN)
      query = setQueryParam (query, "ctrl", ctrlName);
   if(CLIENT_LN)
      query = setQueryParam (query, "ln", CLIENT_LN);
   // Build href
   var href = "";
   if (CROSS_DOMAIN)
      href += expandFilebyLang(DECODER_CLIENT, CLIENT_LN);
   else
      href += DECODER_PATH + "decoder" + ASP_EXT;
   href += "?" + query;
   
   if (BROWSER_IE) {
      var args = { opener: this };
      var features = "dialogWidth:405px;dialogHeight:355px;scroll:no;help:no;status:no;";
      window.showModalDialog (href, args, features);
      decoder = null;
   }
   else {
      var features = "width=422,height=320,toolbar=no,status=no,menubar=no,directories=no,resizable=no,modal=yes";
      decoder.dialog = window.open (href, "decoder", features);
      if (decoder.dialog.closed) // modal dialog
         decoder = null;
   }
}

function closeDecoder () {
   if (decoder) {
      if (decoder.dialog && !decoder.dialog.closed)
         decoder.dialog.close ();
      decoder = null;
   }
}

// Encoding ------------------------------------------------------------------
function encodeText (decoder, maxLen, showAlert) {
   var MAX_URL_LEN = 1800; // max URL length is 2048
   var textLength = decoder.text.length;
   var len = Math.min (decoder.text.length, MAX_URL_LEN);
   if (maxLen && len > maxLen)
      len = maxLen;

   var encodedText = "", text = decoder.text;
   while (true) {
      text = truncStrByWord (text, len);
      encodedText = text;
      if ("base64" == MIME_ENCODING)
         encodedText = base64Encode (utf8Encode (encodedText));
      encodedText = escEncode (encodedText);
      if (encodedText.length <= MAX_URL_LEN || len <= 300)
         break;
      len = Math.floor ((len - 1) / 20) * 20;
   }
   if (text.length != textLength) {
      if (showAlert)
         window.alert ("Only " + len + " characters can be decoded.");
   }
   if ("base64" == MIME_ENCODING)
      encodedText += "&charset=utf-8&mime=base64";
   return encodedText;
}

// Helper functions ----------------------------------------------------------
function findCtrlEx (ctrlName, where) {
   var names = ctrlName.split ("/", 2);
   ctrlName  = names.length > 1 ? names [1] : names [0];
   var frame = names.length > 1 ? names [0] : "";
      
   if (!where)
      where = window;
         
   var wnd = (where.document ? where : null);
   var doc = (where.document ? where.document : where);
   if (frame) {
      if (wnd && wnd.frames [frame]) {
         wnd = wnd.frames [frame];
         doc = wnd.document;
      }
      else if (doc && doc.frames [frame]) {
         wnd = doc.frames [frame];
         doc = wnd.document;
      }
      else {
         wnd = null;
         doc = null;
      }
   }
      
   var ctrl = null;
   if (ctrlName == '?' || ctrlName == "#range") { // ie only
      if (doc && doc.selection) {
         var range = doc.selection.createRange ();
         ctrl = { name: "#range", value: range.text, range: range };
         if (ctrlName == "#range" || ctrl.value)
            return ctrl;
      }
      if (wnd && wnd.event && wnd.event.srcElement && wnd.event.srcElement.value)
         ctrl = wnd.event.srcElement;
      return ctrl;
   }
   
   if (doc && doc.getElementById)
      ctrl = doc.getElementById (ctrlName);
   if (!ctrl && doc && doc.forms) {
      for (var i = 0; i < doc.forms.length; i++) {
         var ctrl = doc.forms [i] [ctrlName];
         if (ctrl)
            break;
      }
   }
      
   return ctrl;
}
   
function setQueryParam (query, param, value) {
   return query + (query ? "&" : "") + param + "=" + value;
}

function truncStrByWord (str, length) {
   if (str.length > length) {
      str = str.substring (0, length + 1);
      str = str.replace (new RegExp ("\\S*$"), "");
      str = str.substring (0, length);
   }
   return str;
}

function expandFilebyLang(name, lang)
{
	if(lang == "")
		return name;
	var arr = name.split(".");
	return arr[0] + "_" + lang + "." + arr[1];
}
