var browser = new function(){
  this.isChrome = (navigator.userAgent.match(/chrome/gi))?true:false;
  this.isOpera = (window.opera&&navigator.userAgent.match(/opera/gi))?true:false;
  this.isIE = (!this.isOpera&&document.all&&navigator.userAgent.match(/msie/gi))?true:false;
  this.isSafari = (!this.isIE&&navigator.userAgent.match(/safari/gi))?true:false;
  this.isGecko = (!this.isIE&&navigator.userAgent.match(/gecko/gi))?true:false;
  this.isFirefox = (!this.isIE&&navigator.userAgent.match(/firefox/gi))?true:false;
};

// get a XMLHttpRequest instance
function getHttpRequest(){
  httpRequest = null;
  try{		// Firefox, Opera 8.0+, Safari
    httpRequest = new XMLHttpRequest();
  }catch (e){
    try{	// Internet Explorer
      httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
    }catch (e){
      httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
    }
  }
  return httpRequest;
}

function getScrollTop(){
  return (document.body.scrollTop)?document.body.scrollTop:document.documentElement.scrollTop;
}

// get the document root node
function getRoot(){
  if(document.documentElement.scrollTop || document.body.offsetHeight == document.body.clientHeight){
    return document.documentElement;
  }else{
    return document.body;
  }
}

// show add new sayloud page(sayloud1_new.php, use div)
globalDialog = null;  // ie's settimeout cant pass any argument, so need a global variant
function popupSayLoud(){
  var request = getHttpRequest();
  if(request == null){
    alert('can\'t create HttpRequest instance!');
    return;
  }

  var root = getRoot();
  var mask = document.createElement('div');
  mask.id = 'maskdiv';
  mask.style.position = 'absolute';
  mask.style.width = root.scrollWidth + 'px';
  mask.style.height = root.scrollHeight + 'px';
  mask.style.left = '0px';
  mask.style.top = '0px';
  mask.style.backgroundColor = '#333333';
  mask.style.zIndex = 98;
  if(browser.isIE)
    mask.style.filter = 'alpha(opacity=50)';
  else
    mask.style.opacity = '0.5';

  var dialog = document.createElement('div');
  dialog.id = 'dialogdiv';
  dialog.style.position = 'absolute';
  dialog.style.width = '550px';

  var height = 400;
  if(browser.isOpera) height = 330;
  else if(browser.isSafari || browser.isChrome) height = 380;
  dialog.style.height = height + 'px';

  var styleTop = Math.floor(root.clientHeight / 2) - (parseInt(dialog.style.height) / 2) + root.scrollTop + 'px';

  dialog.style.left = Math.floor(root.clientWidth / 2) - (parseInt(dialog.style.width) / 2) + 'px';

  if(browser.isOpera) dialog.style.top = document.body.scrollTop + 50 + 'px';
  else dialog.style.top = styleTop;

  dialog.style.backgroundColor = 'white';
  dialog.style.borderStyle = 'outset';
  dialog.style.borderWidth = '1px';
  dialog.style.padding = '5px'
  dialog.style.zIndex = 99;

  globalDialog = dialog;

  request.onreadystatechange = function(){
    switch(request.readyState){
    case 4:
      var targetdiv = document.getElementById('dialogdiv');
      if(request.status == 200){
        if(request.responseText == 'TO_LOGIN'){
          location.href = 'https://user.gamer.com.tw/login.php';
        }else{
          if(browser.isIE) globalDialog.innerHTML = request.responseText;
          else targetdiv.innerHTML = request.responseText;
        }
      }else{
        alert("http response code error!");
      }
    break;
    default:
    }
  };

  request.open("GET","http://home.gamer.com.tw/sayloud1_new.php",true);
  request.send(null);

  document.body.appendChild(mask);
  document.body.appendChild(dialog);

  //if(!(browser.isSafari || browser.isOpera))
  divRefresh();
}

// 讓 popup window 永遠置中
function divRefresh(){
  var root = getRoot();
  if(globalDialog){
    if(!browser.isOpera){
      globalDialog.style.top = Math.floor(root.clientHeight / 2) - (parseInt(globalDialog.style.height) / 2) + getScrollTop() + 'px';
    }else{
      globalDialog.style.top = getScrollTop() + 50 + 'px';
    }
  }

  /*if(browser.isIE)
    window.setTimeout(divRefresh, 50);
  else
    window.setTimeout('divRefresh()',50);*/
}

// destroy elements which create from createElement
function destroyPopup(){
  var div = document.getElementById('dialogdiv');
  if(div) document.body.removeChild(div);
  globalDialog = null;

  div = document.getElementById('maskdiv');
  if(div) document.body.removeChild(div);
}

// check user input data and post to sayloud2_new.php
function check(){
  var request = getHttpRequest();
  if(!request){
    alert('can\'t create HttpRequest instance!');
    return;
  }

  var frm = document.frm;

  /*if(false == document.frm.elements['pay'][0].checked && 
    false == document.frm.elements['pay'][1].checked){
    alert("請選擇費用");
  return;
  }*/
  if(false == document.frm.elements['idType'][0].checked && false == document.frm.elements['idType'][1].checked){
    alert("請選擇對誰說");
    return;
  }

  if(frm.elements['idType'][0].checked && frm.uid.value == ''){
    alert("請填寫您要對誰說的帳號");
    frm.uid.focus();
    return;
  }

  if(frm.elements['idType'][1].checked && frm.nick.value == ''){
    alert("請填寫您要對誰說的暱稱");
    frm.nick.focus();
    return;
  }

  if('' == document.frm.content.value){
    alert("請填寫您要說的內容");
    frm.content.focus();
    return;
  }
  
  request.onreadystatechange = function(){
    switch(request.readyState){
    case 4: //XHR_RS_LOADED
      var targetdiv = document.getElementById('saylouddiv');
      if(request.status == 200 /* HTTP_OK */){
        var text = request.responseText;
        switch(text){
        case 'ERROR_LOGIN' :    alert('請先登入'); break;
        case 'ERROR_PERM' :     alert('您需要手機認證以上才能刊登喔！'); break;
        case 'ERROR_DATA' :     alert('請正確填寫對誰說的帳號或暱稱喔！'); break;
        case 'ERROR_CONTENT' :  alert('請填正確寫要說的內容喔(45字以內)！'); break;
        case 'ERROR_PAY' :      alert('無效的付費方式'); break;
        case 'ERROR_POSTED' :   alert('你本日限額已用完！'); break;
        case 'ERROR_BAHAGOLD' : alert('您的巴幣不足喔！'); break;
        case 'ERROR_GOLD' :     alert('您的金幣不足喔！'); break;
        case 'ERROR_SYSTEM' :   alert('刊登失敗，系統忙碌中！'); break;
        default:
          targetdiv.innerHTML = text;
          destroyPopup();
          var stime = new Date().getTime();
          var etime = stime + (1000*60*60*24*3);    // 3天
          alert("刊登完成\n\n訊息將於「"+new Date(stime).toLocaleString()+"」～「"+new Date(etime).toLocaleString()+"」期間強力放送");
        }
      }else{
        alert("http response code error!");
      }
    break;
    default:
    }
  };

  var param = '';
  /*if(frm.elements['pay'][0].checked) param = 'pay=A1';
  else param = 'pay=A2';*/

  if(frm.elements['idType'][0].checked){
    param += '&idType=uid&uid=' + frm.uid.value;
  }else{
    param += '&idType=nick&nick=' + frm.nick.value;
  }
  param += '&content=' + frm.content.value;

  request.open("POST","http://home.gamer.com.tw/sayloud2_new.php",true);
  request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
  request.setRequestHeader("Content-length", param.length);
  request.setRequestHeader("Connection", "close");
  request.send(param);
}
