﻿var requestUrl="ajaxEngine.ashx";
var execAfterAjax;
var active_doc_id;

function GetXmlHttpObject(){
  var objXMLHttp;
  if(window.XMLHttpRequest)objXMLHttp=new XMLHttpRequest();
  else{
    try{objXMLHttp=new ActiveXObject("Msxml2.XMLHTTP")}
    catch(e){
      try{objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")}
      catch(e){}
    }
  }
  return objXMLHttp
}
function openLink(id){
  ajaxViewData("mmView", id, "feedView");
}
function viewXML(param,feed){
  var re=/xml\s*=\s*[^;]*/i;
  var x=param.match(re);
  var i=x[0].indexOf("=");
  var xmlPath=x[0].substr(i+1);
  re=/xsl\s*=\s*[^;]*/i;
  x=param.match(re);
  i=x[0].indexOf("=");
  var xslPath=x[0].substr(i+1);
  var we=showWaitDialog(feed);
  we.children(1).children(0).onclick=function(){ajaxCancel(feed,null);}
  document.recalc();
  try{
		var	xmldoc=new ActiveXObject("Microsoft.XMLDOM");
		xmldoc.async=false;
		xmldoc.load(xmlPath);
		var	xsldoc=new ActiveXObject("Microsoft.XMLDOM");
		xsldoc.async=false;
		xsldoc.load(xslPath);
		switch(feed){
		case "feedView":
			viewView(xmldoc.transformNode(xsldoc),"mmXML",param,feed);
			break;
		default:
			document.getElementById(feed).innerHTML=xmldoc.transformNode(xsldoc);
			document.getElementById(feed).style.filter="";
			break;
		}
  }catch(e){
		alert("( "+e.message+" ) "+"خطا: اطلاعات قابل دریافت نیست");
  }
  document.body.removeChild(we);
}
function ajaxViewData(action,param,feed){
  if(!isinit)return;
  var docTitle=webSiteTitle;
  if(action=="mmXML" && feed!=null){viewXML(param,feed);return;}
  var XMLHttp=GetXmlHttpObject();
  if (XMLHttp==null)alert("جهت استفاده از این برنامه از مرورگر \nInternet Explorer\n استفاده نمایید")
  else{
			if(feed!=null)var we=showWaitDialog(feed);
			if(feed!=null)getChildElement(getChildElement(we,1),0).onclick=function(){ajaxCancel(feed,XMLHttp);}
		var x="action="+action+"&param="+escape(param)+"&feed="+feed;
		XMLHttp.onreadystatechange=function(){
      try{
        if(XMLHttp.readyState==4 || XMLHttp.readyState=="complete"){
        //if(XMLHttp.status==200){
          if(feed!=null)document.body.removeChild(we);
					if(feed!=null)document.getElementById(feed).style.filter="";
						if(XMLHttp.getResponseHeader("Content-Type").search("text/xml")>-1){
							var xml=XMLHttp.responseXML;
							xml.async=false;
							var xslPath=SelectSingleNode(xml,"//Settings/XSLPath");
							var	xsldoc=getXslDoc(xslPath);
							switch(feed){
							case "feedView":
								active_doc_id=param;
								viewView(getHtmlFromXml(xml,xsldoc),action,param,feed);
								var tt=SelectSingleNode(xml,"//title");
								if(tt!=null)if(tt.trim()!="")docTitle=tt;
								wToolbarUnselectable();
								break;
							case null:
								break;
							default:
								document.getElementById(feed).innerHTML=getHtmlFromXml(xml,xsldoc);
								break;
							}
						}else{
							if(XMLHttp.getResponseHeader("Content-Type").search("text/scriptlet")>-1){
								eval(XMLHttp.responseText);
							}else{
								var s=XMLHttp.responseText;
								switch(feed){
								case "feedView":
									viewView(s,action,param,feed);
									break;
								case null:
									break;
								default:
									document.getElementById(feed).innerHTML=s;
									break;
								}
							}
						}
						document.title=docTitle;
          if(execAfterAjax!=null){eval(execAfterAjax);execAfterAjax=null;}
        }//}
			}catch(e){
        alert("( "+e.message+" ) "+"خطا: اطلاعات قابل دریافت نیست")
      }
    }
    XMLHttp.open("POST", requestUrl, true);
    XMLHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=UTF-8");
    XMLHttp.send(x);
  }
}
function wToolbarUnselectable(){
	var wToolbar=document.getElementById("wToolbar");
	if(wToolbar==null)return;
	var imgs=wToolbar.getElementsByTagName("img");
	for(var i=0;i<imgs.length;i++){
		if(imgs[i].className!="selectable")imgs[i].unselectable="on";
	}
}
function getHtmlFromXml(xml,xsl){
	var rslt="";
  if(window.ActiveXObject){
		rslt=xml.transformNode(xsl);
  }else{
		var XmlDom=xsl.transformToDocument(xml);
		var serialize = new XMLSerializer();
    var x=serialize.serializeToString(XmlDom);
    var re=/&lt;/g;
    x=x.replace(re,"<");
    re=/&gt;/g;
    x=x.replace(re,">");
    re=/&amp;/g;
    x=x.replace(re,"&");
    rslt=x;
	}
	return rslt;
}
function getXslDoc(xslPath){
	var rslt;
  if(window.ActiveXObject){
    var xsl=new ActiveXObject("Microsoft.XMLDOM");
    xsl.async=false;
    xsl.load(xslPath);
    rslt=xsl;
  }else{
    if(XSLTProcessor){
      var x = new XMLHttpRequest();
      x.open("GET", xslPath, false);
      x.send(null);
      xsl=new XSLTProcessor();
      xsl.importStylesheet(x.responseXML);
      rslt=xsl
    }
  }
  return rslt;
}
function getXMLfromText(txt){
	var rslt;
  if(window.ActiveXObject){
    var x=new ActiveXObject("Microsoft.XMLDOM");
    x.async=false;
    x.loadXML(txt);
    rslt=x;
  }else{
    if(XSLTProcessor){
      var x=new XSLTProcessor();
      x.importStylesheet(txt);
      rslt=x;
    }
  }
  return rslt;
}
function SelectSingleNode(xmlDoc, elementPath){
	var rslt=null;
	if(window.ActiveXObject){
		var t=xmlDoc.selectSingleNode(elementPath);
		if(t!=null)rslt=t.text;
	}else{
		var xpe = new XPathEvaluator();
		var nsResolver = xpe.createNSResolver( xmlDoc.ownerDocument == null ? xmlDoc.documentElement : xmlDoc.ownerDocument.documentElement);
		var results = xpe.evaluate(elementPath,xmlDoc,nsResolver,XPathResult.FIRST_ORDERED_NODE_TYPE, null);
		if(results.singleNodeValue!=null)rslt=results.singleNodeValue.textContent; 
	}
	return rslt;
}
function showWaitDialog(elem){
	var waitDlg=document.getElementById("waitDlg");
  var we=waitDlg.cloneNode(true);
  we.id="wDlg"+elem;
  we.style.display="";
  document.body.appendChild(we);
  var e=document.getElementById(elem);
  if(e!=null){
		var apos=absolutePosition(e);
		var spos=scrollPosition(e);
		we.style.top=apos.top-spos.top+1;
		we.style.left=apos.left+spos.left+1;
		if(we.offsetLeft<0)we.style.left=0;
		if(we.offsetTop<0)we.style.top=0;
		if(we.offsetLeft+we.offsetWidth>document.body.clientWidth)we.style.left=document.body.clientWidth-we.offsetWidth;
		if(we.offsetTop+we.offsetHeight>document.body.clientHeight)we.style.top=document.body.clientHeight-we.offsetHeight;
		e.style.filter="alpha(opacity:30)";
	}
  return we;
}
function ajaxCancel(elem,xmlHttp){
  var e=document.getElementById(elem);
  var w=document.getElementById("wDlg"+elem);
  e.style.filter="";
  if(w!=null)document.body.removeChild(w);
  if(xmlHttp!=null)xmlHttp.abort();
}
function scrollPosition(obj) {
  var pos = null;
  if (obj != null) {
      pos = new Object();
      pos.top = obj.scrollTop;
      pos.left = obj.scrollLeft;
      obj = obj.offsetParent;
      while (obj != null) {
          pos.top += obj.scrollTop;
          pos.left += obj.scrollLeft;
          obj = obj.offsetParent;
      }
  }
  return(pos);
}
