/**
* An easy way to toggle a slideup and slidedown functionality
*/
Effect.SlideUpAndDown = function(element)
{
    element = $(element);
    if(Element.visible(element))
        new Effect.SlideUp(element, {duration:0.7});
    else
        new Effect.SlideDown(element,{duration:0.7});
}

/**
 * 
 */
function init() {
	getArgs();
	
	if(passedArgs['businessUnit']) {
		setCookie('businessUnit', passedArgs['businessUnit']);
	}
	if(passedArgs['cid']) {
        setCookie('cid', passedArgs['cid']);
    }
}


var activeGear = 'gearText_1';
/**
 * display the gear info on site, toggle display of elements
 * @param {Integer} gearNr Number of gear to display
 */
function displayGear(gearNr) {
    var tableActive = $(activeGear+"_table1");
    var tableNr = gearNr.split('_');
    
    // display new active
    //Effect.toggle(gearNr, 'blind');
    Effect.SlideUpAndDown(gearNr);
    if(tableActive.hasClassName('active_1')) {
    	tableActive.removeClassName('active_1');
    }
    if(tableActive.hasClassName('nextt')) {
    	tableActive.removeClassName('nextt');
    }
    tableActive.addClassName('unactive');
    
    // hide not active
    if(activeGear != gearNr) {
    	if(Element.visible(activeGear)) {
		    //Effect.toggle(activeGear, 'blind');
		    Effect.SlideUpAndDown(activeGear);
    	}
    	// delete css class
	    for(var i=1; i <= 5; i++) {
			var tableObj = $('gearText_'+i+"_table1");
		    if(tableObj.hasClassName('nextt')) {
		        tableObj.removeClassName('nextt');
		    }
		    if(tableObj.hasClassName('unactive')) {
		        tableObj.removeClassName('unactive');
		    }
		    tableObj.addClassName('active_1');
	    }
	    
	    // look for next table and set css class
	    if(parseInt(tableNr[1]) != 5) {
	    	tableNr[1]++;
	        var nextTable = $('gearText_'+tableNr[1]+"_table1");
	        if(nextTable.hasClassName('active_1')) {
	            nextTable.removeClassName('active_1');
	        }
	        if(nextTable.hasClassName('unactive')) {
	            nextTable.removeClassName('unactive');
	        }
	        nextTable.addClassName('nextt');
	    }
    }
    
    // set new active
    activeGear = gearNr;
}

/**
 * 
 */
function calculatorOnload(){
	$('dimmer').style.display = '';
    $('dimmerText').style.display = '';
	
	getArgs();
	var userValues = new Array();
	
	if(passedArgs['reparatur1']) {
		userValues = passedArgs;
	}
	else if(userValuesSaved = getCookie('userValues')) {
		userValues = userValuesSaved.evalJSON();
	}
	
	for( var property in userValues) {
		if(property != '' && typeof(eval('userValues.' + property)) != 'function') {
            $(property).value = userValues[property];
		}
    }
	
	calc_zeitAufErste();
	calc_zeitAufZweite();
}

/**
 * close the info div box
 */
function closeInfo() {
	$('dimmer').style.display = 'none';
	$('dimmerText').style.display = 'none';
}

var hoursFirst = 0;
var paidHoursFirst = 0;
var paidHoursEffFirstReal = 0;
/**
 * Time calculation first repair
 */
function calc_zeitAufErste() {
	var value = parseInt($('telTermin1').value)
		+ parseInt($('kundenGes1').value)
		+ parseInt($('fahrZeugRan1').value)
		+ parseInt($('fehlerLok1').value)
		+ parseInt($('erfasErsatz1').value)
		+ parseInt($('kalkAngeb1').value)
		+ parseInt($('beschErsatz1').value)
		+ parseInt($('fahrZeugRan3').value)
		+ parseInt($('reparatur1').value)
		+ parseInt($('abschKalk1').value)
		+ parseInt($('rechnErst1').value)
		+ parseInt($('kundAnruf1').value)
		+ parseInt($('ueberGesp1').value)
		+ parseInt($('buchHalAuf1').value);
	// set value
	$('zeitAufErste').innerHTML = value;
	// calculate paid time
	$('zeitAufErsteBez').innerHTML = parseInt($('reparatur1').value);
	var bezahltProz = parseInt($('reparatur1').value) / parseInt($('zeitAufErste').innerHTML) * 100;
	$('zeitAufErsteBezProz').innerHTML = Math.round( bezahltProz );
	setPaidTimePie(bezahltProz, 'pieNr1');
	
    // calculate not paid time
    $('zeitAufErsteNBez').innerHTML =  value - parseInt($('zeitAufErsteBez').innerHTML);
    $('zeitAufErsteNBezProz').innerHTML = Math.round( parseInt($('zeitAufErsteNBez').innerHTML) / parseInt($('zeitAufErste').innerHTML) * 100 );
    
    // calculate days
    hoursFirst = value * parseInt($('quoteDayRepair').value);
    $('zeitAufErsteTag').innerHTML = Math.round(hoursFirst);
    $('zeitAufErsteTagBez').innerHTML = parseInt($('zeitAufErsteBez').innerHTML) * parseInt($('quoteDayRepair').value);
    $('zeitAufErsteTagNBez').innerHTML = parseInt($('zeitAufErsteNBez').innerHTML) * parseInt($('quoteDayRepair').value);
    
    // eff hours
    paidHoursFirst = parseInt($('zeitAufErsteTagBez').innerHTML) / 60 * parseInt($('costPerHour').value);
    paidHoursEffFirstReal = (paidHoursFirst / parseInt($('zeitAufErsteTag').innerHTML)) * 60;
    $('zeitAufErsteEffS').innerHTML = number_format(Math.round(paidHoursEffFirstReal * 100) / 100 ,2 ,',' ,'.');
    
    // set the results
    setResults();
}


var paidHoursSecond = 0;
var paidHoursEffSecondReal = 0;
/**
 * Time calculation first repair
 */
function calc_zeitAufZweite() {
	var value = parseInt($('telTermin2').value)
		+ parseInt($('kundenGes2').value)
		+ parseInt($('fahrZeugRan2').value)
		+ parseInt($('fehlerLok2').value)
		+ parseInt($('erfasErsatz2').value)
		+ parseInt($('kalkAngeb2').value)
		+ parseInt($('beschErsatz2').value)
		+ parseInt($('fahrZeugRan4').value)
		+ parseInt($('reparatur2').value)
		+ parseInt($('abschKalk2').value)
		+ parseInt($('rechnErst2').value)
		+ parseInt($('kundAnruf2').value)
		+ parseInt($('ueberGesp2').value)
		+ parseInt($('buchHalAuf2').value);
	// set value
	$('zeitAufZweite').innerHTML = value;
	// calculate paid time
	$('zeitAufZweiteBez').innerHTML = parseInt($('reparatur2').value);
    var bezahltProz = parseInt($('reparatur2').value) / parseInt($('zeitAufZweite').innerHTML) * 100;
    $('zeitAufZweiteBezProz').innerHTML = Math.round( bezahltProz );
    setPaidTimePie(bezahltProz, 'pieNr2');
    // calculate not paid time
    $('zeitAufZweiteNBez').innerHTML = value - parseInt($('zeitAufZweiteBez').innerHTML);
    $('zeitAufZweiteNBezProz').innerHTML = Math.round( parseInt($('zeitAufZweiteNBez').innerHTML) / parseInt($('zeitAufZweite').innerHTML) * 100 );
    
    // calculate days
    hoursSecond = (value * parseInt($('quoteDayRepair').value)) / 100 * parseInt($('additionalRep').value);
    $('zeitAufZweiteTag').innerHTML = Math.round(hoursSecond);
    hoursNSecond = (parseInt($('zeitAufZweiteBez').innerHTML) * parseInt($('quoteDayRepair').value)) / 100 * parseInt($('additionalRep').value);
    $('zeitAufZweiteTagBez').innerHTML = Math.round(hoursNSecond); 
    hoursNPSecond = (parseInt($('zeitAufZweiteNBez').innerHTML) * parseInt($('quoteDayRepair').value)) / 100 * parseInt($('additionalRep').value);
    $('zeitAufZweiteTagNBez').innerHTML = Math.round(hoursNPSecond);
    
    // eff hours
    paidHoursSecond = parseInt($('zeitAufZweiteTagBez').innerHTML) / 60 * parseInt($('costPerHour').value);
    paidHoursEffSecondReal = (paidHoursSecond / parseInt($('zeitAufZweiteTag').innerHTML)) * 60;
    $('zeitAufZweiteEffS').innerHTML = number_format(Math.round(paidHoursEffSecondReal * 100) / 100 ,2 ,',' ,'.');
    
    // set results
    setResults();
}

/**
 * @param {type} param 
 */
function setResults() {
    $('resultEff').innerHTML = number_format(Math.round(paidHoursEffFirstReal * 100) / 100 ,2 ,',' ,'.');
    $('resultDay').innerHTML = number_format(Math.round(paidHoursFirst * 100) / 100 ,2 ,',' ,'.');
    
    var secondRealHoursEff = (paidHoursEffSecondReal - paidHoursEffFirstReal) / 100 * parseInt($('additionalRep').value);
    var resultEffNew = paidHoursEffFirstReal + secondRealHoursEff;
    $('resultEffNew').innerHTML = number_format(Math.round(resultEffNew * 100) / 100 ,2 ,',' ,'.');
    $('resultEffNewP').innerHTML = Math.round((resultEffNew / paidHoursEffFirstReal * 100) - 100); 
    var resultDayNew = hoursFirst / 60 * resultEffNew;
    $('resultDayNew').innerHTML = number_format(Math.round((resultDayNew) * 100) / 100 ,2 ,',' ,'.');
    
    var resultBigEnd = resultDayNew - paidHoursFirst;
    $('resultBig').innerHTML = number_format(Math.round((resultBigEnd) * 100) / 100 ,2 ,',' ,'.');
    
    // set Link to Hardware so we know
    $('hardwareLink').href = 'hardware.html?perDay=' + resultBigEnd;
    $('hardwareLink2').href = 'hardware.html?perDay=' + resultBigEnd;
}

/**
 * @param {Integer} amount The percentage of paid hours 
 * @param {String} pieId The Id of the pie div
 */
function setPaidTimePie(amount, pieId) {
 	$(pieId).className = ''; 
 	$(pieId).addClassName('pie');
 	
 	amount = Math.round(amount);
 	
    for(var i=0;i<=100;i=i+5) {
 	    if(amount > i && amount <= i+5){
 	        $(pieId).addClassName('size' + (i+5));
 	    }
 	}
}
 
/**
 * set the values the user entered to a cookie
 */
function setUserValues() {
    var userValues = new Object();
    userValues['telTermin1']   = parseInt($('telTermin1').value);
    userValues['kundenGes1']   = parseInt($('kundenGes1').value);
    userValues['fahrZeugRan1'] = parseInt($('fahrZeugRan1').value);
    userValues['fehlerLok1']   = parseInt($('fehlerLok1').value);
    userValues['erfasErsatz1'] = parseInt($('erfasErsatz1').value);
    userValues['kalkAngeb1']   = parseInt($('kalkAngeb1').value);
    userValues['beschErsatz1'] = parseInt($('beschErsatz1').value);
    userValues['fahrZeugRan3'] = parseInt($('fahrZeugRan3').value);
    userValues['reparatur1']   = parseInt($('reparatur1').value);
    userValues['abschKalk1']   = parseInt($('abschKalk1').value);
    userValues['rechnErst1']   = parseInt($('rechnErst1').value);
    userValues['kundAnruf1']   = parseInt($('kundAnruf1').value);
    userValues['kundAnruf1']   = parseInt($('kundAnruf1').value);
    userValues['ueberGesp1']   = parseInt($('ueberGesp1').value);
    userValues['buchHalAuf1']  = parseInt($('buchHalAuf1').value);
    
    userValues['telTermin2']   = parseInt($('telTermin2').value);
    userValues['kundenGes2']   = parseInt($('kundenGes2').value);
    userValues['fahrZeugRan2'] = parseInt($('fahrZeugRan2').value);
    userValues['fehlerLok2']   = parseInt($('fehlerLok2').value);
    userValues['erfasErsatz2'] = parseInt($('erfasErsatz2').value);
    userValues['kalkAngeb2']   = parseInt($('kalkAngeb2').value);
    userValues['beschErsatz2'] = parseInt($('beschErsatz2').value);
    userValues['fahrZeugRan4'] = parseInt($('fahrZeugRan3').value);
    userValues['reparatur2']   = parseInt($('reparatur2').value);
    userValues['abschKalk2']   = parseInt($('abschKalk2').value);
    userValues['rechnErst2']   = parseInt($('rechnErst2').value);
    userValues['kundAnruf2']   = parseInt($('kundAnruf2').value);
    userValues['kundAnruf2']   = parseInt($('kundAnruf2').value);
    userValues['ueberGesp2']   = parseInt($('ueberGesp2').value);
    userValues['buchHalAuf2']  = parseInt($('buchHalAuf2').value);
    
    // set the cookie
    setCookie('userValues', Object.toJSON(userValues)); 
    
    // send Ajax request to save the information
    var obj = new Ajax.Request('saveCalculation.php5', {
        asynchronous:true, 
        method: 'post', 
        onSuccess: confirm_save, 
        onFailure:onError, 
        parameters: {
            userValues : Object.toJSON(userValues), 
            businessUnit : getCookie('businessUnit'), 
            crm_id : getCookie('cid') 
        } 
    });
}

/**
 * If saving the form worked, confirm it
 * @param {Object} obj The AJAX response object
 */
function confirm_save(obj) {
  var return_obj = obj.responseText;
}
 
/**
 * setKitDays
 */
function setKitDays() {
	var priceCF19 = 5114;
	var priceCF52 = 3482;
	var businessUnit = getCookie('businessUnit');
	
	// get businessUnit cookie
	if(businessUnit != '') {
        $('shopLinkCF19').href = 'http://www.spxtools-shop.com/home/index.php?id=339&businessUnit=' + businessUnit;
        $('shopLinkCF52').href = 'http://www.spxtools-shop.com/home/index.php?id=340&businessUnit=' + businessUnit;
    }
	
	// get passed Arguments
	getArgs();
	// set days of revenue
	if(passedArgs['perDay']) {
	   var daysCF19 = Math.round(priceCF19 / parseInt(passedArgs['perDay']));
	   var daysCF52 = Math.round(priceCF52 / parseInt(passedArgs['perDay']));
	   
	   $('cf19Days').innerHTML = daysCF19;
	   $('cf52Days').innerHTML = daysCF52;
	   
	   $('hardwareLink').href = 'hardware.html?perDay=' + passedArgs['perDay'];
	}
	else {
		alert('Keine Kostenkalkulation erfolgt!');
	} 
	
}
/**
 * UTILITY FUNCTIONS
 */

/**
 * Error handling if AJAX Request didn't work
 * @param {Object} obj The AJAX response object
 */
function onError(obj)
{
    alert('Error ' + obj.status + ' -- ' + obj.statusText);
}

/**
 * function to set cookie
 * 
 * @param {String} c_name name of the cookie
 * @param {Integer} value value of the cookie
 * @param {Integer} expiredays number of days the cookie expires
 */
function setCookie(c_name,value,expiredays) {
    var exdate=new Date();
    exdate.setDate(exdate.getDate()+expiredays);
    document.cookie = c_name+ "=" + escape(value) + ((expiredays==null) ? "" : ";expires="+exdate.toGMTString())
}

/**
 * function to get a cookie
 * 
 * @param {String} c_name name of the cookie to get
 */
function getCookie(c_name) {
    if (document.cookie.length>0) {
      c_start=document.cookie.indexOf(c_name + "=")
      if (c_start!=-1) {
        c_start=c_start + c_name.length+1
        c_end=document.cookie.indexOf(";",c_start)
        if (c_end==-1){
            c_end=document.cookie.length
        }
        return unescape(document.cookie.substring(c_start,c_end))
      }
    }
    return false
} 

var coo = null;
/**
 * Get the arguments passed by a link in GET param style and provide an array
 * passedArgs that contains them.
 */
function getArgs()
{
  passedArgs = new Array();
  search = self.location.href;
  search = search.split('?');
  if(search.length>1)
  {
    argList = search[1];
    argList = argList.split('&');

    for(var i=0; i<argList.length; i++)
    {
      if(argList[i] != '') {
	      newArg = argList[i];
	      newArg = argList[i].split('=');
	      
	      // if it is an array we need to check here
	      if(newArg[0].substr(2) == "[]") {
	        
	        // only do this if array doesn't exist
	        if(!passedArgs[unescape(newArg[0].substr(0,newArg[0].length-2))]) {
	            passedArgs[unescape(newArg[0].substr(0,newArg[0].length-2))] = new Array();
	        }
	        passedArgs[unescape(newArg[0].substr(0,newArg[0].length-2))].push(unescape(newArg[1]));
	      }
	      else {
	        passedArgs[unescape(newArg[0])] = unescape(newArg[1]);
	      }
      }
    }
  }
  else
    passedArgs = false;
}

/**
 * number_format function works like the PHP number_format
 * http://php.net/number_format
 * 
 * @param {Integer} a Number to format
 * @param {Integer} b Nachkommastellen 
 * @param {String} c Decimal seperator
 * @param {String} d Thousand seperator  
 */
function number_format(a, b, c, d) {
//  a = Math.round(a * Math.pow(10, b)) + '';
    for ( var i = 0; i < b; i += 1 )
    { a = a * 10; }
    a = a + '';
    if ( a.indexOf(',') > 0 ) a = a.substr(0,a.indexOf(','));
    if ( a.indexOf('.') > 0 ) a = a.substr(0,a.indexOf('.'));

    var bv = a.substr(a.length-b,b);
    a = a.substr(0,a.length-b);
    var av = '';
    while ( a.length > 3 )
    {
        av = d + a.substr(a.length-3,3) + av;
        a = a.substr(0,a.length-3);
    }
    if ( b > 0 )
    {
        while ( bv.length < b )
        {
            bv = '0' + bv;
        }
    }
    av = a + av + ((!a&&!av&&b>0)?0:'')+((b>0)?c+bv:'');
    return av;
}
