﻿//1-FieldName
//2-Relation(And,Or)
//3-Operator(EQ,NEQ,...)
//4-Value

var FiltercollectFieldName=new Array();
var FiltercollectFieldType=new Array();
var FiltercollectRelation=new Array();
var FiltercollectOperator=new Array();
var FiltercollectValue=new Array();
var flag = false;

function AttachChangeDDLName()
{
    ChangeDDLName();
}

if (window.addEventListener)
{  
    window.addEventListener('onload', AttachChangeDDLName, false); 
}
else if (window.attachEvent)
{  
    window.attachEvent('onload', AttachChangeDDLName);
}

function ChangeDDLName()
{                                       
    var ddls = document.getElementsByTagName("select");
    for(var ii=0;ii<ddls.length;ii++)
    {
        if(ddls[ii].name.indexOf("ViewOrder") != -1)
        {
            ddls[ii].id = ddls[ii].name.substr(ddls[ii].name.indexOf("ViewOrder"));
        }
    }
    
    var inputs = document.getElementsByTagName("input");
    for(var ii=0;ii<inputs.length;ii++)
    {
        if(inputs[ii].id.indexOf("DateTimeField_") != -1)
        {
            inputs[ii].onpropertychange=function ()
                {
                    if(flag)
                    {
                        var internalName = this.id.substr(this.id.indexOf("DateTimeField_"));
                        internalName = internalName.replace("DateTimeField_", "");
                        if(internalName.indexOf("_") != -1)
                        {
                            internalName = internalName.substr(0,internalName.indexOf("_"));
                        }
                        
                        var _RdbFillDateID = "FillDate_" + internalName + "_";
                        FilterTXTChangeText("FiltercollectValue",this,internalName);
                        CheckRDBDate(_RdbFillDateID);
                    }
                 }
        } 
    }
    
    flag = true;
    
    UpdateFilterCollection();
}
                             
function GetIndexByFieldName(_FieldName)
{
    var indexToRemove = -1;
    for(var ii=0;ii<FiltercollectFieldName.length;ii++)
    {
        if(FiltercollectFieldName[ii].toString() == _FieldName)
        {
            indexToRemove = ii;
            break;
        }
    }
    
    return indexToRemove;
}

//Array.prototype.remove = function(from, to) {
//  var rest = this.slice((to || from) + 1 || this.length);
//  this.length = from < 0 ? this.length + from : from;
//  return this.push.apply(this, rest);
//};

function removeByIndex(arrayName,arrayIndex){ 
arrayName.splice(arrayIndex,1); 
}

function RemoveIdFromCollection(_FieldName)
{
    var indexToRemove = GetIndexByFieldName(_FieldName);
    
    if(indexToRemove != -1)
    {
        removeByIndex(FiltercollectFieldName,indexToRemove);
        removeByIndex(FiltercollectFieldType,indexToRemove);
        removeByIndex(FiltercollectRelation,indexToRemove);
        removeByIndex(FiltercollectOperator,indexToRemove);
        removeByIndex(FiltercollectValue,indexToRemove);
        
//        FiltercollectFieldName.remove(indexToRemove);
//        FiltercollectFieldType.remove(indexToRemove);
//        FiltercollectRelation.remove(indexToRemove);
//        FiltercollectOperator.remove(indexToRemove);
//        FiltercollectValue.remove(indexToRemove);
        
        UpdateHiddenField("FiltercollectFieldName","hdn_FiltercollectFieldName");
        UpdateHiddenField("FiltercollectFieldType","hdn_FiltercollectFieldType");
        UpdateHiddenField("FiltercollectRelation","hdn_FiltercollectRelation");
        UpdateHiddenField("FiltercollectOperator","hdn_FiltercollectOperator");
        UpdateHiddenField("FiltercollectValue","hdn_FiltercollectValue");
    }
}

function UpdateFilter(Coll,HdnId)
{
    var hdn2 = document.getElementsByTagName("input");
    for(var ii=0;ii<hdn2.length;ii++)
    {
        if(hdn2[ii].id.indexOf(HdnId) != -1)
        {
            var value = hdn2[ii].value.split(',');
            
            for(var j=0;j<value.length;j++)
            {
                switch(Coll)
                {
                    case "FiltercollectFieldName":
                         FiltercollectFieldName[j] = value[j];
                        break;
                    case "FiltercollectFieldType":
                        FiltercollectFieldType[j] = value[j];
                        break;
                    case "FiltercollectRelation":
                         FiltercollectRelation[j] = value[j];
                        break;
                    case "FiltercollectOperator":
                         FiltercollectOperator[j] = value[j];
                        break;
                    case "FiltercollectValue":
                         FiltercollectValue[j] = value[j];
                        break;
                    default:
                        break;
                }
            }
           break;
        }
    }
}

function UpdateFilterCollection()
{
    UpdateFilter("FiltercollectFieldName","hdn_FiltercollectFieldName");
    UpdateFilter("FiltercollectFieldType","hdn_FiltercollectFieldType");
    UpdateFilter("FiltercollectRelation","hdn_FiltercollectRelation");
    UpdateFilter("FiltercollectOperator","hdn_FiltercollectOperator");
    UpdateFilter("FiltercollectValue","hdn_FiltercollectValue");

    for(var k=0;k<FiltercollectFieldType.length;k++)
    {
        if(FiltercollectFieldType[k] == "")
        {
            continue;
        }
        
        var elemId = FiltercollectFieldType[k] + "_" + FiltercollectFieldName[k];
        var elem = null;
        var elems = null;
        
        switch(FiltercollectFieldType[k])
        {
            case "Lookup":
            case "LookupMulti":
            case "Choice":
                elems = document.getElementsByTagName("select");
                break;
            case "Text":
            case "URL":
            case "Boolean":
                elems = document.getElementsByTagName("input");
                break;
            case "DateTime":
                elemId = "DateTimeField_" + FiltercollectFieldName[k];
                elems = document.getElementsByTagName("input");
                break;
            default:
                break;
        }
        
        if(elems == null)
        {
            continue;
        }
        
        for(var ii=0;ii<elems.length;ii++)
        {
            if(elems [ii].id.indexOf(elemId) != -1)
            {
                elem = elems[ii];
                break;
            }
        }
            
        if(elem != null)
        {   
            switch(FiltercollectFieldType[k])
            {
                case "Lookup":
                case "LookupMulti":
                case "Choice":
                        for(var ii=0;ii<elem.length;ii++)
                        {
                            if(elem[ii].value == FiltercollectValue[k])
                            {
                                elem.selectedIndex = ii;
                                break;
                            }
                        }
                    break;
                case "Text":
                case "URL":
                        elem.value = FiltercollectValue[k];
                    break;
                case "Boolean":
                        if(FiltercollectValue[k] == "1")
                        {
                            elem.checked = true;
                        }
                        else
                        {
                            elem.checked = false;
                            //elem.checked = FiltercollectValue[k];
                        }
                    break;
                case "DateTime":
                        if(FiltercollectValue[k] != "-1" && FiltercollectValue[k] != "TODAY")
                        {
                            elem.value = FiltercollectValue[k];
                        }
                    break;
                default:
                    break;
            }
            
            var ddls =document.getElementsByTagName("select");
            var ddl= null;
            for(var d = 0; d<ddls.length;d++)
            {
                if(ddls[d].id.indexOf("DDLFilterOperator_" +FiltercollectFieldName[k]) != -1)
                {
                    ddl = ddls[d];
                    break;
                }
            }
            
            if(ddl != null)
            {
                //Getting TR
                ddl.parentElement.parentElement.style.display = "";
                //Getting CheckBox
                ddl.parentElement.parentElement.previousSibling.firstChild.firstChild.checked = true;
                for(var ii=0;ii<ddl.length;ii++)
                {
                    if(ddl[ii].value == FiltercollectOperator[k])
                    {
                        ddl.selectedIndex = ii;
                        break;
                    }
                }
            }
        }
    }
}

function UpdateHiddenField(Coll,HdnId)
{
    var hdn2 = document.getElementsByTagName("input");
    for(var ii=0;ii<hdn2.length;ii++)
    {
        if(hdn2[ii].id.indexOf(HdnId) != -1)
        {
            switch(Coll)
            {
                case "FiltercollectFieldName":
                     hdn2[ii].value = FiltercollectFieldName;
                    break;
                case "FiltercollectFieldType":
                    hdn2[ii].value = FiltercollectFieldType;
                    break;
                case "FiltercollectRelation":
                     hdn2[ii].value = FiltercollectRelation;
                    break;
                case "FiltercollectOperator":
                     hdn2[ii].value = FiltercollectOperator;
                    break;
                case "FiltercollectValue":
                     hdn2[ii].value = FiltercollectValue;
                    break;
                default:
                    break;
            }
           break;
        }
    }
}

function AddIdToCollection(_FieldName,_FieldType)
{
    var ii = FiltercollectFieldName.length;
    FiltercollectFieldName[ii] = _FieldName;
    FiltercollectFieldType[ii] = _FieldType;
    FiltercollectRelation[ii] = "And";
    FiltercollectOperator[ii] = "Eq";
    FiltercollectValue[ii] = "-1";
    
    UpdateHiddenField("FiltercollectFieldName","hdn_FiltercollectFieldName");
    UpdateHiddenField("FiltercollectFieldType","hdn_FiltercollectFieldType");
    UpdateHiddenField("FiltercollectRelation","hdn_FiltercollectRelation");
    UpdateHiddenField("FiltercollectOperator","hdn_FiltercollectOperator");
    UpdateHiddenField("FiltercollectValue","hdn_FiltercollectValue");
}

function FillCollWithValue(Coll,Value,index)
{
    switch(Coll)
    {
        case "FiltercollectRelation":
             FiltercollectRelation[index] = Value;
             UpdateHiddenField("FiltercollectRelation","hdn_FiltercollectRelation");
            break;
        case "FiltercollectOperator":
             FiltercollectOperator[index] = Value;
             UpdateHiddenField("FiltercollectOperator","hdn_FiltercollectOperator");
            break;
        case "FiltercollectValue":
             if(Value == "")
             {
                Value = "-1";
             }
             
             FiltercollectValue[index] = Value;
             UpdateHiddenField("FiltercollectValue","hdn_FiltercollectValue");
            break;
        default:
            break;
    }
}

function FilterFieldChecked(_FieldId,_FieldName,_FieldType)
{
    var row; 
    var rows = document.getElementsByTagName('tr');
    for(var ii=0; ii<rows.length;ii++)
    { 
        if(rows[ii].id.indexOf("RowFilter_" + _FieldId) != -1)
        {
            row = rows[ii];
            break;
        }
    }
    
    if(row == null)
    {
        return;
    }
    
    if(row.style.display == 'none') 
    {
        row.style.display = '';
        AddIdToCollection(_FieldName,_FieldType);
    } 
    else 
    {
        row.style.display = 'none';
        RemoveIdFromCollection(_FieldName);
    }
}

function FilterRDBDateChangeChecked(Coll,rdbObj,_FieldName,rdbType,dtID)
{
    var indexToRemove = GetIndexByFieldName(_FieldName);
    if(indexToRemove != -1)
    {
        if((rdbObj.checked && rdbType == "TODAY") || (!rdbObj.checked && rdbType != "TODAY"))
        {
            FillCollWithValue(Coll,"TODAY",indexToRemove);
        }
        else
        {
            var dts = document.getElementsByTagName("input");
            var dt = null;
            for(var ii=0;ii<dts.length;ii++)
            {
                if(dts[ii].id.indexOf(dtID) != -1)
                {
                    dt = dts[ii];
                    break;
                }
            }
            
            if(dt != null)
            {
                FillCollWithValue(Coll,dt.value,indexToRemove);
            }
        }
    }
}

function CheckRDBDate(rdbID)
{
    var inputs = document.getElementsByTagName("input");
    var input = null;
    for(var ii=0;ii<inputs.length;ii++)
    {
        if(inputs[ii].id.indexOf(rdbID) != -1)
        {
            input = inputs[ii];
            break;
        }
    }
    
    if(input != null)
    {
        input.checked = true;
    }
}

function FilterCBXChangeChecked(Coll,cbxObj,_FieldName)
{
    var indexToRemove = GetIndexByFieldName(_FieldName);
    if(indexToRemove != -1)
    {
        FillCollWithValue(Coll,cbxObj.checked,indexToRemove);
    }
}

function FilterTXTChangeText(Coll,txtObj,_FieldName)
{
    
    var indexToRemove = GetIndexByFieldName(_FieldName);
    if(indexToRemove != -1)
    {
        FillCollWithValue(Coll,txtObj.value,indexToRemove);
    }
}

function FilterDDlChangeChecked(Coll,ddlObj,_FieldName)
{
    var indexToRemove = GetIndexByFieldName(_FieldName);
    if(indexToRemove != -1)
    {
        FillCollWithValue(Coll,ddlObj[ddlObj.selectedIndex].value,indexToRemove);
    }
}

function SetOrderDDL(eSelect, iCurrentField, numSelects)
{
	var eForm = eSelect.form;
	var iNewOrder = eSelect.selectedIndex + 1;
	var iPrevOrder;
	var positions = new Array(numSelects);
	var ix;
	for (ix = 0; ix < numSelects; ix++)
	{
		positions[ix] = 0;
	}
	for (ix = 0; ix < numSelects; ix++)
	{
		positions[eSelect.form["ViewOrder" + ix].selectedIndex] = 1;
	}
	for (ix = 0; ix < numSelects; ix++)
	{
		if (positions[ix] == 0)
		{
			iPrevOrder = ix + 1;
			break;
		}
	}
	if (iNewOrder != iPrevOrder)
	{
		var iInc = iNewOrder > iPrevOrder? -1:1
		var iMin = Math.min(iNewOrder, iPrevOrder);
		var iMax = Math.max(iNewOrder, iPrevOrder);
		for (var iField = 0; iField < numSelects; iField++)
		{
			if (iField != iCurrentField)
			{
				if (eSelect.form["ViewOrder" + iField].selectedIndex + 1 >= iMin &&
					eSelect.form["ViewOrder" + iField].selectedIndex + 1<= iMax)
				{
					eSelect.form["ViewOrder" + iField].selectedIndex += iInc;
				}
			}
		}
	}
}

function OpenCloseSpan(obj,cliendId,pnlId)
{
    var row; 
    var rows = document.getElementsByTagName('tr');
    for(var ii=0; ii<rows.length;ii++)
    {
        if(rows[ii].id.indexOf(cliendId + "_" + pnlId) != -1)
         {
            row = rows[ii]; 
            break; 
         }
     }
     
     if(row == null)
     {
        return;
     }

     if(row.style.display == 'none')
     {
        row.style.display = ''; 
        obj.firstChild.src ="/_layouts/images/TPMin2.gif";
     }
     else
     {
        row.style.display = 'none';
        obj.firstChild.src ="/_layouts/images/TPMax2.gif";    
     }
}

function SetOrderDDL2(eSelect,sSelectID, iCurrentField, numSelects)
{
    sSelectID = eSelect.name.substr(0,eSelect.name.indexOf(sSelectID)) + sSelectID;
	var eForm = eSelect.form;
	var iNewOrder = eSelect.selectedIndex + 1;
	var iPrevOrder;
	var positions = new Array(numSelects);
	var ix;
	for (ix = 0; ix < numSelects; ix++)
	{
		positions[ix] = 0;
	}
	for (ix = 0; ix < numSelects; ix++)
	{
		positions[eSelect.form[sSelectID + ix].selectedIndex] = 1;
	}
	for (ix = 0; ix < numSelects; ix++)
	{
		if (positions[ix] == 0)
		{
			iPrevOrder = ix + 1;
			break;
		}
	}
	if (iNewOrder != iPrevOrder)
	{
		var iInc = iNewOrder > iPrevOrder? -1:1
		var iMin = Math.min(iNewOrder, iPrevOrder);
		var iMax = Math.max(iNewOrder, iPrevOrder);
		for (var iField = 0; iField < numSelects; iField++)
		{
			if (iField != iCurrentField)
			{
				if (eSelect.form[sSelectID + iField].selectedIndex + 1 >= iMin &&
					eSelect.form[sSelectID + iField].selectedIndex + 1<= iMax)
				{
					eSelect.form[sSelectID + iField].selectedIndex += iInc;
				}
			}
		}
	}
}

function RollingUp(clientID)
{
    var rolling = document.getElementById(clientID + "Rolling");
    var firstRptSimpleList = document.getElementById(clientID + "RepeaterSimpleListFirst");
    var overflowDiv = document.getElementById(clientID + "OverflowDiv");
    
    if(firstRptSimpleList == null)
    {
        return;
    }
    
    if (!window.addEventListener)
    {
        var secondRptSimpleList = document.createElement("div");
        secondRptSimpleList.id = clientID + "secondRptSimpleList";   
        secondRptSimpleList.style.position = "relative";         
        secondRptSimpleList.innerHTML = firstRptSimpleList.innerHTML;
        overflowDiv.insertBefore(secondRptSimpleList);
        secondRptSimpleList.style.top = "0px";
        firstRptSimpleList.style.top = "0px";
        firstRptSimpleList.style.position = "relative";
    }
    else
    {
        overflowDiv.innerHTML = "<div id=\"" + clientID + "secondRptSimpleList\" style='position:relative; top:0px;'>" + firstRptSimpleList.innerHTML + "</div><div id='" + clientID + "RepeaterSimpleListFirst' style='position:relative; top:0px;'>" + firstRptSimpleList.innerHTML + "</div>";        
    }
    
    overflowDiv.style.height = firstRptSimpleList.offsetHeight.toString();
    rolling.style.height = firstRptSimpleList.offsetHeight.toString();
    
    window.setTimeout("DisplayItems_startRoll('"+clientID+"')", 1);
}

function DisplayItems_startRoll(clientID)
{
    if(document.all)
    {
        DoRollDisplayItems = setInterval("DisplayItems_Roll('"+clientID+"')", 50);
    }
    else
    {
        DoRollDisplayItems = setInterval("DisplayItems_Roll('"+clientID+"')", 75);
    }
}

function DisplayItems_Roll(clientID)
{
    var firstRptSimpleList = document.getElementById(clientID + "RepeaterSimpleListFirst");
    var secondRptSimpleList = document.getElementById(clientID + "secondRptSimpleList");

    if(firstRptSimpleList == null || secondRptSimpleList == null)
    {
        return;
    }
    
    firstRptSimpleList.style.top =  (parseInt(firstRptSimpleList.style.top) - 1).toString() + "px";
    secondRptSimpleList.style.top =  (parseInt(secondRptSimpleList.style.top) - 1).toString() + "px";
    if(parseInt(secondRptSimpleList.style.top) == 0)
    {
        firstRptSimpleList.style.top = "0px";
        secondRptSimpleList.style.top = "0px"; 
    }
    else if(parseInt(firstRptSimpleList.style.top) == secondRptSimpleList.offsetHeight* -1)
    {

        secondRptSimpleList.style.top = "0px";
        firstRptSimpleList.style.top = "0px";
    }
}

function StopRolling()
{
    if(window.DoRollDisplayItems != undefined)
    {
        clearTimeout(DoRollDisplayItems);
    }
}

function StartRolling(clientID)
{
    if(document.all)
    {
        DoRollDisplayItems = setInterval("DisplayItems_Roll('"+clientID+"')", 50);
    }
    else
    {
        DoRollDisplayItems = setInterval("DisplayItems_Roll('"+clientID+"')", 75);
    }
}

function ShowOrHideAllIsOpenCheckBox(checkboxObj)
{
    if(checkboxObj.checked)
    {
        ChangeCheckBoxStatus("");
    }
    else
    {
        ChangeCheckBoxStatus("none");
    }
}

function ChangeCheckBoxStatus(status)
{
    var divs = document.getElementsByTagName("div");
    
    for(var index = 0;index<divs.length;index++)
    {
        if(divs[index] != null && divs[index].id.indexOf("#pnlDisplayCollapsible#") != -1)
        {
            divs[index].style.display = status;
        }
    }
}

function CollapseAllItems(clientId,ItemsCount,status)
{
    for(var index = 0;index<ItemsCount;index++)
    {
        var input = document.getElementById(clientId + "_OpenCloseInput_" + index.toString());
        
        if(input != null)
        {
            if(status == "Plus")
            {
                input.className = "OpenCloseInputOpen";
            }
            else
            {
                input.className = "OpenCloseInputClose";
            }
        
            CollapseItem(input,clientId+"_OpenClose_"+index.toString());
        }
    }
}

function CollapseItem(inputObj,DivId)
{
    var div = document.getElementById(DivId);
    if(div == null)
    {
        return;
    }
     
    if(inputObj.className == "OpenCloseInputClose")
    {
        inputObj.className = "OpenCloseInputOpen";
        inputObj.parentNode.parentNode.className = "OpenCloseDiv Opened";
        div.style.display = "";
    }
    else
    {
        inputObj.className = "OpenCloseInputClose";
        inputObj.parentNode.parentNode.className = "OpenCloseDiv";
        div.style.display = "none";
    }
}
