function Disable(f, d)
{ 
	if(f)
	{
		if(d)
		{
		    f.disabled = true;
		    if(f.type == 'text' || f.type == 'select-one')
		    {
		       // f.className = 'disabled'; 
		    }
			else
			{
			    var i = 0; 
			    while(i < f.length && f[i]){f[i].disabled = true; i++;}
			}
		}
        else
        {
		    f.disabled = false; 
		    if(f.type == 'text' || f.type == 'select-one')
		    {
		        // f.className = 'enabled'; 
		    }
			else
			{
				var i = 0; 
				while(i < f.length && f[i]){f[i].disabled = false; i++;}
			}
		} 
	} 
}

function DisableDate(form, date, d)
{
    var i = 0; 
	for( i = 0; i < form.length; i++)
	{
		x = form.elements[i];
		if(x.name == date + "_month")
			Disable(x, d);
		else if(x.name == date + "_year")
			Disable(x, d);
		else if(x.name == date + "_day")
			Disable(x, d);
	}

}

function SelectAll(select, element)
{
	for( i = 0; i < select.form.length; i++)
	{
		x = select.form.elements[i];
		if(x.name.substr(0, 8) == element + '_')
			x.checked = select.checked;
	}
    
}

function OwnerActivate(form, group){

	Disable(form.FranchiseOwner, group < 3);
	Disable(form.EdosOwner, (form.FranchiseOwner ? form.FranchiseOwner.value < 0 : false) || group < 4);
	Disable(form.FranchiseCodes, group != 2);
	Disable(form.MaxBalance1, group == 1);
	Disable(form.MaxBalance4, group == 1);
}

function base16(N) {
	var HexN = "", Q = N, R;
	while (true) 
	{
		R = Q % 16;
		HexN = "0123456789ABCDEF".charAt(R) + HexN;
		Q = (Q - R) / 16;
		if (Q == 0) break;
	}
	if (N < 16) HexN = "0" + HexN;
	return HexN;
}


function UpdateColor(R, G, B, view)
{
	//color = "#" + red.toString(16) + green.toString(16) + blue.toString(16);
	var r = parseInt("0" + R.value.toString(), 10);
	var g = parseInt("0" + G.value.toString(), 10);
	var b = parseInt("0" + B.value.toString(), 10);
	if(r > 255) r = 255;
	if(r < 0) r = 0;
	if(g > 255) g = 255;
	if(g < 0) g = 0;
	if(b > 255) b = 255;
	if(b < 0) b = 0;
	R.value = r;
	G.value = g;
	B.value = b;
	
	x = r < 128 ? 255 : 0;
	y = g < 128 ? 255 : 0;
	z = b < 128 ? 255 : 0;
	color = "#" + base16(r) + base16(g) + base16(b);
	color2 = "#" + base16(x) + base16(y) + base16(z);
	sample = document.getElementById(view)
	sample.style.background = color;
	sample.style.color = color2;
}

function DisableAmount(form, a)
{
	if(a)
	{
		Disable(form.Amount, a);
		Disable(form.Amount_check, a);
	}
	else
	{
		Disable(form.Amount_check, a);
		if(!form.Amount_check.checked)
			Disable(form.Amount, a);
	}
		
}

function ChangeCurrency(currency)
{
	var b = currency.value == '';
	var form = currency.form;
	
	Disable(form.Price1, b);
	Disable(form.Price2, b);
	Disable(form.Price3, b);
	Disable(form.Price4, b);
	Disable(form.Price5, b);

	Disable(form.Amount3, b);
	Disable(form.Amount4, b);
	Disable(form.Amount5, b);
	
	Disable(form.Price1A, b);
	Disable(form.Price2A, b);
	Disable(form.Price3A, b);
	Disable(form.Price4A, b);
}

//var SendMethod = -1;
var OldAmount = '';
var OldUnlimitedChecked = 0;

function DisablePages(form, value) {
    Disable(form.pages0, value);
    Disable(form.pages1, value);
    Disable(form.pages2, value);
    Disable(form.pages3, value);
    Disable(form.pages4, value);
    Disable(form.pages5, value);
    Disable(form.pages6, value);
    Disable(form.pages7, value);
    Disable(form.pages8, value);
    Disable(form.pages9, value);
    Disable(form.pages10, value);
    Disable(form.pages11, value);
    Disable(form.pages12, value);
    Disable(form.pages13, value);
    Disable(form.pages14, value);
    Disable(form.pages15, value);
    Disable(form.pages16, value);
    Disable(form.pages17, value);
    Disable(form.pages18, value);
    Disable(form.pages19, value);

    Disable(form.SortUp, value);
    Disable(form.SortDown, value);
    Disable(form.SortDefault, value);
    Disable(form.SortPages, value);
}

function OnChangeSetPagesRepProp(form, value) {
    //DisablePages(form, value == 0);
}

function OnChangeSendMethodRepProp(form, value) {
//    Disable(form.custommessage, value == 3);
//    Disable(form.SendRespondent, value == 3);
//    Disable(form.ToEmail, value == 3);
//    Disable(form.bccemail, value == 3);
//    Disable(form.distinctreports, value != 2);
//    Disable(form.JobComparison, value != 2);

    var b = value != -1 && value != 2

    Disable(form.papersize, b);
    Disable(form.profileletters, b);
    Disable(form.pagenumbers, b);
    Disable(form.graphical, b && value != 5);
    Disable(form.profileI, b);


    var a = (value == 1 || value == 3);
    Disable(form.language, a);

    Disable(form.setpages, a);
//    DisablePages(form, a || form.setpages[0].checked);
    DisablePages(form, a);
}


function OnChangeSendMethod(form, value)
{
	var a = (value == 1 || value == 3);
	Disable(form.custommessage, value == 3);
	Disable(form.SendRespondent, value == 3);
	Disable(form.ToEmail, value == 3);
	Disable(form.bccemail, value == 3);
	
	Disable(form.papersize, value != 2);
	Disable(form.profileletters, value != 2);
	Disable(form.pagenumbers, value != 2);
	Disable(form.graphical, value != 2 && value != 5);
	Disable(form.profileI, value != 2);
	
	Disable(form.distinctreports, value != 2);
	Disable(form.JobComparison, value != 2);

	OnChangeResearchModule(form, value);
	
	var smallteam = 1;
	if(form.smallteam)
	    smallteam = form.smallteam.value;
	
//	if(a != b)
	{
	    Disable(form.pages0, a);
	    Disable(form.pages1, a);
	    Disable(form.pages2, a);
	    c = a | smallteam == 0;
	    Disable(form.pages3, c);
	    Disable(form.pages4, c);
	    Disable(form.pages5, c);
	    Disable(form.pages6, c);
	    Disable(form.pages7, c);
	    Disable(form.pages8, c);
	    Disable(form.pages9, c);
	    Disable(form.pages10, c);
	    Disable(form.pages11, c);
	    Disable(form.pages12, c);
	    Disable(form.pages13, c);
	    Disable(form.pages14, c);
	    Disable(form.pages15, c);
	    Disable(form.pages16, c);
	    Disable(form.pages17, c);
	    Disable(form.pages18, c);
	    Disable(form.pages19, c);
	    
	    Disable(form.SortUp, a);
	    Disable(form.SortDown, a);
	    Disable(form.SortDefault, a);
	    Disable(form.SortPages, a);
	    Disable(form.language, a);
	    
        if(form.amount && form.unlimitedamount0)
        {
	        if(a)
	        {
		        if(!form.unlimitedamount0.disabled)
		        {
			        OldAmount = form.amount.value;
			        OldUnlimitedChecked = form.unlimitedamount0.checked;
			        form.unlimitedamount0.checked = 1;
		        }
	        }
	        else if(form.unlimitedamount0.checked)
	        {
		        form.amount.value = OldAmount;
		        form.unlimitedamount0.checked = OldUnlimitedChecked;
	        }
            Disable(form.unlimitedamount0, a);
            Disable(form.amount, form.unlimitedamount0.checked);
        }
	
        UpdateReservedPoints(form);
   }

	
//todo: change this back and consider the case when send method cannot be edited.
//	if(form.research)
//		Disable(form.researchreport, value != 2 | form.research.value == -1);
//	else
//		Disable(form.researchreport, value != 2);
};

function OnChangeSendMethodDpa(form, value) {
    OnChangeSendMethod(form, value);
}

function OnChangeAutomaticRenewal(form, value)
{
    Disable(form.Currency, value);
    Disable(form.RenewalLevel, !value);
    Disable(form.PointsToAdd, !value);
    Disable(form.FreePurchaseFranchiseAdmin, value);
    Disable(form.OrderFranchiseAdmin, value);
    Disable(form.FreePurchaseClientAdmin, value);
    Disable(form.OrderClientAdmin, value);
    Disable(form.AmountSelection, value);
    
    Disable(form.Amount1A, value);
    Disable(form.Amount2A, value);
    Disable(form.Amount3A, value);
    Disable(form.Amount4A, value);
    
    if(value)
    {
        Disable(form.Price1, true);
	    Disable(form.Price2, true);
	    Disable(form.Price3, true);
	    Disable(form.Price4, true);
	    Disable(form.Price5, true);

	    Disable(form.Amount1, true);
	    Disable(form.Amount2, true);
	    Disable(form.Amount3, true);
	    Disable(form.Amount4, true);
	    Disable(form.Amount5, true);
	
	    Disable(form.Price1A, true);
	    Disable(form.Price2A, true);
	    Disable(form.Price3A, true);
	    Disable(form.Price4A, true);
	}
	else
	{
	    Disable(form.Amount1, false);
	    Disable(form.Amount2, false);
	    ChangeCurrency(form.Currency)
	}

}


function OnClickUnlimited(form)
{
    UpdateReservedPoints(form);
    Disable(form.amount, form.unlimitedamount0.checked);
}

function FormatInteger(x)
{
    if(x == 0)
        return '0';
        
    if(x < 0) 
        a = -x; 
    else 
        a = x;
        
	s = '';
    b = 0;
    while(a != 0)
    {
	    c = a % 10;
	    a = (a - c) / 10;
	    if(b == 0 && s != '')
		    s = ThousandSep + s;
	    b = (b + 1) % 3;
	    s = c + s;
    }

    if(x < 0)
	    s = _T("-") + s;
	return s;
}

function UpdateReservedPointsEdit(form)
{
    SendMethod = form.sendmethod.value;
    if(SendMethod == -1 || SendMethod == 1 || SendMethod == 3 || form.amount_check.checked)
    {
        form.amount_reserve.value = 0;
        form.amount_release.value = 0;
    }
    else
    {
        points = form.pagepoints.value;
        
        if(ThousandSep != '')
        {                   
            amount_add = form.amount_add.value.replace(ThousandSep, '');
            amount_remove = form.amount_remove.value.replace(ThousandSep, '');
        }
        else
        {
            amount_add = form.amount_add.value;
            amount_remove = form.amount_remove.value;
        }
        
        z = parseInt(amount_add);
        if(isNaN(z))
            z = 0;
        x = z * points;
        
        form.amount_reserve.value = FormatInteger(x);
        
        z = parseInt(amount_remove);
        if(isNaN(z))
            z = 0;
        x = z * points;
        
        form.amount_release.value = FormatInteger(x);
    }
}


function UpdateReservedPoints(form)
{
    if(!form.reservepoints)
        return;
        
    SendMethod = GetSelectedRadio(form.sendmethod);
    if(SendMethod == -1 || SendMethod == 1 || SendMethod == 3 || !form.unlimitedamount0 || form.unlimitedamount0.checked)
        form.reservepoints.value = 0;
    else
    {
        var points1 = 0;
        var points2 = 0;
        var points3 = 0;
        
        if(form.pages0.checked || form.pages1.checked || form.pages2.checked || form.pages3.checked)
            points1 = 30;

        if(form.pages4.checked || form.pages5.checked || form.pages6.checked || 
            form.pages7.checked || form.pages8.checked || form.pages9.checked)
        {
            points1 = 30;
            points2 = 20;
        }
        
        if(form.pages10.checked)
        {
            points1 = 30;
            points2 = 20;
            points3 += 7;
        }
        if(form.pages11.checked)
        {
            points1 = 30;
            points2 = 20;
            points3 += 7;
        }
        if(form.pages12.checked)
        {
            points1 = 30;
            points2 = 20;
            points3 += 7;
        }
        if(form.pages13.checked)
        {
            points1 = 30;
            points2 = 20;
            points3 += 7;
        }
        if(form.pages14.checked)
        {
            points1 = 30;
            points2 = 20;
            points3 += 7;
        }
        if(form.pages15.checked)
        {
            points1 = 30;
            points2 = 20;
            points3 += 7;
        }
        if(form.pages16.checked)
        {
            points1 = 30;
            points2 = 20;
            points3 += 7;
        }
        if(form.pages17.checked)
        {
            points1 = 30;
            points2 = 20;
            points3 += 7;
        }
        if(form.pages18.checked)
        {
            points1 = 30;
            points2 = 20;
            points3 += 7;
        }
        if(form.pages19.checked)
        {
            points1 = 30;
            points2 = 20;
            points3 += 7;
        }
        
        var points = points1 + points2 + points3;
        
        var amount;
        
        if(ThousandSep != '')                        
            amount = form.amount.value.replace(ThousandSep, '');
        else
            amount = form.amount.value;
        
        var z = parseInt(amount);
        
        if(isNaN(z))
            z = 0;
          
        var x = z * points;
        
        form.reservepoints.value = FormatInteger(x);
    }
}

function GetSelectedRadio(radio)
{
    if(!radio.length)
        return radio;
    var i = 0;
	for(i = 0; i < radio.length; i++)
		if(radio[i].checked)
			return radio[i];
			
	return -1;
}

function SelectedRadio(radio, value)
{
    var i = 0; 
	for(i = 0; i < radio.length; i++)
		radio[i].checked = radio[i].value = value
}

function OnChangeResearchModule(form, localsendmethod)
{
	var x;
	if(form.sendmethod)
		x = GetSelectedRadio(form.sendmethod).value;
	else
		x = localsendmethod;

	if(form.research)
	{
	    Disable(form.researchreport, (x != 2) | (form.research.value == -1));
	    Disable(form.researchplace, form.research.value == -1);
	}
	else
	{
	    if(form.researchreport)
	        Disable(form.researchreport, (x != 2));
	}
};

var PageOrderDPA = new Array(16, 17, 18, 19, 1, 2, 3, 4, 15, 20, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14);
var PageOrder    = new Array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25);


function SwitchOptions(sel, a){ 
	var o = sel.options; 
	var i = sel.selectedIndex; 
	var j = i + a; 
	if(i >= 0 && j >= 0 && i < o.length && j < o.length){ 
		a = o[i]; 
		o[i] = new Option(o[j].text, o[j].value, false, o[j].selected); 
		o[j] = a 
		sel.selectedIndex = j; 
		UpdatePageVariable(sel.form.PA_Pages, o);
	} 
}

function CheckPage(p, i)
{
	if(p)
	{
		p.checked = 1;
		UpdatePageList(p, i);
	}
}

function OnPage1(p, i){
    PageOrder = PageOrderDPA;
	UpdatePageList(p, i); 
}

function OnPage2(p, i){
    PageOrder = PageOrderDPA;
	UpdatePageList(p, i); 
	if(p.checked)
	{
		CheckPage(p.form.pages0, 0);
	} 
}

function OnPage3(p, i){  
    PageOrder = PageOrderDPA;
	if(p.checked)
	{ 
		CheckPage(p.form.pages0, 0);
		CheckPage(p.form.pages4, 4);
		CheckPage(p.form.pages5, 5);
		CheckPage(p.form.pages6, 6);
		CheckPage(p.form.pages7, 7);
		CheckPage(p.form.pages8, 8);
	} 
	UpdatePageList(p, i); 
}

function UpdatePageVariable(p, o)
{
	p.value='';
	for(j = 0; j < o.length; j++) p.value += o[j].value + '@'; 
}

function SwitchArrayElements(o, i, j)
{ 
	a = o[i]; 
	o[i] = new Option(o[j].text, o[j].value, false, o[j].selected); 
	o[j] = a 
}

function UpdatePageList(p, i)
{
	UpdateReservedPoints(p.form);

	var sel = p.form.SortPages;
	var o = sel.options; 
	var n = o.length;
	var j;
	if(p.checked)
	{ 
		add = true;
		defaultOrder = true;
		insert = 0;
		for(j = 0; add && j < n; j++)
		{
			if(j < n - 1)
				defaultOrder = defaultOrder & (PageOrder[parseInt(o[j].value)] < PageOrder[parseInt(o[j + 1].value)]);
				
			if(PageOrder[parseInt(o[j].value)] < PageOrder[i])
				insert = j + 1;
				
			if(o[j].value == i) 
				add = false;
		}
		if(add)
		{
			if(insert < n & defaultOrder)
			{
				newOp = new Option(p.value, i, false, true);
				sel.selectedIndex = insert;
				var elOptOld = o[insert];  
				try 
				{
					sel.add(newOp, elOptOld); // standards compliant; doesn't work in IE
				}
				catch(ex) 
				{
					sel.add(newOp, insert); // IE only
				}
				sel.selectedIndex = insert;
			}
			else
				o[n] = new Option(p.value, i, false, true); 
		}
	} 
	else
	{ 
		for(j = 0; j < n; j++) 
			if(o[j].value == i) 
			{
				o[j] = null; 
				j--; n--;
			}
		sel.selectedIndex = -1;
	} 
	UpdatePageVariable(p.form.PA_Pages, o);
} 

function DefaultPageOrder(sel)
{
	var o = sel.options;
	var n = o.length;
	var i, j;
	for(i = n - 1; i > 0; i--)
		for(j = 0; j < i; j++)
			if(PageOrder[parseInt(o[j].value)] > PageOrder[parseInt(o[j + 1].value)])
				SwitchArrayElements(o, j, j + 1);
	sel.selectedIndex = -1;
	UpdatePageVariable(sel.form.PA_Pages, o);
}

function DefaultPageOrderDPA(sel){
    PageOrder = PageOrderDPA;
    DefaultPageOrder(sel);
}

