/*
 * Copyright 2006 Mask@ Project.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
 
//// JavaScriptファイルを動的にロードする。 ////

maskat.loadJSFile_i = 0;  // scriptタグのユニークなIDを生成するのに利用する

maskat.loadJSFile = function(fileName){
  var elementScript = document.createElement("script");
  document.acsync = false;
  elementScript.id = "forDynamicJSFileLoad" + maskat.loadJSFile_i++;  // ID名は一意であれば何でもよい
  elementScript.src = fileName;
  document.getElementsByTagName("head").item(0).appendChild(elementScript);
//  elementScript.parentNode.replaceChild(elementScript, elementScript);
}

//// CSSファイルを動的にロードする。 ////

maskat.loadCSSFile_i = 0;  // linkタグのユニークなIDを生成するのに利用する

maskat.loadCSSFile = function(fileName){
  var elementLink = document.createElement("link");
  elementLink.id = "forDynamicCSSFileLoad" + maskat.loadCSSFile_i++;  // ID名は一意であれば何でもよい
  elementLink.href = fileName;
  document.getElementsByTagName("head").item(0).appendChild(elementLink);
//  elementLink.parentNode.replaceChild(elementLink, elementLink);
}

//// JavaScriptソースを動的にロードする。 ////

maskat.loadJSSrc_i = 0; // scriptタグのユニークなIDを生成するのに利用する

maskat.loadJSSrc = function(jsSrc){
  var elementScript = document.createElement("script");
  document.async = false;
  elementScript.id = "forDynamicJSSrcLoad" + maskat.loadJSSrc_i++;  // ID名は一意であれば何でもよい
  elementScript.text = jsSrc;
  document.getElementsByTagName("head").item(0).appendChild(elementScript);
//  elementScript.parentNode.replaceChild(elementScript, elementScript);
}


// XMLの読み込み
/**
 * 通信成功後に呼び出される処理
 * 注意：targetDivはDOMオブジェクトではなく、divを取得できるjavascriptの文字列
 */
maskat.loadLayoutFile = function(layoutDefFileName, targetDiv) {
  var xhr;
  try {
    xhr = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try {
      xhr = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (e) {
      xhr = false;
    }
  }
  if (!xhr && typeof XMLHttpRequest!='undefined') {
    xhr = new XMLHttpRequest();
  }
  if (xhr) {
    xhr.open("GET", layoutDefFileName, false);
    xhr.send(null);
    if (xhr.readyState == 4 && xhr.status == 200) {
      try{
          var layoutDOM = xhr.responseXML;
          var rialtoJSSrc; // 変換後のJavaScriptソース
          rialtoJSSrc = maskat.interpretLayoutXML(layoutDOM, targetDiv);
          maskat.loadJSSrc(rialtoJSSrc);
          
          var layoutElements = layoutDOM.getElementsByTagName("layout");
          for (var i = 0; i < layoutElements.length; i++){
            var layoutName = layoutElements[i].getAttribute("name");
            loadLayout(layoutName);
          }
          document.onselectstart = function(){return true};
      }catch(e){
          if (e instanceof MaskatError){
              alert("name: " + e.name + "\nmessage: " + e.message + "\nfileName: " + e.fileName);
          }else{
              throw e;
          }
      }

    } else if (xhr.readyState == 4) {
      alert(xhr.status);
    }
  }
}