/*
רΪiframe,д߱༭,Լٺܶ๤
mooṩRangeļݷװ,Ǿ
*/
var IFrame = new Native({

 //Ϊ$typeṩ׼
 name: 'IFrame',

 //Ҫ̬
 generics: false,

 initialize: function(){
  /*
  ȡ,Array.link,ʵλ޹
  Ҳ˵,ʼʱֻҪṩ,һΪDOMiframeid,һObject͵
  λȺûйϵ,ȷʶ,:
  var iframe = new IFrame('frameID', { onload : function(){alert('iframe loaded');});
  
  var iframe = new IFrame({ onload : function(){alert('iframe loaded');}, 'frameID');
  ǵȼ۵,ɴ˿ɼArray.link
  */
  var params = Array.link(arguments, {properties: Object.type, iframe: $defined});
  //˫ʵĬֵд
  var props = params.properties || {};
  //˫ʵĬֵд
  var iframe = $(params.iframe) || false;
  //iframeonload¼,ҪIE5.5+֧
  var nload = props.onload || $empty;
  //ʱɾ,ڴй©
  delete props.onload;
  //Ϊ˼,ͬʱidname
  props.id = props.name = $pick(props.id, props.name, iframe.id, iframe.name, 'IFrame_' + $time());
  iframe = new Element(iframe || 'iframe', props);
  var nFrameLoad = function(){
   //ȡiframeҳ
   var host = $try(function(){
    return iframe.contentWindow.location.host;
   });
   //жз,ûiframeڶmooʽװ
   if (host && host == window.location.host){
    //iframeڵwindowаװ
    var win = new Window(iframe.contentWindow);
    //iframeڵdocumentаװ
    var doc = new Document(iframe.contentWindow.document);
    //iframeڵElementаװ
    $extend(win.Element.prototype, Element.Prototype);
   }
   //ִonload¼,¼ڵthisָiframeڵwindow󲢴iframeڵdocumentΨһ
   onload.call(iframe.contentWindow, iframe.contentWindow.document);
  };
  //iframeδDOM,onload¼,ֱִмonloadĺ
  (!window.frames[props.id]) ? iframe.addListener('load', onFrameLoad) : onFrameLoad();
  return iframe;
 }

});

