/* 
lib js 
created for patar timotius
only in pro ecommerce
ecommerce solution for prowebpro.com
*/

/* 
 for format number
 penggunaannya
 FormatNumber('3000',2,true);
	hasilnya 3000.00;
	
*/
	

var warning_mark = "&lt;&lt;";
var currencies = {
	'primary': {
		'decimals_separator': ',',
		'thousands_separator': '.',
		'decimals': '2'
	},
	'secondary': {
		'decimals_separator': ',',
		'thousands_separator': '.',
		'decimals': '2',
		'coefficient': '1.000'
	}
}

var cart_prices_w_taxes = false;
function FormatNumber(expr, decplaces, primary)
{
	var num = '';
	var decimals = '';
	var tmp = 0;
	var k = 0;
	var i = 0;
	var thousands_separator = ',';
	var decimals_separator = '.';
	var decplaces = '2';
	
	expr = expr.toString();
	tmp = parseInt(expr);
	num = tmp.toString();

	// Separate thousands
	if (num.length >= 4 && thousands_separator != '') {
		tmp = new Array();
		for (var i=num.length-3; i>-4 ; i=i-3) {
			k = 3;
			if (i<0) {
				k = 3 + i;
				i=0;
			}
			tmp.push(num.substr(i,k));
			if (i==0) {
				break;
			}
		}
		num = tmp.reverse().join(thousands_separator);
	}

	// Add decimals
	if (decplaces > 0) {
		if (decimals_separator!= '' && expr.indexOf('.') != -1) {
			// Fixme , use toFixed() here
			var decimal_full = expr.substr(expr.indexOf('.') + 1, expr.length);
			if (decimal_full.length > decplaces) {
				decimals = Math.round(decimal_full / (Math.pow(10 , (decimal_full.length - decplaces))));
			} else {
				decimals = expr.substr(expr.indexOf('.') + 1, decplaces);
			}
		} else {
			decimals = '0';
		}

		if (decimals.length < decplaces) {
			tmp = decimals.length;
			for (i=0; i<decplaces-tmp; i++) {
				decimals += '0';
			}
		}
		num += decimals_separator + decimals;
	}
	
	return num;
}

/* 
 Format Price Untuk Semua Price
 cara penggunaanya
 FormatPrices('3000',2);
hasilnya 3000.00;
*/
function FormatPrices(value,decplaces){
if (typeof(decplaces) == 'undefined') {
		decplaces = 2;
	}

	value = parseFloat(value.toString()) + 0.00000000001;

	var tmp_value = value.toFixed(decplaces);

	if (tmp_value.charAt(0) == '.') {
		return ('0' + tmp_value);
	} else {
		return tmp_value;
	}
}

/* 
 Format Untuk decode space di html

*/
function FormatHtmlDecode(str)
{
    var textarea = document.createElement("TEXTAREA");
    textarea.innerHTML = str.replace(/</g,"&lt;").replace(/>/g,"&gt;");
    return textarea.value;
}









/* 
--------------------------------------------------------------------------------------------------
*/


Utilities = {};

Utilities.createElement = function(e, obj)
{
     var element = document.createElement(e);
     for(prop in obj)
     {
         element[prop] = obj[prop];
     }
     return element;
}

Utilities.includeJS = function(filepaths)
{
    for(var i=0; i<filepaths.length; i++)
    {
        document.write('<script type="text/javascript" src="'+filepaths[i]+'"></script>');
    }
}
Utilities.includeCSS = function(filepaths)
{
    for(var i=0; i<filepaths.length; i++)
    {
        document.
     write('<link href="'+filepaths[i]+'" rel="stylesheet" type="text/css" />');
    }
}
Utilities.debug = function(val)
{
    this.getElement('debug').innerHTML += val +"</br>";
}
Utilities.toggle = function(id)
{
    this.getElement(id).style.display = (this.getElement(id).style.display == '') ?
'none' : '';
}

Utilities.appendChild = function()
{
    if(this.appendChild.arguments.length > 1)
     {
         var a = this.appendChild.arguments[0];
         for(i=1; i<this.appendChild.arguments.length; i++)
         {
             if(arguments[i])
             {
                a.appendChild(this.appendChild.arguments[i]);
             }
         }
         return a;
     }
     else
     {
         return null;
     }
}
Utilities.removeChildren = function(node)
{
    if(node == null)
     {
        return;
     }

     while(node.hasChildNodes())
     {
         node.removeChild(node.firstChild);
     }
}

Utilities.addListener = function(obj, eventName, listener)
{
     if (obj.attachEvent)
     {
        obj.attachEvent("on"+eventName, listener);
     }
     else if(obj.addEventListener)
     {
        obj.addEventListener(eventName, listener, false);
     }
     else
     {
         return false;
     }
     return true;
}

Utilities.removeListener = function(obj, eventName, listener)
{
     if(obj.detachEvent)
     {
        obj.detachEvent("on"+eventName, listener);
     }
     else if(obj.removeEventListener)
     {
         obj.removeEventListener(eventName, listener, false);
     }
     else
     {
         return false;
     }

     return true;
}

Utilities.changeOpac = function(opacity, id)
{
     var object = Utils.ge(id).style;
     object.opacity = (opacity / 100);
     object.MozOpacity = (opacity / 100);
     object.KhtmlOpacity = (opacity / 100);
     object.filter = "alpha(opacity=" + opacity + ")";
}

AjaxUpdater = {};

AjaxUpdater.initialize = function()
{

    AjaxUpdater.isUpdating = false;
}
AjaxUpdater.initialize();

AjaxUpdater.Update = function(method,service, callback)
{
    if(callback == undefined || callback == "") { callback = AjaxUpdater.onResponse; }
    Ajax.makeRequest(method, service, callback);
    AjaxUpdater.isUpdating = true;
}

AjaxUpdater.onResponse = function()
{
    if(Ajax.checkReadyState('loading') == 200)
    {
        AjaxUpdater.isUpdating = false;
    }
}

HTTP = {};
HTTP.status = function(_status)
{
     var s = _status.toString().split("");
     switch(s[0])
     {
         case "1":
             return this.getInformationalStatus(_status);
             break;
         case "2":
             return this.getSuccessfulStatus(_status);
             break;
         case "3":
             return this.getRedirectionStatus(_status);
             break;
         case "4":
             return this.getClientErrorStatus(_status);
             break;
         case "5":
             return this.getServerErrorStatus(_status);
             break;
         default:
             return "An unexpected error has occurred.";
     }
}

HTTP.getInformationalStatus = function(_status)
{
     // Informational 1xx
     // http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.1
     switch(_status)
     {
         case 100:
             return "Continue";
             break;
         case 101:
             return "Switching Protocols";
             break;
         default:
             return "An unexpected error has occurred.";
     }
}

HTTP.getSuccessfulStatus = function(_status)
{
     // Successful 2xx
     // http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.2
     switch(_status)
     {
         case 200:
             return "OK";
             break;
         case 201:
             return "Created";
             break;
         case 202:
             return "Accepted";
             break;
         case 203:
             return "Non-Authoritative Information";
             break;
         case 204:
             return "No Content";
             break;
         case 205:
             return "Reset Content";
             break;
         case 206:
             return "Partial Content";
             break;
         default:
             return "An unexpected error has occurred.";
     }
}

HTTP.getRedirectionStatus = function(_status)
{
     // Redirection 3xx
     // http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.3
     switch(_status)
     {
          case 300:
             return "Multiple Choices";
             break;
         case 301:
             return "Moved Permanently";
             break;
         case 302:
             return "Found";
             break;
         case 303:
             return "See Other";
             break;
         case 304:
             return "Not Modified";
             break;
         case 305:
             return "Use Proxy";
             break;
         case 307:
             return "Temporary Redirect";
             break;
         default:
             return "An unexpected error has occurred.";
     }
}

HTTP.getClientErrorStatus = function(_status)
{
     // Client Error 4xx
     // http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.4
     switch(_status)
     {
         case 400:
             return "Bad Request";
             break;
         case 401:
             return "Unauthorized";
             break;
         case 402:
             return "Payment Required";
             break;
         case 403:
             return "Forbidden";
             break;
         case 404:
             return "File not found.";
             break;
         case 405:
             return "Method Not Allowed";
             break;
         case 406:
             return "Not Acceptable";
             break;
         case 407:
             return "Proxy Authentication Required";
             break;
         case 408:
             return "Request Timeout";
             break;
         case 409:
             return "Conflict";
             break;
         case 410:
             return "Gone";
             break;
         case 411:
             return "Length Required";
             break;
         case 412:
             return "Precondition Failed";
             break;
         case 413:
             return "Request Entity Too Large";
             break;
         case 414:
             return "Request-URI Too Long";
             break;
         case 415:
             return "Unsupported Media Type";
             break;
         case 416:
             return "Requested Range Not Satisfiable";
             break;
         case 417:
             return "Expectation Failed";
             break;
         default:
             return "An unexpected error has occurred.";
     }
}


HTTP.getServerErrorStatus = function(_status)
{
     // Server Error 5xx
     // http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html#sec10.5
     switch(_status)
     {
         case 500:
             return "Internal Server Error";
             break;
         case 501:
             return "Not Implemented";
             break;
         case 502:
             return "Bad Gateway";
             break;
         case 503:
             return "Service Unavailable";
             break;
         case 504:
             return "Gateway Timeout";
             break;
         case 505:
             return "HTTP Version Not Supported";
             break;
         default:
             return "An unexpected error has occurred.";
     }
}


/* 
For Ajax Development Next
By Patar Timotius
Javascript
*/
/* 
Begin Object Ajax
*/
Ajax = {};

/* 
Request To
MakeRequest
*/

Ajax.makeRequest = function(method, url, callbackMethod)
{
    this.request = (window.XMLHttpRequest)? new XMLHttpRequest(): new ActiveXObject
("MSXML2.XMLHTTP");
    this.request.onreadystatechange = callbackMethod;
    this.request.open(method, url, true);
    this.request.send(url);
}


Ajax.checkReadyState = function(_id)
{
    switch(this.request.readyState)
    {
        case 1:
            document.getElementById(_id).innerHTML = 'Loading ...';
            break;
        case 2:
            document.getElementById(_id).innerHTML = 'Loading ...';
            break;
        case 3:
            document.getElementById(_id).innerHTML = 'Loading ...';
            break;
        case 4:
            AjaxUpdater.isUpdating = false;
            document.getElementById(_id).innerHTML = '';
            return this.request.status;
    }
}

Ajax.getResponse = function()
{
    if(this.request.getResponseHeader('Content-Type').indexOf('xml') != -1)
    {
        return this.request.responseXML.documentElement;
    }
    else
    {
        return this.request.responseText;
    }
}
Ajax.checkReadyState = function(_id)
{
	if(!document.getElementById(_id)){ return false;	}
   switch(this.request.readyState)
   {
       case 1:
           document.getElementById(_id).innerHTML = 'Loading ...';
           break;
       case 2:
           document.getElementById(_id).innerHTML = 'Loading ...';
           break;
       case 3:
           document.getElementById(_id).innerHTML = 'Loading ...';
           break;
       case 4:
           AjaxUpdater.isUpdating = false;
           document.getElementById(_id).innerHTML = '';
           return HTTP.status(this.request.status);
       default:
           document.getElementById(_id).innerHTML = "An unexpected error has occurred.";
   }
}

