function DeqwasScript() {}

DeqwasScript.prototype.getSafeProperty = function(propStr) {
  return Object.prototype.hasOwnProperty.call(window, propStr) ? window[propStr] : "" ;
}

DeqwasScript.prototype.setCookie = function(key, val, path, expires) {
  path = path || '/';
  var t = new Date();
  t.setTime(t.getTime()+(1000*60*60*24*365));
  var expt = t.toGMTString();
  expires = expires || expt;
  var cookie = [ key +'='+ escape( val ),
             'path' +'='+ path,
             'expires' +'='+ expires
           ].join(';');
  document.cookie = cookie;
};

DeqwasScript.prototype.deleteCookie = function(key, path) {
  var comming_time = new Date();
  comming_time.setFullYear(comming_time.getFullYear() - 1);
  var expires = comming_time.toGMTString( ) + ";";
  this.setCookie(key, '', path, expires);
};

DeqwasScript.prototype.getCookie = function(key) {
  var c_key = key+"=";
  var val = null;
  var c = document.cookie+";";
  var st = c.indexOf(c_key);
  if (st != -1){
    var ed = c.indexOf(";",st);
    val = unescape(c.substring(st+c_key.length,ed));
  }
  return val;
};

DeqwasScript.prototype.createRAKey = function(codeversion, custid) {
  var date = new Date();

  var year = date.getFullYear();
  var month = date.getMonth() + 1;
  var day = date.getDate();
  var hour = date.getHours();
  var min = date.getMinutes();
  if (month < 10) { month = "0" + month; }
  if (day < 10) { day = "0" + day;	}
  if (hour < 10) { hour = "0" + hour; }
  if (min < 10) { min = "0" + min;	}

  var key = "ra" + min + hour + year + month + day + codeversion + custid;
  return key;
};

DeqwasScript.prototype.getRandomID = function() {
  var n;
  var str = "";
  var symz = ['1','2','3','4','5','6','7','8'];
  for( var i = 0 ; i < 18 ; i++ ) {
    n = Math.floor(Math.random() * symz.length);
    str += symz[n];
  }
  return str;
};

DeqwasScript.prototype.getRAKey = function(codeversion, custid) {
  var ptn = "ra[0-9]{12}" + codeversion + custid;
  var rexp = new RegExp(ptn);

  var cs = document.cookie+";";
  var keys = cs.match(rexp);

  return keys;
};

DeqwasScript.prototype.getXmlSrc = function(custid, userid, itemid) {
  var target = [this.baseXmlUrl, custid].join('/');

  if (itemid.length != 0) {
    target += "/item/" + itemid + ".xml";
  } else {
    if (userid.length != 0) {
      target += "/user/" + userid + ".xml";
    } else {
      target += "/default.xml";
    }
  }

  return target;
};

DeqwasScript.prototype.getXslType = function(custid, view) {
  return custid + "/" + view.split(",")[0];
};

DeqwasScript.prototype.getStaticXslType = function(custid, view) {
  return this.getXslType('s/'+custid, view);
};

DeqwasScript.prototype.setRACookie = function(codeversion, custid) {
  var randomKey = this.getRAKey(codeversion, custid);
  var randomValue = this.getCookie(randomKey);

  if( !randomValue ) {
    randomKey = this.createRAKey(codeversion,custid);
    var ptn = "ra[0-9]{12}" + codeversion + custid;
    var rexp = new RegExp(ptn);

    var param = location.search.slice(1);
    var params = param.split("&");
    for (var i=0; i < params.length; i++) {
      var pk = params[i].split("=");
      if (pk[0].match(rexp)) {
        randomValue = pk[1];
      }
    }

    if (randomValue == null) {
      randomValue = this.getRandomID();
    }
  }

  this.setCookie(randomKey, randomValue );
};

DeqwasScript.prototype.getIframeSrc = function() {
  var paramArr = [];
  for (var key in this.params) {
    if (this.params[key]) {
      this.params[key] = (typeof this.params[key] == 'string') ? this.params[key].replace(/[\f\n\r\t\v]/g,'') : this.params[key];
      paramArr.push(key + "=" + encodeURIComponent(this.params[key]));
    }
  }
  var iframeSrc = this.targetUrl + "?" + paramArr.join("&");
  return iframeSrc;
}

DeqwasScript.prototype.getIframeStyle = function() {
  var iframeStyle = "";
  for (var attr in this.style) {
    iframeStyle += [attr, ':', this.style[attr], ';'].join(' ');
  }
  return iframeStyle;
}

DeqwasScript.prototype.iframeOptions = {
  frameBorder: "0",
  scrolling: "no"
};

DeqwasScript.prototype.getIframeOptions = function() {
  var iframeOption = "";
  for (var attr in this.iframeOptions) {
    iframeOption += [attr, "=", this.iframeOptions[attr]].join('') +" ";
  }
  return iframeOption;
};

DeqwasScript.prototype.getIframeText = function() {
  var iframeName = this.iframeName || 'deqwas_' + this.functionId;
  var iframeText = ["<iframe src=", this.getIframeSrc(), " style='", this.getIframeStyle(), "' ",this.getIframeOptions()," name='", iframeName, "'></iframe>"].join('');
  
  return iframeText;
};

DeqwasScript.prototype.checkDebug = function() {
  if(location.hash && location.hash.match("deqwasdebug")) {
    this.targetUrl = location.protocol+"//r.deqwas.net/s/deqwas/debug.html";
    var params = this.variables;
    var defaultParams = this.defaultParams();
    for(var attr in this.params) {
      if(this.params[attr] && !defaultParams[attr]) {
        params[attr] = this.params[attr];
      }
    }
    this.params = params;
    this.style = {
      width: '600px',
      height: '350px'
    };
    this.iframeOptions = {
      frameBorder: 0
    };
  }
};

DeqwasScript.prototype.appendIframeToElement = function(elementID) {
  this.checkDebug();
  
  var iframeName = this.iframeName || 'deqwas_' + this.functionId;

  var iframe = document.createElement('iframe');
  iframe.src = this.getIframeSrc();
  iframe.style.cssText = this.getIframeStyle();
  for(var attr in this.iframeOptions) {
    iframe[attr] = this.iframeOptions[attr];
  }
  iframe.name = iframeName;

  if(document.getElementById(elementID)) {
    document.getElementById(elementID).appendChild(iframe);
  }
}

DeqwasScript.prototype.insertIframe = function() {
  this.checkDebug();
  document.write(this.getIframeText());
  document.close();
}

DeqwasScript.prototype.variables = {
  cid: "",
  view: "",
  uid: "",
  iid: "",
  title: "",
  img: "",
  info: "",
  val: "",
  category: "",
  caption: ""
};

DeqwasScript.prototype.defaultParams = function() {
  params = {
    t:         document.title,
    l:         location.href,
    fc:        this.functionId,
    cid:       this.variables.cid,
    uid:       this.variables.uid,
    title:     this.variables.title,
    iid:       this.variables.iid,
    img:       this.variables.img,
    info:      this.variables.info,
    val:       this.variables.val,
    category:  this.variables.category,
    caption:   this.variables.caption
  }
  params[this.getRAKey(this.codeversion, this.variables.cid)] = this.getCookie(this.getRAKey(this.codeversion, this.variables.cid));

  return params;
};

DeqwasScript.prototype.baseXmlUrl = "http://r.deqwas.net";
DeqwasScript.prototype.targetUrl = "http://r.deqwas.net/ra/rframe3.aspx";
DeqwasScript.prototype.codeversion = "xxx";
DeqwasScript.prototype.functionId = "";
DeqwasScript.prototype.style = {
  width: '0px',
  height: '0px'
};

///////////////////////////////////////////////////////////////////////////////
var deqwasScript = new DeqwasScript();

deqwasScript.variables.cid = deqwas_cid;
deqwasScript.variables.view = "item.xsl";
deqwasScript.variables.uid = deqwas_uid;
deqwasScript.variables.iid = deqwas_iid;
deqwasScript.variables.title = deqwas_title;
deqwasScript.variables.img = deqwas_img;
deqwasScript.variables.info = "item";

deqwasScript.baseXmlUrl = "";
deqwasScript.setRACookie(deqwasScript.codeversion, deqwasScript.variables.cid);

deqwasScript.targetUrl = "http://r.deqwas.net/ra/deqwas/universal/collection.aspx";

deqwasScript.functionId ="r";
deqwasScript.iframeName = "deqwas_r";
deqwasScript.style.width = "296px";
deqwasScript.style.height = "440px";

deqwasScript.params = deqwasScript.defaultParams();
deqwasScript.params.xml = deqwasScript.getXmlSrc(deqwasScript.variables.cid, deqwasScript.variables.uid, deqwasScript.variables.iid);
deqwasScript.params.type = deqwasScript.getStaticXslType(deqwasScript.variables.cid, deqwasScript.variables.view);
deqwasScript.params.sub01 = deqwas_title;

deqwasScript.insertIframe();


