﻿ActionPage = "Actions.aspx";
IsCached = true;
//***********************   
function sack(file) {
	this.xmlhttp = null;
	this.resetData = function() {
		this.method = "POST";
  		this.queryStringSeparator = "?";
		this.argumentSeparator = "&";
		this.URLString = "";
		this.encodeURIString = true;
  		this.execute = false;
  		this.element = null;
		this.elementObj = null;
		this.requestFile = file;
		this.vars = new Object();
		this.responseStatus = new Array(2);
  	};

	this.resetFunctions = function() {
  		this.onLoading = function() { };
  		this.onLoaded = function() { };
  		this.onInteractive = function() { };
  		this.onCompletion = function() { };
  		this.onError = function() { };
		this.onFail = function() { };
	};

	this.reset = function() {
		this.resetFunctions();
		this.resetData();
	};

	this.createAJAX = function() {
		try {
			this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e1) {
			try {
				this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e2) {
				this.xmlhttp = null;
			}
		}
	if (! this.xmlhttp) {
			if (typeof XMLHttpRequest != "undefined") {
				this.xmlhttp = new XMLHttpRequest();
			} else {
				this.failed = true;
			}
		}
	};

	this.setVar = function(name, value){
		this.vars[name] = Array(value, false);
	};

	this.encVar = function(name, value, returnvars) {
		if (true == returnvars) {
			return Array(encodeURIComponent(name), encodeURIComponent(value));
		} else {
			this.vars[encodeURIComponent(name)] = Array(encodeURIComponent(value), true);
		}
	}

	this.processURLString = function(string, encode) {
		encoded = encodeURIComponent(this.argumentSeparator);
		regexp = new RegExp(this.argumentSeparator + "|" + encoded);
		varArray = string.split(regexp);
		for (i = 0; i < varArray.length; i++){
			urlVars = varArray[i].split("=");
			if (true == encode){
				this.encVar(urlVars[0], urlVars[1]);
			} else {
				this.setVar(urlVars[0], urlVars[1]);
			}
		}
	}

	this.createURLString = function(urlstring) {
		if (this.encodeURIString && this.URLString.length) {
			this.processURLString(this.URLString, true);
		}

		if (urlstring) {
			if (this.URLString.length) {
				this.URLString += this.argumentSeparator + urlstring;
			} else {
				this.URLString = urlstring;
			}
		}
		// prevents caching of URLString
		if (! IsCached)
		 this.setVar("rndval", new Date().getTime());

		urlstringtemp = new Array();
		for (key in this.vars) {
			if (false == this.vars[key][1] && true == this.encodeURIString) {
				encoded = this.encVar(key, this.vars[key][0], true);
				delete this.vars[key];
				this.vars[encoded[0]] = Array(encoded[1], true);
				key = encoded[0];
			}

			urlstringtemp[urlstringtemp.length] = key + "=" + this.vars[key][0];
		}
		if (urlstring){
			this.URLString += this.argumentSeparator + urlstringtemp.join(this.argumentSeparator);
		} else {
			this.URLString += urlstringtemp.join(this.argumentSeparator);
		}
	}

	this.runResponse = function() 
	{
		eval(this.response);
	}

	this.runAJAX = function(urlstring)
	{
		if (this.failed) {
			this.onFail();
		} else {
			this.createURLString(urlstring);
			if (this.element) {
				this.elementObj = document.getElementById(this.element);
			}
			if (this.xmlhttp) {
				var self = this;
				if (this.method == "GET") {
					totalurlstring = this.requestFile + this.queryStringSeparator + this.URLString;
					this.xmlhttp.open(this.method, totalurlstring, true);
				} else {
					this.xmlhttp.open(this.method, this.requestFile, true);
					try {
						this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
					} catch (e) { }
				}

				this.xmlhttp.onreadystatechange = function() {
					switch (self.xmlhttp.readyState) {
						case 1:
							self.onLoading();
							break;
						case 2:
							self.onLoaded();
							break;
						case 3:
							self.onInteractive();
							break;
						case 4:
							self.response = self.xmlhttp.responseText;
							self.responseXML = self.xmlhttp.responseXML;
							self.responseStatus[0] = self.xmlhttp.status;
							self.responseStatus[1] = self.xmlhttp.statusText;

							if (self.execute) {
								self.runResponse();
							}

							if (self.elementObj) {
								elemNodeName = self.elementObj.nodeName;
								elemNodeName.toLowerCase();
								if (elemNodeName == "input"
								|| elemNodeName == "select"
								|| elemNodeName == "option"
								|| elemNodeName == "textarea") {
									self.elementObj.value = self.response;
								} else {
									self.elementObj.innerHTML = self.response;
								}
							}
							if (self.responseStatus[0] == "200")
							{
							 self.onCompletion();
							 if (pageTracker != null)
							 pageTracker._trackPageview(urlstring);
							}
							else {
								self.onError();
							}

							self.URLString = "";
							/* These lines were added by Alf Magne Kalleland ref. info on the sack home page. It prevents memory leakage in IE */

							delete self.xmlhttp['onreadystatechange'];
							self.xmlhttp=null;
							self.responseStatus=null;
							self.response=null;
							self.responseXML=null;
							break;
					}
				};
				this.xmlhttp.send(this.URLString);
			}
		}
	};
	this.reset();
	this.createAJAX();
}
//*************************************************************************************************//
var dynamicContent_ajaxObjects = new Array();

function addJavascript(jsname,pos)
{
     var th = document.getElementsByTagName(pos)[0];
     var s = document.createElement('script');
     s.setAttribute('type','text/javascript');
     s.setAttribute('Src',jsname);
     th.appendChild(s);
     alert(jsname);
  } 

function StartWaiting(Target,mode)
{
 if (Target != "")
 {
   var obj = dog(Target);
   if (obj != null)
   {  
    SetOpacity(obj,35);
    if (mode==0)
      obj.innerHTML = "<div style='position:absolute; vertical-align: middle; text-align: center; width:75%; height:30%;'>"
			         +"<img src='/App_Themes/loading.gif'/></div>";
    }
  }
}
 function StopWaiting(Target,mode)
 {
  if (Target != "")
  {
   var obj = dog(Target);
   if (obj != null)
   {
    SetOpacity(obj,100);
    if (mode==0)
       obj.innerHTML="";
   }
  }
 }
 
function ajax_parseJs(obj)
{
	var scriptTags = dog(obj).getElementsByTagName('script');
	var string = '';
	var jsCode = '';

	for(var no=0;no<scriptTags.length;no++)
	{
	if(scriptTags[no].src)
	    {
	     addJavascript(scriptTags[no].src,'head');
		}
	else
	    {
			if(navigator.userAgent.toLowerCase().indexOf('opera')>=0){
				jsCode = jsCode + scriptTags[no].text + '\n';
			}
			else
				jsCode = jsCode + scriptTags[no].innerHTML;	
		}
		
	}
	if(jsCode)ajax_installScript(jsCode);
}

function ajax_installScript(script)
{		
  try
  {
    if (!script)
        return;
    if (window.execScript){        	
    	window.execScript(script)
    }else if(window.jQuery && jQuery.browser.safari){ // safari detection in jQuery
        window.setTimeout(script,0);
    }else{        	
        window.setTimeout(script,0);
    } 
  }
  catch(err)
  {
    alert(err);
  }  
}
//**************************************************RunAction***********************************//
function ajax_RunContent(divId,response)
{
   var str = response;
   if (str.substring(0,7) == '<script')
     {
      if ( dog('divscript') != null ) divId = 'divscript';
     }
   dog(divId).innerHTML = str;
   ajax_parseJs(divId);
}

function ajax_showContent(divId,response)
{
	StopWaiting(divId,0);
    ajax_RunContent(divId,response);
}

function RunAjax(url,Param,divId,ExecFunc)
{
    var ajaxIndex = dynamicContent_ajaxObjects.length;
	dynamicContent_ajaxObjects[ajaxIndex] = new sack();
 	var items = Param.split(/&/g);
    for(var no=0;no<items.length;no++)
    {
	var tokens = items[no].split('=');
	if(tokens.length==2){
	   dynamicContent_ajaxObjects[ajaxIndex].setVar(tokens[0],tokens[1]);
	   }
	}
	dynamicContent_ajaxObjects[ajaxIndex].requestFile = url;	
	dynamicContent_ajaxObjects[ajaxIndex].onCompletion = function(){ExecFunc(divId,dynamicContent_ajaxObjects[ajaxIndex].response); dynamicContent_ajaxObjects[ajaxIndex] = false; };
	dynamicContent_ajaxObjects[ajaxIndex].onError = function(){ dynamicContent_ajaxObjects[ajaxIndex].response = showError(dynamicContent_ajaxObjects[ajaxIndex].response); ExecFunc(divId,dynamicContent_ajaxObjects[ajaxIndex].response);};
	dynamicContent_ajaxObjects[ajaxIndex].runAJAX();	
}

function LoadPage(url,Param,divId)
{
 StartWaiting(divId,0);
 RunAjax(url,Param,divId,ajax_showContent);
}
function RunAction(url,Param,divId)
{
 RunAjax(url,Param,divId,ajax_RunContent); 
}
function ExecAction(url,Param,ExecFunc)
{
 RunAjax(url,Param,'',ExecFunc); 
}
//************************************** LoadPage ******************************//
function ShowPage(Param,divId)
{ 
  if (divId == '')
    divId = 'divMain';
  LoadPage(ActionPage,'Action='+Param,divId);
}
function ShowRun(Param,divId)
{
  if (divId == '')
    divId = 'divMain';
  RunAjax(ActionPage,'Action='+Param,divId,ajax_RunContent);
}
function ShowAction(Param,ExecFunc)
{ 
  ExecAction(ActionPage,'Action='+Param,ExecFunc);
}
//*****************************************************************************************************//
function OpenPage(Param)
{
   ExecAction(ActionPage,'Action='+Param,OpenFunc);
}
function OpenFunc(divId,value)
{
   my_window = window.open ("",
    "","width=600,height=400,alwaysRaised=yes,dependent=yes,resizable=no,scrollbars=yes");
   my_window.document.write(value); 
}
//*****************************************************************************************************//
function AdvData()
{
   this.model = "";
   var objectList = new Array();
   var objectSearch = new Array();
   this.state = 0;   //0:insert   1:update    3:delete
   this.Fields = "";
   this.FieldsCount = 0;
   this.ObjSelectField = null;

   this.divGrid="";
   this.divMsg="";
   this.divStruct="";

   this.resetData = function(model,divGrid,divMsg,divStruct)
   {
     this.model = model;
     this.divGrid = divGrid;
     this.divMsg = divMsg;
     this.divStruct = divStruct;
     this.enableFields(false);
   }

   function object()
   {
	this.fieldName = "";
	this.fieldType = "";
	this.objName="";
   }

   this.AddObj = function(fieldName,objName)
   {
    var Index = objectList.length;
    objectList[Index] = new object();
    objectList[Index].fieldName = fieldName;
    objectList[Index].objName = objName;
   }
   
   this.AddSearchObj = function(fieldName,objName)
   {
    var Index = objectSearch.length;
    objectSearch[Index] = new object();
    objectSearch[Index].fieldName = fieldName;
    objectSearch[Index].objName = objName;
   }
   
  this.clearFields = function()
  {
   for (var i=0;i<objectList.length;i++)
   {
     dog(objectList[i].objName).value = '';
   }
   Fields="";
   FieldsCount=0;
  }
  
  this.enableFields = function(enabled)
  {
   for (var i=0;i<objectList.length;i++)
   {
    dog(objectList[i].objName).disabled = !enabled;
   }
  }

  this.AddField = function(FieladName, FieldValue)
  {
   if(Fields!="")
    Fields+="&";
   Fields+=FieladName+"="+FieldValue;
  }

  this.showData = function(pageCount)
  {
   page = ""; 
   if (pageCount != null)
     page = "&Page="+pageCount;
   LoadPage(ActionPage,'Action=DataShow&Model='+this.model+page,this.divGrid);
  }

  this.showDetail = function(SelectField,DetailClass,Detailmodel,DetailGrid)
  {
    if(this.ObjSelectField == null)
      this.ObjSelectField = dog(SelectField);
    if (this.ObjSelectField != null)
     {
       if((this.ObjSelectField.value != "")&&(this.ObjSelectField.value != undefined))
        LoadPage(ActionPage,'Action=DataSearch&Model='+Detailmodel+'&Class='+DetailClass+'&'+objectList[0].fieldName+'='+this.ObjSelectField.value,DetailGrid);
      else
        alert('ابتدا انتخاب کنید');
      }
     else
       alert('لطفا دوباره سعی کنید');
   }

  this.showField = function(SelectField)
  {
   if(this.ObjSelectField == null)
    this.ObjSelectField = dog(SelectField);

   if (this.ObjSelectField != null)
   {
    if((this.ObjSelectField.value != "")&&(this.ObjSelectField.value != undefined))
    {
     ExecAction(ActionPage,'Action=DataShowField&Model='+this.model+'&'+objectList[0].fieldName+'='+this.ObjSelectField.value,this.viewField);
    }
    else
      alert('ابتدا انتخاب کنید');
   }
   else
    alert('لطفا دوباره سعی کنید');
  }
 
  this.viewField = function(divId,value)
  {
   var Jobj;
   eval("Jobj={Fields:"+value+"}");
   for(var i=0; i<objectList.length ;i++)
     dog(objectList[i].objName).value = Jobj.Fields[i];
  }

  this.insertField = function(SelectField)
  {
   this.state = 1;
   VisibleTab(this.divStruct);
   this.clearFields(SelectField);
   this.enableFields(true);
  }

  this.editField = function(SelectField)
  {
   this.state = 2
   VisibleTab(this.divStruct);
   this.showField(SelectField);
   this.enableFields(true);
  }

  this.deleteField = function(SelectField)
  {
   this.state = 3
   VisibleTab(this.divStruct);
   this.showField(SelectField);
   this.enableFields(true);
  }

  this.saveField = function()
  {
    Fields = '';
    for(var i=0;i<objectList.length;i++)
    {
     if ((objectList[i].objName.substr(0,3) == "chb") || (objectList[i].objName.substr(0,3) == "rad"))
       this.AddField(objectList[i].fieldName,dog(objectList[i].objName).checked);
     else if (dog(objectList[i].objName).value != "")
       this.AddField(objectList[i].fieldName,dog(objectList[i].objName).value);
    }
    
    var PostParams = "";
    switch(this.state)
    {
      case 1:PostParams="DataInsert";break;
      case 2:PostParams="DataUpdate";break;
      case 3:PostParams="DataDelete";break;
    }
    if ((this.state == 3)&(! confirmMsg()))
      {
        return;
      }  
    
    if (PostParams != "")
     {
      //alert(PostParams+"&Model="+this.model+"&"+Fields);
      ShowPage(PostParams+"&Model="+this.model+"&"+Fields,this.divMsg);
     }
    else
     {
      alert('ابتدا عمل خود را انتخاب کنید'); 
     }
    this.clearFields();
    this.enableFields(false);
    RefreshTab(this.divStruct);
    this.showData();
  }
  
  this.saveAction = function(ActionName)
  {
    Fields = '';
    for(var i=0;i<objectList.length;i++)
    {
     if ((objectList[i].objName.substr(0,3) == "chb") || (objectList[i].objName.substr(0,3) == "rad"))
       this.AddField(objectList[i].fieldName,dog(objectList[i].objName).checked);
     else if (dog(objectList[i].objName).value != "")
       this.AddField(objectList[i].fieldName,dog(objectList[i].objName).value);
    }
    
    var PostParams = "";
    switch(this.state)
    {
      case 1:PostParams="Insert";break;
      case 2:PostParams="Update";break;
      case 3:PostParams="Delete";break;
    }
    if ((this.state == 3)&(! confirmMsg()))
      {
        return;
      }  
    
    if (PostParams != "")
     {
      //alert(PostParams+"&Model="+this.model+"&"+Fields);
      ShowPage(ActionName+"&ActionType="+PostParams+"&Model="+this.model+"&"+Fields,this.divMsg);
     }
    else
     {
      alert('ابتدا عمل خود را انتخاب کنید'); 
     }
    this.clearFields();
    this.enableFields(false);
    RefreshTab(this.divStruct);
    this.showData();
  }

  this.search = function()
  {
    for(var i=0;i<objectSearch.length;i++)
    {
     if (dog(objectSearch[i].objName).value != "")
       this.AddField(objectSearch[i].fieldName,dog(objectSearch[i].objName).value);
    }
   ShowPage('DataSearch&Class=Master&Model='+this.model+'&'+Fields,this.divGrid);
  }

  this.report = function()
  {
    Fields = '';
    for(var i=0;i<objectSearch.length;i++)
    {
     if (objectSearch[i].objName.substr(0,3) == "chb")
       this.AddField(objectSearch[i].fieldName,dog(objectSearch[i].objName).checked);
     else if (dog(objectSearch[i].objName).value != "")
       this.AddField(objectSearch[i].fieldName,dog(objectSearch[i].objName).value);
    }
    ShowPage('DataReport&Class=Master&ReportType='+this.divStruct+'&Model='+this.model+'&'+Fields,'divMain');
  }
  
  this.cancelField = function()
  {
    this.clearFields();
    this.enableFields(false);
  }
}
