/*********************************************************************************
* SugarCRM Community Edition is a customer relationship management program developed by
* SugarCRM, Inc. Copyright (C) 2004-2012 SugarCRM Inc.
*
* This program is free software; you can redistribute it and/or modify it under
* the terms of the GNU Affero General Public License version 3 as published by the
* Free Software Foundation with the addition of the following permission added
* to Section 15 as permitted in Section 7(a): FOR ANY PART OF THE COVERED WORK
* IN WHICH THE COPYRIGHT IS OWNED BY SUGARCRM, SUGARCRM DISCLAIMS THE WARRANTY
* OF NON INFRINGEMENT OF THIRD PARTY RIGHTS.
*
* This program is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more
* details.
*
* You should have received a copy of the GNU Affero General Public License along with
* this program; if not, see http://www.gnu.org/licenses or write to the Free
* Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*
* You can contact SugarCRM, Inc. headquarters at 10050 North Wolfe Road,
* SW2-130, Cupertino, CA 95014, USA. or at email address contact@sugarcrm.com.
*
* The interactive user interfaces in modified source and object code versions
* of this program must display Appropriate Legal Notices, as required under
* Section 5 of the GNU Affero General Public License version 3.
*
* In accordance with Section 7(b) of the GNU Affero General Public License version 3,
* these Appropriate Legal Notices must retain the display of the "Powered by
* SugarCRM" logo. If the display of the logo is not reasonably feasible for
* technical reasons, the Appropriate Legal Notices must display the words
* "Powered by SugarCRM".
********************************************************************************/
/*
* this function hides a div element using the passed in id value
*/
function hide(divname){
var elem1 = document.getElementById(divname);
elem1.style.display = 'none';
}
/*
* this function shows a div using the passed in value
*/
function show(div){
var elem1 = document.getElementById(div);
elem1.style.display = '';
}
/*
* this function calls the methods to hide all divs and show the passed in div
*/
function showdiv(div){
hideall();
show(div);
}
/*
* this function iterates through all "stepx" divs (ie. step1, step2,etc) and hides them
*/
function hideall(){
var last_val = document.getElementById('wiz_total_steps');
var last = parseInt(last_val.value);
for(i=1; i<=last; i++){
hide('step'+i);
}
}
/*this function should be run first. It will call the methods that:
* 1.hide the divs initially
* 2.show the first div
* 3.shows/hides the proper buttons
* 4.highlites the step title
* 5.adjusts the step location message
*/
function showfirst(wiz_mode){
//no validation needed.
//show first step
showdiv('step1');
//set div value
var current_step = document.getElementById('wiz_current_step');
current_step.value="1";
//set button values
var save_button = document.getElementById('wiz_submit_button');
var next_button = document.getElementById('wiz_next_button');
var save_button_div = document.getElementById('save_button_div');
var next_button_div = document.getElementById('next_button_div');
var back_button_div = document.getElementById('back_button_div');
save_button.disabled = true;
back_button_div.style.display = 'none';
save_button_div.style.display = 'none';
next_button.focus();
if(wiz_mode == 'marketing'){
back_button_div.style.display = '';
}
//set nav hi-lite
hilite(current_step.value);
}
/*this function runs on each navigation in the wizard. It will call the methods that:
* 1.hide the divs
* 2.show the div being navigated to
* 3.shows/hides the proper buttons
* 4.highlites the step title
* 5.adjusts the step location message
*/
function navigate(direction){
//get the current step
var current_step = document.getElementById('wiz_current_step');
var currentValue = parseInt(current_step.value);
//validation needed. (specialvalidation, plus step number, plus submit button)
if(validate_wiz(current_step.value,direction)){
//change current step value to that of the step being navigated to
if(direction == 'back'){
current_step.value = currentValue-1;
}
if(direction == 'next'){
current_step.value = currentValue+1;
}
if(direction == 'direct'){
//no need to modify current step, this is a direct navigation
}
//show next step
showdiv("step"+current_step.value);
//set nav hi-lite
hilite(current_step.value);
//enable save button if on last step
var total = document.getElementById('wiz_total_steps').value;
var save_button = document.getElementById('wiz_submit_button');
var back_button_div = document.getElementById('back_button_div');
var save_button_div = document.getElementById('save_button_div');
var next_button_div = document.getElementById('next_button_div');
if(current_step.value==total){
//save_button.display='';
save_button.disabled = false;
back_button_div.style.display = '';
save_button_div.style.display = '';
next_button_div.style.display = 'none';
}else{
if(current_step.value<2){
back_button_div.style.display = 'none';
}else{
back_button_div.style.display = '';
}
var next_button = document.getElementById('wiz_next_button');
next_button_div.style.display = '';
save_button_div.style.display = 'none';
next_button.focus();
}
}else{
//error occurred, do nothing
}
}
/*
* This function highlites the right title on the navigation div.
* It also changes the title to a navigational link
* */
var already_linked ='';
function hilite(hilite){
var last = parseInt(document.getElementById('wiz_total_steps').value);
for(i=1; i<=last; i++){
var nav_step = document.getElementById('nav_step'+i);
nav_step.className = '';
}
var nav_step = document.getElementById('nav_step'+hilite);
nav_step.className = '';
if(already_linked.indexOf(hilite)<0){
nav_step.innerHTML= "" +nav_step.innerHTML+ "";
already_linked +=',hilite';
}
}
/*
* Given a start and end, This function highlights the right title on the navigation div.
* It also changes the title to a navigational link
* */
function link_navs(beg, end){
if(beg==''){
beg=1;
}
if(end==''){
var last = document.getElementById('wiz_total_steps').value;
end=last;
}
beg =parseInt(beg);
end =parseInt(end);
for(i=beg; i<=end; i++){
var nav_step = document.getElementById('nav_step'+ i);
nav_step.innerHTML= "" +nav_step.innerHTML+ "";
}
}
/**
* This function is called when clicking on a title that has already been changed
* to show a link. It is a direct navigation link
*/
function direct(stepnumber){
//get the current step
var current_step = document.getElementById('wiz_current_step');
var currentValue = parseInt(current_step.value);
//validation needed. (specialvalidation, plus step number, plus submit button)
if(validate_wiz(current_step.value,'direct')){
//lets set the current step to the selected step and invoke navigation
current_step.value = stepnumber;
navigate('direct');
}else{
//do nothing, validation failed
}
}
/*
* This is a generic create summary function. It scrapes the form for all elements that
* are not hidden and displays it's value. It uses the "title" parameter as the title
* in the summary There is also a provision for overriding this function and providing more
* precise summary functions
*/
/*
* This function will perform basic navigation validation, and then call the customized
* form validation specified for this step. This custom call should reside on wizard page itself.
*
*/
function validate_wiz(step, direction){
var total = document.getElementById('wiz_total_steps').value;
var wiz_message = document.getElementById('wiz_message');
//validate step
if(direction =='back'){
//cancel and alert if on step1
if(step=='1'){
var msg = SUGAR.language.get('mod_strings', 'LBL_WIZARD_FIRST_STEP_MESSAGE');
wiz_message.innerHTML = ""+msg+"";
return false;
}else{
wiz_message.innerHTML = '';
}
}
if(direction =='next'){
//cancel and alert if on last step
if(step==total){
var msg = SUGAR.language.get('mod_strings', 'LBL_WIZARD_LAST_STEP_MESSAGE');
wiz_message.innerHTML = ""+msg+"";
return false;
}else{
wiz_message.innerHTML = '';
}
}
if(direction =='direct'){
//no need to perform navigation validation
}
//make call to custom form validation, do not call if this is a direct navigation
//if this is a direct navigation, then validation has already happened, calling twice
//will not allow page to navigate
if((direction !='direct') && ( window.validate_wiz_form ) && (!validate_wiz_form('step'+step))){
return false;
}
return true;
}