/*
 * get element.
 * lite less jquery $().
 *
 * @param     id     get Element ID.
 * @return    Object return a HTML Element.
 */
function $$(id) {
    return document.getElementById(id) ;
}


/*
 * prepare array.
 * Object or Array to new Array.
 */
function prepareArray(o) {
    var i ;
    var result = new Array() ;
    for(i = 0; i < o.length ; i++ ) {
        result.push(o[i]) ;
    }
    return result ;
}


/*
 * toggle items
 * a first argument element only show.
 *
 * @param     Arguments     javascript native arguments Array.
 */
function toggleItems() {
    var elems = prepareArray(arguments) ;
    var show = elems[0] ;
    var hides = elems.slice(1, elems.length) ;
    setDefaultValue("plans", 0) ;
    $($$(show)).show().addClass("show").removeClass("hide").find("select").attr("disabled", false);

    for(var i = 0; i < hides.length; i++) {
        $($$(hides[i]))
            .hide()
            .addClass("hide")
            .removeClass("show")
            .find("select")
            .attr("disabled", true)
            .find(":first-child")
            .attr("selected", true);
    }
    setResult() ;
}


/*
 * set default value.
 *
 * @param     e     set target HTML Element.
 * @param     v     set value.
 */
function setDefaultValue(e, v) {
    var el = $$(e) ;
    $(el).val(v) ;
}


/*
 * set the price.
 * use select box.
 *
 * @param     f     get from value.
 * @param     t     set target value.
 */
function setPrice(f, t) {
    setSelected(f, true) ;
    var $f = $($$(f)),
        $t = $($$(t)) ;
    if(/^[0-9]+$/.test($f.val())) {
        $t.val(addComma($f.val()));
    } else {
        if($f.is("select")) {
            $t.val(addComma($(":selected", $f).attr("title")));
        }
        else if ($f.is("option")) {
            $t.val(addComma($f.attr("title")));
        }
    }
    setResult() ;
}


/*
 * set coune price.
 * count is order number.
 *
 * @param     f     get from value.
 * @param     c     get order number count.
 * @param     t     set target value.
 */
function setCountPrice(f, c, t) {
    setSelected(f, true) ;
    var $price = $($$(f)),
        count = $($$(c)).val(),
        price;

	// escape to division by zero.
	if(!/^[0-9]+$/.test(count))
		count = 0;

    if($price.is("select")) {
        price = $(":selected", $price).attr("title");
    }
    else {
        price = $price.attr("title");
    }

    $($$(t)).val(addComma(price * count)) ;
    setResult() ;
}


/**
 * calculate Condolence gift earnings.
 *
 * @param  String     insert value taraget id
 * @param  Int        price count
 * @param  Int        average price.
 */
function CondolenceGiftEarnings(target, count, price)
{
	// if not a number to replace 0.
	if(!/^[0-9]+$/.test(count))
		count = 0;

	var res = parseInt(count) * parseInt(price);
	$($$(target)).val(addComma(res));
}


/*
 * set select box selected.
 *
 * @param    el     HTML Element ID.
 * @param    st     set selected status.
 */
function setSelected(el, st) {
    $($$(el)).attr("selected", st);
}


/*
 * toggle price.
 * usage radio box.
 *
 * @param     el     HTML Element.
 * @param     t      target HTML Element ID.
 * @param     d      target HTML Element inner for default value.
 * @param     v      target HTML Element toggle price value.
 */
function togglePrice() {
    setResult() ;
}


/*
 * calculate discount value.
 *
 * @access public
 * @return Int
 */
function getDiscountValue() {
    var basic = $("#planPrices .show :selected").attr("title").replace(/,/g, "");
    var hitugi = $("#lists_hitugi :selected").attr("title").replace(/,/g, "");
    var $minusBox = $("#price15") ;
    var discountParsent = 0.2 ;
    if(!basic) {
        basic = 0 ;
    }
    if(!hitugi) {
        hitugi = 0 ;
    }
    var price = (parseInt(basic) + parseInt(hitugi)) * discountParsent ;

    
    if(price < 0) {
        price = 0 ;
    }

    $minusBox.val(addComma(price));
    return price ;
}


/*
 * set a result.
 * if has 'childResult' class elemt calculate.
 *
 * @param     Int     set result value.
 */
function setResult() {
    var $child = $("table .childResult"),
        $chick = $("#hureai"),
        $minusBox = $("#price15"),
        $memberPrice = $("#memberPrice"),
        $price = $("#price"),
        result = 0,
        memberPrice = 0 ;

    $child.not($minusBox).each(function(){
        result = result + parseInt(this.value.replace(/,/g,"")) ;
    }) ;

    // if is checked to discount value.
    if($chick.attr("checked") === true) {
        var minus = getDiscountValue() ;
        memberPrice = result - minus ;
    }
    else {
        memberPrice = 0 ;
        $minusBox.val(0);
    }

    memberPrice = addComma(memberPrice) ;
    result = addComma(result);
    $memberPrice.val(memberPrice) ;
    $price.val(result) ;
}


/*
 * add to comma.
 *
 * @access public
 * @param  Int     add comma to value.
 * @return String
 */
function addComma(val) {
    val = new String(val).replace(",", "") ;
    while(val != (val = val.replace(/^(-?\d+)(\d{3})/, "$1,$2")));
    return val ;
}



