function validate_review_modal_form(f){
    var valid = true;
    var reason = f.reject_reason[f.reject_reason.selectedIndex].value;
    if (reason.length == 0) valid = false;
    if ((reason == "other") && (f.other_reason.value.length == 0)) valid = false;
    if (!valid) $('#rejection_error').get(0).className = "red";
    return valid;
}

function updateSubmissionChoice(thestring){
	document.getElementById('submissionchoice').value = thestring;
}

function switchAddressTypes(type, current){
	var newTypeDiv = document.getElementById(type + '_address');
	if(newTypeDiv && newTypeDiv != current){
		newTypeDiv.style.display = "block";
		if(current){current.style.display = "none";}
		current = newTypeDiv;
		return current;
	}
}

function confirm_delete(submissionName){
	var answer = confirm("Are you sure you want to delete '" + submissionName + "'?");
	if(answer){
		return true;
	}else{
		return false;
	}
}

function toggle_reject_box() {
    var textarea = document.getElementById('reject_box');
    var reason = document.reject_form.reject_reason.options[document.reject_form.reject_reason.selectedIndex].value;
    if (reason == 'other') {
        textarea.style.visibility = "visible";
    } else {
        textarea.style.visibility = "hidden";
    }
}

function toggleDates(turnOn) {
	var start_input = $('#startdate'),
	    end_input = $('#enddate');
    if (turnOn) {
        start_input.removeClass('disabled').get(0).disabled = false;
        end_input.removeClass('disabled').get(0).disabled = false;
    } else {
        start_input.val('From').addClass('disabled').get(0).disabled = true;
        end_input.val('To').addClass('disabled').get(0).disabled = true;
    }
}

function toggle_apply(status){
	var applyButton = document.getElementById('apply_button');
	var cancelButton = document.getElementById('apply_cancel');

	var topApprovedBox = document.getElementById('top_approved_box');
	var brandBox = document.getElementById('brand_box');
	var uploadVideoBox = document.getElementById('upload_video_box');

	var uploadVideoIframe = frames['upload_video_iframe'];

	switch(status){
		case "on" :
			if(applyButton) {applyButton.style.display = "none";}
			if(cancelButton) {cancelButton.style.display = "block";}

			if(topApprovedBox) {topApprovedBox.style.display = "none";}
			if(brandBox) {brandBox.style.display = "none";}
			if(uploadVideoBox) {uploadVideoBox.style.display = "block";}
			break;
		case "off" :
			if(applyButton) {applyButton.style.display = "block";}
			if(cancelButton) {cancelButton.style.display = "none";}

			if(topApprovedBox) {topApprovedBox.style.display = "block";}
			if(brandBox) {brandBox.style.display = "block";}
			if(uploadVideoBox) {uploadVideoBox.style.display = "none";}

			if(uploadVideoIframe) {
				uploadVideoIframe.toggle_upload('applyMain');
				if(uploadVideoIframe.loadbar_interval){
					uploadVideoIframe.stop_progress();
				}
			}
			break;
	}
}

function toggle_upload(showDiv){
	if(!toggleDivs || toggleDivs.length < 0){
		var toggleDivs = new Array();
		toggleDivs['applyMain'] = document.getElementById('apply_main');

		toggleDivs['upload1'] = document.getElementById('apply_upload_1');
		toggleDivs['upload2'] = document.getElementById('apply_upload_2');
		toggleDivs['upload3'] = document.getElementById('apply_upload_3');

		toggleDivs['provide1'] = document.getElementById('apply_provide_1');
		toggleDivs['provide2'] = document.getElementById('apply_provide_2');
		toggleDivs['provide3'] = document.getElementById('apply_provide_3');
	}

	for(var i in toggleDivs){
		if(i == showDiv){
			toggleDivs[i].style.display = "block";
		}else{
			toggleDivs[i].style.display = "none";
		}
	}
}

function toggle_more(textID) {
	var theBlurb = document.getElementById(textID + '_blurb');
	var theMore = document.getElementById(textID + '_more');
	var theLink = document.getElementById(textID + '_link');

	if(theBlurb) {
		var blurbState = theBlurb.style.display;
		if(blurbState != "none"){
			theBlurb.style.display = "none";
			theMore.style.display = "inline";
			theLink.innerHTML = "...less";
			theLink.blur();
		}else{
			theBlurb.style.display = "inline";
			theMore.style.display = "none";
			theLink.innerHTML = "...more";
			theLink.blur();
		}
	}
}

function submitOnOff_check() {
    var title_upload = document.getElementById('title_upload');
    var thumbnail_upload = document.getElementById('thumbnail_upload');
    var videofile_upload = document.getElementById('file');
    var tos_upload = document.getElementById('tos_upload');
	var brand_tos_upload = document.getElementById('brand_tos_upload');
    var uploadBtn = document.getElementById('submit_upload');

    var title_url = document.getElementById('title_url');
    var thumbnail_url = document.getElementById('thumbnail_url');
    var videofile_url = document.getElementById('videofile_url');
    var tos_url = document.getElementById('tos_url');
	var brand_tos_url = document.getElementById('tos_url');
    var saveBtn = document.getElementById('submit_url');

    if (title_upload.value && thumbnail_upload.value && videofile_upload.value && tos_upload.checked && brand_tos_upload.checked) {
        uploadBtn.disabled = false;
        uploadBtn.className = "upload_btn";
    } else if (title_url.value && thumbnail_url.value && videofile_url.value && tos_url.checked && brand_tos_url.checked) {
        saveBtn.disabled = false;
        saveBtn.className = "save_btn";
    } else {
        uploadBtn.disabled = true;
        uploadBtn.className = "upload_btn disabled";
        saveBtn.disabled = true;
        saveBtn.className = "save_btn disabled";
    };
}

function resetReportCommission(that){
	if (that.value != "") {
		toggleDates(true);
	} else {
    	toggleDates(false);
    }
}

function resetFilters(){
	document.getElementById('filter1').options[0].selected=true;
	document.getElementById('filter2').options[0].selected=true;
}

var PAGE = {};
/** JQuery DOM Manipulation, etc... **/
$(runWhenLoaded);

function runWhenLoaded() {
    /** Function Calls **/

    // Convert <select> boxes to use jSelect
    $('select.replace_me').jSelect({
        hide_class: 'hidden_text',
        strip_class: 'replace_me',
        wrap_class: 'selrep_wrap'
    });

    $(".onclick_link").click(
        function () {
            $(this).parents("tr").unbind("click");
        });

    /**---> expanded rows - bm commissions **/
    $(".expand_rows").toggle(
        function() {
            $(this).next().find(".expanded_view").slideDown("normal").end();
            $(this).addClass("open_row");
        },
        function() {
            $(this).removeClass("open_row");
            $(this).next().find(".expanded_view").slideUp("normal");
        })
    .end();
    $(".hover_rows").tableHover();

    $(".review_rows > tr").click(
        function() {
            window.location="http://www.zadby.com/sign_up?unauth=true";
     });

    /**---> date picker **/
    $.datepicker.setDefaults({showOn: 'both', buttonImageOnly: true,
	buttonImage: '/static/js/jquery/images/calendar_btn.gif', buttonText: '', dateFormat: 'mm/dd/yy'});
    $('#startdate').attachDatepicker();
    $('#deadline').attachDatepicker();
    $('#enddate').attachDatepicker();

    /**---> views tooltip **/
    $('.show_views').cluetip({
        cluetipClass: 'zadby',
        dropShadow: false,
        width: '290px',
        local:true,
        cursor: 'pointer',
        positionBy: 'mouse',
        showTitle: false,
        sticky: true,
        mouseOutClose: true,
        closeText: ''
    });
	
	    /**---> v1.4 - 06/10/08 - bbrewer -  allows brands to add budget to commissions **/
    $('.show_addbudget').cluetip({
        cluetipClass: 'zadby',
		activation: 'toggle',
        dropShadow: false,
        width: '290px',
        local:true,
        cursor: 'pointer',
        positionBy: 'mouse',
        showTitle: false,
        sticky: true,
        mouseOutClose: false,
        closeText: 'Close'
    });
	
    /**---> submission statuses tooltip **/
    $('#show_statuses').cluetip({
        cluetipClass: 'zadby',
        dropShadow: false,
        width: '290px',
        local:true,
        cursor: 'pointer',
        positionBy: 'mouse',
        showTitle: false,
        closeText: ''
    });
			
     /**--> FAQs show/hide **/
     $(".gen_q > dt").toggle(
        function() {
            $(this).next().slideDown("normal");
            $(this).addClass("open");
        },
        function() {
            $(this).removeClass("open");
            $(this).next().slideUp("normal");
        })
     .end();

    if (PAGE.is_comm_browser) {
        $('#deadline_select').change(function() {
            location.href=this.options[this.selectedIndex].value;
        });
    } else if (PAGE.is_bm) {
        if (PAGE.is_cp_tab) {
            initializeBMCampaignPerformance();
        } else if (PAGE.is_budget_allocation_tab) {
            initializeBMBudgetAllocation();
        } else if (PAGE.is_commission_creation) {
    	    initializeCommissionCreation();
        } else if (PAGE.is_reports_tab) {
            if (PAGE.is_payments_report) {
                initializeBMPaymentsReport();
            } else if (PAGE.is_videos_report) {
                initializeBMVideosReport();
            } else if (PAGE.is_invoices_report) {
                initializeBMInvoicesReport();
            }
    	}
    } else if (PAGE.is_zivo) {
        if (PAGE.is_submissions_tab) {
            initializeZiVoSubmissions();
        }
    }

    if (PAGE.is_review_modal){
	$(':checkbox').click(function(){
				 updateButtons("true");
			     });
    }
/*
    if (PAGE.is_upload_form){
		$('#form1').submit(function(){
				       $.getJSON("/Commissions/" + $("#comm_upload").val() + "/create_submission",{
						     title: $("#title_upload").val()
						 }, function(data){
							if(data.error){
								document.getElementById('upload_error').innerHTML = (data.error);
							}else{
								document.getElementById('sub_upload').value = data.id;
								document.getElementById('form1').submit();
							}
						     //return data.sub_id;
						 });
						return false;
				   });
	    }
		*/
	$('.label_info').cluetip({
		cluetipClass: 'zadby2',
		dropShadow: false,
		width: '390px',
		local: true,
		cursor: 'pointer',
		positionBy: 'mouse',
		showTitle: false, closeText: ''
	});
}

/** Initialize: Brand Manager -> Commission Creation **/
function initializeCommissionCreation() {
    function activateSlider(settings) {
        var the_slider = $(document.createElement('div')).addClass('ui-slider-1'),
            the_handle = $(document.createElement('div')).addClass('ui-slider-handle'),
            the_select_box = $('#' + settings.field_name + ' select').addClass('hidden_text'),
            the_display = $(document.createElement('div')).addClass('value_display').html('100%'),
            index_multiplier = (settings.slider_stepping == 0.1) ? 10 : 1,
            slide_func = function(){
                var val = the_slider.slider('value');
                the_select_box.attr('selectedIndex',(val * index_multiplier));
                the_display.html(val.toFixed((index_multiplier === 10) ? 1 : 0) + '%');
            },
            slider_options = {
                minValue: 0,
                maxValue: settings.slider_maxValue,
                startValue: 0,
                stepping: settings.slider_stepping,
                slide: slide_func,
                change: slide_func
            };
        the_slider.append(the_handle);
        the_display.insertAfter(the_select_box);
        the_slider.insertAfter(the_display);
        the_slider.slider(slider_options);
        // Had problems using startValue when stepping was 0.1
        // used "moveTo" as an alternative

        the_slider.slider('moveTo',settings.innitial_value);
    }
    activateSlider({
        field_name: 'net_screen_space',
        innitial_value: PAGE.net_screen_space_start,
        slider_maxValue: 10,
        slider_stepping: 0.1
    });
    activateSlider({
        field_name: 'net_screen_time',
        innitial_value: PAGE.net_screen_time_start,
        slider_maxValue: 100,
        slider_stepping: 1
    });

    // NOTE: the two above activateSlider() calls MUST be made before calling show_tab
    show_tab(1);
    jQuery.map([1,2,3,4],function(t){
        $('#commission_creation_tab'+t).click(function(){
            show_tab(t);
        });
    });

    if(window.tinyMCE){
        tinyMCE.init({
            mode:'exact',
            elements:"personality,value_proposition,requirements,concept_requirements,background,legal",
            theme : "advanced",
            theme_advanced_buttons1 : "bold,italic,underline,separator,justifyleft,justifycenter,justifyright,bullist,numlist,undo,redo,link,unlink",
            theme_advanced_buttons2 : "",
            theme_advanced_buttons3 : "",
            theme_advanced_toolbar_location : "top",
            theme_advanced_toolbar_align : "left",
            theme_advanced_layout_manager: "SimpleLayout",
            width: '435',
            entity_encoding: "numeric",
            invalid_elements: "script",
            strict_loading_mode : true
        });
    }

    $('#name').cluetip({
		cluetipClass: 'zadby',
		dropShadow: false,
		width: '290px',
		local:true,
		cursor: 'pointer',
		positionBy: 'mouse',
		showTitle: false,
		sticky: true,
		mouseOutClose: true,
		closeText: ''
	});
    $.cluetip.setup({
        insertionType: 'appendTo',
        insertionElement: '#cluetip_wrapper'
    });

}

/** Initialize: Brand Manager -> Campaign Performance **/
function initializeBMCampaignPerformance() {
    var lc = new LineChart();
    function redrawChart() {
        lc.update();
        lc.drawChart();
    }
    lc.init({
        chartId: 'CampaignPerformance',
        containerId: 'PerformanceGraph',
        queryUrl: PAGE.this_get_uri + '/getViewsPerVideoPerMonth',
        showXAxisName: true
    });
    $(window).load(redrawChart);
    $('#sel_camp').change(function(){
        refreshDependentSR((this.value != 'all'), 'sel_comm', PAGE.campaign_handler_uri + '/ajax_get_active_commissions?campaign=' + this.value);
    });
    $('#sel_comm').change(function(){
        refreshDependentSR((this.value != ''), 'sel_video', PAGE.commission_handler_uri + '/ajax_get_active_submissions?commission=' + this.value);
    });
    $('#sel_video').change(function(){
        refreshDependentSR((this.value != ''), 'sel_month', PAGE.submission_handler_uri + '/ajax_get_active_months?submission=' + this.value);
    });
    $('#redraw_btn').click(function(){
        redrawChart();
        return false;
    });
}

/** Initialize: Brand Manager -> Budget Allocation **/
function initializeBMBudgetAllocation() {
    var sc = new StackedChart();
    function redrawChart() {
        sc.update();
        sc.drawChart();
    }
    sc.init({
        containerId:'BudgetGraph',
        chartId:'Budget',
        queryUrl: PAGE.this_get_uri + '/getBudgetAllocations',
        showXAxisName: true
    });
    $(window).load(redrawChart);
    $('#sel_camp').change(function(){
        refreshDependentSR((this.value != 'all'), 'sel_comm', PAGE.campaign_handler_uri + '/ajax_get_active_commissions?campaign=' + this.value);
    });
    $('#redraw_btn').click(function(){
        redrawChart();
        return false;
    });
}

/** Initialize: Brand Manager -> Payments Report **/
function initializeBMPaymentsReport() {
    $('#reports_form').submit(function(){
            return validateReportDates();
        });
    $('#sel_camp').change(function(){
            toggleDates(false);
            refreshDependentSR((this.value != ''), 'sel_comm', PAGE.campaign_handler_uri + '/ajax_get_active_commissions_by_axiomid?campaign=' + this.value);
            if (this.value == '') {
            	toggleDates(false);
            }
        });
    $('#sel_comm').change(function(){
            resetReportCommission(this);
        });
    $('#startdate').blur(function(){
            inputBlur(this, 'From');
        }).change(function(){
            inputBlur(this, 'From');
        });
    $('#enddate').blur(function(){
            inputBlur(this, 'To');
        }).change(function(){
            inputBlur(this, 'To');
        });
}

/** Initialize: Brand Manager -> Videos Report **/
function initializeBMVideosReport() {
    $('#sel_camp').change(function(){
            refreshDependentSR((this.value != '' && this.value != 'all'), 'sel_comm', PAGE.campaign_handler_uri + '/ajax_get_active_commissions_by_axiomid?campaign=' + this.value);
        });
}

/** Initialize: Brand Manager -> Invoices Report **/
function initializeBMInvoicesReport() {
    $('#reports_form').submit(function(){
            return validateReportDates();
        });
    $('#startdate').blur(function(){
            inputBlur(this, 'From');
        }).change(function(){
            inputBlur(this, 'From');
        });
    $('#enddate').blur(function(){
            inputBlur(this, 'To');
        }).change(function(){
            inputBlur(this, 'To');
        });
}

/** Initialize: ZiVo -> Submissions Tab **/
function initializeZiVoSubmissions() {
    $('.review_warning').each(function(){
        var close_buttons = $(this).children().not('.sub_id'),
            submission_id = $(this).children().not('.review_close').val(),
            clear_overlay = $(this.parentNode.parentNode),
            review_button = $(this.parentNode.parentNode.parentNode),
            overlay_is_open = false;

        function showOverlay() {
            if (overlay_is_open) {
                overlay_is_open = false;
            } else {
                clear_overlay.fadeIn('normal');
                overlay_is_open = true;
            }
        }

        function hideOverlay() {
            clear_overlay.fadeOut('normal');
            if (this.value == 'I\'ll Risk It') {
                showBranderReview(submission_id);
            }
        }

        review_button.click(showOverlay);
        close_buttons.click(hideOverlay);
    });
}

/** This refreshes the list of options in a select box or disables it
    altogether.  Includes support for SelectReplace. **/
function refreshDependentSR(turn_on, select_two_id, load_uri) {
    var select_two = document.getElementById(select_two_id);

    function callBack() {
        setFirstSelected(select_two_id);
        if (select_two.refreshSR) {
            select_two.refreshSR();
        }
        $(select_two).change();
    }

    if (turn_on) {
        select_two.disabled = false;
        $(select_two).load(load_uri, callBack);
    } else {
        select_two.disabled = true;
        callBack();
    }
}

function validateReportDates() {
    var dates_are_valid = true;
        from = document.getElementById('startdate').value,
        to = document.getElementById('enddate').value;

    function readDate(string) {
        var components = string.split('index.html',3);
        return new Date(components[2],components[0]-1,components[1]);
    }

    if (from != 'From' && to != 'To') {
        if (readDate(from) > readDate(to)) {
            dates_are_valid = false;
        }
    }

    if (dates_are_valid) {
        return true;
    } else {
        $('#reports_date_error').html('From date must be before the To date.');
        return false;
    }
}

function inputBlur(that, default_text) {
    if (that.value == '') {
        that.value = default_text;
    }
}

function setFirstSelected(element){
	var doc = $('#'+element).get(0);
	doc.options[0].selected = true;
}

function addQuotes(string){
	string = "'" + string + "'";
	return string;
}

function postElementObj(){
    this.postelements = new Object();

    this.showModal = function(){
        tb_show('', '/Submissions/'+this.postelements.sid+'/preview/?KeepThis=true&amp;TB_iframe=true&amp;height=600&amp;width=790');
    }
}

function sendSubmissionWindow(subid){
    updateSubmissionChoice('Send Submission');
    var postElems = new postElementObj();
    var doc = document.getElementById('sub' + subid + 'form');
	$('#sub' + subid + 'form .error').each(function(x){ this.style.display=''; });
    var elements = doc.elements;
    for(var i=0; i < elements.length; i++){
        if(elements[i].name){
            if((elements[i].type == "text") || (elements[i].name == "sid") || (elements[i].name == "submissionchoice")){
                postElems.postelements[elements[i].name] = elements[i].value;
            }
        }
    }
    postElems.postelements.updatelinksonly = true;

    jQuery.post('edit_submission',
				postElems.postelements,
				function(data,textStatus){
					data = eval(data);
					if(data.errors){
						for(var i in data.errors){
							var errnode = document.getElementById('sub' + subid + 'form_error_' + i);
							if(errnode){
								errnode.innerHTML = data.errors[i];
								errnode.style.display = 'block';
							}
						}
					}else{
						showPreview(postElems);
					}
				}
	);
}

function showPreview(postElems){
    setTimeout(function(){postElems.showModal()}, 500);
}

/** Commission creation page **/
function show_tab(tab){
    jQuery.map([1,2,3,4],function(p){
		      var page = '.page'+p;
		      var tabclass = '#commission_creation_tab'+p;
		      if (p==tab){
			  $(page).removeClass('hide');
			  $(tabclass).addClass('active');
		      } else {
			  $(page).addClass('hide');
			  $(tabclass).removeClass('active');
		      }
		});
}

function allCheckboxesOn(){
    var boxes = $(':checkbox').length;
    var checked = $(':checked').length;
    return boxes == checked;
}

/**
 * Checks user id availability on signup form
 */
function signupCheckUserIDAvailability(){
    var form = $('form.signup_form')[0];
    return checkUserIDAvailability(form.username.value);
}

//v1.4 - 6/04/08 - bbrewer - Added function below to give brands ability to test full site functionality after signing up (without posting a commission)
//                                               Hardcoding is intentional since global vars is not accessible from this page.  
//                                                Also note that any errors on this page do NOT throw to log.  All errors fail silently and function exits without executing.  
//				         Last point, the app.log function is not accessible from this function either
function checkMinBudget(){
	var form = $('form.std_form')[0];
	var budget = form.budget.value;
	var warn = "";
	if (budget < 1000){
		warn = "Commissions created with less than $1000 initial budget are considered to be in Pending status.  Pending commissions can be activated later by increasing the budget.";
	}
	return warn;
}

/**
 * Used on page one of signup form to validate input
 */
function onsubmitSignUp(){
    var errors=[];
    var useridcheck = signupCheckUserIDAvailability();
    if(useridcheck) errors.push(useridcheck);

    if(errors.length){
        alert(errors.join('\n'));
        return false;
    }
    return true;
}

/**
 * Check for User ID availability
 *  - synchronous call to server method
 *  - single parameter userid is desired userid
 *  - returns string error if an error occured
 *  - return empty string if there is no error
 */
function checkUserIDAvailability(userid){
    var error = '';
    jQuery.ajax({
                async: false,
                url:'/isuseridavailable',
                type:'GET',
                data: {userid:userid},
                dataType:'json',
                success: function(data){
                    if(data.error) error = data.error;
                }
            }
    );
    return error;
}


function setup_progress(bar, task){
    loadbar_interval = setInterval("update_progress('"+bar+"', '"+task+"');",1000);
}

function update_progress(bar, task){
	if(document.getElementById(bar)){
	    $.get("/get_video_percentage", { taskId: task }, function(data){
		      loadbar_setBarPercentage(bar, data);
		  });
	}
}

function stop_progress() {
	clearInterval(loadbar_interval);
}

function loadbar_setBarPercentage(bar, percentage) {
	var the_bar = document.getElementById(bar);
	var the_count = document.getElementById(bar+'_count');
	if(the_bar) {
		the_bar.style.width = percentage + "%";
		the_count.innerHTML = percentage + "%";
	}
}

function producer_review_console(sub_id) {
	tb_show('', '/Submissions/'+sub_id+'/producer_review?KeepThis=true&amp;TB_iframe=true&amp;height=600&amp;width=790', null)
}

function brand_review_console(sub_id) {
	tb_show('', '/Submissions/'+sub_id+'/review?KeepThis=true&amp;TB_iframe=true&amp;height=600&amp;width=790', null)
}

function add_site_link(sub_id){
	var httphost = window.location.host;
    var proto = window.location.protocol;

	var theService = document.getElementById('video_service_' + sub_id);
	var theAddURL = document.getElementById('addurl_' + sub_id);
	if(theService && theAddURL){
	    var theURL = proto + "//" + httphost + "/Submissions/"+sub_id+"/addSiteLink?video_service=" + theService.value + "&addurl=" + escape(theAddURL.value);
		$.getJSON(theURL, function(json) {
			$('#message_' + sub_id).html(json.message);
			$('#vid_link_list_' + sub_id).html(json.links);
		});
	}
}

function mycarousel_itemLoadCallback(carousel, state)
{
    for (var i = carousel.first; i <= carousel.last; i++) {
        if (carousel.has(i)) {
            continue;
        }

        if (i > mycarousel_itemList.length) {
            break;
        }

        carousel.add(i, mycarousel_getItemHTML(mycarousel_itemList[i-1]));
    }
};

/**
 * Item html creation helper.
 */
function mycarousel_getItemHTML(item)
{
    return '<img src="' + item.url + '" width="75" height="75" alt="' + item.url + '" />';
};