Element.implement({
    toQueryString: function(){
        var queryString = [];
        $A(this.getElementsByTagName('*')).each(function(el){
            var name = $(el).name;
            try {
                //this causes problems in IE6
                var value = $(el).getValue();
                if($type(value) == "array") value = value.toString();
                //don't want params not required by API to appear
                if (value && name && name != 'thisId' && name != 'type') queryString.push(encodeURIComponent(name)+'='+encodeURIComponent(value));
            }
            catch(e) {
                dbug.log("toQueryString - couldn't fetch value: " + e.message);
            }
        });
        return queryString.join('&');
    },
    getValue: function(){
        var value = false;
        var values = [];
        switch(this.getTag()){
            case 'select':
                this.getElements('option').each(function(option, index){
                    if(option.selected) values.push(option.value);
                });
                if(values.length >1) return values;
                else if(values) return values[0];
                else return value;
                break;
            case 'input': if ( (this.checked && ['checkbox', 'radio'].test(this.type)) || (['hidden', 'text', 'password'].test(this.type)) )
                value = this.value; break;
            case 'textarea': value = this.value;
        }
        return value;
    }
});

var DashBoardBase = new Class({
    getServerPath: function(){
        if(window.location.href.test('techweb.cnet.com'))
            return 'http://c18-gdl-dev40-dl6.cnet.com:7006';
        return '';
    },
    getBasePath: function(){
        if(window.location.href.test(':7') ||
           window.location.href.test(':8080') ||
           window.location.href.test('localhost'))
        //Modified for For API Standard -Ramadoss Chinnakuzhandai 05/23/2008
        //return '/www-rb-api/restApi/v1.0/';
         return '/www-rb-api/rest/v1.0/';
        //return 'http://'+window.location.host+'/restApi/v1.0/';
        return 'http://'+window.location.host+'/rest/v1.0/';
    },
    timer: new Date().getTime(),
    startTimer: function() {
        this.timer = new Date().getTime();
    },
    endTimer: function(){
        $('time').setHTML('('+(new Date().getTime() - this.timer)+' ms)');
    },
    getRequestUrl: function(form, path) {



        return this.getBasePath() + path + '?' + $(form).toQueryString();
    },
    displayUrl: function(options){
        try{
            if(options.url)
                $('requestUrl').value = options.url;
            if($type.isSet(options.form) && $type.isSet(options.path))
                $('requestUrl').value = this.getRequestUrl(options.form, options.path);
        } catch(e) {
            this.alert("error!", "Couldn't display request URL: " + e.message);
        }
    },
    getRadioValue: function(className){
        var val = false;
        document.getElementsByClassName(className).each(function(el){
            if (el.checked == true) val = el.value;
        });
        return val;
    },
    alert: simpleErrorPopup, //(msghdr, msg)
    processSubmit: function(form, path) {
        form = $(form);
        var id = null;
        var type = null;
        var productIdValue = null;
        var productSeriesIdValue = null;
        var newsStoryIdValue = null;
        var newsGalleryIdValue = null;
        var blogCategoryIdValue = null;
        var blogEntryIdValue = null;
        var newsCategoryIdValue = null;
        var newsSourceIdValue = null;
        var newsSubTypeIdValue = null;
        var termIdValue = null;
        var listIdValue = null;
        var commentIdValue = null;
        var parentCommentIdValue = null;
        var ursRegIdValue = null;
        var folderTypeIdValue = null;
        try {
        if(form.type != null && form.thisId != null) {
            id = form.thisId.value;
            type = form.type.value;
            switch (form.type.value) {
                case('productId'):
                    if(form.thisId.value.match(",")) {
                        form.productId.value = '';
                        form.productIds.value = form.thisId.value;
                        form.productSetId.value = '';
                        form.productSetIds.value = '';
                     }
                    else {
                        form.productId.value = form.thisId.value;
                        form.productIds.value = '';
                        form.productSetId.value = '';
                        form.productSetIds.value = '';
                     }
                    break;
                case('productSeriesId'):
                    if (form.thisId.value.match(",")) {
                        form.productSeriesId.value = '';
                        form.productSeriesIds.value = form.thisId.value;
                    } else {
                        form.productSeriesId.value = form.thisId.value;
                        form.productSeriesIds.value = '';
                    }
                    break;
                case('ursRegId'):
                    if (form.thisId.value.match(",")) {
                        form.ursRegId.value = '';
                        form.ursRegIds.value = form.thisId.value;
                    } else {
                        form.ursRegId.value = form.thisId.value;
                        form.ursRegIds.value = '';
                    }
                    break;
                case('productSetId'):
                    if(form.thisId.value.match(",")) {
                        form.productId.value = '';
                        form.productIds.value = '';
                        form.productSetId.value = '';
                        form.productSetIds.value = form.thisId.value;
                     }
                    else {
                        form.productId.value = '';
                        form.productIds.value = '';
                        form.productSetId.value = form.thisId.value;
                        form.productSetIds.value = '';
                     }
                    break;
                case('productIds'):
                    form.productIds.value = form.thisId.value;
                    form.productSetIds.value = '';
                    break;
                case('productSeriesIds'):
                    form.productSeriesIds.value = form.thisId.value;
                    break;
                case('ursRegIds'):
                    form.ursRegIds.value = form.thisId.value;
                    break;
                case('productSetIds'):
                    form.productSetIds.value = form.thisId.value;
                    form.productIds.value = '';
                    break;
                case('zoneContentId'):
                    if(form.thisId.value.match(",")) {
                        form.zoneContentId.value = '';
                        form.zoneContentIds.value = form.thisId.value;
                     }
                    else {
                        form.zoneContentIds.value = '';
                        form.zoneContentId.value = form.thisId.value;
                     }
                    break;
                case('cdsProductId'):
                    if(form.thisId.value.match(",")) {
                        form.cdsProductId.value = '';
                        form.cdsProductIds.value = form.thisId.value;
                     }
                    else {
                        form.cdsProductIds.value = '';
                        form.cdsProductId.value = form.thisId.value;
                     }
                    break;
            }
            form.thisId.value = '';
            form.type.value = '';
        }
        }catch(e){dbug.log(e)};
        // decide if we should submit productId or productIds by whether there's a ','
        try {
        if(form.productIdValue != null) {
            productIdValue = form.productIdValue.value;
            if(form.productIdValue.value.match(",")) {
                form.productIds.value = form.productIdValue.value;
                form.productId.value = '';
            }
            else {
                form.productId.value = form.productIdValue.value;
                form.productIds.value = '';
                form.productIds = null;
            }
            form.productIdValue.value = '';
        }
        if (form.productSeriesIdValue != null) {
            productSeriesIdValue = form.productSeriesIdValue.value;
            if (form.productSeriesIdValue.value.match(",")) {
                form.productSeriesIds.value = form.productSeriesIdValue.value;
                form.productSeriesId.value = '';
            } else {
                form.productSeriesId.value = form.productSeriesIdValue.value;
                form.productSeriesIds.value = '';
                form.productSeriesIds = null;
            }
            form.productSeriesIdValue.value = '';
        }
        if (form.ursRegIdValue != null) {
            ursRegIdValue = form.ursRegIdValue.value;
            if (form.ursRegIdValue.value.match(",")) {
                form.ursRegIds.value = form.ursRegIdValue.value;
                form.ursRegId.value = '';
            } else {
                form.ursRegId.value = form.ursRegIdValue.value;
                form.ursRegIds.value = '';
                form.ursRegIds = null;
            }
            form.ursRegIdValue.value = '';
        }
        if (form.folderTypeIdValue != null) {
            folderTypeIdValue = form.folderTypeIdValue.value;
            if (form.folderTypeIdValue.value.match(",")) {
                form.folderTypeIds.value = form.folderTypeIdValue.value;
                form.folderTypeId.value = '';
            } else {
                form.folderTypeId.value = form.folderTypeIdValue.value;
                form.folderTypeIds.value = '';
                form.folderTypeIds = null;
            }
            form.folderTypeIdValue.value = '';
        }
        if (form.newsSubTypeIdValue != null) {
            newsSubTypeIdValue = form.newsSubTypeIdValue.value;
            if (form.newsSubTypeIdValue.value.match(",")) {
                form.subTypeIds.value = form.newsSubTypeIdValue.value;
                form.subTypeId.value = '';
            } else {
                form.subTypeId.value = form.newsSubTypeIdValue.value;
                form.subTypeIds.value = '';
                form.subTypeIds = null;
            }
            form.newsSubTypeIdValue.value = '';
        }
        if(form.storyIdValue != null) {
            storyIdValue = form.storyIdValue.value;
            if(form.storyIdValue.value.match(",")) {
                form.storyIds.value = form.storyIdValue.value;
                form.storyId.value = '';
            }
            else {
                form.storyId.value = form.storyIdValue.value;
                form.storyIds.value = '';
                form.storyIds = null;
            }
            form.storyIdValue.value = '';
        }
        if(form.galleryIdValue != null) {
            galleryIdValue = form.galleryIdValue.value;
            if(form.galleryIdValue.value.match(",")) {
                form.galleryIds.value = form.galleryIdValue.value;
                form.galleryId.value = '';
            }
            else {
                form.galleryId.value = form.galleryIdValue.value;
                form.galleryIds.value = '';
                form.galleryIds = null;
            }
            form.galleryIdValue.value = '';
        }
        if (form.blogCategoryIdValue != null) {
            blogCategoryIdValue = form.blogCategoryIdValue.value;
            if (form.blogCategoryIdValue.value.match(",")) {
                form.blogCategoryIds.value = form.blogCategoryIdValue.value;
                form.blogCategoryId.value = '';
            } else {
                form.blogCategoryId.value = form.blogCategoryIdValue.value;
                form.blogCategoryIds.value = '';
                form.blogCategoryIds = null;
            }
            form.blogCategoryIdValue.value = '';    
        }
        if (form.blogEntryIdValue != null) {
            blogEntryIdValue = form.blogEntryIdValue.value;
            if (form.blogEntryIdValue.value.match(",")) {
                form.blogEntryIds.value=form.blogEntryIdValue.value;
                form.blogEntryId.value='';
                form.blogEntryId = null;
            } else {
                form.blogEntryId.value=form.blogEntryIdValue.value;
                form.blogEntryIds.value='';
                form.blogEntryIds=null;
            }
            form.blogEntryIdValue.value = '';
        }
        if (form.newsCategoryIdValue != null) {
            newsCategoryIdValue = form.newsCategoryIdValue.value;
            if (form.newsCategoryIdValue.value.match(",")) {
                form.categoryIds.value = form.newsCategoryIdValue.value;
                form.categoryId.value = '';
                form.categoryId = null;
            } else {
                form.categoryId.value = form.newsCategoryIdValue.value;
                form.categoryIds.value = '';
                form.categoryIds = null;
            }
            form.newsCategoryIdValue.value = '';
        }
        if (form.newsSourceIdValue != null) {
            newsSourceIdValue = form.newsSourceIdValue.value;
            if (form.newsSourceIdValue.value.match(",")) {
                form.sourceIds.value = form.newsSourceIdValue.value;
                form.sourceId.value = '';
                form.sourceId = null;
            } else {
                form.sourceId.value = form.newsSourceIdValue.value;
                form.sourceIds.value = '';
                form.sourceIds = null;
            }
            form.newsSourceIdValue.value = '';
        }
        if (form.listIdValue != null) {
            listIdValue = form.listIdValue.value;
            if (form.listIdValue.value.match(",")) {
                form.listIds.value = form.listIdValue.value;
                form.listId.value = '';
                form.listId = null;
            } else {
                form.listId.value = form.listIdValue.value;
                form.listIds.value = '';
                form.listIds = null;
            }
            form.listIdValue.value = '';
        }
        if (form.commentIdValue != null) {
            commentIdValue = form.commentIdValue.value;
            if (form.commentIdValue.value.match(",")) {
                form.commentIds.value = form.commentIdValue.value;
                form.commentId.value = '';
                form.commentId = null;
            } else {
                form.commentId.value = form.commentIdValue.value;
                form.commentIds.value = '';
                form.commentIds = null;
            }
            form.commentIdValue.value = '';
        }
        if (form.parentCommentIdValue != null) {
            parentCommentIdValue = form.parentCommentIdValue.value;
            if (form.parentCommentIdValue.value.match(",")) {
                form.parentCommentIds.value = form.parentCommentIdValue.value;
                form.parentCommentId.value = '';
                form.parentCommentId = null;
            } else {
                form.parentCommentId.value = form.parentCommentIdValue.value;
                form.parentCommentIds.value = '';
                form.parentCommentIds = null;
            }
            form.parentCommentIdValue.value = '';
        }
        // these are specific to related terms and related assets access points
        if (form.id == 'relatedTermsForm' || form.id == 'relatedAssetsForm') {
            var currentContext = form.context.getValue();
            if("rubics" == currentContext && form.assetIdValue != null && form.assetIdValue.value != '') {
                assetIdValue = form.assetIdValue.value;
                form.assetIdValue.value = '';
                if (assetIdValue.match(",")) {
                    form.assetIds.value = assetIdValue;
                    form.assetId.value = '';
                    form.assetId = null;
                    form.termId.value = '';
                    form.termId = null;
                    form.termIds.value = '';
                    form.termIds = null;
                } else {
                    form.assetId.value = assetIdValue;
                    form.assetIds.value = '';
                    form.assetIds = null;
                    form.termId.value = '';
                    form.termId = null;
                    form.termIds.value = '';
                    form.termIds = null;
                }
            }
            if("rubics" != currentContext && form.termIdValue != null && form.termIdValue.value != '') {
                termIdValue = form.termIdValue.value;
                form.termIdValue.value = '';
                if (termIdValue.match(",")) {
                    form.termIds.value = termIdValue;
                    form.assetId.value = '';
                    form.assetId = null;
                    form.assetIds.value = '';
                    form.assetIds = null;
                    form.termId.value = '';
                    form.termId = null;
                } else {
                    form.termId.value = termIdValue;
                    form.assetIds.value = '';
                    form.assetIds = null;
                    form.assetId.value = '';
                    form.assetId = null;
                    form.termIds.value = '';
                    form.termIds = null;
                }
            }
        }
        if (form.excludeCorrectionsValue != null && form.excludeCorrections != null) {
            form.excludeCorrections.value = form.excludeCorrectionsValue.checked;
        }
        if (form.includeBlogNetworkAuthorsValue != null && form.includeBlogNetworkAuthors != null) {
            form.includeBlogNetworkAuthors.value = form.includeBlogNetworkAuthorsValue.checked;
        }
        if (form.searchChildNodesValue != null && form.searchChildNodes != null) {
            form.searchChildNodes.value = form.searchChildNodesValue.checked;
        }
        }catch(e){dbug.log(e)};

        try {
        if(form.id == 'cnetTermForm') {
            id = form.thisId.value;
            type = form.idType.value;
            if(form.assetId != null ) {
                form.assetId.value = '';
            }
            if(form.assetIds != null ) {
                form.assetIds.value = '';
            }
            if(form.termId != null ) {
                form.termId.value = '';
            }
            if(form.termIds != null ) {
                form.termIds.value = '';
            }
            if(form.termName != null ) {
                form.termName.value = '';
            }
            if(form.termNames != null ) {
                form.termNames.value = '';
            }
            if(form.seoTerm != null ) {
                form.seoTerm.value = '';
            }
            if(form.seoTerms != null ) {
                form.seoTerms.value = '';
            }
            switch (type) {
                case('assetId'):
                    if(id.match(",")) {
                        form.assetIds.value = id;
                     }
                    else {
                        form.assetId.value = id;
                     }
                    break;
                case('termId'):
                    if(id.match(",")) {
                        form.termIds.value = id;
                     }
                    else {
                        form.termId.value = id;
                     }
                    break;
                case('termName'):
                    if(id.match(",")) {
                        form.termNames.value = id;
                     }
                    else {
                        form.termName.value = id;
                     }
                    break;
                case('seoTerm'):
                    if(id.match(",")) {
                        form.seoTerms.value = id;
                     }
                    else {
                        form.seoTerm.value = id;
                     }
                    break;
            }
            form.thisId.value = '';
            form.idType.value = '';
            if( form.termId.value == '') form.termId = null;
            if( form.termIds.value == '') form.termIds = null;
            if( form.termName.value == '') form.termName = null;
            if( form.termNames.value == '') form.termNames = null;
            if( form.seoTerm.value == '') form.seoTerm = null;
            if( form.seoTerms.value == '') form.seoTerms = null;
        }
        }catch(e){dbug.log(e)};


        if($('partKey').getValue()){
            form.partKey.value=$('partKey').getValue();
        }
        else {
            form.partKey.value='';
        }

        if(part != null && part != ''){
            form.part.value=part;
        }
        this.displayUrl({form: form, path: path});
        if($('jsonTemplate').getValue()){
            form.viewType.value='json-bf';
            form.callback.value='DashBoard.renderObjectTemplate';
            this.displayUrl({form: form, path: path});
            this.renderTemplateByURL(this.getRequestUrl(form, path));
            //if we don't do this, the form submits and we get a double post
            if(form.thisId != null) form.thisId.value = id;
            if(form.type != null) form.type.value = type;
            if(form.productIdValue != null) form.productIdValue.value = productIdValue;
            if(form.productSeriesIdValue != null) form.productSeriesIdValue.value = productSeriesIdValue;
            if(form.ursRegIdValue != null) form.ursRegIdValue.value = ursRegIdValue;
            if(form.storyIdValue != null) form.storyIdValue.value = storyIdValue;
            if(form.galleryIdValue != null) form.galleryIdValue.value = galleryIdValue;
            if(form.blogEntryIdValue != null) form.blogEntryIdValue.value = blogEntryIdValue;
            if(form.blogCategoryIdValue != null) form.blogCategoryIdValue.value = blogCategoryIdValue;
            if (form.newsCategoryIdValue != null) form.newsCategoryIdValue.value = newsCategoryIdValue;
            if (form.newsSourceIdValue != null) form.newsSourceIdValue.value = newsSourceIdValue;
            if (form.newsSubTypeIdValue != null) form.newsSubTypeIdValue.value = newsSubTypeIdValue;
            if (form.listIdValue != null) form.listIdValue.value = listIdValue;
            if (form.commentIdValue != null) form.commentIdValue.value = commentIdValue;
            if (form.parentCommentIdValue != null) form.parentCommentIdValue.value = parentCommentIdValue;
            if (form.folderTypeIdValue != null) form.folderTypeIdValue.value = folderTypeIdValue;
            return false;
        }
        if($('noframesInput').checked) form.target='_top';
        if($type.isSet(form.viewType) && $type.isSet(form.callback)){
            form.viewType.value = '';
            form.callback.value = '';
            if($('json').checked) {
                form.viewType.value='json';
                form.callback.value=$('jsonCallback').value;
            }
        }
        this.displayUrl({form: form, path: path});
        form.action = this.getBasePath() + path;
        form.submit();
        if(form.thisId != null)  form.thisId.value = id;
        if(form.type != null) form.type.value = type;
        if(form.productIdValue != null) form.productIdValue.value = productIdValue;
        if(form.productSeriesIdValue != null) form.productSeriesIdValue.value = productSeriesIdValue;
        if(form.ursRegIdValue != null) form.ursRegIdValue.value = ursRegIdValue;
        if(form.storyIdValue != null) form.storyIdValue.value = storyIdValue;
        if(form.galleryIdValue != null) form.galleryIdValue.value = galleryIdValue;
        if(form.blogEntryIdValue != null) form.blogEntryIdValue.value = blogEntryIdValue;
        if(form.blogCategoryIdValue != null) form.blogCategoryIdValue.value = blogCategoryIdValue;
        if (form.newsCategoryIdValue != null) form.newsCategoryIdValue.value = newsCategoryIdValue;
        if (form.newsSourceIdValue != null) form.newsSourceIdValue.value = newsSourceIdValue;
        if (form.newsSubTypeIdValue != null) form.newsSubTypeIdValue.value = newsSubTypeIdValue;
        if (form.listIdValue != null) form.listIdValue.value = listIdValue;
        if (form.commentIdValue != null) form.commentIdValue.value = commentIdValue;
        if (form.parentCommentIdValue != null) form.parentCommentIdValue.value = parentCommentIdValue;
        if (form.folderTypeIdValue != null) form.folderTypeIdValue.value = folderTypeIdValue;
        //alert("unhidding responseBlock");
        //and unhide the iframe
        $("iframeresizer").show('block');
        //must hide the tmpl div if it exists
        $("tmplresizer").hide();
        this.startTimer();
    },
    updateScripts: function(url, qs) {
        url = ($type(qs))?url+'%3f'+qs:url;
        var script = new Element('script').setProperties({
            'id':'DashBoard.callbackScriptTagId',
            'src':url
        }).injectInside(document.body);
    },
    renderObjectTemplate: function(obj){
        this.endTimer();
      var myTemplateObj = TrimPath.parseDOMTemplate('default_table_tmpl_bf_jst');
      object = obj;
        $('tmplresizer').show('block');
      $('responseDiv').setHTML(myTemplateObj.process(object));
        $("iframeresizer").hide();
    },
    renderTemplateByURL: function(url){
        this.startTimer();
       //Modified for For API Standard -Ramadoss Chinnakuzhandai 05/23/2008 
       // if (!url.test('restApi')) window.location.href=jsonUrl;
        if (!url.test('rest')) window.location.href=jsonUrl;
        url = (url.test('\\\?'))?url:url+'?';
        url = (url.test('viewType=json'))?url:url+'&viewType=json-bf';
        url = (url.test('callback'))?url:url+'&callback=DashBoard.renderObjectTemplate';
        //perhaps this should be auto appended in the returned urls...
        if($('partKey').getValue()){
            url = (url.test('partKey'))?url:url+'&partKey=' + $('partKey').getValue();
        }
        if(!url.test(this.getBasePath())) url = this.getBasePath()+url;
        this.displayUrl({url: url});
        this.updateScripts(url);
    },
    init: function(){
        new Fx.Accordion($$('h2.toggler'), $$('dl.stretcher'), {duration: 250});
        $$('dl#returnOptions dt input.radio').each(function(el, index){
            el.addEvent('click', function(){
                this.unhideSubDL();
            }.bind(this));
        }, (this));
        this.unhideSubDL();

        var myTips = new Tips($S('.toolTipElement'), {
            timeOut: 700
        });
    },
    unhideSubDL: function(){
        var showNext = function(show){
            var next = $($(this.parentNode).getNext());
            var returnval = false;
            if(next && next.getTag() == "dd") {
                if(show) next.effect('height').custom(next.offsetHeight, next.scrollHeight);
                else if (next.offsetHeight > 0) next.effect('height').custom(next.offsetHeight,0);
                returnval = true;
            }
            next = null;
            return returnval;
        };
        $$('dl#returnOptions dt input.radio').each(function(el, index){
            if(el.checked==true) showNext.bind(el)(true);
            else showNext.bind(el)(false);
        });
    },
    collapse: function(id){
        $(id).hide();
        $(id + "Collapse").hide();
        $(id + "Expand").show('inline');
    },
    expand: function(id){
        $(id).show();
        $(id + "Collapse").show('inline');
        $(id + "Expand").hide();
    }
});
var DashBoard = new DashBoardBase();
Window.onDomReady(function(){DashBoard.init.delay(200, DashBoard)});

var colId = 0;
function nextUniqueColumnId() {
    return 'Column' + colId++;
};
