﻿var Site = {
	start: function() {
	    ExternalLinks.start();
	    GuideAccordions.start();
	    setInterval('Columns.CheckHeights()',100);
	    Downloads.start();
	    DownloadTrial.start();
	    ResourceSelector.start();
	    GatewayTerms.start();
	    __CMS_CurrentUrl = document.location;
    },
    startAferImages: function() {
	    Columns.start();
    }
};

var SubscriptionPrices = {
    init: function(priceLabel) {
        this.priceLabel = $(priceLabel);
        this.v3basePrice = $('v3BasePrice').value;
        this.v3totalPrice = $('v3TotalPrice').value;
        this.v3count = parseInt($('v3Count').value);
        this.v2basePrice = $('v2BasePrice').value;
        this.v2totalPrice = $('v2TotalPrice').value;
        this.v2count = parseInt($('v2Count').value);
        this.v2v3Price = $('v2v3Price').value;
        SubscriptionPrices.update();
    },
    
    update: function() {
		var price = 0;
		price += SubscriptionPrices.updateModel('itilv3', this.v3basePrice, this.v3totalPrice, this.v3count);
		price += SubscriptionPrices.updateModel('itilv2', this.v2basePrice, this.v2totalPrice, this.v2count);
		
		// check if all selected
		var count = 0;
		var elems = document.getElementsByClassName('rbyes');
		elems.each(function(el) {
		    if(el.checked)
		        count++;
		});
		if(count == this.v2count + this.v3count)
		    this.priceLabel.innerHTML = this.v2v3Price;
		else
		    this.priceLabel.innerHTML = '$' + price.toFixed(2);
    },
    
    updateModel: function(id, base, total, totalcount) {
        var price = 0;
        var count = 0;
        
        var elems = $(id).getElements('.rbyes');
        elems.each( function(el) {
	        if(el.checked)
	            count++;
		});
		
		if(count == totalcount)
		    price = parseInt(total.substring(1));
		else {
		    price = parseInt(base.substring(1)) * count;
		}
        
        return price;
    }
    
};

var WebDesk = {
    login: function() {
        var user = $('user');
        var pass = $('password');

	    var form = new Element('form').injectInside(document.body);
	    form.method = 'post';
	    form.action = 'http://support.casewise.co.uk/SW/bin/supportwizard.cgi';
	    form.target = '_blank';
	    
	    WebDesk.createInput('hidden', 'KeyID', '0').injectInside(form);
	    WebDesk.createInput('hidden', 'ExitURL', 'http://www.casewise.com/Support/').injectInside(form);
	    WebDesk.createInput('hidden', 'ErrorURL', 'http://www.casewise.com/Support/?action=error').injectInside(form);
	    WebDesk.createInput('hidden', 'Product', 'Corporate Modeler Support').injectInside(form);
	    WebDesk.createInput('hidden', 'Action', 'OK').injectInside(form);
	    WebDesk.createInput('text', 'user', user.value).injectInside(form);
	    WebDesk.createInput('text', 'passwd', pass.value).injectInside(form);
	    
	    form.submit();
    },
    
    createInput: function(type, name, value) {
        var el = new Element('input');
        el.type = type;
        el.name = name;
        el.id = name;
        el.value = value;
        
        // hide text elements
        if(type == 'text') {
            el.setStyle('position', 'absolute');
	        el.setStyle('left', '-5000px');
        }
        
        return el;
    }
};

var ExternalLinks = {
    start: function() {
        if (!document.getElementsByTagName) return;
        var anchors = document.getElementsByTagName('a');
        for (var i=0; i<anchors.length; i++) {
            var anchor = anchors[i];
            if (anchor.getAttribute('href') && anchor.getAttribute('rel') == 'external')
               anchor.target = '_blank';
        }
    }
};

var Columns = {
    start: function() {
        var el = new Element('span');
		el.id='fontsizedetector';
		el.setHTML('&nbsp;');
		el.setStyles({'position':'absolute','left':'-9999px'}).injectInside($E('body'));
		
        Columns.maxheight = 0;
        Columns.fontSize = 0;
        Columns.CheckHeights();
    },
    CheckHeights: function(){
        if($('fontsizedetector').offsetHeight!=Columns.fontSize){
            Columns.fontSize = $('fontsizedetector').getSize().size.y;
            Columns.UpdateHeights();
        }
    },
    UpdateHeights: function(){
        if (!$('content'))
            return;
        var columns = $('content').getElements('.col');
        var newMaxHeight = 0;
        columns.each(function(div, i) {
            div.setStyle('height','auto');
            var col = div.getFirst().getNext();
            
            if(i == 1)
                col.setStyle('margin-bottom','10px')
            else if(i == 3 || i == 2)
                div.getFirst().getNext().setStyle('height','auto');
            
            if(div.getSize().size.y > newMaxHeight) newMaxHeight = div.getSize().size.y;
        }); 
    
        if(newMaxHeight == Columns.maxheight)
            return;
        
        Columns.maxheight = newMaxHeight;
    
        columns.each(function(div, i) {
            var col = div.getFirst().getNext();
            var link = div.getElements('.columnlink')[0];
            if(i == 0) {
                var sb = div.getElements('.welcomeleft')[0];
                sb.setStyle('top', '0px');
                sb.setStyle('position', 'relative');
                sb.setStyle('top', offset + 'px');
            } else if(i == 1) {
                link.setStyle('top', '0px');
                if(window.ie6)
                    offset -= 5;
                link.setStyle('position', 'relative');
                link.setStyle('top', offset + 'px');
            } else if(i == 2) {
                link.setStyle('top', '0px');
                if(window.ie6)
                    offset -= 5;
                link.setStyle('position', 'relative');
                link.setStyle('top', offset + 'px');
                
            } else if(i == 3) {
                var headerSize = div.getFirst().getSize().size.y +10;
                div.getFirst().getNext().setStyle('height', Columns.maxheight - headerSize + 'px');
            }
            
            // set column height
            div.setStyle('height',Columns.maxheight+'px');
        });      
    }
}

var GuideAccordions = {
    start: function() {
        var stretchers = $$('div.accordion');
        stretchers.each(function(item){
            item.setStyles({'height': '0', 'overflow': 'hidden'});
        });
        $$('div.header').addEvent('mouseover',function() {
            this.isover = true;
            this.getNext().setStyle('background','#F5F5F9 url(../../images/bg_accordion_over.gif) repeat-x');
            this.setStyle('background-color','#D9DEEC');
        });
        $$('div.header').addEvent('mouseout',function() {
            this.isover = false;
            if(!this.getElement('a').hasClass('open')){
                this.setStyle('background-color','#EBEFF5');
                this.getNext().setStyle('background','#FAFAFC url(../../images/bg_accordion.gif) repeat-x');
            }
        });        
	
        myAccordion = new Fx.Accordion($$('h3.toggler a'), $$('div.accordion'),{alwaysHide:true,
            onActive: function(toggler, i){
                toggler.open = true;
                toggler.toggleClass('open');
                    toggler.getParent().getParent().setStyle('background-color','#D9DEEC');
                    toggler.getParent().getParent().getNext().setStyle('background','#F5F5F9 url(../../images/bg_accordion_over.gif) repeat-x');                                
            },
            onBackground: function(toggler, i){        
                if(toggler.hasClass('open')){
                    toggler.toggleClass('open');
                }
                // a > h3 > div.header
                var header = toggler.getParent().getParent();
                if(!header.isover){                    
                    header.setStyle('background-color','#EBEFF5');
                    header.getNext().setStyle('background','#FAFAFC url(../../images/bg_accordion.gif) repeat-x');                
                 }
                        
            },show:-1,opacity:false});
    }
};

var loadedImages = false;

var Banner = {
    start: function(el, bannerUrls, linkUrls) {                 
        var banner = $('banner');
        var images = bannerUrls.split(",");
        var links = linkUrls.split(",");

        if(!banner.newimagediv)
            banner.newimagediv = new Element('div').setStyles({'width':'960px','height':'274px','opacity':'0','position':'relative', 'z-index':'2'}).injectInside(banner);
        banner.newimagediv.setStyle('display', 'block');
        var fade = new Fx.Style(banner.newimagediv, 'opacity', {duration:500, transition: Fx.Transitions.linear});
        
        if(!loadedImages){
            for (var i=0; i<images.length; i++) {
                var img = new Image();
                img.src = images[i];
            }
            loadedImages = true;
        }
        
        var ran_number = Math.floor(Math.random() * images.length);
        var ran_unrounded = Math.random() * images.length;
        var ran_number = Math.floor(ran_unrounded); 

        banner.newimagediv.setStyle('background-image','url(' + images[ran_number] + ')');
        
        fade.stop();    
        fade.start(1).chain(function(){
            banner.setStyle('background-image',banner.newimagediv.getStyle('background-image'));
            banner.newimagediv.setStyles({'opacity':'0','display':'none'});      
            if(links[ran_number]!='')
                banner.href = links[ran_number];                  
            else
                banner.removeAttribute('href');
        });
        
        t = setTimeout('Banner.start("banner", "' + bannerUrls + '","'+ linkUrls+'")', 7000);
    }
};

var Downloads = {
    start : function() {
        var els = $$('.downloadinner');
        els.each(function(el) {
            var lis = el.getElements('li');
            for(var i = 0; i + 1 < lis.length; i += 2) {
                var h = lis[i].getSize().size.y >= lis[i + 1].getSize().size.y ? lis[i].getSize().size.y - 52 : lis[i+1].getSize().size.y - 52;
                lis[i].style.height = lis[i + 1].style.height = h + 'px';
            }
        });
    }
};

var Documentation = {
    showLoginMessage : function(el) {
        var lgs = $$('.login');
        lgs.each(function(lg) {
            lg.setStyle('display', 'none');
        });
        var login = $(el).getNext();
        login.setStyle('display', 'block');
    },
    
    showKnownIssue : function(el) {
        var txt = $(el).getNext();
        if(txt.className == 'login') {
            var lgs = $$('.login');
            lgs.each(function(lg) {
                lg.setStyle('display', 'none');
            });
        } else {
            var ans = $$('.answer');
            ans.each(function(an) {
                an.setStyle('display', 'none');
            });
        }
        txt.setStyle('display', 'block');
    }
};

var DownloadTrial = {
    start : function() {
        var els = $$('.downloadcategorydropdown');
        if(els.length > 0) {
            var el = els[0];
            var sels = el.getElements('select');
            
            // hide selects (except first)
            DownloadTrial.setSelectState(sels);
                
            // setup show event
            sels[0].dc = el;
            sels[0].addEvent('change', function() {
                var sels = this.dc.getElements('select');
                DownloadTrial.setSelectState(sels);
            });
        }
    },
    
    setSelectState : function(sels) {
        for(var i=1; i<sels.length; i++) {
            var guid = sels[i].getParent().getElements('.invisible')[0];
            if(guid.innerHTML == sels[0].value)
                sels[i].setStyle('display', 'block');
            else
                sels[i].setStyle('display', 'none');
        } 
    }
};

var ResourceSelector = {
    start: function() {
        var els = $$('.resourceselector');
        els.each(function(el) {
            // set the initial state of the control
            ResourceSelector.init(el);
            
            // hook up action to add link
            var add = el.getElements('.add')[0];
            add.selector = el;
            add.addEvent('click', function() {
                ResourceSelector.addRow(this.selector);
            });
        });
    },
    
    init : function(selector) {
        var drop = selector.getElements('select')[0];
        var tb = selector.getElements('.selectedvalue')[0];
        
        // init selected options        
        var selectedOptions = new Array();
        for(var i=0; i<drop.options.length; i++) {
            if(tb.value.indexOf(drop.options[i].value) >= 0)
                selectedOptions[selectedOptions.length] = drop.options[i];
        }
        selectedOptions.each(function(opt) {
            opt.selected = true;
            ResourceSelector.addRow(selector);
        });
        
        // sort options
        ResourceSelector.sortDrop(drop);
    },
    
    addRow : function(selector) {
        var drop = selector.getElements('select')[0];
        var tb = selector.getElements('.selectedvalue')[0];
        var lastRow = selector.getElements('.dropdown')[0];
        
        if(drop.selectedIndex >= 0) {
            // get selected option
            var opt = drop.options[drop.selectedIndex];
            var val = opt.value;
            var txt = opt.text;
            var txt_l = txt.toLowerCase();
            
            // remove from drop down
            drop.options[drop.selectedIndex] = null;
            drop.selectedIndex = 0;
            if(drop.options.length == 0) {
                drop.disabled = true;
                drop.setStyle('background-color', 'f7f7f7');
            }
            
            // add to text box
            if(tb.value.indexOf(val) < 0)
                tb.value += val;
            
            // work out where to inject this row
            var before = null;
            var trs = selector.getElements('tr');
            trs.each(function(tr) {
                if(!tr.hasClass('dropdown')) {
                    var trval = tr.getElements('input')[0].value.toLowerCase();
                    var comp = (trval < txt_l) - (txt_l < trval);
                    if(comp > 0)
                        before = tr;
                }
            });
            if(before == null)
                before = lastRow;
            
            // add new row to table
            var newRow = new Element('tr').injectAfter(before);
            var tbCell = new Element('td').injectInside(newRow);
            var tbNew = new Element('input').addClass('text').injectInside(tbCell);
            tbNew.type = 'text';
            tbNew.value = txt;
            var dlCell = new Element('td').injectInside(newRow);
            
            // add delete link
            var link = new Element('a').addClass('delete').injectInside(dlCell);
            link.innerHTML = 'x';
            link.selectedValue = val;
            link.selectedText = txt;
            link.row = newRow;
            link.selector = selector;
            link.href = 'javascript:void(0)';
            link.addEvent('click', function() {
                ResourceSelector.deleteRow(this.selector, this, this.row);
            });
        }
    },
    
    deleteRow : function(selector, link, row) {
        var drop = selector.getElements('select')[0];
        var tb = selector.getElements('.selectedvalue')[0];
        var lastRow = selector.getElements('.dropdown')[0];
        
        // put option back in drop down
        var opt = new Option(link.selectedText, link.selectedValue);
        drop.options[drop.options.length] = opt;
        opt.selected = true;
        ResourceSelector.sortDrop(drop);
        drop.disabled = false;
        drop.setStyle('background-color', 'ffffff');
        
        // remove row from table
        row.remove();
        
        // remove from selected text
        tb.value = tb.value.replace(link.selectedValue, '');
    },
    
    sortDrop : function(drop) {
        // collect current options in array
        var copyOption = new Array();
        for (var i = 0; i < drop.options.length; i++)
            copyOption[i] = new Array(drop.options[i].text, drop.options[i].value, drop.options[i].selected);

        // sort array by text
        copyOption.sort(
            function(a, b) { 
                return (b[0].toLowerCase() < a[0].toLowerCase()) - (a[0].toLowerCase() < b[0].toLowerCase()); 
            }
        );

        // clear current options
        drop.options.length = 0;

        // add sorted options back to dropdown
        for (var i = 0; i < copyOption.length; i++) {
            var opt = new Option(copyOption[i][0], copyOption[i][1], copyOption[i][2]);
            drop.options[drop.options.length] = opt;
        }
    }
};

var GatewayTerms = {
    start: function() {
        var link = $('gatewayterms');
        if (!link)
            return;
        link.href = "javascript:void(0);";
        link.addEvent('click', function() {
            window.open("GatewayTerms.html", null, "width=500,height=500,resizable=yes,scrollbars=yes");
        });
    }
};

window.addEvent('domready', Site.start);
window.addEvent('load', Site.startAferImages);


// fix rad editor width
function OnClientModeChange(editor)
{
    var htmlArea = document.getElementById("RadEContentTextarea" + editor.Id); 
    htmlArea.style.width = (editor.GetWidth()-24) + "px";
}
