﻿// Main workspace JScript File

// Drag objects Lib 
//------------------------------//
var DragObj=null;
var mouseX=0;
var mouseY=0;
function Drag(id,e)
{
	DragObj=document.getElementById(id);
	if(DragObj)
	{
		if(!e) e=window.event;
		mouseX=document.all?e.clientX:e.pageX;
		mouseY=document.all?e.clientY:e.pageY;
		
		DragObj.style.position="absolute";
		SetOpacity(50);
		
		if(typeof(Custom_OnDrag)=="function")
		    Custom_OnDrag(DragObj);
	}
}
function Drop(e)
{
	if(DragObj)
	{
	    //remeber position shift
	    if(typeof(SetCookie)=="function") 
	    {
	        //SetCookie(DragObj.id + "_shiftX",sumMoveByX,100);
	        //SetCookie(DragObj.id + "_shiftY",sumMoveByY,100);
	    }
	    //alert("X=" + GetCookie(DragObj.id + "_shiftX") + "  Y=" + GetCookie(DragObj.id + "_shiftY"))
		SetOpacity(100)
		
		if(typeof(Custom_OnDrop)=="function")
		    Custom_OnDrop(DragObj);
		DragObj=null;
	}
}
function DoDrag(e)
{
	if(DragObj)
	{
		NoSelect();
		if(!e) e=window.event;
		var mX=document.all?e.clientX:e.pageX;
		var mY=document.all?e.clientY:e.pageY;
		if(ValDiff(mX,mouseX) || ValDiff(mY,mouseY))
		{
			MoveBy(mX-mouseX,mY-mouseY);
			mouseX=mX;mouseY=mY;
		}
	}
}
function MoveBy(X,Y)
{
	DragObj.style.left=GetOffset(DragObj,false) + X;
	DragObj.style.top=GetOffset(DragObj,true) + Y;
}
function SetOpacity(val)
{
	if(document.all)
		DragObj.style.filter='alpha(opacity=' + val + ')';
	else
		DragObj.style.opacity=val/100;	
}
function ValDiff(val1,val2)
{
	return (Math.abs(val1-val2)>10)
}
function GetAttrib(obj,name)
{
	var oAttr = obj.attributes.getNamedItem(name);
	if(oAttr)
		return oAttr.value;
	else
		return "";
}
function GetOffset(obj,isTop)
{
	if(obj)
	{
		var off=(isTop)?obj.offsetTop:obj.offsetLeft;
		return off+GetOffset(obj.offsetParent,isTop);
	}
	else return 0;
}
function addEvt(obj,evt,func)
{
	if (document.addEventListener)
		obj.addEventListener(evt,func,false);
	else if (document.attachEvent) 
		obj.attachEvent("on" + evt,func);
	else
		eval(obj+".on" + evt + "=" + func);
}
function NoSelect()
{
	if (document.selection)
        document.selection.empty();
    else if (window.getSelection)
        window.getSelection().removeAllRanges(); 
}
addEvt(document,"mousemove",DoDrag);
addEvt(document,"mouseup",Drop);
//------------------------------//


// DOM objects Lib
//------------------------------//
function GetParentEl(obj,parentElementName)
{
    if(obj && typeof(obj.tagName)=="string")
    {
        if(obj.tagName.toLowerCase()==parentElementName.toLowerCase()) return obj;
        else return GetParentEl(obj.parentNode,parentElementName)
    }
    else return null;
}
function GetOffsetLeft(obj)
{
    if(obj) return obj.offsetLeft + GetOffsetLeft(obj.offsetParent);
    else return 0;
}
function GetOffsetTop(obj)
{
    if(obj) return obj.offsetTop + GetOffsetTop(obj.offsetParent);
    else return 0;
}
function SetCookie(name,value,days)
{
    var expires="";
	if (days)
	{
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		expires = "; expires=" + date.toGMTString();
	}
	document.cookie = name+"="+value+expires+"; path=/";
}

function GetCookie(name)
{
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++)
	{
		var c = ca[i];
		if (c.indexOf(nameEQ)>-1) return c.substring(nameEQ.length + 1,c.length);
	}
	return null;
}

function DelCookie(name)
{
	SetCookie(name,"",-1);
}
//------------------------------//


// Ajax Form Loader Lib
//------------------------------//
var ExpTagStart="/*--Export Area Start--*/";
var ExpTagEnd="/*--Export Area End--*/";

function __CB(url,frm,hol,eventTarget, eventArgument) 
{
    var theForm = document.forms[frm];
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) 
    {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        
        if(typeof(eval(eventTarget + "_doPostBack"))=="function") 
            eval(eventTarget + "_doPostBack('" + eventTarget + "','" + eventArgument + "')");
            
        PostForm(frm,url,hol);
    }
}
function __FS(url,frm,hol) 
{
    PostForm(frm,url,hol);
}

function AdjustOutput(str,url,frm,hol)
{
    var ret=str;
    ret=ret.replace(new RegExp('__doPostBack\\(', 'gi'),"__CB('" + url + "','" + frm + "','" + hol + "',");
    ret=ret.replace(new RegExp('WebForm_OnSubmit\\(\\)', 'gi'),"__FS('" + url + "','" + frm + "','" + hol + "'\)");
    ExecJScode(ret);
    
    return ret;
}
function ExecJScode(str)
{
    var code="";
    var pos=0,loop=0;
    do{
        pos=str.indexOf(ExpTagStart,pos + 1);
        if(pos>-1)code+=str.slice(str.indexOf(ExpTagStart,pos) + ExpTagStart.length,str.indexOf(ExpTagEnd,pos));
        loop+=1;
    }
    while(pos>0 && loop<10)
    
    if(code!="")CreateJS('',code);
}
function CreateJS(src,body)
{
    var tag=document.createElement("script");
    tag.type = 'text/javascript';
    if(body!='')tag.text = body;
    if(src!='')tag.src = src;
    document.body.appendChild(tag);
}

function GetForm(url,frm,hol)
{
    url=EditQuery("rnd",new Date(),url);
    var req=NewXMLHttpReq();
    req.open("GET",url,false);
    req.send(url);
    return AdjustOutput(req.responseText,url,frm,hol);
}


var AsyncUrl,AsyncFrm,AsyncHol;
var AsyncReq=null;
function PostForm(frm,url,hol)
{
    var content=GetFormValues(frm);
    
    AsyncReq=NewXMLHttpReq();
    AsyncReq.open("POST",url,true);
    AsyncReq.onreadystatechange = PostReturned;
    AsyncReq.setRequestHeader('Content-Type','application/x-www-form-urlencoded; charset=UTF-8');
    AsyncReq.send(content);
    
    AsyncUrl=url;
    AsyncFrm=frm;
    AsyncHol=hol;
}
function PostReturned()
{
	if(AsyncReq && AsyncReq.readyState == 4) //Completed
	{
		if(AsyncReq.status == 200) //OK
		{
			var holObj=document.getElementById(AsyncHol);
            if(holObj)
                holObj.innerHTML=AdjustOutput(AsyncReq.responseText,AsyncUrl,AsyncFrm,AsyncHol);
		} 
		else 
			alert('There was a problem with the request. Status: ' + PostReq.status);
	}
}

function GetFormValues(frmId) 
{
    var f = document.forms[frmId];
    var str = ""; 
    for(var i = 0;i < f.elements.length;i++) 
    {
       var el=f.elements[i];
       switch(el.type) 
       {
           case "hidden":
           case "textarea":
           case "text":
                //manualy replace '+' coz |escape| doesn't
                str += el.name + "=" + escape(el.value).replace(new RegExp('\\+', 'g'), '%2b') + "&"; 
                break; 
           case "radio":
                if(el.checked)
                    str += el.name + "=" + el.value + "&"; 
                break; 
           case "select-one": 
                str += el.name + "=" + el.options[el.selectedIndex].value + "&"; 
                break; 
       }
    }
    str += 'IsCallBack=true&';
    str = str.substr(0,(str.length - 1)); 
    return str; 
}
//------------------------------//


// XmlHttp Request Object
//------------------------------//
function NewXMLHttpReq()
{
    var req = false;
    if(window.XMLHttpRequest) //Mozilla
    {
	    req = new XMLHttpRequest();
	    if(req.overrideMimeType) req.overrideMimeType("text/xml");
    }
    else if(window.ActiveXObject) //IE
	    {
		    try{req = new ActiveXObject("Msxml2.XMLHTTP");}
		    catch(e01)
		    {
			    try{req = new ActiveXObject("Microsoft.XMLHTTP");}
			    catch(e02){}
		    }
	    }
    return req;
}
//------------------------------//


// Date Picker
//------------------------------//

var DatePickerId="ilDatePicker";
var DatePickerFrm="frmDatePick";
var DatePickerFld="";
var ForceOpen=true;
function DatePicker(icon,fldId)
{
    var icon=document.getElementById(icon);
    var fld=document.getElementById(fldId);
    if(fld && icon)
    {   
        DatePickerFld=fldId;
        var win=document.getElementById(DatePickerId);
        if(win)
        {//show datepicker if exists
            PlaceDTPicker(icon,win);
            win.style.display="block";
            
            if(typeof(AddShadow)=="function")AddShadow(win);
        }
        else
        {//create new datepicker
            win=document.createElement("div");
            win.style.cssText="position:absolute;width:200px;height:188px;z-index:100;";
            win.innerHTML=GetForm("DatePicker.aspx",DatePickerFrm,DatePickerId);
            win.id=DatePickerId;
            PlaceDTPicker(icon,win);
            document.body.appendChild(win);
            if(typeof(AddShadow)=="function")AddShadow(win);
        }
    }
    else alert("Invalid Target Field");
}
function PlaceDTPicker(icon,win)
{
    win.style.top=GetOffsetTop(icon)+icon.offsetHeight;
    if(icon.dir=="rtl")
        win.style.left=(GetOffsetLeft(icon) - 200 + icon.offsetWidth);
    else
        win.style.left=GetOffsetLeft(icon);
}
function DatePickerHide(e)
{
    var obj;
    if(window.event) obj=event.srcElement;
    else if(e) obj=e.target;
    var frm=GetParentEl(obj,"form");

    if((frm && frm.id==DatePickerFrm) || ForceOpen)
    {
        ForceOpen=false;
    }
    else
    {
        var win=document.getElementById(DatePickerId);
        if(win)
        {
            win.style.display="none";
            if(typeof(RemoveShadow)=="function")RemoveShadow(win);
        }
    }
}
function DatePick_doPostBack(eventTarget, eventArgument)
{
    if(eventArgument.indexOf("V")<0)
    {
        var start=new Date("2000","0","1");
        var fld=document.getElementById(DatePickerFld);
        if(fld)
        {
            var format=fld.title;
            var currDate=new Date(start.getTime() + eventArgument*24*60*60*1000);
            fld.value=format.replace("d",currDate.getDate()).replace("m",currDate.getMonth()+1).replace("y",currDate.getFullYear());
            DatePickerHide();
        }
    }
}

try
{
    if(document.attachEvent)
    {
        document.detachEvent("onclick",DatePickerHide);
        document.attachEvent("onclick",DatePickerHide);
    }
    else
    {
        document.removeEventListener("click",DatePickerHide,false);
        document.addEventListener("click",DatePickerHide,false);
    }
}
catch(e)
{
    
}
//------------------------------//


// Visual Effects
//------------------------------//
function RemoveShadow(obj)
{
    var shd=document.getElementById(obj.id + "_shadow");
    if(shd)
        document.body.removeChild(shd);
}
function AddShadow(obj)
{
    var shd=document.getElementById(obj.id + "_shadow");
    if(!shd)
    {//new shadow
        var shd=document.createElement("div");
        shd.className="shadow";
        shd.style.top=GetOffsetTop(obj)+10;
        shd.style.left=GetOffsetLeft(obj)+10;
        shd.style.width=obj.offsetWidth;
        shd.style.height=obj.offsetHeight;
        shd.style.zIndex=obj.style.zIndex - 1;
        shd.id=obj.id + "_shadow";
        document.body.appendChild(shd);
    }
    else
    {//adjust existing shadow
        shd.style.top=GetOffsetTop(obj)+10;
        shd.style.left=GetOffsetLeft(obj)+10;
        shd.style.height=obj.offsetHeight;
    }
}
function SelectRow()
{
    var maxId=document.getElementById("maxId");
    
    if(maxId)
    {
        var id="row" + maxId.innerHTML;
        var el=document.getElementById(id);
        var row=GetParentEl(el,"tr");
        if(row)
        {
            var curClass=row.className;
            setTimeout("BlinkNewRow('" + id + "')",100);
            setTimeout("BlinkNewRow('" + id + "')",2100);
            setTimeout("BlinkNewRow('" + id + "')",4100);
            setTimeout("SetClass('" + id + "','" + curClass + "')",6100);
        }
    }
}
function BlinkNewRow(id)
{
    var interval=50;
    var timeout=0;
    setTimeout("SetClass('" + id + "','selRow4')",timeout+=interval);
    setTimeout("SetClass('" + id + "','selRow3')",timeout+=interval);
    setTimeout("SetClass('" + id + "','selRow2')",timeout+=interval);
    setTimeout("SetClass('" + id + "','selRow1')",timeout+=interval);
    setTimeout("SetClass('" + id + "','selRow')",timeout+=interval);
    setTimeout("SetClass('" + id + "','selRow1')",timeout+=1000);
    setTimeout("SetClass('" + id + "','selRow2')",timeout+=interval);
    setTimeout("SetClass('" + id + "','selRow3')",timeout+=interval);
    setTimeout("SetClass('" + id + "','selRow4')",timeout+=interval);
    setTimeout("SetClass('" + id + "','Row')",timeout+=interval);
}
function SetClass(id,css)
{
    var el=document.getElementById(id);
    var row=GetParentEl(el,"tr");
    if(row)
    {
        row.className=css;
    }
}
//------------------------------//

//Calculate payments
//------------------------------//    
function calculatePayments() {
    var frm = document.getElementById('frmExpenses');
    var paym = document.getElementById('listNumberPayments');
    var paymentid = document.getElementById('paymentid');
    
    var msgPayment = document.getElementById('msgPayment');
    
    var amount = parseInt(frm.txtAmount.value);
   
    if (amount && typeof(amount)=='number') {
        paymentid.style.display='inline'; 
        var pmt = Math.round(amount / paym.value).toString();
        paymentid.innerHTML="," + pmt + " " + msgPayment.value;   
    } else {
        //paymentid.style.display='none';
    }
}
//------------------------------//
